import type { z } from 'zod/v4'; import type { HttpStatusCode } from '../HttpStatusCodes.ts'; import { ContractNoBody } from './constants.ts'; export type TypedTextResponse = { readonly _tag: 'TextResponse'; readonly contentType: string; }; export declare const textResponse: (contentType: string) => TypedTextResponse; export declare const isTextResponse: (value: ApiContractResponse) => value is TypedTextResponse; export type TypedBlobResponse = { readonly _tag: 'BlobResponse'; readonly contentType: string; }; export declare const blobResponse: (contentType: string) => TypedBlobResponse; export declare const isBlobResponse: (value: ApiContractResponse) => value is TypedBlobResponse; export type SseSchemaByEventName = Record; export type TypedSseResponse = { readonly _tag: 'SseResponse'; readonly schemaByEventName: T; }; export declare const sseResponse: (schemaByEventName: T) => TypedSseResponse; export declare const isSseResponse: (value: ApiContractResponse) => value is TypedSseResponse; export type TypedJsonResponse = z.ZodType; export declare const isJsonResponse: (value: ApiContractResponse) => value is TypedJsonResponse; export type TypedApiContractResponse = TypedJsonResponse | TypedTextResponse | TypedBlobResponse | TypedSseResponse; export type AnyOfResponses = { readonly _tag: 'AnyOfResponses'; readonly responses: T[]; }; export declare const anyOfResponses: (responses: T[]) => AnyOfResponses; export declare const isAnyOfResponses: (value: ApiContractResponse) => value is AnyOfResponses; export type ApiContractResponse = typeof ContractNoBody | TypedApiContractResponse | AnyOfResponses; export type ResponsesByStatusCode = Partial>; export type ResponseKind = { kind: 'noContent'; } | { kind: 'text'; } | { kind: 'blob'; } | { kind: 'json'; schema: z.ZodType; } | { kind: 'sse'; schemaByEventName: SseSchemaByEventName; }; /** * Resolves a contract's response entry for a given status code into a concrete `ResponseKind`, * taking the response `content-type` into account. * * Returns `null` when the content-type cannot be matched to any entry in the contract, * indicating the response is unexpected and should be treated as an error by the caller. * * @param schemaEntry - The contract entry for the matched status code (`ContractNoBody`, * a Zod schema, `textResponse`, `blobResponse`, `sseResponse`, or `anyOfResponses`). * @param contentType - The `content-type` header value from the actual HTTP response, * or `undefined` when the header is absent. * @param strict - When `true` (default), returns `null` if the `content-type` is absent or does * not match the contract entry. When `false`, falls back to the entry's declared kind instead of * returning `null` — only applies to single-entry responses; `anyOfResponses` always requires a * content-type to disambiguate regardless of this flag. */ export declare const resolveContractResponse: (schemaEntry: ApiContractResponse, contentType: string | undefined, strict?: boolean) => ResponseKind | null; /** * Combines status-code lookup and content-type resolution into a single call. * Returns `null` when the status code is not in the contract or the content-type cannot be matched. */ export declare function resolveResponseEntry(responsesByStatusCode: ResponsesByStatusCode, statusCode: number, contentType: string | undefined, strictContentType: boolean): ResponseKind | null;