diff --git a/supabase/functions/_shared/contracts/parse.ts b/supabase/functions/_shared/contracts/parse.ts index 52bb40e1d..7e31ea763 100644 --- a/supabase/functions/_shared/contracts/parse.ts +++ b/supabase/functions/_shared/contracts/parse.ts @@ -33,9 +33,12 @@ import { type VersionConfig, } from "./versioning.ts"; -export interface ContractSchemas { +export interface ContractSchemas< + V extends string = string, + S extends Record = Record, +> { /** Map versão → schema Zod. As chaves viram a lista de versões suportadas. */ - versions: Record; + versions: S; /** Versão default quando o client não pedir nenhuma. */ defaultVersion: V; /** Lista de versões em depreciação com data de sunset. */ @@ -66,16 +69,16 @@ export type ParseResult> = * Parseia, valida e versiona o body de uma requisição. */ export async function parseContract< - V extends string, - S extends Record, + S extends Record, >( req: Request, - schemas: ContractSchemas & { versions: S }, + schemas: ContractSchemas, opts: ParseOptions = {}, -): Promise> { +): Promise> { const corsHeaders = opts.corsHeaders ?? {}; // 1. Resolver versão + type V = keyof S & string; const supportedVersions = Object.keys(schemas.versions) as V[]; const versionConfig: VersionConfig = { supported: supportedVersions,