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)
}