import { workosRequest } from './client.ts'
import { mapUser } from './models.ts'
import type { WorkosAuthInput, WorkosUserSummary } from './types.ts'
import { optionalString, requireRecord, requireString } from './types.ts'
export type GetUserInput = WorkosAuthInput & {
/** User id (`user_…`) or `externalId` when `lookup: 'external'`. */
user: string
lookup?: 'id' | 'external'
}
/**
* Read one AuthKit user by id, or by `externalId` when `lookup: "external"`.
* @example
* import getUser from 'kody:@kody/workos/get-user'
* const user = await getUser({ user: 'user_01EXAMPLE' })
*/
export async function getUser(input: GetUserInput): Promise<WorkosUserSummary> {
const user = requireString(input.user, 'user')
const lookup = input.lookup ?? 'id'
if (lookup !== 'id' && lookup !== 'external') {
throw new Error('lookup must be "id" or "external".')
}
const path =
lookup === 'external'
? `/user_management/users/external_id/${encodeURIComponent(user)}`
: `/user_management/users/${encodeURIComponent(user)}`
const result = await workosRequest<unknown>({
...input,
operation: 'users.read',
path,
})
return mapUser(result.data)
}
/**
* Read one AuthKit user by id, or by `externalId` when `lookup: "external"`.
* @example
* import getUser from 'kody:@kody/workos/get-user'
* const user = await getUser({ user: 'user_01EXAMPLE' })
*/
export default async function getUserEntrypoint(
params: Partial<GetUserInput> & Record<string, unknown> = {},
) {
const input = requireRecord(params, 'get-user')
const lookup = optionalString(input.lookup, 'lookup')
if (lookup !== undefined && lookup !== 'id' && lookup !== 'external') {
throw new Error('lookup must be "id" or "external".')
}
return getUser({
user: requireString(input.user, 'user'),
lookup,
account: optionalString(input.account, 'account'),
secretName: optionalString(input.secretName, 'secretName'),
})
}