import { projectAuth } from './setup.ts' import { asLive, projectRequest } from './client.ts' import { optionalString, requireString, type SupabaseAuthInput } from './types.ts' import { summarizeAuthUser, type AuthUserSummary } from './list-users.ts' /** * Get one Auth user by id (service role). * @example * import getUser from 'kody:@kody/supabase/get-user' * const user = await getUser({ projectRef: 'abcdefghijklmnop', userId: '00000000-0000-0000-0000-000000000000' }) */ export async function getUser( input: SupabaseAuthInput & { userId: string; includeIdentifiers?: boolean }, ): Promise { const userId = requireString(input.userId, 'userId') const live = asLive<{ data: unknown }>( await projectRequest({ auth: projectAuth(input), method: 'GET', path: `/auth/v1/admin/users/${encodeURIComponent(userId)}`, }), ) const summary = summarizeAuthUser(live.data, input.includeIdentifiers === true) if (!summary) throw new Error(`User ${userId} response was not a user object.`) return summary } /** * Get one Auth user by id (service role). * @example * import getUser from 'kody:@kody/supabase/get-user' * const user = await getUser({ projectRef: 'abcdefghijklmnop', userId: '00000000-0000-0000-0000-000000000000' }) */ export default async function getUserEntrypoint( params: Partial & Record = {}, ) { return await getUser({ account: optionalString(params.account, 'account'), secretName: optionalString(params.secretName, 'secretName'), serviceRoleSecretName: optionalString( params.serviceRoleSecretName, 'serviceRoleSecretName', ), projectRef: optionalString(params.projectRef, 'projectRef'), projectUrl: optionalString(params.projectUrl, 'projectUrl'), userId: requireString(params.userId ?? params.id, 'userId'), includeIdentifiers: params.includeIdentifiers === true, }) }