Skip to content

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

Package listing

@kody/supabase

src/get-user.ts

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