import { managementAuth } from './setup.ts' import { asLive, managementRequest } from './client.ts' import { isRecord, optionalString, requireString, type SupabaseAuthInput, } from './types.ts' import type { ProjectSummary } from './list-projects.ts' /** * Get one Supabase project by ref. * @example * import getProject from 'kody:@kody/supabase/get-project' * const project = await getProject({ ref: 'abcdefghijklmnop' }) */ export async function getProject( input: SupabaseAuthInput & { ref: string }, ): Promise { const ref = requireString(input.ref, 'ref') const live = asLive<{ data: unknown }>( await managementRequest({ auth: managementAuth(input), method: 'GET', path: `/v1/projects/${encodeURIComponent(ref)}`, }), ) if (!isRecord(live.data)) { throw new Error(`Project ${ref} response was not an object.`) } return { id: optionalString(live.data.id, 'id') ?? ref, ref: optionalString(live.data.ref, 'ref') ?? ref, name: optionalString(live.data.name, 'name') ?? ref, region: optionalString(live.data.region, 'region'), status: optionalString(live.data.status, 'status'), organizationId: optionalString(live.data.organization_id, 'organization_id'), organizationSlug: optionalString(live.data.organization_slug, 'organization_slug'), createdAt: optionalString(live.data.created_at, 'created_at'), } } /** * Get one Supabase project by ref. * @example * import getProject from 'kody:@kody/supabase/get-project' * const project = await getProject({ ref: 'abcdefghijklmnop' }) */ export default async function getProjectEntrypoint( params: Partial & Record = {}, ) { return await getProject({ account: optionalString(params.account, 'account'), secretName: optionalString(params.secretName, 'secretName'), patSecretName: optionalString(params.patSecretName, 'patSecretName'), ref: requireString(params.ref ?? params.projectRef, 'ref'), }) }