Skip to content

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

Package listing

@kody/workos

src/get-user.ts

56 lines · 1.9 KB · TypeScript
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'),
	})
}