import type { z } from 'zod/v4'; import type { CommonRouteDefinitionMetadata, RoutePathResolver } from '../apiContracts.ts'; import type { HttpStatusCode } from '../HttpStatusCodes.ts'; import type { DualModeContractDefinition } from './dualModeContracts.ts'; import type { SSEContractDefinition } from './sseContracts.ts'; import type { SSEEventSchemas } from './sseTypes.ts'; /** * Configuration for building a GET SSE route. * Forbids requestBodySchema for GET variants. */ export type SSEGetContractConfig> | undefined = undefined> = { method: 'get'; pathResolver: Params extends z.ZodTypeAny ? RoutePathResolver> : () => string; requestPathParamsSchema?: Params; requestQuerySchema?: Query; requestHeaderSchema?: RequestHeaders; serverSentEventSchemas: Events; /** * Error response schemas by HTTP status code. * Used to define response shapes for errors that occur before streaming starts * (e.g., authentication failures, validation errors, not found). * * @example * ```ts * responseBodySchemasByStatusCode: { * 401: z.object({ error: z.literal('Unauthorized') }), * 404: z.object({ error: z.string() }), * } * ``` */ responseBodySchemasByStatusCode?: ResponseSchemasByStatusCode; requestBodySchema?: never; successResponseBodySchema?: never; metadata?: CommonRouteDefinitionMetadata; description?: string; summary?: string; tags?: readonly string[]; }; /** * Configuration for building a POST/PUT/PATCH SSE route with request body. * Requires requestBodySchema for payload variants. */ export type SSEPayloadContractConfig> | undefined = undefined> = { method: 'post' | 'put' | 'patch'; pathResolver: Params extends z.ZodTypeAny ? RoutePathResolver> : () => string; requestPathParamsSchema?: Params; requestQuerySchema?: Query; requestHeaderSchema?: RequestHeaders; requestBodySchema: Body; serverSentEventSchemas: Events; /** * Error response schemas by HTTP status code. * Used to define response shapes for errors that occur before streaming starts * (e.g., authentication failures, validation errors, not found). * * @example * ```ts * responseBodySchemasByStatusCode: { * 401: z.object({ error: z.literal('Unauthorized') }), * 404: z.object({ error: z.string() }), * } * ``` */ responseBodySchemasByStatusCode?: ResponseSchemasByStatusCode; successResponseBodySchema?: never; metadata?: CommonRouteDefinitionMetadata; description?: string; summary?: string; tags?: readonly string[]; }; /** * Configuration for building a GET dual-mode route. * Requires successResponseBodySchema, forbids requestBodySchema. */ export type DualModeGetContractConfig> | undefined = undefined> = { method: 'get'; pathResolver: Params extends z.ZodTypeAny ? RoutePathResolver> : () => string; requestPathParamsSchema?: Params; requestQuerySchema?: Query; requestHeaderSchema?: RequestHeaders; /** Single sync response schema */ successResponseBodySchema: JsonResponse; /** * Schema for validating response headers (sync mode only). * Used to define and validate headers that the server will send in the response. * * @example * ```ts * responseHeaderSchema: z.object({ * 'x-ratelimit-limit': z.string(), * 'x-ratelimit-remaining': z.string(), * }) * ``` */ responseHeaderSchema?: ResponseHeaders; /** * Alternative response schemas by HTTP status code. * Used to define different response shapes for error cases. * * @example * ```ts * responseBodySchemasByStatusCode: { * 400: z.object({ error: z.string(), details: z.array(z.string()) }), * 404: z.object({ error: z.string() }), * } * ``` */ responseBodySchemasByStatusCode?: ResponseSchemasByStatusCode; serverSentEventSchemas: Events; requestBodySchema?: never; metadata?: CommonRouteDefinitionMetadata; description?: string; summary?: string; tags?: readonly string[]; }; /** * Configuration for building a POST/PUT/PATCH dual-mode route with request body. * Requires both requestBodySchema and successResponseBodySchema. */ export type DualModePayloadContractConfig> | undefined = undefined> = { method: 'post' | 'put' | 'patch'; pathResolver: Params extends z.ZodTypeAny ? RoutePathResolver> : () => string; requestPathParamsSchema?: Params; requestQuerySchema?: Query; requestHeaderSchema?: RequestHeaders; requestBodySchema: Body; /** Single sync response schema */ successResponseBodySchema: JsonResponse; /** * Schema for validating response headers (sync mode only). * Used to define and validate headers that the server will send in the response. * * @example * ```ts * responseHeaderSchema: z.object({ * 'x-ratelimit-limit': z.string(), * 'x-ratelimit-remaining': z.string(), * }) * ``` */ responseHeaderSchema?: ResponseHeaders; /** * Alternative response schemas by HTTP status code. * Used to define different response shapes for error cases. * * @example * ```ts * responseBodySchemasByStatusCode: { * 400: z.object({ error: z.string(), details: z.array(z.string()) }), * 404: z.object({ error: z.string() }), * } * ``` */ responseBodySchemasByStatusCode?: ResponseSchemasByStatusCode; serverSentEventSchemas: Events; metadata?: CommonRouteDefinitionMetadata; description?: string; summary?: string; tags?: readonly string[]; }; export declare function buildSseContract> | undefined = undefined>(config: DualModeGetContractConfig): DualModeContractDefinition<'get', Params, Query, RequestHeaders, undefined, JsonResponse, Events, ResponseHeaders, ResponseSchemasByStatusCode>; export declare function buildSseContract> | undefined = undefined>(config: SSEGetContractConfig): SSEContractDefinition<'get', Params, Query, RequestHeaders, undefined, Events, ResponseSchemasByStatusCode>; export declare function buildSseContract> | undefined = undefined>(config: DualModePayloadContractConfig): DualModeContractDefinition<'post' | 'put' | 'patch', Params, Query, RequestHeaders, Body, JsonResponse, Events, ResponseHeaders, ResponseSchemasByStatusCode>; export declare function buildSseContract> | undefined = undefined>(config: SSEPayloadContractConfig): SSEContractDefinition<'post' | 'put' | 'patch', Params, Query, RequestHeaders, Body, Events, ResponseSchemasByStatusCode>;