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<AuthUserSummary> {
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<SupabaseAuthInput> & Record<string, unknown> = {},
) {
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,
})
}