@sdk-it/rpc 0.37.1 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/lib/rpc.ts", "../src/lib/http/dispatcher.ts", "../src/lib/http/interceptors.ts", "../src/lib/http/request.ts", "../src/lib/http/parse-response.ts", "../src/lib/http/response.ts", "../src/lib/zod.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type Tool, tool } from 'ai';\nimport { z } from 'zod';\n\nimport {\n type IR,\n type TunedOperationObject,\n forEachOperation,\n loadSpec,\n toIR,\n} from '@sdk-it/spec';\nimport {\n type OperationInput,\n buildInput,\n operationSchema,\n toHttpOutput,\n} from '@sdk-it/typescript';\n\nimport { Dispatcher, fetchType } from './http/dispatcher.ts';\nimport {\n type Interceptor,\n createBaseUrlInterceptor,\n createHeadersInterceptor,\n} from './http/interceptors.ts';\nimport {\n type Endpoint,\n type HeadersInit,\n type Method,\n empty,\n formdata,\n json,\n toRequest,\n urlencoded,\n} from './http/request.ts';\nimport * as http from './http/response.ts';\nimport { schemaToZod } from './zod.ts';\n\nconst optionsSchema = z.object({\n token: z\n .union([\n z.string(),\n z.function().returns(z.union([z.string(), z.promise(z.string())])),\n ])\n .optional()\n .transform(async (token) => {\n if (!token) return undefined;\n if (typeof token === 'function') {\n token = await Promise.resolve(token());\n }\n return `Bearer ${token}`;\n }),\n fetch: fetchType,\n baseUrl: z.string(),\n headers: z.record(z.string()).optional(),\n});\n\ntype ClientOptions = z.input<typeof optionsSchema>;\n\nexport function inputToPath(\n operation: TunedOperationObject,\n inputs: Record<string, OperationInput>,\n) {\n const inputHeaders: string[] = [];\n const inputQuery: string[] = [];\n const inputBody: string[] = [];\n const inputParams: string[] = [];\n for (const [name, prop] of Object.entries(inputs)) {\n if (prop.in === 'headers' || prop.in === 'header') {\n inputHeaders.push(name);\n } else if (prop.in === 'query') {\n inputQuery.push(name);\n } else if (prop.in === 'body') {\n inputBody.push(name);\n } else if (prop.in === 'path') {\n inputParams.push(name);\n } else {\n throw new Error(\n `Unknown source ${prop.in} in ${name} ${JSON.stringify(\n prop,\n )} in ${operation.operationId}`,\n );\n }\n }\n\n return {\n inputHeaders,\n inputQuery,\n inputBody,\n inputParams,\n };\n}\n\nexport class Client {\n public options: ClientOptions;\n public schemas: Record<string, any>;\n constructor(options: ClientOptions, schemas: Record<string, any>) {\n this.options = options;\n this.schemas = schemas;\n }\n\n async request(\n endpoint: string,\n input: any,\n options?: { signal?: AbortSignal; headers?: HeadersInit },\n ) {\n const route = this.schemas[endpoint];\n const withDefaultInputs = Object.assign({}, this.#defaultInputs, input);\n // const [parsedInput, parseError] = parseInput(\n // route.schema,\n // withDefaultInputs,\n // );\n // if (parseError) {\n // throw parseError;\n // }\n const parsedInput = input;\n const clientOptions = await optionsSchema.parseAsync(this.options);\n const result = await route.dispatch(parsedInput as never, {\n fetch: clientOptions.fetch,\n interceptors: [\n createHeadersInterceptor(\n await this.#defaultHeaders(),\n options?.headers ?? {},\n ),\n createBaseUrlInterceptor(clientOptions.baseUrl),\n ],\n signal: options?.signal,\n });\n return result;\n }\n\n async #defaultHeaders() {\n const clientOptions = await optionsSchema.parseAsync(this.options);\n return {\n authorization: clientOptions['token'],\n ...clientOptions.headers,\n };\n }\n\n get #defaultInputs() {\n return {};\n }\n\n setOptions(options: Partial<ClientOptions>) {\n this.options = {\n ...this.options,\n ...options,\n };\n }\n}\n\nfunction createRpc(ir: IR, options: Partial<ClientOptions> = {}) {\n const schemas: Record<Endpoint, any> = {};\n forEachOperation(ir, (entry, operation) => {\n const endpoint: Endpoint = `${entry.method.toUpperCase() as Method} ${entry.path}`;\n const details = buildInput(ir, operation);\n const contentTypeMap = {\n json: json,\n urlencoded: urlencoded,\n formdata: formdata,\n empty: empty,\n } as const;\n const outputs = Object.keys(operation.responses).flatMap((status) =>\n toHttpOutput(\n ir,\n operation.operationId,\n status,\n operation.responses[status],\n false,\n ),\n );\n const inputSchema = schemaToZod(\n operationSchema(ir, operation, details.ct),\n ir,\n );\n schemas[endpoint] = {\n operationId: operation.operationId,\n output: outputs.map((it) => http[it.replace('http.', '') as never]),\n schema: inputSchema,\n async dispatch(\n input: any,\n options: {\n signal?: AbortSignal;\n interceptors: Interceptor[];\n fetch: z.infer<typeof fetchType>;\n },\n ) {\n const dispatcher = new Dispatcher(options.interceptors, options.fetch);\n const serializer =\n contentTypeMap[\n details.outgoingContentType as keyof typeof contentTypeMap\n ] || defaultSerializer(details.outgoingContentType);\n const request = toRequest(\n endpoint,\n serializer(input, inputToPath(operation, details.inputs)),\n );\n return dispatcher.send(request, this.output);\n },\n };\n });\n\n return new Client(\n {\n ...options,\n baseUrl: options?.baseUrl ?? ir.servers[0].url,\n },\n schemas,\n );\n}\n\nexport async function rpc(\n openapi: string,\n options?: Partial<ClientOptions>,\n): Promise<Client> {\n const spec = await loadSpec(openapi);\n const ir = toIR({ spec, responses: { flattenErrorResponses: true } });\n return createRpc(ir, options);\n}\n\nexport async function toAgents(\n openapi: string,\n options: ClientOptions & {\n useTools?: 'defined';\n },\n) {\n const spec = await loadSpec(openapi);\n const ir = toIR({ spec, responses: { flattenErrorResponses: true } });\n const client = createRpc(ir, options);\n const groups: Record<\n string,\n {\n tools: Record<string, Tool>;\n instructions: string;\n handoffDescription: string;\n displayName: string;\n name: string;\n }\n > = {};\n\n forEachOperation(ir, (entry, operation) => {\n const tagDef = ir.tags.find((tag) => tag.name === entry.tag);\n if (!tagDef) {\n console.warn(`No tag details found for tag: ${entry.tag}`);\n return;\n }\n\n groups[entry.tag] ??= {\n tools: {},\n instructions: '',\n displayName: '',\n name: '',\n handoffDescription: '',\n };\n const endpoint = `${entry.method.toUpperCase()} ${entry.path}`;\n const toolInfo = operation['x-tool'];\n\n let includeTool = true;\n if (options.useTools === 'defined') {\n includeTool = !!toolInfo;\n }\n if (includeTool) {\n groups[entry.tag].tools[toolInfo?.name || operation['x-fn-name']] = tool({\n type: 'function',\n description:\n toolInfo?.description || operation.description || operation.summary,\n inputSchema: client.schemas[endpoint].schema,\n execute: async (input) => {\n console.log('Executing tool with input:', input);\n const response = await client.request(endpoint, input);\n return JSON.stringify(response);\n },\n });\n }\n groups[entry.tag].handoffDescription = tagDef['x-handoff-description'];\n groups[entry.tag].instructions = tagDef['x-instructions'];\n groups[entry.tag].name = tagDef.name;\n groups[entry.tag].displayName = tagDef['x-name'];\n });\n const agents: Record<string, any> = {};\n for (const [\n agentName,\n { tools, instructions, displayName },\n ] of Object.entries(groups)) {\n agents[agentName] = {\n name: displayName,\n instructions,\n tools,\n };\n }\n\n return agents;\n}\n\nfunction defaultSerializer(ct: string) {\n throw new Error(`Unsupported content type: ${ct}`);\n}\n", "import z from 'zod';\n\nimport { type Interceptor } from '../http/interceptors.ts';\nimport { type RequestConfig } from '../http/request.ts';\nimport { buffered } from './parse-response.ts';\nimport { APIError, APIResponse, type SuccessfulResponse } from './response.ts';\n\nexport type Unionize<T> = T extends [infer Single extends OutputType]\n ? InstanceType<Single>\n : T extends readonly [...infer Tuple extends OutputType[]]\n ? { [I in keyof Tuple]: InstanceType<Tuple[I]> }[number]\n : never;\n\nexport type InstanceType<T> =\n T extends Type<infer U>\n ? U\n : T extends { type: Type<infer U> }\n ? U\n : T extends Array<unknown>\n ? Unionize<T>\n : never;\n\nexport interface Type<T> {\n new (...args: any[]): T;\n}\nexport type Parser = (\n response: Response,\n) => Promise<unknown> | ReadableStream<any>;\nexport type OutputType =\n | Type<APIResponse>\n | { parser: Parser; type: Type<APIResponse> };\n\nexport const fetchType = z\n .function()\n .args(z.instanceof(Request))\n .returns(z.promise(z.instanceof(Response)))\n .optional();\n\nexport async function parse<T extends OutputType[]>(\n outputs: T,\n response: Response,\n) {\n let output: typeof APIResponse | null = null;\n let parser: Parser = buffered;\n for (const outputType of outputs) {\n if ('parser' in outputType) {\n parser = outputType.parser;\n if (isTypeOf(outputType.type, APIResponse)) {\n if (response.status === outputType.type.status) {\n output = outputType.type;\n break;\n }\n }\n } else if (isTypeOf(outputType, APIResponse)) {\n if (response.status === outputType.status) {\n output = outputType;\n break;\n }\n }\n }\n\n if (response.ok) {\n const apiresponse = (output || APIResponse).create(\n response.status,\n await parser(response),\n );\n\n return apiresponse as Extract<InstanceType<T>, SuccessfulResponse>;\n }\n\n throw (output || APIError).create(response.status, await parser(response));\n}\n\nexport function isTypeOf<T extends Type<APIResponse>>(\n instance: any,\n baseType: T,\n): instance is T {\n if (instance === baseType) {\n return true;\n }\n const prototype = Object.getPrototypeOf(instance);\n if (prototype === null) {\n return false;\n }\n return isTypeOf(prototype, baseType);\n}\n\nexport class Dispatcher {\n #interceptors: Interceptor[] = [];\n #fetch: z.infer<typeof fetchType>;\n constructor(interceptors: Interceptor[], fetch?: z.infer<typeof fetchType>) {\n this.#interceptors = interceptors;\n this.#fetch = fetch;\n }\n\n async send<T extends OutputType[]>(\n config: RequestConfig,\n outputs: T,\n signal?: AbortSignal,\n ) {\n for (const interceptor of this.#interceptors) {\n if (interceptor.before) {\n config = await interceptor.before(config);\n }\n }\n\n let response = await (this.#fetch ?? fetch)(\n new Request(config.url, config.init),\n {\n ...config.init,\n signal: signal,\n },\n );\n\n for (let i = this.#interceptors.length - 1; i >= 0; i--) {\n const interceptor = this.#interceptors[i];\n if (interceptor.after) {\n response = await interceptor.after(response.clone());\n }\n }\n\n return await parse(outputs, response);\n }\n}\n", "import type { HeadersInit, RequestConfig } from './request.ts';\n\nexport interface Interceptor {\n before?: (config: RequestConfig) => Promise<RequestConfig> | RequestConfig;\n after?: (response: Response) => Promise<Response> | Response;\n}\n\nexport const createHeadersInterceptor = (\n headers: Record<string, string | undefined>,\n requestHeaders: HeadersInit,\n): Interceptor => {\n return {\n before({ init, url }) {\n // Priority Levels\n // 1. Headers Input\n // 2. Request Headers\n // 3. Default Headers\n\n for (const [key, value] of new Headers(requestHeaders)) {\n // Only set the header if it doesn't already exist and has a value\n // even though these headers are passed at operation level\n // still they are lower priority compared to the headers input\n if (value !== undefined && !init.headers.has(key)) {\n init.headers.set(key, value);\n }\n }\n\n for (const [key, value] of Object.entries(headers)) {\n // Only set the header if it doesn't already exist and has a value\n if (value !== undefined && !init.headers.has(key)) {\n init.headers.set(key, value);\n }\n }\n\n return { init, url };\n },\n };\n};\n\nexport const createBaseUrlInterceptor = (baseUrl: string): Interceptor => {\n return {\n before({ init, url }) {\n if (url.protocol === 'local:') {\n return {\n init,\n url: new URL(url.href.replace('local://', baseUrl)),\n };\n }\n return { init, url };\n },\n };\n};\n\nexport const logInterceptor: Interceptor = {\n before({ url, init }) {\n console.log('Request:', { url, init });\n return { url, init };\n },\n after(response) {\n console.log('Response:', response);\n return response;\n },\n};\n\n/**\n * Creates an interceptor that logs detailed information about requests and responses.\n * @param options Configuration options for the logger\n * @returns An interceptor object with before and after handlers\n */\nexport const createDetailedLogInterceptor = (options?: {\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\n includeRequestBody?: boolean;\n includeResponseBody?: boolean;\n}) => {\n const logLevel = options?.logLevel || 'info';\n const includeRequestBody = options?.includeRequestBody || false;\n const includeResponseBody = options?.includeResponseBody || false;\n\n return {\n async before(request: Request) {\n const logData = {\n url: request.url,\n method: request.method,\n contentType: request.headers.get('Content-Type'),\n headers: Object.fromEntries([...request.headers.entries()]),\n };\n\n console[logLevel]('\uD83D\uDE80 Outgoing Request:', logData);\n\n if (includeRequestBody) {\n try {\n // Clone the request to avoid consuming the body stream\n const clonedRequest = request.clone();\n if (\n clonedRequest.headers\n .get('Content-Type')\n ?.includes('application/json')\n ) {\n const body = await clonedRequest.json().catch(() => null);\n console[logLevel]('Request Body:', body);\n } else {\n const body = await clonedRequest.text().catch(() => null);\n console[logLevel]('Request Body:', body);\n }\n } catch (error) {\n console.error('Could not log request body:', error);\n }\n }\n\n return request;\n },\n\n async after(response: Response) {\n const logData = {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n headers: Object.fromEntries([...response.headers.entries()]),\n };\n\n console[logLevel]('\uD83D\uDCE5 Incoming Response:', logData);\n\n if (includeResponseBody && response.body) {\n try {\n // Clone the response to avoid consuming the body stream\n const clonedResponse = response.clone();\n if (\n clonedResponse.headers\n .get('Content-Type')\n ?.includes('application/json')\n ) {\n const body = await clonedResponse.json().catch(() => null);\n console[logLevel]('Response Body:', body);\n } else {\n const body = await clonedResponse.text().catch(() => null);\n if (body) {\n console[logLevel](\n 'Response Body:',\n body.substring(0, 500) + (body.length > 500 ? '...' : ''),\n );\n } else {\n console[logLevel]('No response body');\n }\n }\n } catch (error) {\n console.error('Could not log response body:', error);\n }\n }\n\n return response;\n },\n };\n};\n", "type Init = Omit<RequestInit, 'headers'> & { headers: Headers };\nexport type RequestConfig = { init: Init; url: URL };\nexport type Method =\n | 'GET'\n | 'POST'\n | 'PUT'\n | 'PATCH'\n | 'DELETE'\n | 'HEAD'\n | 'OPTIONS';\nexport type ContentType =\n | 'xml'\n | 'json'\n | 'urlencoded'\n | 'multipart'\n | 'formdata';\nexport type HeadersInit = [string, string][] | Record<string, string>;\nexport type Endpoint =\n | `${ContentType} ${Method} ${string}`\n | `${Method} ${string}`;\n\nexport type BodyInit =\n | ArrayBuffer\n | Blob\n | FormData\n | URLSearchParams\n | null\n | string;\n\nfunction template(\n templateString: string,\n templateVariables: Record<string, any>,\n): string {\n const nargs = /{([0-9a-zA-Z_]+)}/g;\n return templateString.replace(nargs, (match, key: string, index: number) => {\n // Handle escaped double braces\n if (\n templateString[index - 1] === '{' &&\n templateString[index + match.length] === '}'\n ) {\n return key;\n }\n\n const result = key in templateVariables ? templateVariables[key] : null;\n return result === null || result === undefined ? '' : String(result);\n });\n}\n\ntype Input = Record<string, any>;\ntype Props = {\n inputHeaders: string[];\n inputQuery: string[];\n inputBody: string[];\n inputParams: string[];\n};\n\nabstract class Serializer {\n protected input: Input;\n protected props: Props;\n\n constructor(input: Input, props: Props) {\n this.input = input;\n this.props = props;\n }\n\n abstract getBody(): BodyInit | null;\n abstract getHeaders(): Record<string, string>;\n serialize(path: string): Serialized {\n const params = this.props.inputParams.reduce<Record<string, any>>(\n (acc, key) => {\n acc[key] = this.input[key];\n return acc;\n },\n {},\n );\n const url = new URL(template(path, params), `local://`);\n\n const headers = new Headers({});\n for (const header of this.props.inputHeaders) {\n headers.set(header, this.input[header]);\n }\n\n for (const key of this.props.inputQuery) {\n const value = this.input[key];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n for (const item of value) {\n url.searchParams.append(key, String(item));\n }\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n return {\n body: this.getBody(),\n url,\n headers: this.getHeaders(),\n };\n }\n}\n\ninterface Serialized {\n body: BodyInit | null;\n headers: Record<string, string>;\n url: URL;\n}\n\nclass JsonSerializer extends Serializer {\n getBody(): BodyInit | null {\n const body: Record<string, any> = {};\n if (\n this.props.inputBody.length === 1 &&\n this.props.inputBody[0] === '$body'\n ) {\n return JSON.stringify(this.input.$body);\n }\n\n for (const prop of this.props.inputBody) {\n body[prop] = this.input[prop];\n }\n return JSON.stringify(body);\n }\n getHeaders(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n }\n}\n\nclass UrlencodedSerializer extends Serializer {\n getBody(): BodyInit | null {\n const body = new URLSearchParams();\n for (const prop of this.props.inputBody) {\n body.set(prop, this.input[prop]);\n }\n return body;\n }\n getHeaders(): Record<string, string> {\n return {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Accept: 'application/json',\n };\n }\n}\n\nclass EmptySerializer extends Serializer {\n getBody(): BodyInit | null {\n return null;\n }\n getHeaders(): Record<string, string> {\n return {};\n }\n}\n\nclass FormDataSerializer extends Serializer {\n getBody(): BodyInit | null {\n const body = new FormData();\n for (const prop of this.props.inputBody) {\n body.append(prop, this.input[prop]);\n }\n return body;\n }\n getHeaders(): Record<string, string> {\n return {\n Accept: 'application/json',\n };\n }\n}\n\nexport function json(input: Input, props: Props) {\n return new JsonSerializer(input, props);\n}\nexport function urlencoded(input: Input, props: Props) {\n return new UrlencodedSerializer(input, props);\n}\nexport function empty(input: Input, props: Props) {\n return new EmptySerializer(input, props);\n}\nexport function formdata(input: Input, props: Props) {\n return new FormDataSerializer(input, props);\n}\n\nexport function toRequest<T extends Endpoint>(\n endpoint: T,\n serializer: Serializer,\n): RequestConfig {\n const [method, path] = endpoint.split(' ');\n const input = serializer.serialize(path);\n return {\n url: input.url,\n init: {\n method: method,\n headers: new Headers(input.headers),\n body: method === 'GET' ? undefined : input.body,\n },\n };\n}\n", "import { parse } from \"fast-content-type-parse\";\n\nasync function handleChunkedResponse(response: Response, contentType: string) {\n\tconst { type } = parse(contentType);\n\n\tswitch (type) {\n\t\tcase \"application/json\": {\n\t\t\tlet buffer = \"\";\n\t\t\tconst reader = response.body!.getReader();\n\t\t\tconst decoder = new TextDecoder();\n\t\t\twhile (true) {\n\t\t\t\tconst { value, done } = await reader.read();\n\t\t\t\tif (done) break;\n\t\t\t\tbuffer += decoder.decode(value);\n\t\t\t}\n\t\t\treturn JSON.parse(buffer);\n\t\t}\n\t\tcase \"text/html\":\n\t\tcase \"text/plain\": {\n\t\t\tlet buffer = \"\";\n\t\t\tconst reader = response.body!.getReader();\n\t\t\tconst decoder = new TextDecoder();\n\t\t\twhile (true) {\n\t\t\t\tconst { value, done } = await reader.read();\n\t\t\t\tif (done) break;\n\t\t\t\tbuffer += decoder.decode(value);\n\t\t\t}\n\t\t\treturn buffer;\n\t\t}\n\t\tdefault:\n\t\t\treturn response.body;\n\t}\n}\n\nexport function chunked(response: Response) {\n\treturn response.body!;\n}\n\nexport async function buffered(response: Response) {\n\tconst contentType = response.headers.get(\"Content-Type\");\n\tif (!contentType) {\n\t\tthrow new Error(\"Content-Type header is missing\");\n\t}\n\n\tif (response.status === 204) {\n\t\treturn null;\n\t}\n\n\tconst { type } = parse(contentType);\n\tswitch (type) {\n\t\tcase \"application/json\":\n\t\t\treturn response.json();\n\t\tcase \"text/plain\":\n\t\t\treturn response.text();\n\t\tcase \"text/html\":\n\t\t\treturn response.text();\n\t\tcase \"text/xml\":\n\t\tcase \"application/xml\":\n\t\t\treturn response.text();\n\t\tcase \"application/x-www-form-urlencoded\": {\n\t\t\tconst text = await response.text();\n\t\t\treturn Object.fromEntries(new URLSearchParams(text));\n\t\t}\n\t\tcase \"multipart/form-data\":\n\t\t\treturn response.formData();\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported content type: ${contentType}`);\n\t}\n}\n", "export const KIND = Symbol('APIDATA');\n\nexport class APIResponse<Body = unknown, Status extends number = number> {\n static readonly status: number;\n static readonly kind: symbol = Symbol.for(\"APIResponse\");\n status: Status;\n data: Body;\n\n constructor(status: Status, data: Body) {\n this.status = status;\n this.data = data;\n }\n\n static create<Body = unknown>(status: number, data: Body) {\n return new this(status, data);\n }\n\n}\n\nexport class APIError<Body, Status extends number = number> extends APIResponse<\n Body,\n Status\n> {\n static override create<T>(status: number, data: T) {\n return new this(status, data);\n }\n}\n\n\n// 2xx Success\nexport class Ok<T> extends APIResponse<T, 200> {\n static override readonly kind = Symbol.for(\"Ok\");\n static override readonly status = 200 as const;\n constructor(data: T) {\n super(Ok.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]:typeof Ok['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\n\n\nexport class Created<T> extends APIResponse<T, 201> {\n static override readonly kind = Symbol.for(\"Created\");\n static override status = 201 as const;\n constructor(data: T) {\n super(Created.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Created['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class Accepted<T> extends APIResponse<T, 202> {\n static override readonly kind = Symbol.for(\"Accepted\");\n static override status = 202 as const;\n constructor(data: T) {\n super(Accepted.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Accepted['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class NoContent extends APIResponse<never, 204> {\n static override readonly kind = Symbol.for(\"NoContent\");\n static override status = 204 as const;\n constructor() {\n super(NoContent.status, null as never);\n }\n static override create(status: number, data: never): NoContent {\n return new this();\n }\n\n static is<T extends {[KIND]: typeof NoContent['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\n\n// 4xx Client Errors\nexport class BadRequest<T> extends APIError<T, 400> {\n static override readonly kind = Symbol.for(\"BadRequest\");\n static override status = 400 as const;\n constructor(data: T) {\n super(BadRequest.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof BadRequest['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class Unauthorized<T = { message: string }> extends APIError<T, 401> {\n static override readonly kind = Symbol.for(\"Unauthorized\");\n static override status = 401 as const;\n constructor(data: T) {\n super(Unauthorized.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Unauthorized['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class PaymentRequired<T = { message: string }> extends APIError<T, 402> {\n static override readonly kind = Symbol.for(\"PaymentRequired\");\n static override status = 402 as const;\n constructor(data: T) {\n super(PaymentRequired.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof PaymentRequired['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class Forbidden<T = { message: string }> extends APIError<T, 403> {\n static override readonly kind = Symbol.for(\"Forbidden\");\n static override status = 403 as const;\n constructor(data: T) {\n super(Forbidden.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Forbidden['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class NotFound<T = { message: string }> extends APIError<T, 404> {\n static override readonly kind = Symbol.for(\"NotFound\");\n static override status = 404 as const;\n constructor(data: T) {\n super(NotFound.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof NotFound['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class MethodNotAllowed<T = { message: string }> extends APIError<\n T,\n 405\n> {\n static override readonly kind = Symbol.for(\"MethodNotAllowed\");\n static override status = 405 as const;\n constructor(data: T) {\n super(MethodNotAllowed.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof MethodNotAllowed['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class NotAcceptable<T = { message: string }> extends APIError<T, 406> {\n static override readonly kind = Symbol.for(\"NotAcceptable\");\n static override status = 406 as const;\n constructor(data: T) {\n super(NotAcceptable.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof NotAcceptable['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class Conflict<T = { message: string }> extends APIError<T, 409> {\n static override readonly kind = Symbol.for(\"Conflict\");\n static override status = 409 as const;\n constructor(data: T) {\n super(Conflict.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Conflict['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class Gone<T = { message: string }> extends APIError<T, 410> {\n static override readonly kind = Symbol.for(\"Gone\");\n static override status = 410 as const;\n constructor(data: T) {\n super(Gone.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Gone['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class PreconditionFailed<T = { message: string }> extends APIError<T, 412> {\n static override readonly kind = Symbol.for('PreconditionFailed');\n static override status = 412 as const;\n constructor(data: T) {\n super(PreconditionFailed.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends { [KIND]: (typeof PreconditionFailed)['kind'] }>(\n value: unknown,\n ): value is T {\n return (\n typeof value === 'object' &&\n value !== null &&\n KIND in value &&\n value[KIND] === this.kind\n );\n }\n}\nexport class UnprocessableEntity<\n T = { message: string; errors?: Record<string, string[]> },\n> extends APIError<T, 422> {\n static override readonly kind = Symbol.for(\"UnprocessableEntity\");\n static override status = 422 as const;\n constructor(data: T) {\n super(UnprocessableEntity.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof UnprocessableEntity['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class TooManyRequests<\n T = { message: string; retryAfter?: string },\n> extends APIError<T, 429> {\n static override readonly kind = Symbol.for(\"TooManyRequests\");\n static override status = 429 as const;\n constructor(data: T) {\n super(TooManyRequests.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof TooManyRequests['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class PayloadTooLarge<T = { message: string }> extends APIError<T, 413> {\n static override readonly kind = Symbol.for(\"PayloadTooLarge\");\n static override status = 413 as const;\n constructor(data: T) {\n super(PayloadTooLarge.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof PayloadTooLarge['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class UnsupportedMediaType<T = { message: string }> extends APIError<\n T,\n 415\n> {\n static override readonly kind = Symbol.for(\"UnsupportedMediaType\");\n static override status = 415 as const;\n constructor(data: T) {\n super(UnsupportedMediaType.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof UnsupportedMediaType['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\n\n// 5xx Server Errors\nexport class InternalServerError<T = { message: string }> extends APIError<\n T,\n 500\n> {\n static override readonly kind = Symbol.for(\"InternalServerError\");\n static override status = 500 as const;\n constructor(data: T) {\n super(InternalServerError.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof InternalServerError['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class NotImplemented<T = { message: string }> extends APIError<T, 501> {\n static override readonly kind = Symbol.for(\"NotImplemented\");\n static override status = 501 as const;\n constructor(data: T) {\n super(NotImplemented.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof NotImplemented['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class BadGateway<T = { message: string }> extends APIError<T, 502> {\n static override readonly kind = Symbol.for(\"BadGateway\");\n static override status = 502 as const;\n constructor(data: T) {\n super(BadGateway.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof BadGateway['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class ServiceUnavailable<\n T = { message: string; retryAfter?: string },\n> extends APIError<T, 503> {\n static override readonly kind = Symbol.for(\"ServiceUnavailable\");\n static override status = 503 as const;\n constructor(data: T) {\n super(ServiceUnavailable.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof ServiceUnavailable['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class GatewayTimeout<T = { message: string }> extends APIError<T, 504> {\n static override readonly kind = Symbol.for(\"GatewayTimeout\");\n static override status = 504 as const;\n constructor(data: T) {\n super(GatewayTimeout.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof GatewayTimeout['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\n\nexport type ClientError =\n | BadRequest<unknown>\n | Unauthorized<unknown>\n | PaymentRequired<unknown>\n | Forbidden<unknown>\n | NotFound<unknown>\n | MethodNotAllowed<unknown>\n | NotAcceptable<unknown>\n | Conflict<unknown>\n | Gone<unknown>\n | PreconditionFailed<unknown>\n | PayloadTooLarge<unknown>\n | UnsupportedMediaType<unknown>\n | UnprocessableEntity<unknown>\n | TooManyRequests<unknown>;\n\nexport type ServerError =\n | InternalServerError<unknown>\n | NotImplemented<unknown>\n | BadGateway<unknown>\n | ServiceUnavailable<unknown>\n | GatewayTimeout<unknown>;\n\nexport type ProblematicResponse = ClientError | ServerError;\n\nexport type SuccessfulResponse =\n | Ok<unknown>\n | Created<unknown>\n | Accepted<unknown>\n | NoContent;", "import type {\n ReferenceObject,\n SchemaObject\n} from 'openapi3-ts/oas31';\nimport { type ZodSchema, type ZodTypeAny, z } from 'zod';\n\nimport { followRef, isRef } from '@sdk-it/core';\nimport type { IR } from '@sdk-it/spec';\n\n/**\n * Convert an OpenAPI (JSON Schema style) object into a runtime Zod schema,\n */\nexport class RuntimeZodConverter {\n constructor(private spec: IR) {}\n\n #object(schema: SchemaObject): ZodSchema {\n const properties = schema.properties || {};\n const required = schema.required || [];\n\n // Convert each property\n const shape: Record<string, ZodTypeAny> = {};\n\n for (const [key, propSchema] of Object.entries(properties)) {\n const isRequired = required.includes(key);\n shape[key] = this.handle(propSchema, isRequired);\n }\n\n let result = z.object(shape);\n\n // Handle additional properties\n if (schema.additionalProperties) {\n if (typeof schema.additionalProperties === 'object') {\n const addPropSchema = this.handle(schema.additionalProperties, true);\n result = result.catchall(addPropSchema);\n } else if (schema.additionalProperties === true) {\n result = result.catchall(z.unknown());\n }\n }\n\n return result;\n }\n\n #array(schema: SchemaObject): ZodSchema {\n const { items } = schema;\n if (!items) {\n let result: ZodSchema = z.array(z.unknown());\n\n // Apply default if present\n if (schema.default !== undefined) {\n result = z.array(z.unknown()).default(schema.default);\n }\n\n return result;\n }\n\n // If items is an array => tuple\n if (Array.isArray(items)) {\n const tupleItems = items.map((sub) => this.handle(sub, true));\n return z.tuple(tupleItems as [ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n // If items is a single schema => standard z.array(...)\n const itemsSchema = this.handle(items, true);\n let result: ZodSchema = z.array(itemsSchema);\n\n // Apply default if present\n if (schema.default !== undefined) {\n result = z.array(itemsSchema).default(schema.default);\n }\n\n return result;\n }\n\n #ref($ref: string): ZodSchema {\n const resolvedSchema = followRef(this.spec, $ref);\n const zodSchema = this.handle(resolvedSchema, true);\n return zodSchema;\n }\n\n #toIntersection(schemas: ZodSchema[]): ZodSchema {\n const [left, ...right] = schemas;\n if (!right.length) {\n return left;\n }\n return z.intersection(left, this.#toIntersection(right));\n }\n\n allOf(schemas: (SchemaObject | ReferenceObject)[]): ZodSchema {\n const allOfSchemas = schemas.map((sub) => this.handle(sub, true));\n if (allOfSchemas.length === 0) {\n return z.unknown();\n }\n if (allOfSchemas.length === 1) {\n return allOfSchemas[0];\n }\n return this.#toIntersection(allOfSchemas);\n }\n\n anyOf(schemas: (SchemaObject | ReferenceObject)[]): ZodSchema {\n const anyOfSchemas = schemas.map((sub) => this.handle(sub, true));\n if (anyOfSchemas.length === 1) {\n return anyOfSchemas[0];\n }\n return z.union(anyOfSchemas as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n oneOf(schemas: (SchemaObject | ReferenceObject)[]): ZodSchema {\n const oneOfSchemas = schemas.map((sub) => this.handle(sub, true));\n if (oneOfSchemas.length === 1) {\n return oneOfSchemas[0];\n }\n return z.union(oneOfSchemas as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n enum(type: string, values: unknown[]): ZodSchema {\n if (values.length === 1) {\n return z.literal(values[0] as z.Primitive);\n }\n if (type === 'integer') {\n // Ensure we have at least 2 values for union\n if (values.length >= 2) {\n const [first, second, ...rest] = values.map((val) =>\n z.literal(val as z.Primitive),\n );\n return z.union([first, second, ...rest]);\n }\n return z.literal(values[0] as z.Primitive);\n }\n\n // For string enums, ensure we have the correct type\n const stringValues = values as string[];\n if (stringValues.length >= 2) {\n const [first, ...rest] = stringValues;\n return z.enum([first, ...rest] as [string, ...string[]]);\n }\n return z.literal(stringValues[0] as z.Primitive);\n }\n\n /**\n * Handle a `string` schema with possible format keywords (JSON Schema).\n */\n string(schema: SchemaObject): ZodSchema {\n if (schema.contentEncoding === 'binary') {\n return z.instanceof(Blob);\n }\n\n let base: ZodSchema = z.string();\n\n switch (schema.format) {\n case 'date-time':\n case 'datetime':\n base = z.string().datetime();\n break;\n case 'date':\n base = z.coerce.date();\n break;\n case 'time':\n base = z.string(); // Could add regex for HH:MM:SS format\n break;\n case 'email':\n base = z.string().email();\n break;\n case 'uuid':\n base = z.string().uuid();\n break;\n case 'url':\n case 'uri':\n base = z.string().url();\n break;\n case 'ipv4':\n base = z.string().ip({ version: 'v4' });\n break;\n case 'ipv6':\n base = z.string().ip({ version: 'v6' });\n break;\n case 'byte':\n case 'binary':\n base = z.instanceof(Blob);\n break;\n case 'int64':\n // JS numbers can't reliably store int64, keep as string or use bigint\n base = z.string();\n break;\n default:\n // No special format\n break;\n }\n\n return base;\n }\n\n /**\n * Handle number/integer constraints from OpenAPI/JSON Schema.\n */\n #number(schema: SchemaObject): ZodSchema {\n let base: ZodSchema = z.number();\n\n if (schema.format === 'int64') {\n base = z.bigint();\n }\n\n if (schema.format === 'int32') {\n base = z.number().int();\n }\n\n // Exclusive bounds\n if (typeof schema.exclusiveMinimum === 'number') {\n if (schema.format === 'int64') {\n base = (base as z.ZodBigInt).gt(BigInt(schema.exclusiveMinimum));\n } else {\n base = (base as z.ZodNumber).gt(schema.exclusiveMinimum);\n }\n }\n\n if (typeof schema.exclusiveMaximum === 'number') {\n if (schema.format === 'int64') {\n base = (base as z.ZodBigInt).lt(BigInt(schema.exclusiveMaximum));\n } else {\n base = (base as z.ZodNumber).lt(schema.exclusiveMaximum);\n }\n }\n\n // Inclusive bounds\n if (typeof schema.minimum === 'number') {\n if (schema.format === 'int64') {\n base = (base as z.ZodBigInt).min(BigInt(schema.minimum));\n } else {\n base = (base as z.ZodNumber).min(schema.minimum);\n }\n }\n\n if (typeof schema.maximum === 'number') {\n if (schema.format === 'int64') {\n base = (base as z.ZodBigInt).max(BigInt(schema.maximum));\n } else {\n base = (base as z.ZodNumber).max(schema.maximum);\n }\n }\n\n // multipleOf\n if (typeof schema.multipleOf === 'number') {\n const multipleOf = schema.multipleOf;\n base = base.refine(\n (val) => Number.isInteger(Number(val) / multipleOf),\n `Must be a multiple of ${multipleOf}`,\n );\n }\n\n return base;\n }\n\n /**\n * Convert a basic type to Zod schema with proper chaining\n */\n normal(\n type: string,\n schema: SchemaObject,\n required = false,\n nullable = false,\n ): ZodSchema {\n let base: ZodSchema;\n\n switch (type) {\n case 'string':\n base = this.string(schema);\n break;\n case 'number':\n case 'integer':\n base = this.#number(schema);\n break;\n case 'boolean':\n base = z.boolean();\n break;\n case 'object':\n base = this.#object(schema);\n break;\n case 'array':\n base = this.#array(schema);\n break;\n case 'null':\n base = z.null();\n break;\n default:\n base = z.unknown();\n break;\n }\n\n // Apply nullable first (this affects the base type)\n if (nullable) {\n base = base.nullable();\n }\n\n // Apply default before optional (important for proper chaining)\n if (schema.default !== undefined) {\n if (schema.format === 'int64' && typeof schema.default === 'number') {\n // For bigint, rebuild the schema with default\n base = z.bigint().default(BigInt(schema.default));\n } else {\n // Rebuild the base schema with default to avoid type issues\n const defaultValue = schema.default;\n switch (type) {\n case 'string':\n base = this.string(schema).default(defaultValue);\n break;\n case 'number':\n case 'integer':\n base = this.#number(schema);\n // Number schemas already handle defaults internally\n break;\n case 'boolean':\n base = z.boolean().default(defaultValue);\n break;\n case 'object':\n base = this.#object(schema).default(defaultValue);\n break;\n case 'array':\n // Arrays handle defaults internally\n break;\n case 'null':\n base = z.null().default(defaultValue);\n break;\n default:\n base = z.unknown().default(defaultValue);\n break;\n }\n }\n }\n\n // Apply optional last\n if (!required) {\n base = base.optional();\n }\n\n // Handle x-prefix transform (this should be last)\n if (schema['x-prefix']) {\n const prefix = schema['x-prefix'];\n if (!required) {\n base = base.transform((val) => (val ? `${prefix}${val}` : undefined));\n } else {\n base = base.transform((val) => `${prefix}${val}`);\n }\n }\n\n return base;\n }\n\n handle(schema: SchemaObject | ReferenceObject, required = false): ZodSchema {\n // Handle reference\n if (isRef(schema)) {\n let result = this.#ref(schema.$ref);\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n\n // Handle allOf \u2192 intersection\n if (schema.allOf && Array.isArray(schema.allOf)) {\n let result = this.allOf(schema.allOf);\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n\n // anyOf \u2192 union\n if (schema.anyOf && Array.isArray(schema.anyOf)) {\n let result = this.anyOf(schema.anyOf);\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n\n // oneOf \u2192 union\n if (schema.oneOf && Array.isArray(schema.oneOf) && schema.oneOf.length) {\n let result = this.oneOf(schema.oneOf);\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n\n // enum\n if (schema.enum && Array.isArray(schema.enum)) {\n let result = this.enum(schema.type as string, schema.enum);\n\n // Apply default if it exists and is in the enum\n if (\n schema.default !== undefined &&\n schema.enum.includes(schema.default)\n ) {\n // Rebuild the enum schema with default to avoid type issues\n const defaultValue = schema.default;\n const enumValues = schema.enum;\n const enumType = schema.type as string;\n\n if (enumValues.length === 1) {\n result = z\n .literal(enumValues[0] as z.Primitive)\n .default(defaultValue);\n } else if (enumType === 'integer') {\n if (enumValues.length >= 2) {\n const [first, second, ...rest] = enumValues.map((val: unknown) =>\n z.literal(val as z.Primitive),\n );\n result = z.union([first, second, ...rest]).default(defaultValue);\n } else {\n result = z\n .literal(enumValues[0] as z.Primitive)\n .default(defaultValue);\n }\n } else {\n const stringValues = enumValues as string[];\n if (stringValues.length >= 2) {\n const [first, ...rest] = stringValues;\n result = z\n .enum([first, ...rest] as [string, ...string[]])\n .default(defaultValue);\n } else {\n result = z\n .literal(stringValues[0] as z.Primitive)\n .default(defaultValue);\n }\n }\n }\n\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n\n // Parse types (can be string or array in OpenAPI 3.1)\n const types = Array.isArray(schema.type)\n ? schema.type\n : schema.type\n ? [schema.type]\n : [];\n\n // Backward compatibility with OpenAPI 3.0 nullable\n if ('nullable' in schema && schema.nullable) {\n types.push('null');\n } else if (schema.default === null) {\n types.push('null');\n }\n\n // If no explicit \"type\", fallback to unknown\n if (!types.length) {\n return required ? z.unknown() : z.unknown().optional();\n }\n\n // Handle union types\n if (types.length > 1) {\n const realTypes = types.filter((t) => t !== 'null');\n if (realTypes.length === 1 && types.includes('null')) {\n // Single real type + \"null\"\n return this.normal(realTypes[0], schema, required, true);\n }\n // Multiple different types, build a union\n const subSchemas = types.map((t) => this.normal(t, schema, true));\n if (subSchemas.length >= 2) {\n const [first, second, ...rest] = subSchemas;\n let result: ZodSchema = z.union([first, second, ...rest]);\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n }\n\n return this.normal(types[0], schema, required, false);\n }\n}\n\n/**\n * Convert a runtime SchemaObject to a Zod schema\n */\nexport function schemaToZod(\n schema: SchemaObject,\n spec: IR,\n options?: {\n required?: boolean;\n },\n): ZodSchema {\n const converter = new RuntimeZodConverter(spec);\n return converter.handle(schema, options?.required ?? false);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type Tool, tool } from 'ai';\nimport { z } from 'zod';\n\nimport {\n type IR,\n type TunedOperationObject,\n forEachOperation,\n loadSpec,\n toIR,\n} from '@sdk-it/spec';\nimport {\n type OperationInput,\n buildInput,\n operationSchema,\n toHttpOutput,\n} from '@sdk-it/typescript';\n\nimport { Dispatcher, fetchType } from './http/dispatcher.ts';\nimport {\n type Interceptor,\n createBaseUrlInterceptor,\n createHeadersInterceptor,\n} from './http/interceptors.ts';\nimport {\n type Endpoint,\n type HeadersInit,\n type Method,\n empty,\n formdata,\n json,\n toRequest,\n urlencoded,\n} from './http/request.ts';\nimport * as http from './http/response.ts';\nimport { schemaToZod } from './zod.ts';\n\nconst optionsSchema = z.object({\n token: z\n .union([\n z.string(),\n z.function().returns(z.union([z.string(), z.promise(z.string())])),\n ])\n .optional()\n .transform(async (token) => {\n if (!token) return undefined;\n if (typeof token === 'function') {\n token = await Promise.resolve(token());\n }\n return `Bearer ${token}`;\n }),\n fetch: fetchType,\n baseUrl: z.string(),\n headers: z.record(z.string()).optional(),\n});\n\ntype ClientOptions = z.input<typeof optionsSchema>;\n\nexport function inputToPath(\n operation: TunedOperationObject,\n inputs: Record<string, OperationInput>,\n) {\n const inputHeaders: string[] = [];\n const inputQuery: string[] = [];\n const inputBody: string[] = [];\n const inputParams: string[] = [];\n for (const [name, prop] of Object.entries(inputs)) {\n if (prop.in === 'headers' || prop.in === 'header') {\n inputHeaders.push(name);\n } else if (prop.in === 'query') {\n inputQuery.push(name);\n } else if (prop.in === 'body') {\n inputBody.push(name);\n } else if (prop.in === 'path') {\n inputParams.push(name);\n } else {\n throw new Error(\n `Unknown source ${prop.in} in ${name} ${JSON.stringify(\n prop,\n )} in ${operation.operationId}`,\n );\n }\n }\n\n return {\n inputHeaders,\n inputQuery,\n inputBody,\n inputParams,\n };\n}\n\nexport class Client {\n public options: ClientOptions;\n public schemas: Record<string, any>;\n constructor(options: ClientOptions, schemas: Record<string, any>) {\n this.options = options;\n this.schemas = schemas;\n }\n\n async request(\n endpoint: string,\n input: any,\n options?: { signal?: AbortSignal; headers?: HeadersInit },\n ) {\n const route = this.schemas[endpoint];\n const withDefaultInputs = Object.assign({}, this.#defaultInputs, input);\n const parsedInput = input;\n const clientOptions = await optionsSchema.parseAsync(this.options);\n const result = await route.dispatch(parsedInput as never, {\n fetch: clientOptions.fetch,\n interceptors: [\n createHeadersInterceptor(\n await this.#defaultHeaders(),\n options?.headers ?? {},\n ),\n createBaseUrlInterceptor(clientOptions.baseUrl),\n ],\n signal: options?.signal,\n });\n return result;\n }\n\n async #defaultHeaders() {\n const clientOptions = await optionsSchema.parseAsync(this.options);\n return {\n authorization: clientOptions['token'],\n ...clientOptions.headers,\n };\n }\n\n get #defaultInputs() {\n return {};\n }\n\n setOptions(options: Partial<ClientOptions>) {\n this.options = {\n ...this.options,\n ...options,\n };\n }\n}\n\nfunction createRpc(ir: IR, options: Partial<ClientOptions> = {}) {\n const schemas: Record<Endpoint, any> = {};\n forEachOperation(ir, (entry, operation) => {\n const endpoint: Endpoint = `${entry.method.toUpperCase() as Method} ${entry.path}`;\n const details = buildInput(ir, operation);\n const contentTypeMap = {\n json: json,\n urlencoded: urlencoded,\n formdata: formdata,\n empty: empty,\n } as const;\n const outputs = Object.keys(operation.responses).flatMap((status) =>\n toHttpOutput(\n ir,\n operation.operationId,\n status,\n operation.responses[status],\n false,\n ),\n );\n const inputSchema = schemaToZod(\n operationSchema(ir, operation, details.ct),\n ir,\n );\n schemas[endpoint] = {\n operationId: operation.operationId,\n output: outputs.map((it) => http[it.replace('http.', '') as never]),\n schema: inputSchema,\n async dispatch(\n input: any,\n options: {\n signal?: AbortSignal;\n interceptors: Interceptor[];\n fetch: z.infer<typeof fetchType>;\n },\n ) {\n const dispatcher = new Dispatcher(options.interceptors, options.fetch);\n const serializer =\n contentTypeMap[\n details.outgoingContentType as keyof typeof contentTypeMap\n ] || defaultSerializer(details.outgoingContentType);\n const request = toRequest(\n endpoint,\n serializer(input, inputToPath(operation, details.inputs)),\n );\n return dispatcher.send(request, this.output);\n },\n };\n });\n\n return new Client(\n {\n ...options,\n baseUrl: options?.baseUrl ?? ir.servers[0].url,\n },\n schemas,\n );\n}\n\nexport async function rpc(\n openapi: string,\n options?: Partial<ClientOptions>,\n): Promise<Client> {\n const spec = await loadSpec(openapi);\n const ir = toIR({ spec, responses: { flattenErrorResponses: true } });\n return createRpc(ir, options);\n}\n\nexport async function toAgents(\n openapi: string,\n options: ClientOptions & {\n useTools?: 'defined';\n },\n) {\n const spec = await loadSpec(openapi);\n const ir = toIR({ spec, responses: { flattenErrorResponses: true } });\n const client = createRpc(ir, options);\n const groups: Record<\n string,\n {\n tools: Record<string, Tool>;\n instructions: string;\n handoffDescription: string;\n displayName: string;\n name: string;\n }\n > = {};\n\n forEachOperation(ir, (entry, operation) => {\n const tagDef = ir.tags.find((tag) => tag.name === entry.tag);\n if (!tagDef) {\n console.warn(`No tag details found for tag: ${entry.tag}`);\n return;\n }\n\n groups[entry.tag] ??= {\n tools: {},\n instructions: '',\n displayName: '',\n name: '',\n handoffDescription: '',\n };\n const endpoint = `${entry.method.toUpperCase()} ${entry.path}`;\n const toolInfo = operation['x-tool'];\n\n let includeTool = true;\n if (options.useTools === 'defined') {\n includeTool = !!toolInfo;\n }\n if (includeTool) {\n groups[entry.tag].tools[toolInfo?.name || operation['x-fn-name']] = tool({\n type: 'function',\n description:\n toolInfo?.description || operation.description || operation.summary,\n inputSchema: client.schemas[endpoint].schema,\n execute: async (input) => {\n console.log('Executing tool with input:', input);\n const response = await client.request(endpoint, input);\n return JSON.stringify(response);\n },\n });\n }\n groups[entry.tag].handoffDescription = tagDef['x-handoff-description'];\n groups[entry.tag].instructions = tagDef['x-instructions'];\n groups[entry.tag].name = tagDef.name;\n groups[entry.tag].displayName = tagDef['x-name'];\n });\n const agents: Record<string, any> = {};\n for (const [\n agentName,\n { tools, instructions, displayName },\n ] of Object.entries(groups)) {\n agents[agentName] = {\n name: displayName,\n instructions,\n tools,\n };\n }\n\n return agents;\n}\n\nfunction defaultSerializer(ct: string) {\n throw new Error(`Unsupported content type: ${ct}`);\n}\n", "import z from 'zod';\n\nimport { type Interceptor } from '../http/interceptors.ts';\nimport { type RequestConfig } from '../http/request.ts';\nimport { buffered } from './parse-response.ts';\nimport { APIError, APIResponse, type SuccessfulResponse } from './response.ts';\n\nexport type Unionize<T> = T extends [infer Single extends OutputType]\n ? InstanceType<Single>\n : T extends readonly [...infer Tuple extends OutputType[]]\n ? { [I in keyof Tuple]: InstanceType<Tuple[I]> }[number]\n : never;\n\nexport type InstanceType<T> =\n T extends Type<infer U>\n ? U\n : T extends { type: Type<infer U> }\n ? U\n : T extends Array<unknown>\n ? Unionize<T>\n : never;\n\nexport interface Type<T> {\n new (...args: any[]): T;\n}\nexport type Parser = (\n response: Response,\n) => Promise<unknown> | ReadableStream<any>;\nexport type OutputType =\n | Type<APIResponse>\n | { parser: Parser; type: Type<APIResponse> };\n\nexport const fetchType = z\n .function()\n .args(z.instanceof(Request))\n .returns(z.promise(z.instanceof(Response)))\n .optional();\n\nexport async function parse<T extends OutputType[]>(\n outputs: T,\n response: Response,\n) {\n let output: typeof APIResponse | null = null;\n let parser: Parser = buffered;\n for (const outputType of outputs) {\n if ('parser' in outputType) {\n parser = outputType.parser;\n if (isTypeOf(outputType.type, APIResponse)) {\n if (response.status === outputType.type.status) {\n output = outputType.type;\n break;\n }\n }\n } else if (isTypeOf(outputType, APIResponse)) {\n if (response.status === outputType.status) {\n output = outputType;\n break;\n }\n }\n }\n\n if (response.ok) {\n const apiresponse = (output || APIResponse).create(\n response.status,\n await parser(response),\n );\n\n return apiresponse as Extract<InstanceType<T>, SuccessfulResponse>;\n }\n\n throw (output || APIError).create(response.status, await parser(response));\n}\n\nexport function isTypeOf<T extends Type<APIResponse>>(\n instance: any,\n baseType: T,\n): instance is T {\n if (instance === baseType) {\n return true;\n }\n const prototype = Object.getPrototypeOf(instance);\n if (prototype === null) {\n return false;\n }\n return isTypeOf(prototype, baseType);\n}\n\nexport class Dispatcher {\n #interceptors: Interceptor[] = [];\n #fetch: z.infer<typeof fetchType>;\n constructor(interceptors: Interceptor[], fetch?: z.infer<typeof fetchType>) {\n this.#interceptors = interceptors;\n this.#fetch = fetch;\n }\n\n async send<T extends OutputType[]>(\n config: RequestConfig,\n outputs: T,\n signal?: AbortSignal,\n ) {\n for (const interceptor of this.#interceptors) {\n if (interceptor.before) {\n config = await interceptor.before(config);\n }\n }\n\n let response = await (this.#fetch ?? fetch)(\n new Request(config.url, config.init),\n {\n ...config.init,\n signal: signal,\n },\n );\n\n for (let i = this.#interceptors.length - 1; i >= 0; i--) {\n const interceptor = this.#interceptors[i];\n if (interceptor.after) {\n response = await interceptor.after(response.clone());\n }\n }\n\n return await parse(outputs, response);\n }\n}\n", "import type { HeadersInit, RequestConfig } from './request.ts';\n\nexport interface Interceptor {\n before?: (config: RequestConfig) => Promise<RequestConfig> | RequestConfig;\n after?: (response: Response) => Promise<Response> | Response;\n}\n\nexport const createHeadersInterceptor = (\n headers: Record<string, string | undefined>,\n requestHeaders: HeadersInit,\n): Interceptor => {\n return {\n before({ init, url }) {\n // Priority Levels\n // 1. Headers Input\n // 2. Request Headers\n // 3. Default Headers\n\n for (const [key, value] of new Headers(requestHeaders)) {\n // Only set the header if it doesn't already exist and has a value\n // even though these headers are passed at operation level\n // still they are lower priority compared to the headers input\n if (value !== undefined && !init.headers.has(key)) {\n init.headers.set(key, value);\n }\n }\n\n for (const [key, value] of Object.entries(headers)) {\n // Only set the header if it doesn't already exist and has a value\n if (value !== undefined && !init.headers.has(key)) {\n init.headers.set(key, value);\n }\n }\n\n return { init, url };\n },\n };\n};\n\nexport const createBaseUrlInterceptor = (baseUrl: string): Interceptor => {\n return {\n before({ init, url }) {\n if (url.protocol === 'local:') {\n return {\n init,\n url: new URL(url.href.replace('local://', baseUrl)),\n };\n }\n return { init, url };\n },\n };\n};\n\nexport const logInterceptor: Interceptor = {\n before({ url, init }) {\n console.log('Request:', { url, init });\n return { url, init };\n },\n after(response) {\n console.log('Response:', response);\n return response;\n },\n};\n\n/**\n * Creates an interceptor that logs detailed information about requests and responses.\n * @param options Configuration options for the logger\n * @returns An interceptor object with before and after handlers\n */\nexport const createDetailedLogInterceptor = (options?: {\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\n includeRequestBody?: boolean;\n includeResponseBody?: boolean;\n}) => {\n const logLevel = options?.logLevel || 'info';\n const includeRequestBody = options?.includeRequestBody || false;\n const includeResponseBody = options?.includeResponseBody || false;\n\n return {\n async before(request: Request) {\n const logData = {\n url: request.url,\n method: request.method,\n contentType: request.headers.get('Content-Type'),\n headers: Object.fromEntries([...request.headers.entries()]),\n };\n\n console[logLevel]('\uD83D\uDE80 Outgoing Request:', logData);\n\n if (includeRequestBody) {\n try {\n // Clone the request to avoid consuming the body stream\n const clonedRequest = request.clone();\n if (\n clonedRequest.headers\n .get('Content-Type')\n ?.includes('application/json')\n ) {\n const body = await clonedRequest.json().catch(() => null);\n console[logLevel]('Request Body:', body);\n } else {\n const body = await clonedRequest.text().catch(() => null);\n console[logLevel]('Request Body:', body);\n }\n } catch (error) {\n console.error('Could not log request body:', error);\n }\n }\n\n return request;\n },\n\n async after(response: Response) {\n const logData = {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n headers: Object.fromEntries([...response.headers.entries()]),\n };\n\n console[logLevel]('\uD83D\uDCE5 Incoming Response:', logData);\n\n if (includeResponseBody && response.body) {\n try {\n // Clone the response to avoid consuming the body stream\n const clonedResponse = response.clone();\n if (\n clonedResponse.headers\n .get('Content-Type')\n ?.includes('application/json')\n ) {\n const body = await clonedResponse.json().catch(() => null);\n console[logLevel]('Response Body:', body);\n } else {\n const body = await clonedResponse.text().catch(() => null);\n if (body) {\n console[logLevel](\n 'Response Body:',\n body.substring(0, 500) + (body.length > 500 ? '...' : ''),\n );\n } else {\n console[logLevel]('No response body');\n }\n }\n } catch (error) {\n console.error('Could not log response body:', error);\n }\n }\n\n return response;\n },\n };\n};\n", "type Init = Omit<RequestInit, 'headers'> & { headers: Headers };\nexport type RequestConfig = { init: Init; url: URL };\nexport type Method =\n | 'GET'\n | 'POST'\n | 'PUT'\n | 'PATCH'\n | 'DELETE'\n | 'HEAD'\n | 'OPTIONS';\nexport type ContentType =\n | 'xml'\n | 'json'\n | 'urlencoded'\n | 'multipart'\n | 'formdata';\nexport type HeadersInit = [string, string][] | Record<string, string>;\nexport type Endpoint =\n | `${ContentType} ${Method} ${string}`\n | `${Method} ${string}`;\n\nexport type BodyInit =\n | ArrayBuffer\n | Blob\n | FormData\n | URLSearchParams\n | null\n | string;\n\nfunction template(\n templateString: string,\n templateVariables: Record<string, any>,\n): string {\n const nargs = /{([0-9a-zA-Z_]+)}/g;\n return templateString.replace(nargs, (match, key: string, index: number) => {\n // Handle escaped double braces\n if (\n templateString[index - 1] === '{' &&\n templateString[index + match.length] === '}'\n ) {\n return key;\n }\n\n const result = key in templateVariables ? templateVariables[key] : null;\n return result === null || result === undefined ? '' : String(result);\n });\n}\n\ntype Input = Record<string, any>;\ntype Props = {\n inputHeaders: string[];\n inputQuery: string[];\n inputBody: string[];\n inputParams: string[];\n};\n\nabstract class Serializer {\n protected input: Input;\n protected props: Props;\n\n constructor(input: Input, props: Props) {\n this.input = input;\n this.props = props;\n }\n\n abstract getBody(): BodyInit | null;\n abstract getHeaders(): Record<string, string>;\n serialize(path: string): Serialized {\n const params = this.props.inputParams.reduce<Record<string, any>>(\n (acc, key) => {\n acc[key] = this.input[key];\n return acc;\n },\n {},\n );\n const url = new URL(template(path, params), `local://`);\n\n const headers = new Headers({});\n for (const header of this.props.inputHeaders) {\n headers.set(header, this.input[header]);\n }\n\n for (const key of this.props.inputQuery) {\n const value = this.input[key];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n for (const item of value) {\n url.searchParams.append(key, String(item));\n }\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n return {\n body: this.getBody(),\n url,\n headers: this.getHeaders(),\n };\n }\n}\n\ninterface Serialized {\n body: BodyInit | null;\n headers: Record<string, string>;\n url: URL;\n}\n\nclass JsonSerializer extends Serializer {\n getBody(): BodyInit | null {\n const body: Record<string, any> = {};\n if (\n this.props.inputBody.length === 1 &&\n this.props.inputBody[0] === '$body'\n ) {\n return JSON.stringify(this.input.$body);\n }\n\n for (const prop of this.props.inputBody) {\n body[prop] = this.input[prop];\n }\n return JSON.stringify(body);\n }\n getHeaders(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n }\n}\n\nclass UrlencodedSerializer extends Serializer {\n getBody(): BodyInit | null {\n const body = new URLSearchParams();\n for (const prop of this.props.inputBody) {\n body.set(prop, this.input[prop]);\n }\n return body;\n }\n getHeaders(): Record<string, string> {\n return {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Accept: 'application/json',\n };\n }\n}\n\nclass EmptySerializer extends Serializer {\n getBody(): BodyInit | null {\n return null;\n }\n getHeaders(): Record<string, string> {\n return {};\n }\n}\n\nclass FormDataSerializer extends Serializer {\n getBody(): BodyInit | null {\n const body = new FormData();\n for (const prop of this.props.inputBody) {\n body.append(prop, this.input[prop]);\n }\n return body;\n }\n getHeaders(): Record<string, string> {\n return {\n Accept: 'application/json',\n };\n }\n}\n\nexport function json(input: Input, props: Props) {\n return new JsonSerializer(input, props);\n}\nexport function urlencoded(input: Input, props: Props) {\n return new UrlencodedSerializer(input, props);\n}\nexport function empty(input: Input, props: Props) {\n return new EmptySerializer(input, props);\n}\nexport function formdata(input: Input, props: Props) {\n return new FormDataSerializer(input, props);\n}\n\nexport function toRequest<T extends Endpoint>(\n endpoint: T,\n serializer: Serializer,\n): RequestConfig {\n const [method, path] = endpoint.split(' ');\n const input = serializer.serialize(path);\n return {\n url: input.url,\n init: {\n method: method,\n headers: new Headers(input.headers),\n body: method === 'GET' ? undefined : input.body,\n },\n };\n}\n", "import { parse } from \"fast-content-type-parse\";\n\nasync function handleChunkedResponse(response: Response, contentType: string) {\n\tconst { type } = parse(contentType);\n\n\tswitch (type) {\n\t\tcase \"application/json\": {\n\t\t\tlet buffer = \"\";\n\t\t\tconst reader = response.body!.getReader();\n\t\t\tconst decoder = new TextDecoder();\n\t\t\twhile (true) {\n\t\t\t\tconst { value, done } = await reader.read();\n\t\t\t\tif (done) break;\n\t\t\t\tbuffer += decoder.decode(value);\n\t\t\t}\n\t\t\treturn JSON.parse(buffer);\n\t\t}\n\t\tcase \"text/html\":\n\t\tcase \"text/plain\": {\n\t\t\tlet buffer = \"\";\n\t\t\tconst reader = response.body!.getReader();\n\t\t\tconst decoder = new TextDecoder();\n\t\t\twhile (true) {\n\t\t\t\tconst { value, done } = await reader.read();\n\t\t\t\tif (done) break;\n\t\t\t\tbuffer += decoder.decode(value);\n\t\t\t}\n\t\t\treturn buffer;\n\t\t}\n\t\tdefault:\n\t\t\treturn response.body;\n\t}\n}\n\nexport function chunked(response: Response) {\n\treturn response.body!;\n}\n\nexport async function buffered(response: Response) {\n\tconst contentType = response.headers.get(\"Content-Type\");\n\tif (!contentType) {\n\t\tthrow new Error(\"Content-Type header is missing\");\n\t}\n\n\tif (response.status === 204) {\n\t\treturn null;\n\t}\n\n\tconst { type } = parse(contentType);\n\tswitch (type) {\n\t\tcase \"application/json\":\n\t\t\treturn response.json();\n\t\tcase \"text/plain\":\n\t\t\treturn response.text();\n\t\tcase \"text/html\":\n\t\t\treturn response.text();\n\t\tcase \"text/xml\":\n\t\tcase \"application/xml\":\n\t\t\treturn response.text();\n\t\tcase \"application/x-www-form-urlencoded\": {\n\t\t\tconst text = await response.text();\n\t\t\treturn Object.fromEntries(new URLSearchParams(text));\n\t\t}\n\t\tcase \"multipart/form-data\":\n\t\t\treturn response.formData();\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported content type: ${contentType}`);\n\t}\n}\n", "export const KIND = Symbol('APIDATA');\n\nexport class APIResponse<Body = unknown, Status extends number = number> {\n static readonly status: number;\n static readonly kind: symbol = Symbol.for(\"APIResponse\");\n status: Status;\n data: Body;\n\n constructor(status: Status, data: Body) {\n this.status = status;\n this.data = data;\n }\n\n static create<Body = unknown>(status: number, data: Body) {\n return new this(status, data);\n }\n\n}\n\nexport class APIError<Body, Status extends number = number> extends APIResponse<\n Body,\n Status\n> {\n static override create<T>(status: number, data: T) {\n return new this(status, data);\n }\n}\n\n\n// 2xx Success\nexport class Ok<T> extends APIResponse<T, 200> {\n static override readonly kind = Symbol.for(\"Ok\");\n static override readonly status = 200 as const;\n constructor(data: T) {\n super(Ok.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]:typeof Ok['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\n\n\nexport class Created<T> extends APIResponse<T, 201> {\n static override readonly kind = Symbol.for(\"Created\");\n static override status = 201 as const;\n constructor(data: T) {\n super(Created.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Created['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class Accepted<T> extends APIResponse<T, 202> {\n static override readonly kind = Symbol.for(\"Accepted\");\n static override status = 202 as const;\n constructor(data: T) {\n super(Accepted.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Accepted['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class NoContent extends APIResponse<never, 204> {\n static override readonly kind = Symbol.for(\"NoContent\");\n static override status = 204 as const;\n constructor() {\n super(NoContent.status, null as never);\n }\n static override create(status: number, data: never): NoContent {\n return new this();\n }\n\n static is<T extends {[KIND]: typeof NoContent['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\n\n// 4xx Client Errors\nexport class BadRequest<T> extends APIError<T, 400> {\n static override readonly kind = Symbol.for(\"BadRequest\");\n static override status = 400 as const;\n constructor(data: T) {\n super(BadRequest.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof BadRequest['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class Unauthorized<T = { message: string }> extends APIError<T, 401> {\n static override readonly kind = Symbol.for(\"Unauthorized\");\n static override status = 401 as const;\n constructor(data: T) {\n super(Unauthorized.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Unauthorized['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class PaymentRequired<T = { message: string }> extends APIError<T, 402> {\n static override readonly kind = Symbol.for(\"PaymentRequired\");\n static override status = 402 as const;\n constructor(data: T) {\n super(PaymentRequired.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof PaymentRequired['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class Forbidden<T = { message: string }> extends APIError<T, 403> {\n static override readonly kind = Symbol.for(\"Forbidden\");\n static override status = 403 as const;\n constructor(data: T) {\n super(Forbidden.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Forbidden['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class NotFound<T = { message: string }> extends APIError<T, 404> {\n static override readonly kind = Symbol.for(\"NotFound\");\n static override status = 404 as const;\n constructor(data: T) {\n super(NotFound.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof NotFound['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class MethodNotAllowed<T = { message: string }> extends APIError<\n T,\n 405\n> {\n static override readonly kind = Symbol.for(\"MethodNotAllowed\");\n static override status = 405 as const;\n constructor(data: T) {\n super(MethodNotAllowed.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof MethodNotAllowed['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class NotAcceptable<T = { message: string }> extends APIError<T, 406> {\n static override readonly kind = Symbol.for(\"NotAcceptable\");\n static override status = 406 as const;\n constructor(data: T) {\n super(NotAcceptable.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof NotAcceptable['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class Conflict<T = { message: string }> extends APIError<T, 409> {\n static override readonly kind = Symbol.for(\"Conflict\");\n static override status = 409 as const;\n constructor(data: T) {\n super(Conflict.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Conflict['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class Gone<T = { message: string }> extends APIError<T, 410> {\n static override readonly kind = Symbol.for(\"Gone\");\n static override status = 410 as const;\n constructor(data: T) {\n super(Gone.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof Gone['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class PreconditionFailed<T = { message: string }> extends APIError<T, 412> {\n static override readonly kind = Symbol.for('PreconditionFailed');\n static override status = 412 as const;\n constructor(data: T) {\n super(PreconditionFailed.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends { [KIND]: (typeof PreconditionFailed)['kind'] }>(\n value: unknown,\n ): value is T {\n return (\n typeof value === 'object' &&\n value !== null &&\n KIND in value &&\n value[KIND] === this.kind\n );\n }\n}\nexport class UnprocessableEntity<\n T = { message: string; errors?: Record<string, string[]> },\n> extends APIError<T, 422> {\n static override readonly kind = Symbol.for(\"UnprocessableEntity\");\n static override status = 422 as const;\n constructor(data: T) {\n super(UnprocessableEntity.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof UnprocessableEntity['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class TooManyRequests<\n T = { message: string; retryAfter?: string },\n> extends APIError<T, 429> {\n static override readonly kind = Symbol.for(\"TooManyRequests\");\n static override status = 429 as const;\n constructor(data: T) {\n super(TooManyRequests.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof TooManyRequests['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class PayloadTooLarge<T = { message: string }> extends APIError<T, 413> {\n static override readonly kind = Symbol.for(\"PayloadTooLarge\");\n static override status = 413 as const;\n constructor(data: T) {\n super(PayloadTooLarge.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof PayloadTooLarge['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class UnsupportedMediaType<T = { message: string }> extends APIError<\n T,\n 415\n> {\n static override readonly kind = Symbol.for(\"UnsupportedMediaType\");\n static override status = 415 as const;\n constructor(data: T) {\n super(UnsupportedMediaType.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof UnsupportedMediaType['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\n\n// 5xx Server Errors\nexport class InternalServerError<T = { message: string }> extends APIError<\n T,\n 500\n> {\n static override readonly kind = Symbol.for(\"InternalServerError\");\n static override status = 500 as const;\n constructor(data: T) {\n super(InternalServerError.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof InternalServerError['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class NotImplemented<T = { message: string }> extends APIError<T, 501> {\n static override readonly kind = Symbol.for(\"NotImplemented\");\n static override status = 501 as const;\n constructor(data: T) {\n super(NotImplemented.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof NotImplemented['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class BadGateway<T = { message: string }> extends APIError<T, 502> {\n static override readonly kind = Symbol.for(\"BadGateway\");\n static override status = 502 as const;\n constructor(data: T) {\n super(BadGateway.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof BadGateway['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class ServiceUnavailable<\n T = { message: string; retryAfter?: string },\n> extends APIError<T, 503> {\n static override readonly kind = Symbol.for(\"ServiceUnavailable\");\n static override status = 503 as const;\n constructor(data: T) {\n super(ServiceUnavailable.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof ServiceUnavailable['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\nexport class GatewayTimeout<T = { message: string }> extends APIError<T, 504> {\n static override readonly kind = Symbol.for(\"GatewayTimeout\");\n static override status = 504 as const;\n constructor(data: T) {\n super(GatewayTimeout.status, data);\n }\n static override create<T>(status: number, data: T) {\n Object.defineProperty(data, KIND, { value: this.kind });\n return new this(data);\n }\n\n static is<T extends {[KIND]: typeof GatewayTimeout['kind']}>(value: unknown): value is T {\n return typeof value === 'object' && value !== null && KIND in value && value[KIND] === this.kind;\n }\n}\n\nexport type ClientError =\n | BadRequest<unknown>\n | Unauthorized<unknown>\n | PaymentRequired<unknown>\n | Forbidden<unknown>\n | NotFound<unknown>\n | MethodNotAllowed<unknown>\n | NotAcceptable<unknown>\n | Conflict<unknown>\n | Gone<unknown>\n | PreconditionFailed<unknown>\n | PayloadTooLarge<unknown>\n | UnsupportedMediaType<unknown>\n | UnprocessableEntity<unknown>\n | TooManyRequests<unknown>;\n\nexport type ServerError =\n | InternalServerError<unknown>\n | NotImplemented<unknown>\n | BadGateway<unknown>\n | ServiceUnavailable<unknown>\n | GatewayTimeout<unknown>;\n\nexport type ProblematicResponse = ClientError | ServerError;\n\nexport type SuccessfulResponse =\n | Ok<unknown>\n | Created<unknown>\n | Accepted<unknown>\n | NoContent;", "import type {\n ReferenceObject,\n SchemaObject\n} from 'openapi3-ts/oas31';\nimport { type ZodSchema, type ZodTypeAny, z } from 'zod';\n\nimport { followRef, isRef } from '@sdk-it/core';\nimport type { IR } from '@sdk-it/spec';\n\n/**\n * Convert an OpenAPI (JSON Schema style) object into a runtime Zod schema,\n */\nexport class RuntimeZodConverter {\n constructor(private spec: IR) {}\n\n #object(schema: SchemaObject): ZodSchema {\n const properties = schema.properties || {};\n const required = schema.required || [];\n\n // Convert each property\n const shape: Record<string, ZodTypeAny> = {};\n\n for (const [key, propSchema] of Object.entries(properties)) {\n const isRequired = required.includes(key);\n shape[key] = this.handle(propSchema, isRequired);\n }\n\n let result = z.object(shape);\n\n // Handle additional properties\n if (schema.additionalProperties) {\n if (typeof schema.additionalProperties === 'object') {\n const addPropSchema = this.handle(schema.additionalProperties, true);\n result = result.catchall(addPropSchema);\n } else if (schema.additionalProperties === true) {\n result = result.catchall(z.unknown());\n }\n }\n\n return result;\n }\n\n #array(schema: SchemaObject): ZodSchema {\n const { items } = schema;\n if (!items) {\n let result: ZodSchema = z.array(z.unknown());\n\n // Apply default if present\n if (schema.default !== undefined) {\n result = z.array(z.unknown()).default(schema.default);\n }\n\n return result;\n }\n\n // If items is an array => tuple\n if (Array.isArray(items)) {\n const tupleItems = items.map((sub) => this.handle(sub, true));\n return z.tuple(tupleItems as [ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n // If items is a single schema => standard z.array(...)\n const itemsSchema = this.handle(items, true);\n let result: ZodSchema = z.array(itemsSchema);\n\n // Apply default if present\n if (schema.default !== undefined) {\n result = z.array(itemsSchema).default(schema.default);\n }\n\n return result;\n }\n\n #ref($ref: string): ZodSchema {\n const resolvedSchema = followRef(this.spec, $ref);\n const zodSchema = this.handle(resolvedSchema, true);\n return zodSchema;\n }\n\n #toIntersection(schemas: ZodSchema[]): ZodSchema {\n const [left, ...right] = schemas;\n if (!right.length) {\n return left;\n }\n return z.intersection(left, this.#toIntersection(right));\n }\n\n allOf(schemas: (SchemaObject | ReferenceObject)[]): ZodSchema {\n const allOfSchemas = schemas.map((sub) => this.handle(sub, true));\n if (allOfSchemas.length === 0) {\n return z.unknown();\n }\n if (allOfSchemas.length === 1) {\n return allOfSchemas[0];\n }\n return this.#toIntersection(allOfSchemas);\n }\n\n anyOf(schemas: (SchemaObject | ReferenceObject)[]): ZodSchema {\n const anyOfSchemas = schemas.map((sub) => this.handle(sub, true));\n if (anyOfSchemas.length === 1) {\n return anyOfSchemas[0];\n }\n return z.union(anyOfSchemas as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n oneOf(schemas: (SchemaObject | ReferenceObject)[]): ZodSchema {\n const oneOfSchemas = schemas.map((sub) => this.handle(sub, true));\n if (oneOfSchemas.length === 1) {\n return oneOfSchemas[0];\n }\n return z.union(oneOfSchemas as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n enum(type: string, values: unknown[]): ZodSchema {\n if (values.length === 1) {\n return z.literal(values[0] as z.Primitive);\n }\n if (type === 'integer') {\n // Ensure we have at least 2 values for union\n if (values.length >= 2) {\n const [first, second, ...rest] = values.map((val) =>\n z.literal(val as z.Primitive),\n );\n return z.union([first, second, ...rest]);\n }\n return z.literal(values[0] as z.Primitive);\n }\n\n // For string enums, ensure we have the correct type\n const stringValues = values as string[];\n if (stringValues.length >= 2) {\n const [first, ...rest] = stringValues;\n return z.enum([first, ...rest] as [string, ...string[]]);\n }\n return z.literal(stringValues[0] as z.Primitive);\n }\n\n /**\n * Handle a `string` schema with possible format keywords (JSON Schema).\n */\n string(schema: SchemaObject): ZodSchema {\n if (schema.contentEncoding === 'binary') {\n return z.instanceof(Blob);\n }\n\n let base: ZodSchema = z.string();\n\n switch (schema.format) {\n case 'date-time':\n case 'datetime':\n base = z.string().datetime();\n break;\n case 'date':\n base = z.coerce.date();\n break;\n case 'time':\n base = z.string(); // Could add regex for HH:MM:SS format\n break;\n case 'email':\n base = z.string().email();\n break;\n case 'uuid':\n base = z.string().uuid();\n break;\n case 'url':\n case 'uri':\n base = z.string().url();\n break;\n case 'ipv4':\n base = z.string().ip({ version: 'v4' });\n break;\n case 'ipv6':\n base = z.string().ip({ version: 'v6' });\n break;\n case 'byte':\n case 'binary':\n base = z.instanceof(Blob);\n break;\n case 'int64':\n // JS numbers can't reliably store int64, keep as string or use bigint\n base = z.string();\n break;\n default:\n // No special format\n break;\n }\n\n return base;\n }\n\n /**\n * Handle number/integer constraints from OpenAPI/JSON Schema.\n */\n #number(schema: SchemaObject): ZodSchema {\n let base: ZodSchema = z.number();\n\n if (schema.format === 'int64') {\n base = z.bigint();\n }\n\n if (schema.format === 'int32') {\n base = z.number().int();\n }\n\n // Exclusive bounds\n if (typeof schema.exclusiveMinimum === 'number') {\n if (schema.format === 'int64') {\n base = (base as z.ZodBigInt).gt(BigInt(schema.exclusiveMinimum));\n } else {\n base = (base as z.ZodNumber).gt(schema.exclusiveMinimum);\n }\n }\n\n if (typeof schema.exclusiveMaximum === 'number') {\n if (schema.format === 'int64') {\n base = (base as z.ZodBigInt).lt(BigInt(schema.exclusiveMaximum));\n } else {\n base = (base as z.ZodNumber).lt(schema.exclusiveMaximum);\n }\n }\n\n // Inclusive bounds\n if (typeof schema.minimum === 'number') {\n if (schema.format === 'int64') {\n base = (base as z.ZodBigInt).min(BigInt(schema.minimum));\n } else {\n base = (base as z.ZodNumber).min(schema.minimum);\n }\n }\n\n if (typeof schema.maximum === 'number') {\n if (schema.format === 'int64') {\n base = (base as z.ZodBigInt).max(BigInt(schema.maximum));\n } else {\n base = (base as z.ZodNumber).max(schema.maximum);\n }\n }\n\n // multipleOf\n if (typeof schema.multipleOf === 'number') {\n const multipleOf = schema.multipleOf;\n base = base.refine(\n (val) => Number.isInteger(Number(val) / multipleOf),\n `Must be a multiple of ${multipleOf}`,\n );\n }\n\n return base;\n }\n\n /**\n * Convert a basic type to Zod schema with proper chaining\n */\n normal(\n type: string,\n schema: SchemaObject,\n required = false,\n nullable = false,\n ): ZodSchema {\n let base: ZodSchema;\n\n switch (type) {\n case 'string':\n base = this.string(schema);\n break;\n case 'number':\n case 'integer':\n base = this.#number(schema);\n break;\n case 'boolean':\n base = z.boolean();\n break;\n case 'object':\n base = this.#object(schema);\n break;\n case 'array':\n base = this.#array(schema);\n break;\n case 'null':\n base = z.null();\n break;\n default:\n base = z.unknown();\n break;\n }\n\n // Apply nullable first (this affects the base type)\n if (nullable) {\n base = base.nullable();\n }\n\n // Apply default before optional (important for proper chaining)\n if (schema.default !== undefined) {\n if (schema.format === 'int64' && typeof schema.default === 'number') {\n // For bigint, rebuild the schema with default\n base = z.bigint().default(BigInt(schema.default));\n } else {\n // Rebuild the base schema with default to avoid type issues\n const defaultValue = schema.default;\n switch (type) {\n case 'string':\n base = this.string(schema).default(defaultValue);\n break;\n case 'number':\n case 'integer':\n base = this.#number(schema);\n // Number schemas already handle defaults internally\n break;\n case 'boolean':\n base = z.boolean().default(defaultValue);\n break;\n case 'object':\n base = this.#object(schema).default(defaultValue);\n break;\n case 'array':\n // Arrays handle defaults internally\n break;\n case 'null':\n base = z.null().default(defaultValue);\n break;\n default:\n base = z.unknown().default(defaultValue);\n break;\n }\n }\n }\n\n // Apply optional last\n if (!required) {\n base = base.optional();\n }\n\n // Handle x-prefix transform (this should be last)\n if (schema['x-prefix']) {\n const prefix = schema['x-prefix'];\n if (!required) {\n base = base.transform((val) => (val ? `${prefix}${val}` : undefined));\n } else {\n base = base.transform((val) => `${prefix}${val}`);\n }\n }\n\n return base;\n }\n\n handle(schema: SchemaObject | ReferenceObject, required = false): ZodSchema {\n // Handle reference\n if (isRef(schema)) {\n let result = this.#ref(schema.$ref);\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n\n // Handle allOf \u2192 intersection\n if (schema.allOf && Array.isArray(schema.allOf)) {\n let result = this.allOf(schema.allOf);\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n\n // anyOf \u2192 union\n if (schema.anyOf && Array.isArray(schema.anyOf)) {\n let result = this.anyOf(schema.anyOf);\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n\n // oneOf \u2192 union\n if (schema.oneOf && Array.isArray(schema.oneOf) && schema.oneOf.length) {\n let result = this.oneOf(schema.oneOf);\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n\n // enum\n if (schema.enum && Array.isArray(schema.enum)) {\n let result = this.enum(schema.type as string, schema.enum);\n\n // Apply default if it exists and is in the enum\n if (\n schema.default !== undefined &&\n schema.enum.includes(schema.default)\n ) {\n // Rebuild the enum schema with default to avoid type issues\n const defaultValue = schema.default;\n const enumValues = schema.enum;\n const enumType = schema.type as string;\n\n if (enumValues.length === 1) {\n result = z\n .literal(enumValues[0] as z.Primitive)\n .default(defaultValue);\n } else if (enumType === 'integer') {\n if (enumValues.length >= 2) {\n const [first, second, ...rest] = enumValues.map((val: unknown) =>\n z.literal(val as z.Primitive),\n );\n result = z.union([first, second, ...rest]).default(defaultValue);\n } else {\n result = z\n .literal(enumValues[0] as z.Primitive)\n .default(defaultValue);\n }\n } else {\n const stringValues = enumValues as string[];\n if (stringValues.length >= 2) {\n const [first, ...rest] = stringValues;\n result = z\n .enum([first, ...rest] as [string, ...string[]])\n .default(defaultValue);\n } else {\n result = z\n .literal(stringValues[0] as z.Primitive)\n .default(defaultValue);\n }\n }\n }\n\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n\n // Parse types (can be string or array in OpenAPI 3.1)\n const types = Array.isArray(schema.type)\n ? schema.type\n : schema.type\n ? [schema.type]\n : [];\n\n // Backward compatibility with OpenAPI 3.0 nullable\n if ('nullable' in schema && schema.nullable) {\n types.push('null');\n } else if (schema.default === null) {\n types.push('null');\n }\n\n // If no explicit \"type\", fallback to unknown\n if (!types.length) {\n return required ? z.unknown() : z.unknown().optional();\n }\n\n // Handle union types\n if (types.length > 1) {\n const realTypes = types.filter((t) => t !== 'null');\n if (realTypes.length === 1 && types.includes('null')) {\n // Single real type + \"null\"\n return this.normal(realTypes[0], schema, required, true);\n }\n // Multiple different types, build a union\n const subSchemas = types.map((t) => this.normal(t, schema, true));\n if (subSchemas.length >= 2) {\n const [first, second, ...rest] = subSchemas;\n let result: ZodSchema = z.union([first, second, ...rest]);\n if (!required) {\n result = result.optional();\n }\n return result;\n }\n }\n\n return this.normal(types[0], schema, required, false);\n }\n}\n\n/**\n * Convert a runtime SchemaObject to a Zod schema\n */\nexport function schemaToZod(\n schema: SchemaObject,\n spec: IR,\n options?: {\n required?: boolean;\n },\n): ZodSchema {\n const converter = new RuntimeZodConverter(spec);\n return converter.handle(schema, options?.required ?? false);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["z", "parse", "fetch", "z", "result", "z", "options"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare class ParseError<T extends z.ZodType<any, any, any>> {
|
|
2
|
+
export declare class ParseError<T extends z.ZodType<any, any, any>> extends Error {
|
|
3
3
|
data: z.typeToFlattenedError<T, z.ZodIssue>;
|
|
4
4
|
constructor(data: z.typeToFlattenedError<T, z.ZodIssue>);
|
|
5
5
|
}
|
|
6
|
-
export declare function parseInput<T extends z.ZodType<any, any, any>>(schema: T, input: unknown):
|
|
6
|
+
export declare function parseInput<T extends z.ZodType<any, any, any>>(schema: T, input: unknown): z.infer<T>;
|
|
7
7
|
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/lib/http/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qBAAa,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/lib/http/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qBAAa,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAE,SAAQ,KAAK;IAChE,IAAI,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;CAKxD;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC3D,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,OAAO,GACb,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAOZ"}
|
package/dist/lib/rpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/lib/rpc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAEL,KAAK,oBAAoB,EAI1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAEL,KAAK,WAAW,EAOjB,MAAM,mBAAmB,CAAC;AAI3B,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;EAiBjB,CAAC;AAEH,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEnD,wBAAgB,WAAW,CACzB,SAAS,EAAE,oBAAoB,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;;;;;EA8BvC;AAED,qBAAa,MAAM;;IACV,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBACxB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAK1D,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,GAAG,EACV,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/lib/rpc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAEL,KAAK,oBAAoB,EAI1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAEL,KAAK,WAAW,EAOjB,MAAM,mBAAmB,CAAC;AAI3B,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;EAiBjB,CAAC;AAEH,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEnD,wBAAgB,WAAW,CACzB,SAAS,EAAE,oBAAoB,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;;;;;EA8BvC;AAED,qBAAa,MAAM;;IACV,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBACxB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAK1D,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,GAAG,EACV,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,CAAA;KAAE;IAgC3D,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;CAM3C;AA6DD,wBAAsB,GAAG,CACvB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,GAAG;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,gCAoEF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sdk-it/rpc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.39.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
"!**/*.test.*"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@sdk-it/spec": "0.
|
|
25
|
+
"@sdk-it/spec": "0.39.0",
|
|
26
26
|
"zod": "^3.25.76 || ^4.0.0",
|
|
27
27
|
"fast-content-type-parse": "^3.0.0",
|
|
28
|
-
"@sdk-it/typescript": "0.
|
|
28
|
+
"@sdk-it/typescript": "0.39.0",
|
|
29
29
|
"ai": "^5.0.0-beta.24",
|
|
30
30
|
"openapi3-ts": "4.5.0"
|
|
31
31
|
}
|