import type { AnySchema, ContractProcedure, InferSchemaInput, InferSchemaOutput, Route } from "@orpc/contract"; export type OperationPagination = "none" | "cursor" | "page"; export type OperationAsyncMode = "sync" | "deferred" | "returns-redirect-url" | "websocket"; export interface OperationRouteDefinition { method: NonNullable; path: NonNullable; tags: readonly string[]; successStatus?: Route["successStatus"]; successDescription?: Route["successDescription"]; deprecated?: Route["deprecated"]; inputStructure?: Route["inputStructure"]; } export interface OperationExample { name: string; input: InputValue; output: OutputValue; } export interface OperationContractMetadata { operationId: string; backend: TBackend; pagination: OperationPagination; async: OperationAsyncMode; examples: readonly OperationExample[]; } export interface OperationDefinition { operationId: string; description: string; /** * Short display title for the operation (OpenAPI `summary`). Doc generators * fall back to munging the operationId when absent — set this when that * fallback reads wrong (e.g. "Search Natural", "List For Thread"). */ summary?: string; backend: TBackend; route: OperationRouteDefinition; input: InputSchema; output: OutputSchema; pagination: OperationPagination; async: OperationAsyncMode; examples?: readonly OperationExample, InferSchemaOutput>[]; contract: ContractProcedure, OperationContractMetadata>; }