import type { GetUserOptions, ListUsersOptions, CreateUserOptions, UpdateUserOptions,} from '@workos-inc/node';// Create user with type safetyconst options: CreateUserOptions = { email: 'user@example.com', firstName: 'Jane', lastName: 'Doe', emailVerified: true,};const user = await workos.userManagement.createUser(options);
Use createWorkOS() for compile-time type safety based on client mode.
import { createWorkOS } from '@workos-inc/node';// Public client - type system restricts available methodsconst publicClient = createWorkOS({ clientId: 'client_123'});// Only PKCE methods are availablepublicClient.userManagement.getAuthorizationUrlWithPKCE({ ... }); // ✅publicClient.userManagement.listUsers(); // ❌ Type error// Confidential client - full API accessconst serverClient = createWorkOS({ apiKey: 'sk_...', clientId: 'client_123'});// All methods availableserverClient.userManagement.getAuthorizationUrlWithPKCE({ ... }); // ✅serverClient.userManagement.listUsers(); // ✅
The SDK uses TypeScript discriminated unions for type safety.
import type { SSOAuthorizationURLOptions } from '@workos-inc/node';// Type system enforces mutually exclusive optionsconst options: SSOAuthorizationURLOptions = { connection: 'conn_123', // Only ONE of: connection, organization, or provider redirectUri: 'https://example.com/callback',};// This would be a TypeScript error:// const invalid = {// connection: 'conn_123',// organization: 'org_456', // ❌ Cannot specify both// redirectUri: 'https://example.com/callback',// };
Webhook events use discriminated unions based on event type.
import type { WebhookEvent } from '@workos-inc/node';function handleWebhook(event: WebhookEvent) { // TypeScript narrows the type based on event.event switch (event.event) { case 'user.created': // event.data is typed as User console.log(event.data.email); break; case 'connection.activated': // event.data is typed as Connection console.log(event.data.connectionType); break; case 'dsync.deleted': // event.data is typed as Directory console.log(event.data.id); break; }}
The SDK provides full autocomplete in modern IDEs:
import { WorkOS } from '@workos-inc/node';const workos = new WorkOS('sk_...');// IDE shows all available modulesworkos.userManagement. // Autocomplete shows: getUser, listUsers, createUser, etc.
All methods include JSDoc comments for inline documentation:
/** * Get a user by ID. * * @param options - Options for getting a user * @param options.userId - The ID of the user to get * @returns The user object * * @example * const user = await workos.userManagement.getUser({ * userId: 'user_123' * }); */getUser(options: GetUserOptions): Promise<User>
import { WorkOS } from 'npm:@workos-inc/node';import type { User } from 'npm:@workos-inc/node';const workos = new WorkOS(Deno.env.get('WORKOS_API_KEY'));const user: User = await workos.userManagement.getUser({ userId: 'user_123'});