import { projectAuth } from './setup.ts' import { assertMutationAllowed, readMutationFlags } from './safety.ts' import { asLive, projectRequest } from './client.ts' import { optionalBoolean, optionalString, requireString, type DryRunResult, type SupabaseAuthInput } from './types.ts' /** * Delete an Auth user. Requires `confirm: true`, or use `dryRun: true`. * @example * import deleteUser from 'kody:@kody/supabase/delete-user' * const preview = await deleteUser({ * projectRef: 'abcdefghijklmnop', * userId: '00000000-0000-0000-0000-000000000000', * dryRun: true, * }) */ export async function deleteUser( input: SupabaseAuthInput & { userId: string; dryRun?: boolean; confirm?: boolean }, ) { const userId = requireString(input.userId, 'userId') const allowed = assertMutationAllowed(readMutationFlags(input), 'delete-user') const path = `/auth/v1/admin/users/${encodeURIComponent(userId)}` if (allowed.dryRun) { const preview: DryRunResult = { dryRun: true, method: 'DELETE', path } return preview } await projectRequest({ auth: projectAuth(input), method: 'DELETE', path, }) return { deleted: true, userId } } /** * Delete an Auth user. Requires `confirm: true`, or use `dryRun: true`. * @example * import deleteUser from 'kody:@kody/supabase/delete-user' * const preview = await deleteUser({ projectRef: 'abcdefghijklmnop', userId: '00000000-0000-0000-0000-000000000000', dryRun: true }) */ export default async function deleteUserEntrypoint( params: Partial & Record = {}, ) { return await deleteUser({ 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'), dryRun: optionalBoolean(params.dryRun, 'dryRun'), confirm: optionalBoolean(params.confirm, 'confirm'), }) }