Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kody/workos

src/index.ts

64 lines · 2.3 KB · TypeScript
import { smokeTest } from './smoke-test.ts'
import { accounts } from './accounts.ts'
import { request } from './request.ts'
import { listOrganizations } from './list-organizations.ts'
import { getOrganization } from './get-organization.ts'
import { createOrganization } from './create-organization.ts'
import { updateOrganization } from './update-organization.ts'
import { deleteOrganization } from './delete-organization.ts'
import { listUsers } from './list-users.ts'
import { getUser } from './get-user.ts'
import { listConnections } from './list-connections.ts'
import { listDirectories } from './list-directories.ts'
import { listDirectoryUsers } from './list-directory-users.ts'
import { listEvents } from './list-events.ts'
import { createPortalLink } from './create-portal-link.ts'
import { requireRecord } from './types.ts'

const actions = {
	'smoke-test': smokeTest,
	smoke: smokeTest,
	accounts,
	request,
	'list-organizations': listOrganizations,
	organizations: listOrganizations,
	'get-organization': getOrganization,
	'create-organization': createOrganization,
	'update-organization': updateOrganization,
	'delete-organization': deleteOrganization,
	'list-users': listUsers,
	users: listUsers,
	'get-user': getUser,
	'list-connections': listConnections,
	connections: listConnections,
	'list-directories': listDirectories,
	directories: listDirectories,
	'list-directory-users': listDirectoryUsers,
	'list-events': listEvents,
	events: listEvents,
	'create-portal-link': createPortalLink,
	'portal-link': createPortalLink,
} as const

type WorkosAction = keyof typeof actions

/**
 * Dispatch WorkOS helper actions. Defaults to `smoke-test`.
 * @example
 * import workos from 'kody:@kody/workos'
 * const result = await workos()
 * // => { ok: true, live: false, setup: { setupUrl, ... } }
 */
export default async function workos(
	input: { action?: string } & Record<string, unknown> = {},
) {
	const params = requireRecord(input, 'workos')
	const action = (typeof params.action === 'string' ? params.action : 'smoke-test') as WorkosAction
	const handler = actions[action]
	if (!handler) {
		throw new Error(
			`Unsupported WorkOS action: ${String(params.action)}. Use smoke-test, list-organizations, list-users, list-connections, or list-directories.`,
		)
	}
	return await handler(params as never)
}