@ai-sdk/provider-utils 5.0.11 → 5.0.13

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 +1 @@
1
- {"version":3,"sources":["../src/as-array.ts","../src/combine-headers.ts","../src/remove-undefined-entries.ts","../src/delay.ts","../src/websocket.ts","../src/connect-to-websocket.ts","../src/convert-async-iterator-to-readable-stream.ts","../src/uint8-utils.ts","../src/convert-inline-file-data-to-uint8-array.ts","../src/convert-image-model-file-to-data-uri.ts","../src/convert-to-form-data.ts","../src/create-tool-name-mapping.ts","../src/delayed-promise.ts","../src/detect-media-type.ts","../src/cancel-response-body.ts","../src/download-error.ts","../src/is-browser-runtime.ts","../src/is-same-origin.ts","../src/sanitize-request-headers.ts","../src/validate-download-url.ts","../src/fetch-with-validated-redirects.ts","../src/read-response-with-size-limit.ts","../src/download-blob.ts","../src/extract-lines.ts","../src/extract-response-headers.ts","../src/filter-nullable.ts","../src/generate-id.ts","../src/get-error-message.ts","../src/get-from-api.ts","../src/handle-fetch-error.ts","../src/is-abort-error.ts","../src/get-runtime-environment-user-agent.ts","../src/normalize-headers.ts","../src/with-user-agent-suffix.ts","../src/version.ts","../src/inject-json-instruction.ts","../src/is-buffer.ts","../src/is-non-nullable.ts","../src/is-provider-reference.ts","../src/is-url-supported.ts","../src/load-api-key.ts","../src/load-optional-setting.ts","../src/load-setting.ts","../src/map-reasoning-to-provider.ts","../src/media-type-to-extension.ts","../src/parse-json.ts","../src/secure-json-parse.ts","../src/validate-types.ts","../src/schema.ts","../src/add-additional-properties-to-json-schema.ts","../src/to-json-schema/zod3-to-json-schema/options.ts","../src/to-json-schema/zod3-to-json-schema/select-parser.ts","../src/to-json-schema/zod3-to-json-schema/parsers/any.ts","../src/to-json-schema/zod3-to-json-schema/parsers/array.ts","../src/to-json-schema/zod3-to-json-schema/parsers/bigint.ts","../src/to-json-schema/zod3-to-json-schema/parsers/boolean.ts","../src/to-json-schema/zod3-to-json-schema/parsers/branded.ts","../src/to-json-schema/zod3-to-json-schema/parsers/catch.ts","../src/to-json-schema/zod3-to-json-schema/parsers/date.ts","../src/to-json-schema/zod3-to-json-schema/parsers/default.ts","../src/to-json-schema/zod3-to-json-schema/parsers/effects.ts","../src/to-json-schema/zod3-to-json-schema/parsers/enum.ts","../src/to-json-schema/zod3-to-json-schema/parsers/intersection.ts","../src/to-json-schema/zod3-to-json-schema/parsers/literal.ts","../src/to-json-schema/zod3-to-json-schema/parsers/record.ts","../src/to-json-schema/zod3-to-json-schema/parsers/string.ts","../src/to-json-schema/zod3-to-json-schema/parsers/map.ts","../src/to-json-schema/zod3-to-json-schema/parsers/native-enum.ts","../src/to-json-schema/zod3-to-json-schema/parsers/never.ts","../src/to-json-schema/zod3-to-json-schema/parsers/null.ts","../src/to-json-schema/zod3-to-json-schema/parsers/union.ts","../src/to-json-schema/zod3-to-json-schema/parsers/nullable.ts","../src/to-json-schema/zod3-to-json-schema/parsers/number.ts","../src/to-json-schema/zod3-to-json-schema/parsers/object.ts","../src/to-json-schema/zod3-to-json-schema/parsers/optional.ts","../src/to-json-schema/zod3-to-json-schema/parsers/pipeline.ts","../src/to-json-schema/zod3-to-json-schema/parsers/promise.ts","../src/to-json-schema/zod3-to-json-schema/parsers/set.ts","../src/to-json-schema/zod3-to-json-schema/parsers/tuple.ts","../src/to-json-schema/zod3-to-json-schema/parsers/undefined.ts","../src/to-json-schema/zod3-to-json-schema/parsers/unknown.ts","../src/to-json-schema/zod3-to-json-schema/parsers/readonly.ts","../src/to-json-schema/zod3-to-json-schema/get-relative-path.ts","../src/to-json-schema/zod3-to-json-schema/parse-def.ts","../src/to-json-schema/zod3-to-json-schema/refs.ts","../src/to-json-schema/zod3-to-json-schema/zod3-to-json-schema.ts","../src/parse-json-event-stream.ts","../src/parse-provider-options.ts","../src/post-to-api.ts","../src/types/tool.ts","../src/provider-defined-tool-factory.ts","../src/provider-executed-tool-factory.ts","../src/resolve.ts","../src/resolve-full-media-type.ts","../src/resolve-provider-reference.ts","../src/retry-with-exponential-backoff.ts","../src/response-handler.ts","../src/is-json-serializable.ts","../src/serialize-model-options.ts","../src/streaming-tool-call-tracker.ts","../src/strip-file-extension.ts","../src/transcription-stream-envelope.ts","../src/validate-base-url.ts","../src/without-trailing-slash.ts","../src/types/executable-tool.ts","../src/is-async-iterable.ts","../src/types/execute-tool.ts","../src/index.ts"],"sourcesContent":["/**\n * A value that can be provided either as a single item, an array of items,\n * or be left undefined.\n */\nexport type Arrayable<T> = T | T[] | undefined;\n\n/**\n * Normalizes a possibly undefined or non-array value into an array.\n */\nexport function asArray<T>(value: Arrayable<T>): T[] {\n return value === undefined ? [] : Array.isArray(value) ? value : [value];\n}\n","export function combineHeaders(\n ...headers: Array<Record<string, string | undefined> | undefined>\n): Record<string, string | undefined> {\n return headers.reduce(\n (combinedHeaders, currentHeaders) => ({\n ...combinedHeaders,\n ...(currentHeaders ?? {}),\n }),\n {},\n ) as Record<string, string | undefined>;\n}\n","/**\n * Removes entries from a record where the value is null or undefined.\n * @param record - The input object whose entries may be null or undefined.\n * @returns A new object containing only entries with non-null and non-undefined values.\n */\nexport function removeUndefinedEntries<T>(\n record: Record<string, T | undefined>,\n): Record<string, T> {\n return Object.fromEntries(\n Object.entries(record).filter(([_key, value]) => value != null),\n ) as Record<string, T>;\n}\n","/**\n * Creates a Promise that resolves after a specified delay\n * @param delayInMs - The delay duration in milliseconds. If null or undefined, resolves immediately.\n * @param signal - Optional AbortSignal to cancel the delay\n * @returns A Promise that resolves after the specified delay\n * @throws {DOMException} When the signal is aborted\n */\nexport async function delay(\n delayInMs?: number | null,\n options?: {\n abortSignal?: AbortSignal;\n },\n): Promise<void> {\n if (delayInMs == null) {\n return Promise.resolve();\n }\n\n const signal = options?.abortSignal;\n\n return new Promise<void>((resolve, reject) => {\n if (signal?.aborted) {\n reject(createAbortError());\n return;\n }\n\n const timeoutId = setTimeout(() => {\n cleanup();\n resolve();\n }, delayInMs);\n\n const cleanup = () => {\n clearTimeout(timeoutId);\n signal?.removeEventListener('abort', onAbort);\n };\n\n const onAbort = () => {\n cleanup();\n reject(createAbortError());\n };\n\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nfunction createAbortError(): DOMException {\n return new DOMException('Delay was aborted', 'AbortError');\n}\n","import { delay } from './delay';\n\nexport type WebSocketLike = {\n readyState: number;\n /** Bytes queued by `send` but not yet transmitted (native + `ws`). */\n readonly bufferedAmount?: number;\n send(data: string | Uint8Array | ArrayBuffer): void;\n close(code?: number, reason?: string): void;\n onopen: ((event: unknown) => void) | null;\n onmessage: ((event: { data: unknown }) => void) | null;\n onerror: ((event: unknown) => void) | null;\n onclose: ((event: unknown) => void) | null;\n};\n\nexport type WebSocketConstructor = new (\n url: string | URL,\n protocols?: string | string[],\n options?: {\n headers?: Record<string, string | undefined>;\n },\n) => WebSocketLike;\n\nexport function getWebSocketConstructor(\n webSocket: WebSocketConstructor | undefined,\n): WebSocketConstructor {\n const WebSocketConstructor =\n webSocket ?? (globalThis.WebSocket as unknown as WebSocketConstructor);\n\n if (WebSocketConstructor == null) {\n throw new Error('No WebSocket implementation available.');\n }\n\n return WebSocketConstructor;\n}\n\n/**\n * Converts an http(s) URL to the corresponding ws(s) URL.\n */\nexport function toWebSocketUrl(url: string | URL): URL {\n const wsUrl = new URL(url);\n if (wsUrl.protocol === 'http:') {\n wsUrl.protocol = 'ws:';\n } else if (wsUrl.protocol === 'https:') {\n wsUrl.protocol = 'wss:';\n }\n return wsUrl;\n}\n\nconst textDecoder = new TextDecoder();\n\n/**\n * Reads WebSocket message data as text, handling string, binary,\n * and Blob payloads.\n */\nexport async function readWebSocketMessageText(data: unknown): Promise<string> {\n if (typeof data === 'string') return data;\n if (data instanceof ArrayBuffer) return textDecoder.decode(data);\n if (ArrayBuffer.isView(data)) {\n return textDecoder.decode(data);\n }\n if (typeof Blob !== 'undefined' && data instanceof Blob) {\n return data.text();\n }\n return String(data);\n}\n\nconst WEBSOCKET_OPEN_STATE = 1;\n\n/**\n * Waits until the socket's send buffer drains below `highWaterMark` bytes.\n * No-op for implementations that do not expose `bufferedAmount`. There is no\n * portable drain event, so this polls. Returns as soon as the socket is no\n * longer open or the signal aborts — `bufferedAmount` never drains on a\n * closed socket, so waiting on would poll forever.\n */\nexport async function waitForWebSocketBufferDrain(\n socket: WebSocketLike,\n {\n highWaterMark = 1024 * 1024,\n pollIntervalMs = 20,\n abortSignal,\n }: {\n highWaterMark?: number;\n pollIntervalMs?: number;\n abortSignal?: AbortSignal;\n } = {},\n): Promise<void> {\n while (\n socket.readyState === WEBSOCKET_OPEN_STATE &&\n (socket.bufferedAmount ?? 0) > highWaterMark\n ) {\n if (abortSignal?.aborted === true) {\n return;\n }\n await delay(pollIntervalMs);\n }\n}\n","import { removeUndefinedEntries } from './remove-undefined-entries';\nimport {\n getWebSocketConstructor,\n readWebSocketMessageText,\n type WebSocketConstructor,\n type WebSocketLike,\n} from './websocket';\n\nexport interface WebSocketConnection {\n /** Undefined when the constructor threw or the signal was already aborted. */\n socket: WebSocketLike | undefined;\n /**\n * Unregisters the abort listener and closes the socket. Never throws.\n * Handlers stay attached; callers guard their own terminal state.\n */\n close: (code?: number) => void;\n}\n\n/**\n * Opens a WebSocket for a provider model, owning the transport-generic layer\n * (analogous to `postToApi` for HTTP): constructor resolution, header hygiene,\n * abort wiring, and message decoding. Callers own the URL, the auth channel\n * (subprotocols vs headers), and the wire protocol.\n */\nexport function connectToWebSocket({\n url,\n protocols,\n headers,\n webSocket,\n abortSignal,\n onOpen,\n onMessageText,\n onProcessingError,\n onSocketError,\n onClose,\n onAbort,\n}: {\n url: string | URL;\n protocols?: string | string[];\n headers?: Record<string, string | undefined>;\n webSocket?: WebSocketConstructor;\n abortSignal?: AbortSignal;\n onOpen?: (socket: WebSocketLike) => void;\n /** One decoded message. Throws and rejections go to `onProcessingError`. */\n onMessageText: (text: string) => void | PromiseLike<void>;\n /** Constructor throws and message decoding/processing failures. */\n onProcessingError: (error: unknown) => void;\n onSocketError?: () => void;\n onClose?: () => void;\n /** Also called (without opening a socket) when the signal is already aborted. */\n onAbort?: (reason: unknown) => void;\n}): WebSocketConnection {\n let socket: WebSocketLike | undefined;\n let abortListener: (() => void) | undefined;\n\n const close = (code?: number) => {\n if (abortListener != null) {\n abortSignal?.removeEventListener('abort', abortListener);\n abortListener = undefined;\n }\n try {\n socket?.close(code);\n } catch {\n // socket may already be closed\n }\n };\n\n if (abortSignal?.aborted) {\n onAbort?.(abortSignal.reason ?? new Error('Aborted'));\n return { socket: undefined, close };\n }\n\n try {\n const WebSocketConstructor = getWebSocketConstructor(webSocket);\n // native `WebSocket` ignores the headers option; header-capable\n // implementations like `ws` forward it and throw on undefined values:\n socket = new WebSocketConstructor(url, protocols, {\n headers: removeUndefinedEntries(headers ?? {}),\n });\n } catch (error) {\n onProcessingError(error);\n return { socket: undefined, close };\n }\n\n if (abortSignal != null && onAbort != null) {\n abortListener = () => onAbort(abortSignal.reason ?? new Error('Aborted'));\n abortSignal.addEventListener('abort', abortListener, { once: true });\n }\n\n const openedSocket = socket;\n socket.onopen = () => {\n try {\n onOpen?.(openedSocket);\n } catch (error) {\n onProcessingError(error);\n }\n };\n // Messages are processed through a promise tail so async decoding (e.g.\n // Blob frames) cannot reorder them, and error/close handling cannot\n // overtake a still-decoding terminal frame.\n let tail: Promise<void> = Promise.resolve();\n socket.onmessage = event => {\n tail = tail\n .then(() => readWebSocketMessageText(event.data))\n .then(text => onMessageText(text))\n .catch(onProcessingError);\n };\n socket.onerror = () => {\n tail = tail.then(() => onSocketError?.()).catch(onProcessingError);\n };\n socket.onclose = () => {\n tail = tail.then(() => onClose?.()).catch(onProcessingError);\n };\n\n return { socket, close };\n}\n","/**\n * Converts an AsyncIterator to a ReadableStream.\n *\n * @template T - The type of elements produced by the AsyncIterator.\n * @param { <T>} iterator - The AsyncIterator to convert.\n * @returns {ReadableStream<T>} - A ReadableStream that provides the same data as the AsyncIterator.\n */\nexport function convertAsyncIteratorToReadableStream<T>(\n iterator: AsyncIterator<T>,\n): ReadableStream<T> {\n let cancelled = false;\n\n return new ReadableStream<T>({\n /**\n * Called when the consumer wants to pull more data from the stream.\n *\n * @param {ReadableStreamDefaultController<T>} controller - The controller to enqueue data into the stream.\n * @returns {Promise<void>}\n */\n async pull(controller) {\n if (cancelled) return;\n try {\n const { value, done } = await iterator.next();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n /**\n * Called when the consumer cancels the stream.\n */\n async cancel(reason?: unknown) {\n cancelled = true;\n if (iterator.return) {\n try {\n await iterator.return(reason);\n } catch {\n // intentionally ignore errors during cancellation\n }\n }\n },\n });\n}\n","// btoa and atob need to be invoked as a function call, not as a method call.\n// Otherwise CloudFlare will throw a\n// \"TypeError: Illegal invocation: function called with incorrect this reference\"\nconst { btoa, atob } = globalThis;\n\nexport function convertBase64ToUint8Array(base64String: string) {\n const base64Url = base64String.replace(/-/g, '+').replace(/_/g, '/');\n const latin1string = atob(base64Url);\n return Uint8Array.from(latin1string, byte => byte.codePointAt(0)!);\n}\n\nexport function convertUint8ArrayToBase64(array: Uint8Array): string {\n let latin1string = '';\n\n // Note: regular for loop to support older JavaScript versions that\n // do not support for..of on Uint8Array\n for (let i = 0; i < array.length; i++) {\n latin1string += String.fromCodePoint(array[i]);\n }\n\n return btoa(latin1string);\n}\n\nexport function convertToBase64(value: string | Uint8Array): string {\n return value instanceof Uint8Array ? convertUint8ArrayToBase64(value) : value;\n}\n","import type { FilePart } from './types/content-part';\nimport { convertBase64ToUint8Array } from './uint8-utils';\n\ntype InlineFileData = Extract<\n FilePart['data'],\n { type: 'data' } | { type: 'text' }\n>;\n\n/**\n * Converts inline file data (a tagged `data` or `text` shape) into raw bytes.\n *\n * - `{ type: 'text', text }` → UTF-8 encoded bytes\n * - `{ type: 'data', data: Uint8Array | Buffer }` → returned as-is\n * - `{ type: 'data', data: ArrayBuffer }` → wrapped in a `Uint8Array`\n * - `{ type: 'data', data: string }` → decoded as base64\n */\nexport function convertInlineFileDataToUint8Array(\n data: InlineFileData,\n): Uint8Array {\n if (data.type === 'text') {\n return new TextEncoder().encode(data.text);\n }\n if (data.data instanceof Uint8Array) {\n return data.data;\n }\n if (data.data instanceof ArrayBuffer) {\n return new Uint8Array(data.data);\n }\n return convertBase64ToUint8Array(data.data);\n}\n","import type { ImageModelV4File } from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from './uint8-utils';\n\n/**\n * Convert an ImageModelV4File to a URL or data URI string.\n *\n * If the file is a URL, it returns the URL as-is.\n * If the file is base64 data, it returns a data URI with the base64 data.\n * If the file is a Uint8Array, it converts it to base64 and returns a data URI.\n */\nexport function convertImageModelFileToDataUri(file: ImageModelV4File): string {\n if (file.type === 'url') return file.url;\n\n return `data:${file.mediaType};base64,${\n typeof file.data === 'string'\n ? file.data\n : convertUint8ArrayToBase64(file.data)\n }`;\n}\n","/**\n * Converts an input object to FormData for multipart/form-data requests.\n *\n * Handles the following cases:\n * - `null` or `undefined` values are skipped\n * - Arrays with a single element are appended as a single value\n * - Arrays with multiple elements are appended with `[]` suffix (e.g., `image[]`)\n * unless `useArrayBrackets` is set to `false`\n * - All other values are appended directly\n *\n * @param input - The input object to convert. Use a generic type for type validation.\n * @param options - Optional configuration object.\n * @param options.useArrayBrackets - Whether to add `[]` suffix for multi-element arrays.\n * Defaults to `true`. Set to `false` for APIs that expect repeated keys without brackets.\n * @returns A FormData object containing the input values.\n *\n * @example\n * ```ts\n * type MyInput = {\n * model: string;\n * prompt: string;\n * images: Blob[];\n * };\n *\n * const formData = convertToFormData<MyInput>({\n * model: 'gpt-image-1',\n * prompt: 'A cat',\n * images: [blob1, blob2],\n * });\n * ```\n */\nexport function convertToFormData<T extends Record<string, unknown>>(\n input: T,\n options: { useArrayBrackets?: boolean } = {},\n): FormData {\n const { useArrayBrackets = true } = options;\n const formData = new FormData();\n\n for (const [key, value] of Object.entries(input)) {\n if (value == null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n if (value.length === 1) {\n formData.append(key, value[0] as string | Blob);\n continue;\n }\n\n const arrayKey = useArrayBrackets ? `${key}[]` : key;\n for (const item of value) {\n formData.append(arrayKey, item as string | Blob);\n }\n continue;\n }\n\n formData.append(key, value as string | Blob);\n }\n\n return formData;\n}\n","import type {\n LanguageModelV4FunctionTool,\n LanguageModelV4ProviderTool,\n} from '@ai-sdk/provider';\n\n/**\n * Interface for mapping between custom tool names and provider tool names.\n */\nexport interface ToolNameMapping {\n /**\n * Maps a custom tool name (used by the client) to the provider's tool name.\n * If the custom tool name does not have a mapping, returns the input name.\n *\n * @param customToolName - The custom name of the tool defined by the client.\n * @returns The corresponding provider tool name, or the input name if not mapped.\n */\n toProviderToolName: (customToolName: string) => string;\n\n /**\n * Maps a provider tool name to the custom tool name used by the client.\n * If the provider tool name does not have a mapping, returns the input name.\n *\n * @param providerToolName - The name of the tool as understood by the provider.\n * @returns The corresponding custom tool name, or the input name if not mapped.\n */\n toCustomToolName: (providerToolName: string) => string;\n}\n\n/**\n * @param tools - Tools that were passed to the language model.\n * @param providerToolNames - Maps the provider tool ids to the provider tool names.\n */\nexport function createToolNameMapping({\n tools = [],\n providerToolNames,\n}: {\n /**\n * Tools that were passed to the language model.\n */\n tools:\n | Array<LanguageModelV4FunctionTool | LanguageModelV4ProviderTool>\n | undefined;\n\n /**\n * Maps the provider tool ids to the provider tool names.\n */\n providerToolNames: Record<`${string}.${string}`, string>;\n}): ToolNameMapping {\n const customToolNameToProviderToolName: Record<string, string> = {};\n const providerToolNameToCustomToolName: Record<string, string> = {};\n\n for (const tool of tools) {\n if (tool.type === 'provider' && tool.id in providerToolNames) {\n const providerToolName = providerToolNames[tool.id];\n customToolNameToProviderToolName[tool.name] = providerToolName;\n providerToolNameToCustomToolName[providerToolName] = tool.name;\n }\n }\n\n return {\n toProviderToolName: (customToolName: string) =>\n customToolNameToProviderToolName[customToolName] ?? customToolName,\n toCustomToolName: (providerToolName: string) =>\n providerToolNameToCustomToolName[providerToolName] ?? providerToolName,\n };\n}\n","/**\n * Delayed promise. It is only constructed once the value is accessed.\n * This is useful to avoid unhandled promise rejections when the promise is created\n * but not accessed.\n */\nexport class DelayedPromise<T> {\n private status:\n | { type: 'pending' }\n | { type: 'resolved'; value: T }\n | { type: 'rejected'; error: unknown } = { type: 'pending' };\n private _promise: Promise<T> | undefined;\n private _resolve: undefined | ((value: T) => void) = undefined;\n private _reject: undefined | ((error: unknown) => void) = undefined;\n\n get promise(): Promise<T> {\n if (this._promise) {\n return this._promise;\n }\n\n this._promise = new Promise<T>((resolve, reject) => {\n if (this.status.type === 'resolved') {\n resolve(this.status.value);\n } else if (this.status.type === 'rejected') {\n reject(this.status.error);\n }\n\n this._resolve = resolve;\n this._reject = reject;\n });\n\n return this._promise;\n }\n\n resolve(value: T): void {\n this.status = { type: 'resolved', value };\n\n if (this._promise) {\n this._resolve?.(value);\n }\n }\n\n reject(error: unknown): void {\n this.status = { type: 'rejected', error };\n\n if (this._promise) {\n this._reject?.(error);\n }\n }\n\n isResolved(): boolean {\n return this.status.type === 'resolved';\n }\n\n isRejected(): boolean {\n return this.status.type === 'rejected';\n }\n\n isPending(): boolean {\n return this.status.type === 'pending';\n }\n}\n","import { convertBase64ToUint8Array } from './uint8-utils';\n\nconst imageMediaTypeSignatures = [\n {\n mediaType: 'image/gif' as const,\n bytesPrefix: [0x47, 0x49, 0x46], // GIF\n },\n {\n mediaType: 'image/png' as const,\n bytesPrefix: [0x89, 0x50, 0x4e, 0x47], // PNG\n },\n {\n mediaType: 'image/jpeg' as const,\n bytesPrefix: [0xff, 0xd8], // JPEG\n },\n {\n mediaType: 'image/webp' as const,\n bytesPrefix: [\n 0x52,\n 0x49,\n 0x46,\n 0x46, // \"RIFF\"\n null,\n null,\n null,\n null, // file size (variable)\n 0x57,\n 0x45,\n 0x42,\n 0x50, // \"WEBP\"\n ],\n },\n {\n mediaType: 'image/bmp' as const,\n bytesPrefix: [0x42, 0x4d],\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x49, 0x49, 0x2a, 0x00],\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x4d, 0x4d, 0x00, 0x2a],\n },\n {\n mediaType: 'image/avif' as const,\n bytesPrefix: [\n 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66,\n ],\n },\n {\n mediaType: 'image/heic' as const,\n bytesPrefix: [\n 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x68, 0x65, 0x69, 0x63,\n ],\n },\n] as const;\n\nconst documentMediaTypeSignatures = [\n {\n mediaType: 'application/pdf' as const,\n bytesPrefix: [0x25, 0x50, 0x44, 0x46], // %PDF\n },\n] as const;\n\nconst audioMediaTypeSignatures = [\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfb],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfa],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf3],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf2],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe3],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe2],\n },\n {\n mediaType: 'audio/wav' as const,\n bytesPrefix: [\n 0x52, // R\n 0x49, // I\n 0x46, // F\n 0x46, // F\n null,\n null,\n null,\n null,\n 0x57, // W\n 0x41, // A\n 0x56, // V\n 0x45, // E\n ],\n },\n {\n mediaType: 'audio/ogg' as const,\n bytesPrefix: [0x4f, 0x67, 0x67, 0x53],\n },\n {\n mediaType: 'audio/flac' as const,\n bytesPrefix: [0x66, 0x4c, 0x61, 0x43],\n },\n {\n mediaType: 'audio/aac' as const,\n bytesPrefix: [0x40, 0x15, 0x00, 0x00],\n },\n {\n mediaType: 'audio/mp4' as const,\n bytesPrefix: [0x66, 0x74, 0x79, 0x70],\n },\n {\n mediaType: 'audio/webm',\n bytesPrefix: [0x1a, 0x45, 0xdf, 0xa3],\n },\n] as const;\n\nconst videoMediaTypeSignatures = [\n {\n mediaType: 'video/mp4' as const,\n bytesPrefix: [\n 0x00,\n 0x00,\n 0x00,\n null,\n 0x66,\n 0x74,\n 0x79,\n 0x70, // ftyp\n ],\n },\n {\n mediaType: 'video/webm' as const,\n bytesPrefix: [0x1a, 0x45, 0xdf, 0xa3], // EBML\n },\n {\n mediaType: 'video/quicktime' as const,\n bytesPrefix: [\n 0x00,\n 0x00,\n 0x00,\n 0x14,\n 0x66,\n 0x74,\n 0x79,\n 0x70,\n 0x71,\n 0x74, // ftypqt\n ],\n },\n {\n mediaType: 'video/x-msvideo' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46], // RIFF (AVI)\n },\n] as const;\n\nconst stripID3 = (data: Uint8Array | string) => {\n const bytes =\n typeof data === 'string' ? convertBase64ToUint8Array(data) : data;\n const id3Size =\n ((bytes[6] & 0x7f) << 21) |\n ((bytes[7] & 0x7f) << 14) |\n ((bytes[8] & 0x7f) << 7) |\n (bytes[9] & 0x7f);\n\n // The raw MP3 starts here\n return bytes.slice(id3Size + 10);\n};\n\nfunction stripID3TagsIfPresent(data: Uint8Array | string): Uint8Array | string {\n const hasId3 =\n (typeof data === 'string' && data.startsWith('SUQz')) ||\n (typeof data !== 'string' &&\n data.length > 10 &&\n data[0] === 0x49 && // 'I'\n data[1] === 0x44 && // 'D'\n data[2] === 0x33); // '3'\n\n return hasId3 ? stripID3(data) : data;\n}\n\ntype MediaTypeSignatures = ReadonlyArray<{\n readonly mediaType: string;\n readonly bytesPrefix: ReadonlyArray<number | null>;\n}>;\n\nfunction detectMediaTypeBySignatures<T extends MediaTypeSignatures>({\n data,\n signatures,\n}: {\n data: Uint8Array | string;\n signatures: T;\n}): T[number]['mediaType'] | undefined {\n const processedData = stripID3TagsIfPresent(data);\n\n // Convert the first ~18 bytes (24 base64 chars) for consistent detection logic:\n const bytes =\n typeof processedData === 'string'\n ? convertBase64ToUint8Array(\n processedData.substring(0, Math.min(processedData.length, 24)),\n )\n : processedData;\n\n for (const signature of signatures) {\n if (\n bytes.length >= signature.bytesPrefix.length &&\n signature.bytesPrefix.every(\n (byte, index) => byte === null || bytes[index] === byte,\n )\n ) {\n return signature.mediaType;\n }\n }\n\n return undefined;\n}\n\nconst topLevelSignatureTables = {\n image: imageMediaTypeSignatures,\n audio: audioMediaTypeSignatures,\n video: videoMediaTypeSignatures,\n application: documentMediaTypeSignatures,\n} as const;\n\ntype TopLevelMediaType = keyof typeof topLevelSignatureTables;\n\n/**\n * Detect the IANA media type of a file from its raw bytes or base64 string.\n *\n * - When `topLevelType` is omitted, every known signature is considered\n * (image, audio, video, and application). Returns `undefined` when the\n * bytes do not match any known signature.\n * - When `topLevelType` is provided, only signatures for that top-level\n * segment are considered. Returns `undefined` for unsupported segments\n * (e.g. `\"text\"`) or when no signature matches.\n */\nexport function detectMediaType({\n data,\n topLevelType,\n}: {\n data: Uint8Array | string;\n topLevelType?: string;\n}): string | undefined {\n if (topLevelType === undefined) {\n return detectMediaTypeBySignatures({\n data,\n signatures: [\n ...imageMediaTypeSignatures,\n ...documentMediaTypeSignatures,\n ...audioMediaTypeSignatures,\n ...videoMediaTypeSignatures,\n ],\n });\n }\n\n const signatures = topLevelSignatureTables[topLevelType as TopLevelMediaType];\n\n if (signatures === undefined) {\n return undefined;\n }\n\n return detectMediaTypeBySignatures({ data, signatures });\n}\n\n/**\n * Returns the top-level segment of a media type (the portion before `/`).\n *\n * Examples:\n * - `\"image/png\"` -> `\"image\"`\n * - `\"image/*\"` -> `\"image\"`\n * - `\"image\"` -> `\"image\"`\n * - `\"image/\"` -> `\"image\"`\n * - `\"\"` -> `\"\"`\n * - `\"/\"` -> `\"\"`\n */\nexport function getTopLevelMediaType(mediaType: string): string {\n const slashIndex = mediaType.indexOf('/');\n return slashIndex === -1 ? mediaType : mediaType.substring(0, slashIndex);\n}\n\n/**\n * Returns `true` only when the given media type has a non-empty, non-wildcard\n * subtype (i.e. matches the form `type/subtype`, and `subtype` is not `*`).\n *\n * Examples:\n * - `\"image/png\"` -> `true`\n * - `\"image/*\"` -> `false`\n * - `\"image\"` -> `false`\n * - `\"image/\"` -> `false`\n * - `\"\"` -> `false`\n * - `\"/\"` -> `false`\n */\nexport function isFullMediaType(mediaType: string): boolean {\n const slashIndex = mediaType.indexOf('/');\n if (slashIndex === -1) {\n return false;\n }\n const subtype = mediaType.substring(slashIndex + 1);\n return subtype.length > 0 && subtype !== '*';\n}\n","/**\n * Cancels a response body to release the underlying connection.\n *\n * When a fetch Response is rejected without consuming its body (e.g. a failed\n * status code, an open-redirect rejection, or a Content-Length that exceeds the\n * size limit), the underlying TCP socket is not returned to the connection pool\n * and may stay open until the process runs out of file descriptors. Cancelling\n * the body avoids this leak.\n *\n * Errors thrown while cancelling are ignored: the body may already be locked,\n * disturbed, or absent, none of which should mask the original rejection.\n */\nexport async function cancelResponseBody(response: Response): Promise<void> {\n try {\n await response.body?.cancel();\n } catch {\n // Ignore cancel errors so the original rejection is preserved.\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_DownloadError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class DownloadError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly url: string;\n readonly statusCode?: number;\n readonly statusText?: string;\n\n constructor({\n url,\n statusCode,\n statusText,\n cause,\n message = cause == null\n ? `Failed to download ${url}: ${statusCode} ${statusText}`\n : `Failed to download ${url}: ${cause}`,\n }: {\n url: string;\n statusCode?: number;\n statusText?: string;\n message?: string;\n cause?: unknown;\n }) {\n super({ name, message, cause });\n\n this.url = url;\n this.statusCode = statusCode;\n this.statusText = statusText;\n }\n\n static isInstance(error: unknown): error is DownloadError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","/**\n * Returns `true` when running in a browser.\n *\n * Detection keys on the presence of a global `window`, matching the browser\n * check used elsewhere in this package (see `getRuntimeEnvironmentUserAgent`)\n * so the SDK has a single, consistent definition of \"browser\". Server runtimes\n * (Node.js, Deno, Bun, edge/workers) do not define `window`.\n */\nexport function isBrowserRuntime(\n globalThisAny: any = globalThis as any,\n): boolean {\n return globalThisAny.window != null;\n}\n","/**\n * Returns true when `url` has the same origin (scheme + host + port) as\n * `baseUrl`.\n *\n * Used to decide whether provider credentials may be attached to a request to a\n * URL taken from a provider response (e.g. a polling or media-download URL).\n * Credentials must only be sent to the provider's own origin; a response that\n * names a foreign host (a CDN, or an attacker-controlled host if the response\n * is tampered with) must not receive the API key.\n *\n * Returns false if either value is not a valid absolute URL (fail-closed).\n */\nexport function isSameOrigin(url: string, baseUrl: string): boolean {\n try {\n return new URL(url).origin === new URL(baseUrl).origin;\n } catch {\n return false;\n }\n}\n","/**\n * Request headers stripped before fetching an untrusted URL: host/virtual-host\n * routing, proxy/origin spoofing, cloud-metadata, cookies, and hop-by-hop\n * transport headers (RFC 7230 §6.1).\n *\n * `Authorization` and other credential-bearing caller headers (e.g. `x-key`)\n * are intentionally not listed — they're needed on the first hop of some\n * provider polling calls. Instead, all caller headers except the user-agent are\n * dropped on a cross-origin redirect (see `fetch-with-validated-redirects`).\n */\nconst BLOCKED_REQUEST_HEADERS: readonly string[] = [\n // Hop-by-hop / transport (RFC 7230 §6.1)\n 'connection',\n 'keep-alive',\n 'te',\n 'trailer',\n 'transfer-encoding',\n 'upgrade',\n\n // Host / virtual-host routing\n 'host',\n\n // Proxy / origin spoofing\n 'forwarded',\n 'proxy-authorization',\n 'via',\n 'x-forwarded-for',\n 'x-forwarded-host',\n 'x-forwarded-proto',\n 'x-real-ip',\n\n // Cloud metadata (GCP, AWS IMDSv1/v2, Azure, Alibaba, DigitalOcean)\n 'metadata',\n 'metadata-flavor',\n 'x-aws-ec2-metadata-token',\n 'x-metadata-token',\n\n // Session / cookie\n 'cookie',\n 'set-cookie',\n];\n\n/**\n * Returns a fresh `Headers` built from `input` with {@link BLOCKED_REQUEST_HEADERS}\n * removed. The input is never mutated.\n */\nexport function sanitizeRequestHeaders(input: HeadersInit): Headers {\n const headers = new Headers(input);\n for (const name of BLOCKED_REQUEST_HEADERS) {\n headers.delete(name);\n }\n return headers;\n}\n","import { DownloadError } from './download-error';\n\n/**\n * Validates that a URL is safe to download from, blocking private/internal addresses\n * to prevent SSRF attacks.\n *\n * Note: this performs string/literal-IP checks only. It does not resolve DNS, so a\n * hostname that resolves to a private address is not blocked here (see callers, which\n * should additionally constrain egress at the network layer when handling untrusted URLs).\n *\n * @param url - The URL string to validate.\n * @throws DownloadError if the URL is unsafe.\n */\nexport function validateDownloadUrl(url: string): void {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new DownloadError({\n url,\n message: `Invalid URL: ${url}`,\n });\n }\n\n // data: URLs are inline content, so they do not trigger a network fetch or SSRF risk.\n if (parsed.protocol === 'data:') {\n return;\n }\n\n // Only allow http and https network protocols\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new DownloadError({\n url,\n message: `URL scheme must be http, https, or data, got ${parsed.protocol}`,\n });\n }\n\n // Strip a trailing dot so a fully-qualified name like `localhost.` (which resolves\n // identically to `localhost`) cannot bypass the hostname blocklist below.\n const hostname = parsed.hostname.toLowerCase().replace(/\\.+$/, '');\n\n // Block empty hostname\n if (!hostname) {\n throw new DownloadError({\n url,\n message: `URL must have a hostname`,\n });\n }\n\n // Block localhost and .local domains\n if (\n hostname === 'localhost' ||\n hostname.endsWith('.local') ||\n hostname.endsWith('.localhost')\n ) {\n throw new DownloadError({\n url,\n message: `URL with hostname ${hostname} is not allowed`,\n });\n }\n\n // Check for IPv6 addresses (enclosed in brackets in URLs)\n if (hostname.startsWith('[') && hostname.endsWith(']')) {\n const ipv6 = hostname.slice(1, -1);\n if (isPrivateIPv6(ipv6)) {\n throw new DownloadError({\n url,\n message: `URL with IPv6 address ${hostname} is not allowed`,\n });\n }\n return;\n }\n\n // Check for IPv4 addresses\n if (isIPv4(hostname)) {\n if (isPrivateIPv4(hostname)) {\n throw new DownloadError({\n url,\n message: `URL with IP address ${hostname} is not allowed`,\n });\n }\n return;\n }\n}\n\nfunction isIPv4(hostname: string): boolean {\n const parts = hostname.split('.');\n if (parts.length !== 4) return false;\n return parts.every(part => {\n const num = Number(part);\n return (\n Number.isInteger(num) && num >= 0 && num <= 255 && String(num) === part\n );\n });\n}\n\nfunction isPrivateIPv4(ip: string): boolean {\n const parts = ip.split('.').map(Number);\n const [a, b, c] = parts;\n\n // 0.0.0.0/8\n if (a === 0) return true;\n // 10.0.0.0/8\n if (a === 10) return true;\n // 100.64.0.0/10 (CGNAT, used by some cloud providers for internal traffic)\n if (a === 100 && b >= 64 && b <= 127) return true;\n // 127.0.0.0/8\n if (a === 127) return true;\n // 169.254.0.0/16\n if (a === 169 && b === 254) return true;\n // 172.16.0.0/12\n if (a === 172 && b >= 16 && b <= 31) return true;\n // 192.0.0.0/24 (IETF protocol assignments)\n if (a === 192 && b === 0 && c === 0) return true;\n // 192.0.2.0/24 (TEST-NET-1, documentation)\n if (a === 192 && b === 0 && c === 2) return true;\n // 192.168.0.0/16\n if (a === 192 && b === 168) return true;\n // 198.18.0.0/15 (benchmarking)\n if (a === 198 && (b === 18 || b === 19)) return true;\n // 198.51.100.0/24 (TEST-NET-2, documentation)\n if (a === 198 && b === 51 && c === 100) return true;\n // 203.0.113.0/24 (TEST-NET-3, documentation)\n if (a === 203 && b === 0 && c === 113) return true;\n // 224.0.0.0/4 (multicast) and 240.0.0.0/4 (reserved, incl. 255.255.255.255 broadcast)\n if (a >= 224) return true;\n\n return false;\n}\n\n/**\n * Expands an IPv6 address string into its 8 16-bit groups, handling `::`\n * compression and an optional dotted-decimal IPv4 tail (e.g. `::ffff:127.0.0.1`).\n *\n * @returns the 8 groups, or null if the input is not a parseable IPv6 address.\n */\nfunction parseIPv6(ip: string): number[] | null {\n // Strip an optional zone id (e.g. `fe80::1%eth0`).\n let address = ip.toLowerCase();\n const zoneIndex = address.indexOf('%');\n if (zoneIndex !== -1) {\n address = address.slice(0, zoneIndex);\n }\n\n // At most one `::` compression marker is allowed.\n const halves = address.split('::');\n if (halves.length > 2) return null;\n\n const toGroups = (segment: string): number[] | null => {\n if (segment === '') return [];\n const groups: number[] = [];\n const parts = segment.split(':');\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n // A dotted-decimal IPv4 tail is only valid as the final part.\n if (part.includes('.')) {\n if (i !== parts.length - 1 || !isIPv4(part)) return null;\n const [a, b, c, d] = part.split('.').map(Number);\n groups.push((a << 8) | b, (c << 8) | d);\n continue;\n }\n if (!/^[0-9a-f]{1,4}$/.test(part)) return null;\n groups.push(parseInt(part, 16));\n }\n return groups;\n };\n\n const head = toGroups(halves[0]);\n if (head === null) return null;\n\n if (halves.length === 2) {\n const tail = toGroups(halves[1]);\n if (tail === null) return null;\n const fill = 8 - head.length - tail.length;\n if (fill < 0) return null;\n return [...head, ...new Array<number>(fill).fill(0), ...tail];\n }\n\n // No `::` compression: the address must contain exactly 8 groups.\n return head.length === 8 ? head : null;\n}\n\nfunction isPrivateIPv6(ip: string): boolean {\n const groups = parseIPv6(ip);\n\n // Fail closed: if the address cannot be parsed, treat it as unsafe.\n if (groups === null) return true;\n\n const topZero = (count: number) =>\n groups.slice(0, count).every(group => group === 0);\n\n // ::1 (loopback) and :: (unspecified)\n if (topZero(7) && (groups[7] === 0 || groups[7] === 1)) return true;\n\n // fc00::/7 (unique local addresses)\n if ((groups[0] & 0xfe00) === 0xfc00) return true;\n\n // fe80::/10 (link-local)\n if ((groups[0] & 0xffc0) === 0xfe80) return true;\n\n // fec0::/10 (site-local, deprecated but still routable internally)\n if ((groups[0] & 0xffc0) === 0xfec0) return true;\n\n // ff00::/8 (multicast)\n if ((groups[0] & 0xff00) === 0xff00) return true;\n\n // 2001:db8::/32 (documentation range, not globally routable)\n if (groups[0] === 0x2001 && groups[1] === 0x0db8) return true;\n\n // 3fff::/20 (documentation range, RFC 9637)\n if (groups[0] === 0x3fff && (groups[1] & 0xf000) === 0x0000) return true;\n\n // Addresses that embed an IPv4 address in their last 32 bits. For these we\n // extract the embedded IPv4 and reuse the IPv4 private-range checks, so that\n // e.g. ::ffff:127.0.0.1 or 64:ff9b::169.254.169.254 are blocked.\n const embedsIPv4 =\n // ::/96 — IPv4-compatible (deprecated)\n topZero(6) ||\n // ::ffff:0:0/96 — IPv4-mapped (ffff in group 5)\n (topZero(5) && groups[5] === 0xffff) ||\n // ::ffff:0:0/96 — IPv4-translated form (ffff in group 4, group 5 zero)\n (topZero(4) && groups[4] === 0xffff && groups[5] === 0) ||\n // 64:ff9b::/96 — NAT64 well-known prefix\n (groups[0] === 0x0064 &&\n groups[1] === 0xff9b &&\n groups[2] === 0 &&\n groups[3] === 0 &&\n groups[4] === 0 &&\n groups[5] === 0) ||\n // 64:ff9b:1::/48 — NAT64 local-use prefix\n (groups[0] === 0x0064 && groups[1] === 0xff9b && groups[2] === 0x0001);\n\n if (embedsIPv4) {\n const a = (groups[6] >> 8) & 0xff;\n const b = groups[6] & 0xff;\n const c = (groups[7] >> 8) & 0xff;\n const d = groups[7] & 0xff;\n return isPrivateIPv4(`${a}.${b}.${c}.${d}`);\n }\n\n return false;\n}\n","import { cancelResponseBody } from './cancel-response-body';\nimport { DownloadError } from './download-error';\nimport type { FetchFunction } from './fetch-function';\nimport { isBrowserRuntime } from './is-browser-runtime';\nimport { isSameOrigin } from './is-same-origin';\nimport { sanitizeRequestHeaders } from './sanitize-request-headers';\nimport { validateDownloadUrl } from './validate-download-url';\n\nconst MAX_DOWNLOAD_REDIRECTS = 10;\n\n// Redirect status codes per the fetch spec (https://fetch.spec.whatwg.org/#redirect-status).\n// Notably 300 (Multiple Choices) and 304 (Not Modified) are NOT redirects,\n// even when a server attaches a Location header.\nconst REDIRECT_STATUS_CODES = new Set([301, 302, 303, 307, 308]);\n\n/**\n * Fetches a URL while enforcing the download guard on every hop.\n *\n * Redirects are followed manually (`redirect: 'manual'`) so each hop is\n * validated with {@link validateDownloadUrl} *before* it is requested. Relying\n * on the default `redirect: 'follow'` would issue the request to a redirect\n * target (e.g. an internal address) before we ever see its URL, defeating the\n * guard.\n *\n * Request headers are also protected: {@link sanitizeRequestHeaders} strips\n * proxy/metadata/cookie/hop-by-hop headers before the first request, and all\n * caller headers except `User-Agent` are dropped on a cross-origin redirect.\n * The fetch spec only strips `Authorization` on cross-origin redirects because\n * in a browser, CORS preflighting protects custom headers; there is no CORS on\n * the server, so provider API keys carried in custom headers (e.g. `x-key`)\n * must be dropped here as well.\n *\n * A `redirect: 'manual'` request yields an unreadable opaque response in the\n * browser (and in other spec-compliant fetch implementations), so the redirect\n * target cannot be validated here. In a real browser this is safe to follow\n * natively because reaching an internal network is not possible (fetch is\n * constrained by CORS and cannot reach a server's internal network or\n * cloud-metadata). On any other runtime we cannot validate the hop, so we fail\n * closed rather than follow it blindly and bypass the guard.\n *\n * A hop that is same-origin with `trustedOrigin` (the developer-configured\n * provider endpoint) skips target validation: that origin is exactly what an\n * unvalidated, config-derived request would fetch anyway, and validating it\n * would break legitimate self-hosted / localhost deployments whose response\n * URLs point back at the configured host. Hops on any other origin are always\n * validated.\n *\n * The returned response is the final (non-redirect) response. The caller is\n * responsible for checking `response.ok` and reading the body.\n *\n * Not solved here: this does string/literal checks only and does not resolve\n * DNS, so a hostname that *resolves* to a private address, and DNS rebinding\n * (the resolved IP flipping between validation and connect), are not blocked.\n * Server deployments fetching untrusted URLs should constrain egress at the\n * network layer or inject a Node `fetch` that pins the resolved IP at connect\n * time — those need DNS/socket APIs not available on all target runtimes\n * (edge, browser, Bun), so they are intentionally not built in.\n *\n * @throws DownloadError if a hop is unsafe, the redirect limit is exceeded, or\n * a redirect cannot be validated on a non-browser runtime.\n */\nexport async function fetchWithValidatedRedirects({\n url,\n headers,\n abortSignal,\n maxRedirects = MAX_DOWNLOAD_REDIRECTS,\n fetch = globalThis.fetch,\n trustedOrigin,\n}: {\n url: string;\n headers?: HeadersInit;\n abortSignal?: AbortSignal;\n maxRedirects?: number;\n fetch?: FetchFunction;\n /**\n * A developer-configured origin (e.g. the provider's `baseURL`) whose hops\n * skip target validation. Must never be derived from response data.\n */\n trustedOrigin?: string;\n}): Promise<Response> {\n // Left undefined when no headers are provided (bare request); otherwise\n // sanitized once and replaced on a cross-origin hop (credential drop below).\n let currentHeaders =\n headers === undefined ? undefined : sanitizeRequestHeaders(headers);\n\n const perHopInit = (redirect: RequestRedirect): RequestInit => {\n const init: RequestInit = { signal: abortSignal, redirect };\n if (currentHeaders !== undefined) {\n // Snapshot per hop: the platform fetch reads headers synchronously, but\n // an injected fetch may defer, and hops between credential drops would\n // otherwise share one instance.\n init.headers = new Headers(currentHeaders);\n }\n return init;\n };\n\n let currentUrl = url;\n // The bound also acts as a backstop against an unterminated redirect chain.\n for (let redirectCount = 0; redirectCount <= maxRedirects; redirectCount++) {\n // The developer-configured origin is trusted by definition; validating it\n // would reject legitimate self-hosted / localhost deployments.\n if (\n trustedOrigin === undefined ||\n !isSameOrigin(currentUrl, trustedOrigin)\n ) {\n validateDownloadUrl(currentUrl);\n }\n\n const response = await fetch(currentUrl, perHopInit('manual'));\n\n if (response.type === 'opaqueredirect') {\n if (!isBrowserRuntime()) {\n throw new DownloadError({\n url,\n message: `Redirect from ${currentUrl} could not be validated and was blocked`,\n });\n }\n return await fetch(currentUrl, perHopInit('follow'));\n }\n\n const location = response.headers.get('location');\n if (REDIRECT_STATUS_CODES.has(response.status) && location) {\n // Release the redirect response's connection before moving to the next\n // hop. Whether that hop is followed or rejected by the guard, an\n // unconsumed 3xx body would leak the underlying socket.\n await cancelResponseBody(response);\n const nextUrl = new URL(location, currentUrl).toString();\n\n // Drop all caller headers except the user-agent before following a\n // redirect that crosses origin. Only stripping Authorization (as the\n // fetch spec does) is not enough on the server: providers authenticate\n // with custom headers too (e.g. `x-key`), and without CORS there is\n // nothing else stopping them from riding to a foreign host.\n if (currentHeaders !== undefined && !isSameOrigin(nextUrl, currentUrl)) {\n const userAgent = currentHeaders.get('user-agent');\n currentHeaders = new Headers(\n userAgent == null ? undefined : { 'user-agent': userAgent },\n );\n }\n\n currentUrl = nextUrl;\n continue;\n }\n\n return response;\n }\n\n throw new DownloadError({\n url,\n message: `Too many redirects (max ${maxRedirects})`,\n });\n}\n","import { cancelResponseBody } from './cancel-response-body';\nimport { DownloadError } from './download-error';\n\n/**\n * Default maximum download size: 2 GiB.\n *\n * `fetch().arrayBuffer()` has ~2x peak memory overhead (undici buffers the\n * body internally, then creates the JS ArrayBuffer), so very large downloads\n * risk exceeding the default V8 heap limit on 64-bit systems and terminating\n * the process with an out-of-memory error.\n *\n * Setting this limit converts an unrecoverable OOM crash into a catchable\n * `DownloadError`.\n */\nexport const DEFAULT_MAX_DOWNLOAD_SIZE = 2 * 1024 * 1024 * 1024;\n\n/**\n * Reads a fetch Response body with a size limit to prevent memory exhaustion.\n *\n * Checks the Content-Length header for early rejection, then reads the body\n * incrementally via ReadableStream and aborts with a DownloadError when the\n * limit is exceeded.\n *\n * @param response - The fetch Response to read.\n * @param url - The URL being downloaded (used in error messages).\n * @param maxBytes - Maximum allowed bytes. Defaults to DEFAULT_MAX_DOWNLOAD_SIZE.\n * @returns A Uint8Array containing the response body.\n * @throws DownloadError if the response exceeds maxBytes.\n */\nexport async function readResponseWithSizeLimit({\n response,\n url,\n maxBytes = DEFAULT_MAX_DOWNLOAD_SIZE,\n}: {\n response: Response;\n url: string;\n maxBytes?: number;\n}): Promise<Uint8Array> {\n // Early rejection based on Content-Length header\n const contentLength = response.headers.get('content-length');\n if (contentLength != null) {\n const length = parseInt(contentLength, 10);\n if (!isNaN(length) && length > maxBytes) {\n // Cancel the body so the underlying connection is released back to the\n // pool instead of being left open until the socket is exhausted.\n await cancelResponseBody(response);\n throw new DownloadError({\n url,\n message: `Download of ${url} exceeded maximum size of ${maxBytes} bytes (Content-Length: ${length}).`,\n });\n }\n }\n\n const body = response.body;\n\n // Handle missing body (empty responses)\n if (body == null) {\n return new Uint8Array(0);\n }\n\n const reader = body.getReader();\n const chunks: Uint8Array[] = [];\n let totalBytes = 0;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n totalBytes += value.length;\n\n if (totalBytes > maxBytes) {\n throw new DownloadError({\n url,\n message: `Download of ${url} exceeded maximum size of ${maxBytes} bytes.`,\n });\n }\n\n chunks.push(value);\n }\n } finally {\n try {\n await reader.cancel();\n } finally {\n reader.releaseLock();\n }\n }\n\n // Concatenate chunks into a single Uint8Array\n const result = new Uint8Array(totalBytes);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n\n return result;\n}\n","import { cancelResponseBody } from './cancel-response-body';\nimport { DownloadError } from './download-error';\nimport { fetchWithValidatedRedirects } from './fetch-with-validated-redirects';\nimport {\n readResponseWithSizeLimit,\n DEFAULT_MAX_DOWNLOAD_SIZE,\n} from './read-response-with-size-limit';\n\n/**\n * Download a file from a URL and return it as a Blob.\n *\n * @param url - The URL to download from.\n * @param options - Optional settings for the download.\n * @param options.maxBytes - Maximum allowed download size in bytes. Defaults to 100 MiB.\n * @param options.abortSignal - An optional abort signal to cancel the download.\n * @returns A Promise that resolves to the downloaded Blob.\n *\n * @throws DownloadError if the download fails or exceeds maxBytes.\n */\nexport async function downloadBlob(\n url: string,\n options?: { maxBytes?: number; abortSignal?: AbortSignal },\n): Promise<Blob> {\n try {\n const response = await fetchWithValidatedRedirects({\n url,\n abortSignal: options?.abortSignal,\n });\n\n if (!response.ok) {\n // Release the connection before rejecting so an error status from an\n // attacker-controlled origin cannot leak open sockets.\n await cancelResponseBody(response);\n throw new DownloadError({\n url,\n statusCode: response.status,\n statusText: response.statusText,\n });\n }\n\n const data = await readResponseWithSizeLimit({\n response,\n url,\n maxBytes: options?.maxBytes ?? DEFAULT_MAX_DOWNLOAD_SIZE,\n });\n\n const contentType = response.headers.get('content-type') ?? undefined;\n return new Blob([data], contentType ? { type: contentType } : undefined);\n } catch (error) {\n if (DownloadError.isInstance(error)) {\n throw error;\n }\n\n throw new DownloadError({ url, cause: error });\n }\n}\n","/**\n * Extracts a 1-based inclusive line range from `text`, auto-detecting the\n * file's line ending (`\\r\\n`, `\\n`, or `\\r`, in that priority).\n *\n * Mixed line endings are not supported: detection picks one and uses it for\n * both the split and the rejoin, so files that mix conventions will not slice\n * cleanly. When neither `startLine` nor `endLine` is provided, the input is\n * returned unchanged. `endLine` past EOF clamps to the last line.\n */\nexport function extractLines({\n text,\n startLine,\n endLine,\n}: {\n text: string;\n startLine?: number;\n endLine?: number;\n}): string {\n if (startLine == null && endLine == null) return text;\n const lineEnding = text.includes('\\r\\n')\n ? '\\r\\n'\n : text.includes('\\n')\n ? '\\n'\n : text.includes('\\r')\n ? '\\r'\n : '\\n';\n const lines = text.split(lineEnding);\n const start = Math.max(1, startLine ?? 1) - 1;\n const end = Math.min(lines.length, endLine ?? lines.length);\n return lines.slice(start, end).join(lineEnding);\n}\n","/**\n * Extracts the headers from a response object and returns them as a key-value object.\n *\n * @param response - The response object to extract headers from.\n * @returns The headers as a key-value object.\n */\nexport function extractResponseHeaders(response: Response) {\n return Object.fromEntries<string>([...response.headers]);\n}\n","/**\n * Filters `null` and `undefined` values out of a list of values.\n *\n * @param values - The values to filter.\n * @returns A new array containing only non-nullish values.\n */\nexport function filterNullable<T>(\n ...values: Array<T | undefined | null>\n): Array<T> {\n return values.filter((value): value is NonNullable<T> => value != null);\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\n\n/**\n * Creates an ID generator.\n * The total length of the ID is the sum of the prefix, separator, and random part length.\n * Not cryptographically secure.\n *\n * @param alphabet - The alphabet to use for the ID. Default: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.\n * @param prefix - The prefix of the ID to generate. Optional.\n * @param separator - The separator between the prefix and the random part of the ID. Default: '-'.\n * @param size - The size of the random part of the ID to generate. Default: 16.\n */\nexport const createIdGenerator = ({\n prefix,\n size = 16,\n alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n separator = '-',\n}: {\n prefix?: string;\n separator?: string;\n size?: number;\n alphabet?: string;\n} = {}): IdGenerator => {\n const generator = () => {\n const alphabetLength = alphabet.length;\n const chars = new Array(size);\n for (let i = 0; i < size; i++) {\n chars[i] = alphabet[(Math.random() * alphabetLength) | 0];\n }\n return chars.join('');\n };\n\n if (prefix == null) {\n return generator;\n }\n\n // check that the prefix is not part of the alphabet (otherwise prefix checking can fail randomly)\n if (alphabet.includes(separator)) {\n throw new InvalidArgumentError({\n argument: 'separator',\n message: `The separator \"${separator}\" must not be part of the alphabet \"${alphabet}\".`,\n });\n }\n\n return () => `${prefix}${separator}${generator()}`;\n};\n\n/**\n * A function that generates an ID.\n */\nexport type IdGenerator = () => string;\n\n/**\n * Generates a 16-character random string to use for IDs.\n * Not cryptographically secure.\n */\nexport const generateId = createIdGenerator();\n","export { getErrorMessage } from '@ai-sdk/provider';\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { fetchWithValidatedRedirects } from './fetch-with-validated-redirects';\nimport type { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport { isSameOrigin } from './is-same-origin';\nimport type { ResponseHandler } from './response-handler';\nimport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nimport { withUserAgentSuffix } from './with-user-agent-suffix';\nimport { VERSION } from './version';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => globalThis.fetch;\n\nexport const getFromApi = async <T>({\n url,\n headers = {},\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch(),\n validateUrl,\n credentialedOrigin,\n trustedOrigin,\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n failedResponseHandler: ResponseHandler<Error>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n /**\n * Set `true` when `url` is untrusted (e.g. taken from a provider response\n * body): it is routed through {@link fetchWithValidatedRedirects}, which\n * rejects private/loopback/link-local targets and re-validates redirect\n * hops; blocked URLs throw `DownloadError`. Set `false` only for URLs built\n * from a developer-configured endpoint.\n *\n * Optional for backwards compatibility with existing callers; omitting it\n * behaves like `false` (no validation). Provider code in this repository\n * must always pass it explicitly so every call site makes a visible trust\n * decision — see `contributing/secure-url-handling.md`.\n */\n validateUrl?: boolean;\n /**\n * When set, `headers` are sent only if `url` is same-origin with this origin\n * (the user-agent suffix is always kept). Pass the provider's configured\n * base URL alongside `validateUrl: true` so credentials never ride a request\n * to a response-supplied host on a different origin (e.g. a CDN). Redirects\n * that later cross origin drop all caller headers regardless (see\n * {@link fetchWithValidatedRedirects}).\n */\n credentialedOrigin?: string;\n /**\n * A developer-configured origin (e.g. the provider's `baseURL`) that is\n * exempt from URL validation when `validateUrl` is `true`. A response URL\n * (or redirect hop) that is same-origin with it is fetched without target\n * validation — it points at exactly the host a config-derived\n * `validateUrl: false` request would fetch anyway, so blocking it would\n * only break legitimate self-hosted / localhost deployments whose response\n * URLs point back at the configured host. Hops on any other origin are\n * still validated. Must never be derived from response data.\n */\n trustedOrigin?: string;\n}) => {\n try {\n // Withhold caller headers when the URL is not same-origin with the origin\n // allowed to receive credentials; the user-agent suffix is still applied.\n const outgoingHeaders =\n credentialedOrigin !== undefined && !isSameOrigin(url, credentialedOrigin)\n ? {}\n : headers;\n\n const requestHeaders = withUserAgentSuffix(\n outgoingHeaders,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n );\n\n const response = validateUrl\n ? await fetchWithValidatedRedirects({\n url,\n headers: requestHeaders,\n abortSignal,\n fetch,\n trustedOrigin,\n })\n : await fetch(url, {\n method: 'GET',\n headers: requestHeaders,\n signal: abortSignal,\n });\n\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.ok) {\n let errorInformation: {\n value: Error;\n responseHeaders?: Record<string, string> | undefined;\n };\n\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: {},\n });\n } catch (error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n\n throw new APICallError({\n message: 'Failed to process error response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {},\n });\n }\n\n throw errorInformation.value;\n }\n\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: {},\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n }\n\n throw new APICallError({\n message: 'Failed to process successful response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {},\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: {} });\n }\n};\n","import { APICallError } from '@ai-sdk/provider';\nimport { isAbortError } from './is-abort-error';\n\nconst FETCH_FAILED_ERROR_MESSAGES = ['fetch failed', 'failed to fetch'];\n\nconst BUN_ERROR_CODES = [\n 'ConnectionRefused',\n 'ConnectionClosed',\n 'FailedToOpenSocket',\n 'ECONNRESET',\n 'ECONNREFUSED',\n 'ETIMEDOUT',\n 'EPIPE',\n];\n\nfunction isBunNetworkError(error: unknown): error is Error & { code?: string } {\n if (!(error instanceof Error)) {\n return false;\n }\n\n const code = (error as any).code;\n if (typeof code === 'string' && BUN_ERROR_CODES.includes(code)) {\n return true;\n }\n\n return false;\n}\n\nexport function handleFetchError({\n error,\n url,\n requestBodyValues,\n}: {\n error: unknown;\n url: string;\n requestBodyValues: unknown;\n}) {\n if (isAbortError(error)) {\n return error;\n }\n\n // unwrap original error when fetch failed (for easier debugging):\n if (\n error instanceof TypeError &&\n FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())\n ) {\n const cause = (error as any).cause;\n\n if (cause != null) {\n // Failed to connect to server:\n return new APICallError({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n requestBodyValues,\n isRetryable: true, // retry when network error\n });\n }\n }\n\n if (isBunNetworkError(error)) {\n return new APICallError({\n message: `Cannot connect to API: ${error.message}`,\n cause: error,\n url,\n requestBodyValues,\n isRetryable: true,\n });\n }\n\n return error;\n}\n","export function isAbortError(error: unknown): error is Error {\n return (\n (error instanceof Error || error instanceof DOMException) &&\n (error.name === 'AbortError' ||\n error.name === 'ResponseAborted' || // Next.js\n error.name === 'TimeoutError')\n );\n}\n","export function getRuntimeEnvironmentUserAgent(\n globalThisAny: any = globalThis as any,\n): string {\n // Browsers\n if (globalThisAny.window) {\n return `runtime/browser`;\n }\n\n // Cloudflare Workers / Deno / Bun / Node.js >= 21.1\n if (globalThisAny.navigator?.userAgent) {\n return `runtime/${globalThisAny.navigator.userAgent.toLowerCase()}`;\n }\n\n // Nodes.js < 21.1\n if (globalThisAny.process?.versions?.node) {\n return `runtime/node.js/${globalThisAny.process.version.substring(0)}`;\n }\n\n if (globalThisAny.EdgeRuntime) {\n return `runtime/vercel-edge`;\n }\n\n return 'runtime/unknown';\n}\n","/**\n * Normalizes different header inputs into a plain record with lower-case keys.\n * Entries with `undefined` or `null` values are removed.\n *\n * @param headers - Input headers (`Headers`, tuples array, plain record) to normalize.\n * @returns A record containing the normalized header entries.\n */\nexport function normalizeHeaders(\n headers:\n | HeadersInit\n | Record<string, string | undefined>\n | Array<[string, string | undefined]>\n | undefined,\n): Record<string, string> {\n if (headers == null) {\n return {};\n }\n\n const normalized: Record<string, string> = {};\n\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n normalized[key.toLowerCase()] = value;\n });\n } else {\n if (!Array.isArray(headers)) {\n headers = Object.entries(headers);\n }\n\n for (const [key, value] of headers) {\n if (value != null) {\n normalized[key.toLowerCase()] = value;\n }\n }\n }\n\n return normalized;\n}\n","import { normalizeHeaders } from './normalize-headers';\n\n/**\n * Appends suffix parts to the `user-agent` header.\n * If a `user-agent` header already exists, the suffix parts are appended to it.\n * If no `user-agent` header exists, a new one is created with the suffix parts.\n * Automatically removes undefined entries from the headers.\n *\n * @param headers - The original headers.\n * @param userAgentSuffixParts - The parts to append to the `user-agent` header.\n * @returns The new headers with the `user-agent` header set or updated.\n */\nexport function withUserAgentSuffix(\n headers: HeadersInit | Record<string, string | undefined> | undefined,\n ...userAgentSuffixParts: string[]\n): Record<string, string> {\n const normalizedHeaders = new Headers(normalizeHeaders(headers));\n\n const currentUserAgentHeader = normalizedHeaders.get('user-agent') || '';\n\n normalizedHeaders.set(\n 'user-agent',\n [currentUserAgentHeader, ...userAgentSuffixParts].filter(Boolean).join(' '),\n );\n\n return Object.fromEntries(normalizedHeaders.entries());\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import type {\n JSONSchema7,\n LanguageModelV4Message,\n LanguageModelV4Prompt,\n} from '@ai-sdk/provider';\n\nconst DEFAULT_SCHEMA_PREFIX = 'JSON schema:';\nconst DEFAULT_SCHEMA_SUFFIX =\n 'You MUST answer with a JSON object that matches the JSON schema above.';\nconst DEFAULT_GENERIC_SUFFIX = 'You MUST answer with JSON.';\n\nexport function injectJsonInstruction({\n prompt,\n schema,\n schemaPrefix = schema != null ? DEFAULT_SCHEMA_PREFIX : undefined,\n schemaSuffix = schema != null\n ? DEFAULT_SCHEMA_SUFFIX\n : DEFAULT_GENERIC_SUFFIX,\n}: {\n prompt?: string;\n schema?: JSONSchema7;\n schemaPrefix?: string;\n schemaSuffix?: string;\n}): string {\n return [\n prompt != null && prompt.length > 0 ? prompt : undefined,\n prompt != null && prompt.length > 0 ? '' : undefined, // add a newline if prompt is not null\n schemaPrefix,\n schema != null ? JSON.stringify(schema) : undefined,\n schemaSuffix,\n ]\n .filter(line => line != null)\n .join('\\n');\n}\n\nexport function injectJsonInstructionIntoMessages({\n messages,\n schema,\n schemaPrefix,\n schemaSuffix,\n}: {\n messages: LanguageModelV4Prompt;\n schema?: JSONSchema7;\n schemaPrefix?: string;\n schemaSuffix?: string;\n}): LanguageModelV4Prompt {\n const systemMessage: LanguageModelV4Message =\n messages[0]?.role === 'system'\n ? { ...messages[0] }\n : { role: 'system', content: '' };\n\n systemMessage.content = injectJsonInstruction({\n prompt: systemMessage.content,\n schema,\n schemaPrefix,\n schemaSuffix,\n });\n\n return [\n systemMessage,\n ...(messages[0]?.role === 'system' ? messages.slice(1) : messages),\n ];\n}\n","/**\n * Type-guard for Node.js `Buffer` instances.\n *\n * Uses optional chaining on `globalThis.Buffer` so it returns `false` in\n * runtimes where `Buffer` is not available (e.g. CloudFlare Workers).\n */\nexport function isBuffer(value: unknown): value is Buffer {\n return globalThis.Buffer?.isBuffer(value) ?? false;\n}\n","/**\n * Type guard that checks whether a value is not `null` or `undefined`.\n *\n * @template T - The type of the value to check.\n * @param value - The value to check.\n * @returns `true` if the value is neither `null` nor `undefined`, otherwise `false`.\n */\nexport function isNonNullable<T>(\n value: T | undefined | null,\n): value is NonNullable<T> {\n return value != null;\n}\n","import type { SharedV4ProviderReference } from '@ai-sdk/provider';\nimport { isBuffer } from './is-buffer';\n\n/**\n * Checks whether a value is a provider reference (a mapping of provider names\n * to provider-specific identifiers) as opposed to raw bytes, a URL, or a\n * tagged `{ type: ... }` object.\n */\nexport function isProviderReference(\n data: unknown,\n): data is SharedV4ProviderReference {\n return (\n typeof data === 'object' &&\n data !== null &&\n !(data instanceof Uint8Array) &&\n !(data instanceof URL) &&\n !(data instanceof ArrayBuffer) &&\n !isBuffer(data) &&\n !('type' in data)\n );\n}\n","/**\n * Checks if the given URL is supported natively by the model.\n *\n * @param mediaType - The media type of the URL. Case-sensitive. May be a full\n * `type/subtype`, a wildcard `type/*`, or just the\n * top-level segment (e.g. `image`).\n * @param url - The URL to check.\n * @param supportedUrls - A record where keys are case-sensitive media types (or '*')\n * and values are arrays of RegExp patterns for URLs.\n *\n * @returns `true` if the URL matches a pattern under the specific media type\n * or the wildcard '*', `false` otherwise.\n */\nexport function isUrlSupported({\n mediaType,\n url,\n supportedUrls,\n}: {\n mediaType: string;\n url: string;\n supportedUrls: Record<string, RegExp[]>;\n}): boolean {\n // standardize media type and url to lower case\n url = url.toLowerCase();\n mediaType = mediaType.toLowerCase();\n\n const isTopLevelOnly = !mediaType.includes('/');\n\n return (\n Object.entries(supportedUrls)\n // standardize supported url map into lowercase prefixes:\n .map(([key, value]) => {\n const mediaType = key.toLowerCase();\n return mediaType === '*' || mediaType === '*/*'\n ? { mediaTypePrefix: '', regexes: value }\n : { mediaTypePrefix: mediaType.replace(/\\*/, ''), regexes: value };\n })\n // gather all regexp pattern from matched media type prefixes:\n .filter(({ mediaTypePrefix }) => {\n if (mediaTypePrefix === '') {\n return true;\n }\n // For a top-level-only media type (e.g. `image`), we cannot determine\n // whether a specific subtype (e.g. `image/png`) would apply, so we\n // only match the corresponding `type/*` prefix exactly.\n if (isTopLevelOnly) {\n return `${mediaType}/` === mediaTypePrefix;\n }\n return mediaType.startsWith(mediaTypePrefix);\n })\n .flatMap(({ regexes }) => regexes)\n // check if any pattern matches the url:\n .some(pattern => pattern.test(url))\n );\n}\n","import { LoadAPIKeyError } from '@ai-sdk/provider';\n\nexport function loadApiKey({\n apiKey,\n environmentVariableName,\n apiKeyParameterName = 'apiKey',\n description,\n}: {\n apiKey: string | undefined;\n environmentVariableName: string;\n apiKeyParameterName?: string;\n description: string;\n}): string {\n if (typeof apiKey === 'string') {\n return apiKey;\n }\n\n if (apiKey != null) {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string.`,\n });\n }\n\n if (typeof process === 'undefined') {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables are not supported in this environment.`,\n });\n }\n\n apiKey = process.env[environmentVariableName];\n\n if (apiKey == null) {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`,\n });\n }\n\n if (typeof apiKey !== 'string') {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string. The value of the ${environmentVariableName} environment variable is not a string.`,\n });\n }\n\n return apiKey;\n}\n","/**\n * Loads an optional `string` setting from the environment or a parameter.\n *\n * @param settingValue - The setting value.\n * @param environmentVariableName - The environment variable name.\n * @returns The setting value.\n */\nexport function loadOptionalSetting({\n settingValue,\n environmentVariableName,\n}: {\n settingValue: string | undefined;\n environmentVariableName: string;\n}): string | undefined {\n if (typeof settingValue === 'string') {\n return settingValue;\n }\n\n if (settingValue != null || typeof process === 'undefined') {\n return undefined;\n }\n\n settingValue = process.env[environmentVariableName];\n\n if (settingValue == null || typeof settingValue !== 'string') {\n return undefined;\n }\n\n return settingValue;\n}\n","import { LoadSettingError } from '@ai-sdk/provider';\n\n/**\n * Loads a `string` setting from the environment or a parameter.\n *\n * @param settingValue - The setting value.\n * @param environmentVariableName - The environment variable name.\n * @param settingName - The setting name.\n * @param description - The description of the setting.\n * @returns The setting value.\n */\nexport function loadSetting({\n settingValue,\n environmentVariableName,\n settingName,\n description,\n}: {\n settingValue: string | undefined;\n environmentVariableName: string;\n settingName: string;\n description: string;\n}): string {\n if (typeof settingValue === 'string') {\n return settingValue;\n }\n\n if (settingValue != null) {\n throw new LoadSettingError({\n message: `${description} setting must be a string.`,\n });\n }\n\n if (typeof process === 'undefined') {\n throw new LoadSettingError({\n message:\n `${description} setting is missing. ` +\n `Pass it using the '${settingName}' parameter. ` +\n `Environment variables are not supported in this environment.`,\n });\n }\n\n settingValue = process.env[environmentVariableName];\n\n if (settingValue == null) {\n throw new LoadSettingError({\n message:\n `${description} setting is missing. ` +\n `Pass it using the '${settingName}' parameter ` +\n `or the ${environmentVariableName} environment variable.`,\n });\n }\n\n if (typeof settingValue !== 'string') {\n throw new LoadSettingError({\n message:\n `${description} setting must be a string. ` +\n `The value of the ${environmentVariableName} environment variable is not a string.`,\n });\n }\n\n return settingValue;\n}\n","import type {\n LanguageModelV4CallOptions,\n SharedV4Warning,\n} from '@ai-sdk/provider';\n\nexport type ReasoningLevel = Exclude<\n LanguageModelV4CallOptions['reasoning'],\n 'none' | 'provider-default' | undefined\n>;\n\nexport function isCustomReasoning(\n reasoning: LanguageModelV4CallOptions['reasoning'],\n): reasoning is Exclude<\n LanguageModelV4CallOptions['reasoning'],\n 'provider-default' | undefined\n> {\n return reasoning !== undefined && reasoning !== 'provider-default';\n}\n\n/**\n * Maps a top-level reasoning level to a provider-specific effort string using\n * the given effort map. Pushes a compatibility warning if the reasoning level\n * maps to a different string, or an unsupported warning if the level is not\n * present in the map.\n *\n * @returns The mapped effort string, or `undefined` if the level is not\n * supported.\n */\nexport function mapReasoningToProviderEffort<T extends string>({\n reasoning,\n effortMap,\n warnings,\n}: {\n reasoning: ReasoningLevel;\n effortMap: Partial<Record<ReasoningLevel, T>>;\n warnings: SharedV4Warning[];\n}): T | undefined {\n const mapped = effortMap[reasoning];\n\n if (mapped == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: `reasoning \"${reasoning}\" is not supported by this model.`,\n });\n return undefined;\n }\n\n if (mapped !== reasoning) {\n warnings.push({\n type: 'compatibility',\n feature: 'reasoning',\n details: `reasoning \"${reasoning}\" is not directly supported by this model. mapped to effort \"${mapped}\".`,\n });\n }\n\n return mapped;\n}\n\nconst DEFAULT_REASONING_BUDGET_PERCENTAGES: Record<ReasoningLevel, number> = {\n minimal: 0.02,\n low: 0.1,\n medium: 0.3,\n high: 0.6,\n xhigh: 0.9,\n};\n\n/**\n * Maps a top-level reasoning level to an absolute token budget by multiplying\n * the model's max output tokens by a percentage from the budget percentages\n * map. The result is clamped between `minReasoningBudget` (default 1024) and\n * `maxReasoningBudget`. Pushes an unsupported warning if the level is not\n * present in the budget percentages map.\n *\n * @returns The computed token budget, or `undefined` if the level is not\n * supported.\n */\nexport function mapReasoningToProviderBudget({\n reasoning,\n maxOutputTokens,\n maxReasoningBudget,\n minReasoningBudget = 1024,\n budgetPercentages = DEFAULT_REASONING_BUDGET_PERCENTAGES,\n warnings,\n}: {\n reasoning: ReasoningLevel;\n maxOutputTokens: number;\n maxReasoningBudget: number;\n minReasoningBudget?: number;\n budgetPercentages?: Partial<Record<ReasoningLevel, number>>;\n warnings: SharedV4Warning[];\n}): number | undefined {\n const pct = budgetPercentages[reasoning];\n\n if (pct == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: `reasoning \"${reasoning}\" is not supported by this model.`,\n });\n return undefined;\n }\n\n return Math.min(\n maxReasoningBudget,\n Math.max(minReasoningBudget, Math.round(maxOutputTokens * pct)),\n );\n}\n","/**\n * Maps a media type to its corresponding file extension.\n * It was originally introduced to set a filename for audio file uploads\n * in https://github.com/vercel/ai/pull/8159.\n *\n * @param mediaType The media type to map.\n * @returns The corresponding file extension\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types/Common_types\n */\nexport function mediaTypeToExtension(mediaType: string) {\n const [_type, subtype = ''] = mediaType.toLowerCase().split('/');\n\n return (\n {\n mpeg: 'mp3',\n 'x-wav': 'wav',\n opus: 'ogg',\n mp4: 'm4a',\n 'x-m4a': 'm4a',\n }[subtype] ?? subtype\n );\n}\n","import {\n JSONParseError,\n TypeValidationError,\n type JSONValue,\n} from '@ai-sdk/provider';\nimport { secureJsonParse } from './secure-json-parse';\nimport { safeValidateTypes, validateTypes } from './validate-types';\nimport type { FlexibleSchema } from './schema';\n\n/**\n * Parses a JSON string into an unknown object.\n *\n * @param text - The JSON string to parse.\n * @returns {JSONValue} - The parsed JSON object.\n */\nexport async function parseJSON(options: {\n text: string;\n schema?: undefined;\n}): Promise<JSONValue>;\n/**\n * Parses a JSON string into a strongly-typed object using the provided schema.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns {Promise<T>} - The parsed object.\n */\nexport async function parseJSON<T>(options: {\n text: string;\n schema: FlexibleSchema<T>;\n}): Promise<T>;\nexport async function parseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: FlexibleSchema<T>;\n}): Promise<T> {\n try {\n const value = secureJsonParse(text);\n\n if (schema == null) {\n return value;\n }\n\n return await validateTypes<T>({ value, schema });\n } catch (error) {\n if (\n JSONParseError.isInstance(error) ||\n TypeValidationError.isInstance(error)\n ) {\n throw error;\n }\n\n throw new JSONParseError({ text, cause: error });\n }\n}\n\nexport type ParseResult<T> =\n | { success: true; value: T; rawValue: unknown }\n | {\n success: false;\n error: JSONParseError | TypeValidationError;\n rawValue: unknown;\n };\n\n/**\n * Safely parses a JSON string and returns the result as an object of type `unknown`.\n *\n * @param text - The JSON string to parse.\n * @returns {Promise<object>} Either an object with `success: true` and the parsed data, or an object with `success: false` and the error that occurred.\n */\nexport async function safeParseJSON(options: {\n text: string;\n schema?: undefined;\n}): Promise<ParseResult<JSONValue>>;\n/**\n * Safely parses a JSON string into a strongly-typed object, using a provided schema to validate the object.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport async function safeParseJSON<T>(options: {\n text: string;\n schema: FlexibleSchema<T>;\n}): Promise<ParseResult<T>>;\nexport async function safeParseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: FlexibleSchema<T>;\n}): Promise<ParseResult<T>> {\n try {\n const value = secureJsonParse(text);\n\n if (schema == null) {\n return { success: true, value: value as T, rawValue: value };\n }\n\n return await safeValidateTypes<T>({ value, schema });\n } catch (error) {\n return {\n success: false,\n error: JSONParseError.isInstance(error)\n ? error\n : new JSONParseError({ text, cause: error }),\n rawValue: undefined,\n };\n }\n}\n\nexport function isParsableJson(input: string): boolean {\n try {\n secureJsonParse(input);\n return true;\n } catch {\n return false;\n }\n}\n","// Licensed under BSD-3-Clause (this file only)\n// Code adapted from https://github.com/fastify/secure-json-parse/blob/783fcb1b5434709466759847cec974381939673a/index.js\n//\n// Copyright (c) Vercel, Inc. (https://vercel.com)\n// Copyright (c) 2019 The Fastify Team\n// Copyright (c) 2019, Sideway Inc, and project contributors\n// All rights reserved.\n//\n// The complete list of contributors can be found at:\n// - https://github.com/hapijs/bourne/graphs/contributors\n// - https://github.com/fastify/secure-json-parse/graphs/contributors\n// - https://github.com/vercel/ai/commits/main/packages/provider-utils/src/secure-parse-json.ts\n//\n// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n//\n// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nconst suspectProtoRx =\n /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/;\nconst suspectConstructorRx =\n /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/;\n\nfunction _parse(text: string) {\n // Parse normally\n const obj = JSON.parse(text);\n\n // Ignore null and non-objects\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (\n suspectProtoRx.test(text) === false &&\n suspectConstructorRx.test(text) === false\n ) {\n return obj;\n }\n\n // Scan result for proto keys\n return filter(obj);\n}\n\nfunction filter(obj: any) {\n let next = [obj];\n\n while (next.length) {\n const nodes = next;\n next = [];\n\n for (const node of nodes) {\n if (Object.prototype.hasOwnProperty.call(node, '__proto__')) {\n throw new SyntaxError('Object contains forbidden prototype property');\n }\n\n if (\n Object.prototype.hasOwnProperty.call(node, 'constructor') &&\n node.constructor !== null &&\n typeof node.constructor === 'object' &&\n Object.prototype.hasOwnProperty.call(node.constructor, 'prototype')\n ) {\n throw new SyntaxError('Object contains forbidden prototype property');\n }\n\n for (const key in node) {\n const value = node[key];\n if (value && typeof value === 'object') {\n next.push(value);\n }\n }\n }\n }\n return obj;\n}\n\nexport function secureJsonParse(text: string) {\n const { stackTraceLimit } = Error;\n try {\n // Performance optimization, see https://github.com/fastify/secure-json-parse/pull/90\n Error.stackTraceLimit = 0;\n } catch {\n // Fallback in case Error is immutable (v8 readonly)\n return _parse(text);\n }\n\n try {\n return _parse(text);\n } finally {\n Error.stackTraceLimit = stackTraceLimit;\n }\n}\n","import {\n TypeValidationError,\n type TypeValidationContext,\n} from '@ai-sdk/provider';\nimport { asSchema, type FlexibleSchema } from './schema';\n/**\n * Validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @param {TypeValidationContext} options.context - Optional context about what is being validated.\n * @returns {Promise<T>} - The typed object.\n */\nexport async function validateTypes<OBJECT>({\n value,\n schema,\n context,\n}: {\n value: unknown;\n schema: FlexibleSchema<OBJECT>;\n context?: TypeValidationContext;\n}): Promise<OBJECT> {\n const result = await safeValidateTypes({ value, schema, context });\n\n if (!result.success) {\n throw TypeValidationError.wrap({ value, cause: result.error, context });\n }\n\n return result.value;\n}\n\n/**\n * Safely validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The JSON object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @param {TypeValidationContext} options.context - Optional context about what is being validated.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport async function safeValidateTypes<OBJECT>({\n value,\n schema,\n context,\n}: {\n value: unknown;\n schema: FlexibleSchema<OBJECT>;\n context?: TypeValidationContext;\n}): Promise<\n | {\n success: true;\n value: OBJECT;\n rawValue: unknown;\n }\n | {\n success: false;\n error: TypeValidationError;\n rawValue: unknown;\n }\n> {\n const actualSchema = asSchema(schema);\n\n try {\n if (actualSchema.validate == null) {\n return { success: true, value: value as OBJECT, rawValue: value };\n }\n\n const result = await actualSchema.validate(value);\n\n if (result.success) {\n return { success: true, value: result.value, rawValue: value };\n }\n\n return {\n success: false,\n error: TypeValidationError.wrap({ value, cause: result.error, context }),\n rawValue: value,\n };\n } catch (error) {\n return {\n success: false,\n error: TypeValidationError.wrap({ value, cause: error, context }),\n rawValue: value,\n };\n }\n}\n","import { TypeValidationError, type JSONSchema7 } from '@ai-sdk/provider';\nimport type {\n StandardSchemaV1,\n StandardJSONSchemaV1,\n} from '@standard-schema/spec';\nimport type * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4';\nimport { addAdditionalPropertiesToJsonSchema } from './add-additional-properties-to-json-schema';\nimport { zod3ToJsonSchema } from './to-json-schema/zod3-to-json-schema';\n\n/**\n * Used to mark schemas so we can support both Zod and custom schemas.\n */\nconst schemaSymbol = Symbol.for('vercel.ai.schema');\n\nexport type ValidationResult<OBJECT> =\n | { success: true; value: OBJECT }\n | { success: false; error: Error };\n\nexport type Schema<OBJECT = unknown> = {\n /**\n * Used to mark schemas so we can support both Zod and custom schemas.\n */\n [schemaSymbol]: true;\n\n /**\n * Schema type for inference.\n */\n _type: OBJECT;\n\n /**\n * Optional. Validates that the structure of a value matches this schema,\n * and returns a typed version of the value if it does.\n */\n readonly validate?: (\n value: unknown,\n ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>;\n\n /**\n * The JSON Schema for the schema. It is passed to the providers.\n */\n readonly jsonSchema: JSONSchema7 | PromiseLike<JSONSchema7>;\n};\n\n/**\n * Creates a schema with deferred creation.\n * This is important to reduce the startup time of the library\n * and to avoid initializing unused validators.\n *\n * @param createValidator A function that creates a schema.\n * @returns A function that returns a schema.\n */\nexport function lazySchema<SCHEMA>(\n createSchema: () => Schema<SCHEMA>,\n): LazySchema<SCHEMA> {\n // cache the validator to avoid initializing it multiple times\n let schema: Schema<SCHEMA> | undefined;\n return () => {\n if (schema == null) {\n schema = createSchema();\n }\n return schema;\n };\n}\n\nexport type LazySchema<SCHEMA> = () => Schema<SCHEMA>;\n\nexport type ZodSchema<SCHEMA = any> =\n | z3.Schema<SCHEMA, z3.ZodTypeDef, any>\n | z4.core.$ZodType<SCHEMA, any>;\n\nexport type StandardSchema<SCHEMA = any> = StandardSchemaV1<unknown, SCHEMA> & {\n readonly '~standard': StandardSchemaV1.Props<unknown, SCHEMA> & {\n readonly jsonSchema?: StandardJSONSchemaV1.Converter;\n };\n};\n\ntype StandardSchemaWithJsonSchema<SCHEMA = any> = StandardSchema<SCHEMA> &\n StandardJSONSchemaV1<unknown, SCHEMA>;\n\nexport type FlexibleSchema<SCHEMA = any> =\n | Schema<SCHEMA>\n | LazySchema<SCHEMA>\n | ZodSchema<SCHEMA>\n | StandardSchema<SCHEMA>;\n\nexport type InferSchema<SCHEMA> =\n SCHEMA extends ZodSchema<infer T>\n ? T\n : SCHEMA extends StandardSchema<infer T>\n ? T\n : SCHEMA extends LazySchema<infer T>\n ? T\n : SCHEMA extends Schema<infer T>\n ? T\n : never;\n\n/**\n * Create a schema using a JSON Schema.\n *\n * @param jsonSchema The JSON Schema for the schema.\n * @param options.validate Optional. A validation function for the schema.\n */\nexport function jsonSchema<OBJECT = unknown>(\n jsonSchema:\n | JSONSchema7\n | PromiseLike<JSONSchema7>\n | (() => JSONSchema7 | PromiseLike<JSONSchema7>),\n {\n validate,\n }: {\n validate?: (\n value: unknown,\n ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>;\n } = {},\n): Schema<OBJECT> {\n return {\n [schemaSymbol]: true,\n _type: undefined as OBJECT, // should never be used directly\n get jsonSchema() {\n if (typeof jsonSchema === 'function') {\n jsonSchema = jsonSchema(); // cache the function results\n }\n return jsonSchema;\n },\n validate,\n };\n}\n\nfunction isSchema(value: unknown): value is Schema {\n return (\n typeof value === 'object' &&\n value !== null &&\n schemaSymbol in value &&\n value[schemaSymbol] === true &&\n 'jsonSchema' in value &&\n 'validate' in value\n );\n}\n\nexport function asSchema<OBJECT>(\n schema: FlexibleSchema<OBJECT> | undefined,\n): Schema<OBJECT> {\n return schema == null\n ? jsonSchema({\n type: 'object',\n properties: {},\n additionalProperties: false,\n })\n : isSchema(schema)\n ? schema\n : '~standard' in schema\n ? schema['~standard'].vendor === 'zod'\n ? zodSchema(schema as ZodSchema<OBJECT>)\n : standardSchema(schema as StandardSchema<OBJECT>)\n : schema();\n}\n\nfunction standardSchema<OBJECT>(\n standardSchema: StandardSchema<OBJECT>,\n): Schema<OBJECT> {\n return jsonSchema(\n () => {\n if (!hasStandardJsonSchema(standardSchema)) {\n throw new Error(\n `Standard schema vendor '${standardSchema['~standard'].vendor}' does not support JSON Schema conversion.`,\n );\n }\n\n return addAdditionalPropertiesToJsonSchema(\n standardSchema['~standard'].jsonSchema.input({\n target: 'draft-07',\n }) as JSONSchema7,\n );\n },\n {\n validate: async value => {\n const result = await standardSchema['~standard'].validate(value);\n return 'value' in result\n ? { success: true, value: result.value }\n : {\n success: false,\n error: new TypeValidationError({\n value,\n cause: result.issues,\n }),\n };\n },\n },\n );\n}\n\nfunction hasStandardJsonSchema<OBJECT>(\n schema: StandardSchema<OBJECT>,\n): schema is StandardSchemaWithJsonSchema<OBJECT> {\n return schema['~standard'].jsonSchema != null;\n}\n\nexport function zod3Schema<OBJECT>(\n zodSchema: z3.Schema<OBJECT, z3.ZodTypeDef, any>,\n options?: {\n /**\n * Enables support for references in the schema.\n * This is required for recursive schemas, e.g. with `z.lazy`.\n * However, not all language models and providers support such references.\n * Defaults to `false`.\n */\n useReferences?: boolean;\n },\n): Schema<OBJECT> {\n // default to no references (to support openapi conversion for google)\n const useReferences = options?.useReferences ?? false;\n\n return jsonSchema(\n // defer json schema creation to avoid unnecessary computation when only validation is needed\n () =>\n zod3ToJsonSchema(zodSchema, {\n $refStrategy: useReferences ? 'root' : 'none',\n }) as JSONSchema7,\n {\n validate: async value => {\n const result = await zodSchema.safeParseAsync(value);\n return result.success\n ? { success: true, value: result.data }\n : { success: false, error: result.error };\n },\n },\n );\n}\n\nexport function zod4Schema<OBJECT>(\n zodSchema: z4.core.$ZodType<OBJECT, any>,\n options?: {\n /**\n * Enables support for references in the schema.\n * This is required for recursive schemas, e.g. with `z.lazy`.\n * However, not all language models and providers support such references.\n * Defaults to `false`.\n */\n useReferences?: boolean;\n },\n): Schema<OBJECT> {\n // default to no references (to support openapi conversion for google)\n const useReferences = options?.useReferences ?? false;\n\n return jsonSchema(\n // defer json schema creation to avoid unnecessary computation when only validation is needed\n () =>\n addAdditionalPropertiesToJsonSchema(\n z4.toJSONSchema(zodSchema, {\n target: 'draft-7',\n io: 'input',\n reused: useReferences ? 'ref' : 'inline',\n }) as JSONSchema7,\n ),\n {\n validate: async value => {\n const result = await z4.safeParseAsync(zodSchema, value);\n return result.success\n ? { success: true, value: result.data }\n : { success: false, error: result.error };\n },\n },\n );\n}\n\nexport function isZod4Schema(\n zodSchema: z4.core.$ZodType<any, any> | z3.Schema<any, z3.ZodTypeDef, any>,\n): zodSchema is z4.core.$ZodType<any, any> {\n // https://zod.dev/library-authors?id=how-to-support-zod-3-and-zod-4-simultaneously\n return '_zod' in zodSchema;\n}\n\nexport function zodSchema<OBJECT>(\n zodSchema:\n | z4.core.$ZodType<OBJECT, any>\n | z3.Schema<OBJECT, z3.ZodTypeDef, any>,\n options?: {\n /**\n * Enables support for references in the schema.\n * This is required for recursive schemas, e.g. with `z.lazy`.\n * However, not all language models and providers support such references.\n * Defaults to `false`.\n */\n useReferences?: boolean;\n },\n): Schema<OBJECT> {\n if (isZod4Schema(zodSchema)) {\n return zod4Schema(zodSchema, options);\n } else {\n return zod3Schema(zodSchema, options);\n }\n}\n","import type { JSONSchema7, JSONSchema7Definition } from '@ai-sdk/provider';\n\n/**\n * Recursively adds additionalProperties: false to the JSON schema. This is necessary because some providers (e.g. OpenAI) do not support additionalProperties: true.\n */\nexport function addAdditionalPropertiesToJsonSchema(\n jsonSchema: JSONSchema7,\n): JSONSchema7 {\n if (\n jsonSchema.type === 'object' ||\n (Array.isArray(jsonSchema.type) && jsonSchema.type.includes('object'))\n ) {\n jsonSchema.additionalProperties = false;\n const { properties } = jsonSchema;\n if (properties != null) {\n for (const key of Object.keys(properties)) {\n properties[key] = visit(properties[key]);\n }\n }\n }\n\n if (jsonSchema.items != null) {\n jsonSchema.items = Array.isArray(jsonSchema.items)\n ? jsonSchema.items.map(visit)\n : visit(jsonSchema.items);\n }\n\n if (jsonSchema.anyOf != null) {\n jsonSchema.anyOf = jsonSchema.anyOf.map(visit);\n }\n\n if (jsonSchema.allOf != null) {\n jsonSchema.allOf = jsonSchema.allOf.map(visit);\n }\n\n if (jsonSchema.oneOf != null) {\n jsonSchema.oneOf = jsonSchema.oneOf.map(visit);\n }\n\n const { definitions } = jsonSchema;\n if (definitions != null) {\n for (const key of Object.keys(definitions)) {\n definitions[key] = visit(definitions[key]);\n }\n }\n\n return jsonSchema;\n}\n\nfunction visit(def: JSONSchema7Definition): JSONSchema7Definition {\n if (typeof def === 'boolean') return def;\n return addAdditionalPropertiesToJsonSchema(def);\n}\n","import type { ZodSchema, ZodTypeDef } from 'zod/v3';\nimport type { Refs, Seen } from './refs';\nimport type { JsonSchema7Type } from './parse-types';\n\nexport type DateStrategy =\n | 'format:date-time'\n | 'format:date'\n | 'string'\n | 'integer';\n\nexport const ignoreOverride = Symbol(\n 'Let zodToJsonSchema decide on which parser to use',\n);\n\nexport type OverrideCallback = (\n def: ZodTypeDef,\n refs: Refs,\n seen: Seen | undefined,\n forceResolution?: boolean,\n) => JsonSchema7Type | undefined | typeof ignoreOverride;\n\nexport type PostProcessCallback = (\n jsonSchema: JsonSchema7Type | undefined,\n def: ZodTypeDef,\n refs: Refs,\n) => JsonSchema7Type | undefined;\n\nexport const jsonDescription: PostProcessCallback = (jsonSchema, def) => {\n if (def.description) {\n try {\n return {\n ...jsonSchema,\n ...JSON.parse(def.description),\n };\n } catch {}\n }\n\n return jsonSchema;\n};\n\nexport type Options = {\n name: string | undefined;\n $refStrategy: 'root' | 'relative' | 'none' | 'seen';\n basePath: string[];\n effectStrategy: 'input' | 'any';\n pipeStrategy: 'input' | 'output' | 'all';\n dateStrategy: DateStrategy | DateStrategy[];\n mapStrategy: 'entries' | 'record';\n removeAdditionalStrategy: 'passthrough' | 'strict';\n allowedAdditionalProperties: true | undefined;\n rejectedAdditionalProperties: false | undefined;\n strictUnions: boolean;\n definitionPath: string;\n definitions: Record<string, ZodSchema>;\n errorMessages: boolean;\n patternStrategy: 'escape' | 'preserve';\n applyRegexFlags: boolean;\n emailStrategy: 'format:email' | 'format:idn-email' | 'pattern:zod';\n base64Strategy: 'format:binary' | 'contentEncoding:base64' | 'pattern:zod';\n nameStrategy: 'ref' | 'title';\n override?: OverrideCallback;\n postProcess?: PostProcessCallback;\n};\n\nexport const defaultOptions: Options = {\n name: undefined,\n $refStrategy: 'root',\n basePath: ['#'],\n effectStrategy: 'input',\n pipeStrategy: 'all',\n dateStrategy: 'format:date-time',\n mapStrategy: 'entries',\n removeAdditionalStrategy: 'passthrough',\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: 'definitions',\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n patternStrategy: 'escape',\n applyRegexFlags: false,\n emailStrategy: 'format:email',\n base64Strategy: 'contentEncoding:base64',\n nameStrategy: 'ref',\n};\n\nexport const getDefaultOptions = (\n options: Partial<Options> | string | undefined,\n) =>\n (typeof options === 'string'\n ? {\n ...defaultOptions,\n name: options,\n }\n : {\n ...defaultOptions,\n ...options,\n }) as Options;\n","import { ZodFirstPartyTypeKind } from 'zod/v3';\nimport { parseAnyDef } from './parsers/any';\nimport { parseArrayDef } from './parsers/array';\nimport { parseBigintDef } from './parsers/bigint';\nimport { parseBooleanDef } from './parsers/boolean';\nimport { parseBrandedDef } from './parsers/branded';\nimport { parseCatchDef } from './parsers/catch';\nimport { parseDateDef } from './parsers/date';\nimport { parseDefaultDef } from './parsers/default';\nimport { parseEffectsDef } from './parsers/effects';\nimport { parseEnumDef } from './parsers/enum';\nimport { parseIntersectionDef } from './parsers/intersection';\nimport { parseLiteralDef } from './parsers/literal';\nimport { parseMapDef } from './parsers/map';\nimport { parseNativeEnumDef } from './parsers/native-enum';\nimport { parseNeverDef } from './parsers/never';\nimport { parseNullDef } from './parsers/null';\nimport { parseNullableDef } from './parsers/nullable';\nimport { parseNumberDef } from './parsers/number';\nimport { parseObjectDef } from './parsers/object';\nimport { parseOptionalDef } from './parsers/optional';\nimport { parsePipelineDef } from './parsers/pipeline';\nimport { parsePromiseDef } from './parsers/promise';\nimport { parseRecordDef } from './parsers/record';\nimport { parseSetDef } from './parsers/set';\nimport { parseStringDef } from './parsers/string';\nimport { parseTupleDef } from './parsers/tuple';\nimport { parseUndefinedDef } from './parsers/undefined';\nimport { parseUnionDef } from './parsers/union';\nimport { parseUnknownDef } from './parsers/unknown';\nimport type { Refs } from './refs';\nimport { parseReadonlyDef } from './parsers/readonly';\nimport type { JsonSchema7Type } from './parse-types';\n\nexport type InnerDefGetter = () => any;\n\nexport const selectParser = (\n def: any,\n typeName: ZodFirstPartyTypeKind,\n refs: Refs,\n): JsonSchema7Type | undefined | InnerDefGetter => {\n switch (typeName) {\n case ZodFirstPartyTypeKind.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNumber:\n return parseNumberDef(def);\n case ZodFirstPartyTypeKind.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBigInt:\n return parseBigintDef(def);\n case ZodFirstPartyTypeKind.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUndefined:\n return parseUndefinedDef();\n case ZodFirstPartyTypeKind.ZodNull:\n return parseNullDef();\n case ZodFirstPartyTypeKind.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUnion:\n case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLiteral:\n return parseLiteralDef(def);\n case ZodFirstPartyTypeKind.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLazy:\n return () => (def as any).getter()._def;\n case ZodFirstPartyTypeKind.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNaN:\n case ZodFirstPartyTypeKind.ZodNever:\n return parseNeverDef();\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef();\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef();\n case ZodFirstPartyTypeKind.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind.ZodFunction:\n case ZodFirstPartyTypeKind.ZodVoid:\n case ZodFirstPartyTypeKind.ZodSymbol:\n return undefined;\n default:\n /* c8 ignore next */\n return ((_: never) => undefined)(typeName);\n }\n};\n","export type JsonSchema7AnyType = { $ref?: string };\n\nexport function parseAnyDef(): JsonSchema7AnyType {\n return {};\n}\n","import { ZodFirstPartyTypeKind, type ZodArrayDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport type JsonSchema7ArrayType = {\n type: 'array';\n items?: JsonSchema7Type;\n minItems?: number;\n maxItems?: number;\n};\n\nexport function parseArrayDef(def: ZodArrayDef, refs: Refs) {\n const res: JsonSchema7ArrayType = {\n type: 'array',\n };\n if (\n def.type?._def &&\n def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny\n ) {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items'],\n });\n }\n\n if (def.minLength) {\n res.minItems = def.minLength.value;\n }\n if (def.maxLength) {\n res.maxItems = def.maxLength.value;\n }\n if (def.exactLength) {\n res.minItems = def.exactLength.value;\n res.maxItems = def.exactLength.value;\n }\n return res;\n}\n","import type { ZodBigIntDef } from 'zod/v3';\n\nexport type JsonSchema7BigintType = {\n type: 'integer';\n format: 'int64';\n minimum?: BigInt;\n exclusiveMinimum?: BigInt;\n maximum?: BigInt;\n exclusiveMaximum?: BigInt;\n multipleOf?: BigInt;\n};\n\nexport function parseBigintDef(def: ZodBigIntDef): JsonSchema7BigintType {\n const res: JsonSchema7BigintType = {\n type: 'integer',\n format: 'int64',\n };\n\n if (!def.checks) return res;\n\n for (const check of def.checks) {\n switch (check.kind) {\n case 'min':\n if (check.inclusive) {\n res.minimum = check.value;\n } else {\n res.exclusiveMinimum = check.value;\n }\n break;\n case 'max':\n if (check.inclusive) {\n res.maximum = check.value;\n } else {\n res.exclusiveMaximum = check.value;\n }\n\n break;\n case 'multipleOf':\n res.multipleOf = check.value;\n break;\n }\n }\n return res;\n}\n","export type JsonSchema7BooleanType = {\n type: 'boolean';\n};\n\nexport function parseBooleanDef(): JsonSchema7BooleanType {\n return { type: 'boolean' };\n}\n","import type { ZodBrandedDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { Refs } from '../refs';\n\nexport function parseBrandedDef(_def: ZodBrandedDef<any>, refs: Refs) {\n return parseDef(_def.type._def, refs);\n}\n","import type { ZodCatchDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { Refs } from '../refs';\n\nexport const parseCatchDef = (def: ZodCatchDef<any>, refs: Refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import type { ZodDateDef } from 'zod/v3';\nimport type { Refs } from '../refs';\nimport type { DateStrategy } from '../options';\n\nexport type JsonSchema7DateType =\n | {\n type: 'integer' | 'string';\n format: 'unix-time' | 'date-time' | 'date';\n minimum?: number;\n maximum?: number;\n }\n | {\n anyOf: JsonSchema7DateType[];\n };\n\nexport function parseDateDef(\n def: ZodDateDef,\n refs: Refs,\n overrideDateStrategy?: DateStrategy,\n): JsonSchema7DateType {\n const strategy = overrideDateStrategy ?? refs.dateStrategy;\n\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map(item => parseDateDef(def, refs, item)),\n };\n }\n\n switch (strategy) {\n case 'string':\n case 'format:date-time':\n return {\n type: 'string',\n format: 'date-time',\n };\n case 'format:date':\n return {\n type: 'string',\n format: 'date',\n };\n case 'integer':\n return integerDateParser(def);\n }\n}\n\nconst integerDateParser = (def: ZodDateDef) => {\n const res: JsonSchema7DateType = {\n type: 'integer',\n format: 'unix-time',\n };\n\n for (const check of def.checks) {\n switch (check.kind) {\n case 'min':\n res.minimum = check.value;\n break;\n case 'max':\n res.maximum = check.value;\n break;\n }\n }\n\n return res;\n};\n","import type { ZodDefaultDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport function parseDefaultDef(\n _def: ZodDefaultDef,\n refs: Refs,\n): JsonSchema7Type & { default: any } {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue(),\n };\n}\n","import type { ZodEffectsDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseAnyDef } from './any';\n\nexport function parseEffectsDef(\n _def: ZodEffectsDef,\n refs: Refs,\n): JsonSchema7Type | undefined {\n return refs.effectStrategy === 'input'\n ? parseDef(_def.schema._def, refs)\n : parseAnyDef();\n}\n","import type { ZodEnumDef } from 'zod/v3';\n\nexport type JsonSchema7EnumType = {\n type: 'string';\n enum: string[];\n};\n\nexport function parseEnumDef(def: ZodEnumDef): JsonSchema7EnumType {\n return {\n type: 'string',\n enum: Array.from(def.values),\n };\n}\n","import type { ZodIntersectionDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { JsonSchema7StringType } from './string';\n\nexport type JsonSchema7AllOfType = {\n allOf: JsonSchema7Type[];\n unevaluatedProperties?: boolean;\n};\n\nconst isJsonSchema7AllOfType = (\n type: JsonSchema7Type | JsonSchema7StringType,\n): type is JsonSchema7AllOfType => {\n if ('type' in type && type.type === 'string') return false;\n return 'allOf' in type;\n};\n\nexport function parseIntersectionDef(\n def: ZodIntersectionDef,\n refs: Refs,\n): JsonSchema7AllOfType | JsonSchema7Type | undefined {\n const allOf = [\n parseDef(def.left._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', '0'],\n }),\n parseDef(def.right._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', '1'],\n }),\n ].filter((x): x is JsonSchema7Type => !!x);\n\n const mergedAllOf: JsonSchema7Type[] = [];\n // If either of the schemas is an allOf, merge them into a single allOf\n allOf.forEach(schema => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n } else {\n let nestedSchema: JsonSchema7Type = schema;\n if (\n 'additionalProperties' in schema &&\n schema.additionalProperties === false\n ) {\n const { additionalProperties: _additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length ? { allOf: mergedAllOf } : undefined;\n}\n","import type { ZodLiteralDef } from 'zod/v3';\n\nexport type JsonSchema7LiteralType =\n | {\n type: 'string' | 'number' | 'integer' | 'boolean';\n const: string | number | boolean;\n }\n | {\n type: 'object' | 'array';\n };\n\nexport function parseLiteralDef(def: ZodLiteralDef): JsonSchema7LiteralType {\n const parsedType = typeof def.value;\n if (\n parsedType !== 'bigint' &&\n parsedType !== 'number' &&\n parsedType !== 'boolean' &&\n parsedType !== 'string'\n ) {\n return {\n type: Array.isArray(def.value) ? 'array' : 'object',\n };\n }\n\n return {\n type: parsedType === 'bigint' ? 'integer' : parsedType,\n const: def.value,\n };\n}\n","import {\n ZodFirstPartyTypeKind,\n type ZodMapDef,\n type ZodRecordDef,\n type ZodTypeAny,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseBrandedDef } from './branded';\nimport type { JsonSchema7EnumType } from './enum';\nimport { parseStringDef, type JsonSchema7StringType } from './string';\ntype JsonSchema7RecordPropertyNamesType =\n | Omit<JsonSchema7StringType, 'type'>\n | Omit<JsonSchema7EnumType, 'type'>;\n\nexport type JsonSchema7RecordType = {\n type: 'object';\n additionalProperties?: JsonSchema7Type | true;\n propertyNames?: JsonSchema7RecordPropertyNamesType;\n};\n\nexport function parseRecordDef(\n def: ZodRecordDef<ZodTypeAny, ZodTypeAny> | ZodMapDef,\n refs: Refs,\n): JsonSchema7RecordType {\n const schema: JsonSchema7RecordType = {\n type: 'object',\n additionalProperties:\n parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'additionalProperties'],\n }) ?? refs.allowedAdditionalProperties,\n };\n\n if (\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.checks?.length\n ) {\n const { type: _type, ...keyType } = parseStringDef(def.keyType._def, refs);\n\n return {\n ...schema,\n propertyNames: keyType,\n };\n } else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values,\n },\n };\n } else if (\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.type._def.checks?.length\n ) {\n const { type: _type, ...keyType } = parseBrandedDef(\n def.keyType._def,\n refs,\n ) as JsonSchema7StringType;\n\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n\n return schema;\n}\n","import type { ZodStringDef } from 'zod/v3';\nimport type { Refs } from '../refs';\n\nlet emojiRegex: RegExp | undefined = undefined;\n\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email:\n /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\n '^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$',\n 'u',\n );\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr:\n /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr:\n /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url:\n /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n} as const;\n\nexport type JsonSchema7StringType = {\n type: 'string';\n minLength?: number;\n maxLength?: number;\n format?:\n | 'email'\n | 'idn-email'\n | 'uri'\n | 'uuid'\n | 'date-time'\n | 'ipv4'\n | 'ipv6'\n | 'date'\n | 'time'\n | 'duration';\n pattern?: string;\n allOf?: {\n pattern: string;\n }[];\n anyOf?: {\n format: string;\n }[];\n contentEncoding?: string;\n};\n\nexport function parseStringDef(\n def: ZodStringDef,\n refs: Refs,\n): JsonSchema7StringType {\n const res: JsonSchema7StringType = {\n type: 'string',\n };\n\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case 'min':\n res.minLength =\n typeof res.minLength === 'number'\n ? Math.max(res.minLength, check.value)\n : check.value;\n break;\n case 'max':\n res.maxLength =\n typeof res.maxLength === 'number'\n ? Math.min(res.maxLength, check.value)\n : check.value;\n\n break;\n case 'email':\n switch (refs.emailStrategy) {\n case 'format:email':\n addFormat(res, 'email', check.message, refs);\n break;\n case 'format:idn-email':\n addFormat(res, 'idn-email', check.message, refs);\n break;\n case 'pattern:zod':\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n\n break;\n case 'url':\n addFormat(res, 'uri', check.message, refs);\n break;\n case 'uuid':\n addFormat(res, 'uuid', check.message, refs);\n break;\n case 'regex':\n addPattern(res, check.regex, check.message, refs);\n break;\n case 'cuid':\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case 'cuid2':\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case 'startsWith':\n addPattern(\n res,\n RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`),\n check.message,\n refs,\n );\n break;\n case 'endsWith':\n addPattern(\n res,\n RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`),\n check.message,\n refs,\n );\n break;\n case 'datetime':\n addFormat(res, 'date-time', check.message, refs);\n break;\n case 'date':\n addFormat(res, 'date', check.message, refs);\n break;\n case 'time':\n addFormat(res, 'time', check.message, refs);\n break;\n case 'duration':\n addFormat(res, 'duration', check.message, refs);\n break;\n case 'length':\n res.minLength =\n typeof res.minLength === 'number'\n ? Math.max(res.minLength, check.value)\n : check.value;\n res.maxLength =\n typeof res.maxLength === 'number'\n ? Math.min(res.maxLength, check.value)\n : check.value;\n break;\n case 'includes': {\n addPattern(\n res,\n RegExp(escapeLiteralCheckValue(check.value, refs)),\n check.message,\n refs,\n );\n break;\n }\n case 'ip': {\n if (check.version !== 'v6') {\n addFormat(res, 'ipv4', check.message, refs);\n }\n if (check.version !== 'v4') {\n addFormat(res, 'ipv6', check.message, refs);\n }\n break;\n }\n case 'base64url':\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case 'jwt':\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case 'cidr': {\n if (check.version !== 'v6') {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== 'v4') {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case 'emoji':\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case 'ulid': {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case 'base64': {\n switch (refs.base64Strategy) {\n case 'format:binary': {\n addFormat(res, 'binary' as any, check.message, refs);\n break;\n }\n\n case 'contentEncoding:base64': {\n res.contentEncoding = 'base64';\n break;\n }\n\n case 'pattern:zod': {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case 'nanoid': {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case 'toLowerCase':\n case 'toUpperCase':\n case 'trim':\n break;\n default:\n /* c8 ignore next */\n ((_: never) => {})(check);\n }\n }\n }\n\n return res;\n}\n\nfunction escapeLiteralCheckValue(literal: string, refs: Refs): string {\n return refs.patternStrategy === 'escape'\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\n\nconst ALPHA_NUMERIC = new Set(\n 'ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789',\n);\n\nfunction escapeNonAlphaNumeric(source: string) {\n let result = '';\n\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += '\\\\';\n }\n\n result += source[i];\n }\n\n return result;\n}\n\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(\n schema: JsonSchema7StringType,\n value: Required<JsonSchema7StringType>['format'],\n message: string | undefined,\n refs: Refs,\n) {\n if (schema.format || schema.anyOf?.some(x => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n\n if (schema.format) {\n schema.anyOf!.push({\n format: schema.format,\n });\n delete schema.format;\n }\n\n schema.anyOf!.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n } else {\n schema.format = value;\n }\n}\n\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(\n schema: JsonSchema7StringType,\n regex: RegExp,\n message: string | undefined,\n refs: Refs,\n) {\n if (schema.pattern || schema.allOf?.some(x => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n\n if (schema.pattern) {\n schema.allOf!.push({\n pattern: schema.pattern,\n });\n delete schema.pattern;\n }\n\n schema.allOf!.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n } else {\n schema.pattern = stringifyRegExpWithFlags(regex, refs);\n }\n}\n\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex: RegExp, refs: Refs): string {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n\n // Currently handled flags\n const flags = {\n i: regex.flags.includes('i'), // Case-insensitive\n m: regex.flags.includes('m'), // `^` and `$` matches adjacent to newline characters\n s: regex.flags.includes('s'), // `.` matches newlines\n };\n\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = '';\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n } else if (source[i + 1] === '-' && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n } else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n } else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n\n if (flags.m) {\n if (source[i] === '^') {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n } else if (source[i] === '$') {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n\n if (flags.s && source[i] === '.') {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n\n pattern += source[i];\n if (source[i] === '\\\\') {\n isEscaped = true;\n } else if (inCharGroup && source[i] === ']') {\n inCharGroup = false;\n } else if (!inCharGroup && source[i] === '[') {\n inCharGroup = true;\n }\n }\n\n try {\n new RegExp(pattern);\n } catch {\n console.warn(\n `Could not convert regex pattern at ${refs.currentPath.join(\n '/',\n )} to a flag-independent form! Falling back to the flag-ignorant source`,\n );\n return regex.source;\n }\n\n return pattern;\n}\n","import type { ZodMapDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseAnyDef } from './any';\nimport { parseRecordDef, type JsonSchema7RecordType } from './record';\nexport type JsonSchema7MapType = {\n type: 'array';\n maxItems: 125;\n items: {\n type: 'array';\n items: [JsonSchema7Type, JsonSchema7Type];\n minItems: 2;\n maxItems: 2;\n };\n};\n\nexport function parseMapDef(\n def: ZodMapDef,\n refs: Refs,\n): JsonSchema7MapType | JsonSchema7RecordType {\n if (refs.mapStrategy === 'record') {\n return parseRecordDef(def, refs);\n }\n\n const keys =\n parseDef(def.keyType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', 'items', '0'],\n }) || parseAnyDef();\n const values =\n parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', 'items', '1'],\n }) || parseAnyDef();\n return {\n type: 'array',\n maxItems: 125,\n items: {\n type: 'array',\n items: [keys, values],\n minItems: 2,\n maxItems: 2,\n },\n };\n}\n","import type { ZodNativeEnumDef } from 'zod/v3';\n\nexport type JsonSchema7NativeEnumType = {\n type: 'string' | 'number' | ['string', 'number'];\n enum: (string | number)[];\n};\n\nexport function parseNativeEnumDef(\n def: ZodNativeEnumDef,\n): JsonSchema7NativeEnumType {\n const object = def.values;\n const actualKeys = Object.keys(def.values).filter((key: string) => {\n return typeof object[object[key]] !== 'number';\n });\n\n const actualValues = actualKeys.map((key: string) => object[key]);\n\n const parsedTypes = Array.from(\n new Set(actualValues.map((values: string | number) => typeof values)),\n );\n\n return {\n type:\n parsedTypes.length === 1\n ? parsedTypes[0] === 'string'\n ? 'string'\n : 'number'\n : ['string', 'number'],\n enum: actualValues,\n };\n}\n","import { parseAnyDef, type JsonSchema7AnyType } from './any';\nexport type JsonSchema7NeverType = {\n not: JsonSchema7AnyType;\n};\n\nexport function parseNeverDef(): JsonSchema7NeverType | undefined {\n return { not: parseAnyDef() };\n}\n","export type JsonSchema7NullType = {\n type: 'null';\n};\n\nexport function parseNullDef(): JsonSchema7NullType {\n return {\n type: 'null',\n };\n}\n","import type {\n ZodDiscriminatedUnionDef,\n ZodLiteralDef,\n ZodTypeAny,\n ZodUnionDef,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport const primitiveMappings = {\n ZodString: 'string',\n ZodNumber: 'number',\n ZodBigInt: 'integer',\n ZodBoolean: 'boolean',\n ZodNull: 'null',\n} as const;\ntype ZodPrimitive = keyof typeof primitiveMappings;\ntype JsonSchema7Primitive =\n (typeof primitiveMappings)[keyof typeof primitiveMappings];\n\nexport type JsonSchema7UnionType =\n | JsonSchema7PrimitiveUnionType\n | JsonSchema7AnyOfType;\n\ntype JsonSchema7PrimitiveUnionType =\n | {\n type: JsonSchema7Primitive | JsonSchema7Primitive[];\n }\n | {\n type: JsonSchema7Primitive | JsonSchema7Primitive[];\n enum: (string | number | bigint | boolean | null)[];\n };\n\ntype JsonSchema7AnyOfType = {\n anyOf: JsonSchema7Type[];\n};\n\nexport function parseUnionDef(\n def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n refs: Refs,\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined {\n const options: readonly ZodTypeAny[] =\n def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n\n // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n if (\n options.every(\n x =>\n x._def.typeName in primitiveMappings &&\n (!x._def.checks || !x._def.checks.length),\n )\n ) {\n // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n\n const types = options.reduce((types: JsonSchema7Primitive[], x) => {\n const type = primitiveMappings[x._def.typeName as ZodPrimitive]; //Can be safely casted due to row 43\n return type && !types.includes(type) ? [...types, type] : types;\n }, []);\n\n return {\n type: types.length > 1 ? types : types[0],\n };\n } else if (\n options.every(x => x._def.typeName === 'ZodLiteral' && !x.description)\n ) {\n // all options literals\n\n const types = options.reduce(\n (acc: JsonSchema7Primitive[], x: { _def: ZodLiteralDef }) => {\n const type = typeof x._def.value;\n switch (type) {\n case 'string':\n case 'number':\n case 'boolean':\n return [...acc, type];\n case 'bigint':\n return [...acc, 'integer' as const];\n case 'object':\n if (x._def.value === null) return [...acc, 'null' as const];\n case 'symbol':\n case 'undefined':\n case 'function':\n default:\n return acc;\n }\n },\n [],\n );\n\n if (types.length === options.length) {\n // all the literals are primitive, as far as null can be considered primitive\n\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce(\n (acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n },\n [] as (string | number | bigint | boolean | null)[],\n ),\n };\n }\n } else if (options.every(x => x._def.typeName === 'ZodEnum')) {\n return {\n type: 'string',\n enum: options.reduce(\n (acc: string[], x) => [\n ...acc,\n ...x._def.values.filter((x: string) => !acc.includes(x)),\n ],\n [],\n ),\n };\n }\n\n return asAnyOf(def, refs);\n}\n\nconst asAnyOf = (\n def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n refs: Refs,\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined => {\n const anyOf = (\n (def.options instanceof Map\n ? Array.from(def.options.values())\n : def.options) as any[]\n )\n .map((x, i) =>\n parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'anyOf', `${i}`],\n }),\n )\n .filter(\n (x): x is JsonSchema7Type =>\n !!x &&\n (!refs.strictUnions ||\n (typeof x === 'object' && Object.keys(x).length > 0)),\n );\n\n return anyOf.length ? { anyOf } : undefined;\n};\n","import type { ZodNullableDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { JsonSchema7NullType } from './null';\nimport { primitiveMappings } from './union';\n\nexport type JsonSchema7NullableType =\n | {\n anyOf: [JsonSchema7Type, JsonSchema7NullType];\n }\n | {\n type: [string, 'null'];\n };\n\nexport function parseNullableDef(\n def: ZodNullableDef,\n refs: Refs,\n): JsonSchema7NullableType | undefined {\n if (\n ['ZodString', 'ZodNumber', 'ZodBigInt', 'ZodBoolean', 'ZodNull'].includes(\n def.innerType._def.typeName,\n ) &&\n (!def.innerType._def.checks || !def.innerType._def.checks.length)\n ) {\n return {\n type: [\n primitiveMappings[\n def.innerType._def.typeName as keyof typeof primitiveMappings\n ],\n 'null',\n ],\n };\n }\n\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'anyOf', '0'],\n });\n\n return base && { anyOf: [base, { type: 'null' }] };\n}\n","import type { ZodNumberDef } from 'zod/v3';\n\nexport type JsonSchema7NumberType = {\n type: 'number' | 'integer';\n minimum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n exclusiveMaximum?: number;\n multipleOf?: number;\n};\n\nexport function parseNumberDef(def: ZodNumberDef): JsonSchema7NumberType {\n const res: JsonSchema7NumberType = {\n type: 'number',\n };\n\n if (!def.checks) return res;\n\n for (const check of def.checks) {\n switch (check.kind) {\n case 'int':\n res.type = 'integer';\n break;\n case 'min':\n if (check.inclusive) {\n res.minimum = check.value;\n } else {\n res.exclusiveMinimum = check.value;\n }\n break;\n case 'max':\n if (check.inclusive) {\n res.maximum = check.value;\n } else {\n res.exclusiveMaximum = check.value;\n }\n break;\n case 'multipleOf':\n res.multipleOf = check.value;\n break;\n }\n }\n return res;\n}\n","import type { ZodObjectDef, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport type JsonSchema7ObjectType = {\n type: 'object';\n properties: Record<string, JsonSchema7Type>;\n additionalProperties?: boolean | JsonSchema7Type;\n required?: string[];\n};\n\nexport function parseObjectDef(def: ZodObjectDef, refs: Refs) {\n const result: JsonSchema7ObjectType = {\n type: 'object',\n properties: {},\n };\n\n const required: string[] = [];\n\n const shape = def.shape();\n\n for (const propName in shape) {\n let propDef = shape[propName];\n\n if (propDef === undefined || propDef._def === undefined) {\n continue;\n }\n\n const propOptional = safeIsOptional(propDef);\n\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'properties', propName],\n propertyPath: [...refs.currentPath, 'properties', propName],\n });\n\n if (parsedDef === undefined) {\n continue;\n }\n\n result.properties[propName] = parsedDef;\n\n if (!propOptional) {\n required.push(propName);\n }\n }\n\n if (required.length) {\n result.required = required;\n }\n\n const additionalProperties = decideAdditionalProperties(def, refs);\n\n if (additionalProperties !== undefined) {\n result.additionalProperties = additionalProperties;\n }\n\n return result;\n}\n\nfunction decideAdditionalProperties(def: ZodObjectDef, refs: Refs) {\n if (def.catchall._def.typeName !== 'ZodNever') {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'additionalProperties'],\n });\n }\n\n switch (def.unknownKeys) {\n case 'passthrough':\n return refs.allowedAdditionalProperties;\n case 'strict':\n return refs.rejectedAdditionalProperties;\n case 'strip':\n return refs.removeAdditionalStrategy === 'strict'\n ? refs.allowedAdditionalProperties\n : refs.rejectedAdditionalProperties;\n }\n}\n\nfunction safeIsOptional(schema: ZodTypeAny): boolean {\n try {\n return schema.isOptional();\n } catch {\n return true;\n }\n}\n","import type { ZodOptionalDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseAnyDef } from './any';\n\nexport const parseOptionalDef = (\n def: ZodOptionalDef,\n refs: Refs,\n): JsonSchema7Type | undefined => {\n if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n return parseDef(def.innerType._def, refs);\n }\n\n const innerSchema = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'anyOf', '1'],\n });\n\n return innerSchema\n ? { anyOf: [{ not: parseAnyDef() }, innerSchema] }\n : parseAnyDef();\n};\n","import type { ZodPipelineDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { JsonSchema7AllOfType } from './intersection';\n\nexport const parsePipelineDef = (\n def: ZodPipelineDef<any, any>,\n refs: Refs,\n): JsonSchema7AllOfType | JsonSchema7Type | undefined => {\n if (refs.pipeStrategy === 'input') {\n return parseDef(def.in._def, refs);\n } else if (refs.pipeStrategy === 'output') {\n return parseDef(def.out._def, refs);\n }\n\n const inputSchema = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', '0'],\n });\n const outputSchema = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', inputSchema ? '1' : '0'],\n });\n\n return {\n allOf: [inputSchema, outputSchema].filter(\n (schema): schema is JsonSchema7Type => schema !== undefined,\n ),\n };\n};\n","import type { ZodPromiseDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport function parsePromiseDef(\n def: ZodPromiseDef,\n refs: Refs,\n): JsonSchema7Type | undefined {\n return parseDef(def.type._def, refs);\n}\n","import type { ZodSetDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport type JsonSchema7SetType = {\n type: 'array';\n uniqueItems: true;\n items?: JsonSchema7Type;\n minItems?: number;\n maxItems?: number;\n};\n\nexport function parseSetDef(def: ZodSetDef, refs: Refs): JsonSchema7SetType {\n const items = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items'],\n });\n\n const schema: JsonSchema7SetType = {\n type: 'array',\n uniqueItems: true,\n items,\n };\n\n if (def.minSize) {\n schema.minItems = def.minSize.value;\n }\n\n if (def.maxSize) {\n schema.maxItems = def.maxSize.value;\n }\n\n return schema;\n}\n","import type { ZodTupleDef, ZodTupleItems, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport type JsonSchema7TupleType = {\n type: 'array';\n minItems: number;\n items: JsonSchema7Type[];\n} & (\n | {\n maxItems: number;\n }\n | {\n additionalItems?: JsonSchema7Type;\n }\n);\n\nexport function parseTupleDef(\n def: ZodTupleDef<ZodTupleItems | [], ZodTypeAny | null>,\n refs: Refs,\n): JsonSchema7TupleType {\n if (def.rest) {\n return {\n type: 'array',\n minItems: def.items.length,\n items: def.items\n .map((x, i) =>\n parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', `${i}`],\n }),\n )\n .reduce(\n (acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]),\n [],\n ),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'additionalItems'],\n }),\n };\n } else {\n return {\n type: 'array',\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items\n .map((x, i) =>\n parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', `${i}`],\n }),\n )\n .reduce(\n (acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]),\n [],\n ),\n };\n }\n}\n","import { parseAnyDef, type JsonSchema7AnyType } from './any';\nexport type JsonSchema7UndefinedType = {\n not: JsonSchema7AnyType;\n};\n\nexport function parseUndefinedDef(): JsonSchema7UndefinedType {\n return {\n not: parseAnyDef(),\n };\n}\n","import { parseAnyDef, type JsonSchema7AnyType } from './any';\nexport type JsonSchema7UnknownType = JsonSchema7AnyType;\n\nexport function parseUnknownDef(): JsonSchema7UnknownType {\n return parseAnyDef();\n}\n","import type { ZodReadonlyDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { Refs } from '../refs';\n\nexport const parseReadonlyDef = (def: ZodReadonlyDef<any>, refs: Refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","export const getRelativePath = (pathA: string[], pathB: string[]) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i]) break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join('/');\n};\n","import type { ZodTypeDef } from 'zod/v3';\nimport type { Refs, Seen } from './refs';\nimport { ignoreOverride } from './options';\nimport type { JsonSchema7Type } from './parse-types';\nimport { selectParser } from './select-parser';\nimport { getRelativePath } from './get-relative-path';\nimport { parseAnyDef } from './parsers/any';\n\nexport function parseDef(\n def: ZodTypeDef,\n refs: Refs,\n forceResolution = false, // Forces a new schema to be instantiated even though its def has been seen. Used for improving refs in definitions. See https://github.com/StefanTerdell/zod-to-json-schema/pull/61.\n): JsonSchema7Type | undefined {\n const seenItem = refs.seen.get(def);\n\n if (refs.override) {\n const overrideResult = refs.override?.(\n def,\n refs,\n seenItem,\n forceResolution,\n );\n\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n\n if (seenSchema !== undefined) {\n return seenSchema;\n }\n }\n\n const newItem: Seen = { def, path: refs.currentPath, jsonSchema: undefined };\n\n refs.seen.set(def, newItem);\n\n const jsonSchemaOrGetter = selectParser(def, (def as any).typeName, refs);\n\n // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n const jsonSchema =\n typeof jsonSchemaOrGetter === 'function'\n ? parseDef(jsonSchemaOrGetter(), refs)\n : jsonSchemaOrGetter;\n\n if (jsonSchema) {\n addMeta(def, refs, jsonSchema);\n }\n\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n\n newItem.jsonSchema = jsonSchema;\n\n return postProcessResult;\n }\n\n newItem.jsonSchema = jsonSchema;\n\n return jsonSchema;\n}\n\nconst get$ref = (\n item: Seen,\n refs: Refs,\n):\n | {\n $ref: string;\n }\n | {}\n | undefined => {\n switch (refs.$refStrategy) {\n case 'root':\n return { $ref: item.path.join('/') };\n case 'relative':\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case 'none':\n case 'seen': {\n if (\n item.path.length < refs.currentPath.length &&\n item.path.every((value, index) => refs.currentPath[index] === value)\n ) {\n console.warn(\n `Recursive reference detected at ${refs.currentPath.join(\n '/',\n )}! Defaulting to any`,\n );\n\n return parseAnyDef();\n }\n\n return refs.$refStrategy === 'seen' ? parseAnyDef() : undefined;\n }\n }\n};\n\nconst addMeta = (\n def: ZodTypeDef,\n refs: Refs,\n jsonSchema: JsonSchema7Type,\n): JsonSchema7Type => {\n if (def.description) {\n jsonSchema.description = def.description;\n }\n return jsonSchema;\n};\n","import type { ZodTypeDef } from 'zod/v3';\nimport { getDefaultOptions, type Options } from './options';\nimport type { JsonSchema7Type } from './parse-types';\n\nexport type Refs = {\n seen: Map<ZodTypeDef, Seen>;\n currentPath: string[];\n propertyPath: string[] | undefined;\n} & Options;\n\nexport type Seen = {\n def: ZodTypeDef;\n path: string[];\n jsonSchema: JsonSchema7Type | undefined;\n};\n\nexport const getRefs = (options?: string | Partial<Options>): Refs => {\n const _options = getDefaultOptions(options);\n const currentPath =\n _options.name !== undefined\n ? [..._options.basePath, _options.definitionPath, _options.name]\n : _options.basePath;\n return {\n ..._options,\n currentPath: currentPath,\n propertyPath: undefined,\n seen: new Map(\n Object.entries(_options.definitions).map(([name, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: undefined,\n },\n ]),\n ),\n };\n};\n","import type { ZodSchema } from 'zod/v3';\nimport type { Options } from './options';\nimport { parseDef } from './parse-def';\nimport type { JsonSchema7Type } from './parse-types';\nimport { getRefs } from './refs';\nimport { parseAnyDef } from './parsers/any';\n\nconst zod3ToJsonSchema = (\n schema: ZodSchema<any>,\n options?: Partial<Options> | string,\n): JsonSchema7Type & {\n $schema?: string;\n definitions?: {\n [key: string]: JsonSchema7Type;\n };\n} => {\n const refs = getRefs(options);\n\n let definitions =\n typeof options === 'object' && options.definitions\n ? Object.entries(options.definitions).reduce(\n (acc: { [key: string]: JsonSchema7Type }, [name, schema]) => ({\n ...acc,\n [name]:\n parseDef(\n schema._def,\n {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n },\n true,\n ) ?? parseAnyDef(),\n }),\n {},\n )\n : undefined;\n\n const name =\n typeof options === 'string'\n ? options\n : options?.nameStrategy === 'title'\n ? undefined\n : options?.name;\n\n const main =\n parseDef(\n schema._def,\n name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n },\n false,\n ) ?? (parseAnyDef() as JsonSchema7Type);\n\n const title =\n typeof options === 'object' &&\n options.name !== undefined &&\n options.nameStrategy === 'title'\n ? options.name\n : undefined;\n\n if (title !== undefined) {\n main.title = title;\n }\n\n const combined: ReturnType<typeof zod3ToJsonSchema> =\n name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === 'relative' ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join('/'),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n\n combined.$schema = 'http://json-schema.org/draft-07/schema#';\n\n return combined;\n};\n\nexport { zod3ToJsonSchema };\n","import {\n EventSourceParserStream,\n type EventSourceMessage,\n} from 'eventsource-parser/stream';\nimport { safeParseJSON, type ParseResult } from './parse-json';\nimport type { FlexibleSchema } from './schema';\n\n/**\n * Parses a JSON event stream into a stream of parsed JSON objects.\n */\nexport function parseJsonEventStream<T>({\n stream,\n schema,\n}: {\n stream: ReadableStream<Uint8Array>;\n schema: FlexibleSchema<T>;\n}): ReadableStream<ParseResult<T>> {\n return stream\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream())\n .pipeThrough(\n new TransformStream<EventSourceMessage, ParseResult<T>>({\n async transform({ data }, controller) {\n // ignore the 'DONE' event that e.g. OpenAI sends:\n if (data === '[DONE]') {\n return;\n }\n\n controller.enqueue(await safeParseJSON({ text: data, schema }));\n },\n }),\n );\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\nimport { safeValidateTypes } from './validate-types';\nimport type { FlexibleSchema } from './schema';\n\nexport async function parseProviderOptions<OPTIONS>({\n provider,\n providerOptions,\n schema,\n}: {\n provider: string;\n providerOptions: Record<string, unknown> | undefined;\n schema: FlexibleSchema<OPTIONS>;\n}): Promise<OPTIONS | undefined> {\n if (providerOptions?.[provider] == null) {\n return undefined;\n }\n\n const parsedProviderOptions = await safeValidateTypes<OPTIONS | undefined>({\n value: providerOptions[provider],\n schema,\n });\n\n if (!parsedProviderOptions.success) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: `invalid ${provider} provider options`,\n cause: parsedProviderOptions.error,\n });\n }\n\n return parsedProviderOptions.value;\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport type { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport type { ResponseHandler } from './response-handler';\nimport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nimport { withUserAgentSuffix } from './with-user-agent-suffix';\nimport { VERSION } from './version';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => globalThis.fetch;\n\nexport const postJsonToApi = async <T>({\n url,\n headers,\n body,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n body: unknown;\n failedResponseHandler: ResponseHandler<APICallError>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}) =>\n await postToApi({\n url,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n });\n\nexport const postFormDataToApi = async <T>({\n url,\n headers,\n formData,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n formData: FormData;\n failedResponseHandler: ResponseHandler<APICallError>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}) =>\n await postToApi({\n url,\n headers,\n body: {\n content: formData,\n values: Object.fromEntries((formData as any).entries()),\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n });\n\nexport const postToApi = async <T>({\n url,\n headers = {},\n body,\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch(),\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n body: {\n content: string | FormData | Uint8Array;\n values: unknown;\n };\n failedResponseHandler: ResponseHandler<Error>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}) => {\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: withUserAgentSuffix(\n headers,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n ),\n body: body.content,\n signal: abortSignal,\n });\n\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.ok) {\n let errorInformation: {\n value: Error;\n responseHeaders?: Record<string, string> | undefined;\n };\n\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n\n throw new APICallError({\n message: 'Failed to process error response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values,\n });\n }\n\n throw errorInformation.value;\n }\n\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n }\n\n throw new APICallError({\n message: 'Failed to process successful response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values,\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: body.values });\n }\n};\n","import type { JSONValue, JSONObject } from '@ai-sdk/provider';\nimport type { FlexibleSchema } from '../schema';\nimport type { ToolResultOutput } from './content-part';\nimport type { Context } from './context';\nimport type { ExecutableTool } from './executable-tool';\nimport type { NeverOptional } from './never-optional';\nimport type { ProviderOptions } from './provider-options';\nimport type {\n ToolExecuteFunction,\n ToolExecutionOptions,\n} from './tool-execute-function';\nimport type { ToolNeedsApprovalFunction } from './tool-needs-approval-function';\nimport type { SandboxSession } from './sandbox';\n\n/**\n * Helper type to determine the outputSchema and execute function properties of a tool.\n */\ntype ToolOutputProperties<\n INPUT,\n OUTPUT,\n CONTEXT extends Context | unknown | never,\n> = NeverOptional<\n OUTPUT,\n | {\n /**\n * The optional schema of the output that the tool produces.\n *\n * If not provided, the output shape will be inferred from the execute function.\n */\n outputSchema?: FlexibleSchema<OUTPUT>;\n\n /**\n * An async function that is called with the arguments from the tool call and produces a result.\n * If not provided, the tool will not be executed automatically.\n *\n * @args is the input of the tool call.\n * @options.abortSignal is a signal that can be used to abort the tool call.\n */\n execute: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n }\n | {\n /**\n * The schema of the output that the tool produces.\n *\n * Required when no execute function is provided.\n */\n outputSchema: FlexibleSchema<OUTPUT>;\n\n execute?: never;\n }\n>;\n\n/**\n * Common properties shared by all tool kinds.\n */\ntype BaseTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = {\n /**\n * An optional title of the tool.\n *\n * @deprecated Use `providerMetadata` for source-specific tool display metadata.\n */\n title?: string;\n\n /**\n * Additional provider-specific metadata. They are passed through\n * to the provider from the AI SDK and enable provider-specific\n * functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * Optional metadata about the tool itself (e.g. its source).\n *\n * Unlike `providerOptions`, this metadata is not sent to the language\n * model. Instead, it is propagated onto the resulting tool call's\n * `toolMetadata` so consumers can read it from tool call / result parts\n * and UI message parts. This is useful for sources of dynamic tools (e.g.\n * an MCP server) to identify themselves.\n */\n metadata?: JSONObject;\n\n /**\n * The schema of the input that the tool expects.\n * The language model will use this to generate the input.\n * It is also used to validate the output of the language model.\n *\n * You can use descriptions on the schema properties to make the input understandable for the language model.\n */\n inputSchema: FlexibleSchema<INPUT>;\n\n /**\n * An optional schema describing the context that the tool expects.\n *\n * The context is passed to execute function as part of the execution options.\n */\n contextSchema?: FlexibleSchema<CONTEXT>;\n\n /**\n * Whether the tool needs approval before it can be executed.\n *\n * @deprecated Tool approval is handled on a `generateText` / `streamText` level now.\n */\n needsApproval?:\n | boolean\n | ToolNeedsApprovalFunction<\n [INPUT] extends [never] ? unknown : INPUT,\n NoInfer<CONTEXT>\n >;\n\n /**\n * Optional function that is called when the model starts generating the tool input.\n * In non-streaming contexts, it is called immediately before `onInputAvailable`.\n */\n onInputStart?: (\n options: ToolExecutionOptions<NoInfer<CONTEXT>>,\n ) => void | PromiseLike<void>;\n\n /**\n * Optional function that is called when an argument streaming delta is available.\n * Only called when the tool is used in a streaming context.\n */\n onInputDelta?: (\n options: { inputTextDelta: string } & ToolExecutionOptions<\n NoInfer<CONTEXT>\n >,\n ) => void | PromiseLike<void>;\n\n /**\n * Optional function that is called when a tool call can be started,\n * even if the execute function is not provided.\n */\n onInputAvailable?: (\n options: {\n input: [INPUT] extends [never] ? unknown : INPUT;\n } & ToolExecutionOptions<NoInfer<CONTEXT>>,\n ) => void | PromiseLike<void>;\n\n /**\n * Optional conversion function that maps the tool result to an output that can be used by the language model.\n *\n * If not provided, the tool result will be sent as a JSON object.\n *\n * This function is invoked on the server by `convertToModelMessages`, so ensure that you pass the same \"tools\" (ToolSet) to both \"convertToModelMessages\" and \"streamText\" (or other generation APIs).\n */\n toModelOutput?: (options: {\n /**\n * The ID of the tool call. You can use it e.g. when sending tool-call related information with stream data.\n */\n toolCallId: string;\n\n /**\n * The input of the tool call.\n */\n input: [INPUT] extends [never] ? unknown : INPUT;\n\n /**\n * The output of the tool call.\n */\n output: 0 extends 1 & OUTPUT\n ? any\n : [OUTPUT] extends [never]\n ? any\n : NoInfer<OUTPUT>;\n }) => ToolResultOutput | PromiseLike<ToolResultOutput>;\n} & ToolOutputProperties<INPUT, OUTPUT, NoInfer<CONTEXT>>;\n\n/**\n * Common properties shared by function-style tools.\n */\ntype BaseFunctionTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseTool<INPUT, OUTPUT, CONTEXT> & {\n /**\n * Optional description of what the tool does.\n *\n * Included in the tool definition sent to the language model so it can\n * decide when and how to call the tool.\n *\n * Provide a string for a fixed description, or a function that returns a\n * string from the current `context` (and optional `experimental_sandbox`) when the\n * description should vary per call.\n */\n description?:\n | string\n | ((options: {\n context: NoInfer<CONTEXT>;\n experimental_sandbox?: SandboxSession;\n }) => string);\n\n /**\n * Strict mode setting for the tool.\n *\n * Providers that support strict mode will use this setting to determine\n * how the input should be generated. Strict mode will always produce\n * valid inputs, but it might limit what input schemas are supported.\n */\n strict?: boolean;\n\n /**\n * An optional list of input examples that show the language\n * model what the input should look like.\n */\n inputExamples?: Array<{ input: NoInfer<INPUT> }>;\n\n // make all properties available to improve usage dx\n id?: never;\n isProviderExecuted?: never;\n args?: never;\n supportsDeferredResults?: never;\n};\n\n/**\n * Tool with user-defined input and output schemas that is executed by the AI SDK.\n */\nexport type FunctionTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseFunctionTool<INPUT, OUTPUT, CONTEXT> & {\n type?: undefined | 'function';\n};\n\n/**\n * Tool that is defined at runtime.\n * The types of input and output are not known at development time.\n *\n * For example, MCP tools that are not known at development time.\n */\nexport type DynamicTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseFunctionTool<INPUT, OUTPUT, CONTEXT> & {\n type: 'dynamic';\n};\n\n/**\n * Common properties shared by provider tools.\n */\ntype BaseProviderTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseTool<INPUT, OUTPUT, CONTEXT> & {\n type: 'provider';\n\n /**\n * The ID of the tool. Must follow the format `<provider-name>.<unique-tool-name>`.\n */\n id: `${string}.${string}`;\n\n /**\n * The arguments for configuring the tool. Must match the expected arguments defined by the provider for this tool.\n */\n args: Record<string, unknown>;\n\n // make all properties available to improve usage dx\n description?: never;\n strict?: never;\n inputExamples?: never;\n};\n\n/**\n * Tool with provider-defined input and output schemas that is executed by the\n * user.\n *\n * For example, shell tools that are executed in a local shell, but have provider-defined input and output schemas.\n */\nexport type ProviderDefinedTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseProviderTool<INPUT, OUTPUT, CONTEXT> & {\n /**\n * Flag that indicates whether the tool is executed by the provider.\n */\n isProviderExecuted: false;\n\n // make all properties available to improve usage dx\n supportsDeferredResults?: never;\n};\n\n/**\n * Tool with provider-defined input and output schemas that is executed by the\n * provider.\n *\n * For example, web search tools and code execution tools that are executed by the provider itself.\n */\nexport type ProviderExecutedTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseProviderTool<INPUT, OUTPUT, CONTEXT> & {\n /**\n * Flag that indicates whether the tool is executed by the provider.\n */\n isProviderExecuted: true;\n\n /**\n * Whether this provider-executed tool supports deferred results.\n *\n * When true, the tool result may not be returned in the same turn as the\n * tool call (e.g., when using programmatic tool calling where a server tool\n * triggers a client-executed tool, and the server tool's result is deferred\n * until the client tool is resolved).\n *\n * This flag allows the AI SDK to handle tool results that arrive without\n * a matching tool call in the current response.\n *\n * @default false\n */\n supportsDeferredResults?: boolean;\n};\n\n/**\n * A tool can either be user-defined or provider-defined.\n *\n * It contains the schemas and metadata needed for the language model to call\n * the tool and can include an execute function for tools that are executed by\n * the AI SDK.\n */\nexport type Tool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> =\n | FunctionTool<INPUT, OUTPUT, CONTEXT>\n | DynamicTool<INPUT, OUTPUT, CONTEXT>\n | ProviderDefinedTool<INPUT, OUTPUT, CONTEXT>\n | ProviderExecutedTool<INPUT, OUTPUT, CONTEXT>;\n\n/**\n * Infer the tool type from a tool object.\n *\n * This is useful for type inference when working with tool objects.\n *\n * When the input has an `execute` function, the return type narrows to\n * `ExecutableTool<Tool<...>>` so that `.execute` is non-nullable without\n * needing `isExecutableTool` or a `!` assertion at the call site.\n */\n// Note: overload order is important for auto-completion.\n// The \"with execute\" overload comes first so calls that include an\n// `execute` function get the narrowed return type. Calls without\n// `execute` fall through to the overloads below.\nexport function tool<INPUT, OUTPUT, CONTEXT extends Context>(\n tool: Tool<INPUT, OUTPUT, CONTEXT> & {\n execute: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n },\n): ExecutableTool<Tool<INPUT, OUTPUT, CONTEXT>>;\nexport function tool<INPUT, OUTPUT, CONTEXT extends Context>(\n tool: Tool<INPUT, OUTPUT, CONTEXT>,\n): Tool<INPUT, OUTPUT, CONTEXT>;\nexport function tool<INPUT, CONTEXT extends Context>(\n tool: Tool<INPUT, never, CONTEXT>,\n): Tool<INPUT, never, CONTEXT>;\nexport function tool<OUTPUT, CONTEXT extends Context>(\n tool: Tool<never, OUTPUT, CONTEXT>,\n): Tool<never, OUTPUT, CONTEXT>;\nexport function tool<CONTEXT extends Context>(\n tool: Tool<never, never, CONTEXT>,\n): Tool<never, never, CONTEXT>;\nexport function tool(tool: any): any {\n return tool;\n}\n\n/**\n * Define a dynamic tool.\n */\nexport function dynamicTool(\n tool: Omit<DynamicTool<unknown, unknown, Context>, 'type'>,\n): DynamicTool<unknown, unknown, Context> {\n return { ...tool, type: 'dynamic' } as DynamicTool<unknown, unknown, Context>;\n}\n","import { tool, type ProviderDefinedTool, type Tool } from './types/tool';\nimport type { FlexibleSchema } from './schema';\nimport type { Context } from './types/context';\nimport type { ToolExecuteFunction } from './types/tool-execute-function';\n/**\n * A provider-defined tool is a tool for which the provider defines the input\n * and output schemas, but does not execute the tool.\n */\nexport type ProviderDefinedToolFactory<\n INPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n> = <OUTPUT>(\n options: ARGS & {\n execute?: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n needsApproval?: Tool<INPUT, OUTPUT, CONTEXT>['needsApproval'];\n toModelOutput?: Tool<INPUT, OUTPUT, CONTEXT>['toModelOutput'];\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n },\n) => ProviderDefinedTool<INPUT, OUTPUT, CONTEXT>;\n\nexport function createProviderDefinedToolFactory<\n INPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n>({\n id,\n inputSchema,\n}: {\n id: `${string}.${string}`;\n inputSchema: FlexibleSchema<INPUT>;\n}): ProviderDefinedToolFactory<INPUT, ARGS, CONTEXT> {\n return <OUTPUT>({\n execute,\n outputSchema,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }: ARGS & {\n execute?: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n outputSchema?: FlexibleSchema<OUTPUT>;\n needsApproval?: Tool<INPUT, OUTPUT, CONTEXT>['needsApproval'];\n toModelOutput?: Tool<INPUT, OUTPUT, CONTEXT>['toModelOutput'];\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n }): ProviderDefinedTool<INPUT, OUTPUT, CONTEXT> =>\n tool({\n type: 'provider',\n isProviderExecuted: false,\n id,\n args,\n inputSchema,\n outputSchema,\n execute,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n }) as ProviderDefinedTool<INPUT, OUTPUT, CONTEXT>;\n}\n\nexport type ProviderDefinedToolFactoryWithOutputSchema<\n INPUT,\n OUTPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n> = (\n options: ARGS & {\n execute?: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n needsApproval?: Tool<INPUT, OUTPUT, CONTEXT>['needsApproval'];\n toModelOutput?: Tool<INPUT, OUTPUT, CONTEXT>['toModelOutput'];\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n },\n) => ProviderDefinedTool<INPUT, OUTPUT, CONTEXT>;\n\nexport function createProviderDefinedToolFactoryWithOutputSchema<\n INPUT,\n OUTPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n>({\n id,\n inputSchema,\n outputSchema,\n}: {\n id: `${string}.${string}`;\n inputSchema: FlexibleSchema<INPUT>;\n outputSchema: FlexibleSchema<OUTPUT>;\n}): ProviderDefinedToolFactoryWithOutputSchema<INPUT, OUTPUT, ARGS, CONTEXT> {\n return ({\n execute,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }: ARGS & {\n execute?: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n needsApproval?: Tool<INPUT, OUTPUT, CONTEXT>['needsApproval'];\n toModelOutput?: Tool<INPUT, OUTPUT, CONTEXT>['toModelOutput'];\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n }): ProviderDefinedTool<INPUT, OUTPUT, CONTEXT> =>\n tool({\n type: 'provider',\n isProviderExecuted: false,\n id,\n args,\n inputSchema,\n outputSchema,\n execute,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n }) as ProviderDefinedTool<INPUT, OUTPUT, CONTEXT>;\n}\n","import type { FlexibleSchema } from './schema';\nimport type { Context } from './types/context';\nimport { tool, type ProviderExecutedTool, type Tool } from './types/tool';\n/**\n * A provider-executed tool is a tool for which the provider executes the tool.\n */\nexport type ProviderExecutedToolFactory<\n INPUT,\n OUTPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n> = (\n options: ARGS & {\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n },\n) => ProviderExecutedTool<INPUT, OUTPUT, CONTEXT>;\n\nexport function createProviderExecutedToolFactory<\n INPUT,\n OUTPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n>({\n id,\n inputSchema,\n outputSchema,\n supportsDeferredResults,\n}: {\n id: `${string}.${string}`;\n inputSchema: FlexibleSchema<INPUT>;\n outputSchema: FlexibleSchema<OUTPUT>;\n\n /**\n * Whether this provider-executed tool supports deferred results.\n *\n * When true, the tool result may not be returned in the same turn as the\n * tool call (e.g., when using programmatic tool calling where a server tool\n * triggers a client-executed tool, and the server tool's result is deferred\n * until the client tool is resolved).\n *\n * @default false\n */\n supportsDeferredResults?: boolean;\n}): ProviderExecutedToolFactory<INPUT, OUTPUT, ARGS, CONTEXT> {\n return ({\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }: ARGS & {\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n }): ProviderExecutedTool<INPUT, OUTPUT, CONTEXT> =>\n tool({\n type: 'provider',\n isProviderExecuted: true,\n id,\n args,\n inputSchema,\n outputSchema,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n supportsDeferredResults,\n }) as ProviderExecutedTool<INPUT, OUTPUT, CONTEXT>;\n}\n","import type { MaybePromiseLike } from './maybe-promise-like';\n\n/**\n * A value or a lazy provider of a value, each of which may be synchronous or asynchronous.\n *\n * @template T The resolved type after {@link resolve} runs.\n *\n * One of:\n * - A plain value of type {@link T}\n * - A {@link PromiseLike} of {@link T} (e.g. a `Promise<T>`)\n * - A zero-argument function that returns a plain {@link T}\n * - A zero-argument function that returns a {@link PromiseLike} of {@link T}\n *\n * The function form is only invoked when passed to {@link resolve}; it is not distinguished from\n * a {@link T} that happens to be a function—callers should wrap function values if disambiguation\n * is required.\n */\nexport type Resolvable<T> = MaybePromiseLike<T> | (() => MaybePromiseLike<T>);\n\n/**\n * Resolves a value that could be a raw value, a Promise, a function returning a value,\n * or a function returning a Promise.\n */\nexport async function resolve<T>(value: Resolvable<T>): Promise<T> {\n // If it's a function, call it to get the value/promise\n if (typeof value === 'function') {\n value = (value as Function)();\n }\n\n // Otherwise just resolve whatever we got (value or promise)\n return Promise.resolve(value as T);\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4FilePart,\n} from '@ai-sdk/provider';\nimport {\n detectMediaType,\n getTopLevelMediaType,\n isFullMediaType,\n} from './detect-media-type';\n\n/**\n * Resolves a file part's media type to a full `type/subtype` form required by\n * providers whose API demands the full IANA media type.\n *\n * - If `part.mediaType` is already a full media type (e.g. `image/png`), it is\n * returned as-is.\n * - Otherwise, when inline bytes are available (`part.data.type === 'data'`),\n * the subtype is sniffed from the bytes using the signature table that\n * corresponds to the top-level segment.\n * - When neither applies (e.g. top-level-only with a URL source, or bytes that\n * cannot be detected), an `UnsupportedFunctionalityError` is thrown.\n */\nexport function resolveFullMediaType({\n part,\n}: {\n part: LanguageModelV4FilePart;\n}): string {\n if (isFullMediaType(part.mediaType)) {\n return part.mediaType;\n }\n\n if (part.data.type === 'data') {\n const detected = detectMediaType({\n data: part.data.data,\n topLevelType: getTopLevelMediaType(part.mediaType),\n });\n if (detected) {\n return detected;\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file of media type \"${part.mediaType}\" must specify subtype since it could not be auto-detected`,\n });\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file of media type \"${part.mediaType}\" must specify subtype since it is not passed as inline bytes`,\n });\n}\n","import {\n NoSuchProviderReferenceError,\n type SharedV4ProviderReference,\n} from '@ai-sdk/provider';\n/**\n * Resolves a provider reference to the provider-specific identifier for the\n * given provider. Throws `NoSuchProviderReferenceError` if the provider is not\n * found in the reference mapping.\n */\nexport function resolveProviderReference({\n reference,\n provider,\n}: {\n reference: SharedV4ProviderReference;\n provider: string;\n}): string {\n const id = reference[provider];\n if (id != null) {\n return id;\n }\n\n throw new NoSuchProviderReferenceError({\n provider,\n reference,\n });\n}\n","import { delay } from './delay';\nimport { getErrorMessage } from './get-error-message';\nimport { isAbortError } from './is-abort-error';\n\nexport type RetryFunction = <OUTPUT>(\n fn: () => PromiseLike<OUTPUT>,\n) => PromiseLike<OUTPUT>;\n\nexport type RetryErrorReason = 'maxRetriesExceeded' | 'errorNotRetryable';\n\nexport type RetryErrorFactory = ({\n message,\n reason,\n errors,\n}: {\n message: string;\n reason: RetryErrorReason;\n errors: Array<unknown>;\n}) => unknown;\n\nexport type RetryDelayProvider = ({\n error,\n exponentialBackoffDelay,\n}: {\n error: unknown;\n exponentialBackoffDelay: number;\n}) => number;\n\nexport type ShouldRetryFunction = (\n error: unknown,\n) => boolean | Promise<boolean>;\n\n/**\n * Retries a failed operation with exponential backoff.\n */\nexport const retryWithExponentialBackoff =\n ({\n maxRetries = 2,\n initialDelayInMs = 2000,\n backoffFactor = 2,\n abortSignal,\n shouldRetry,\n getDelayInMs = ({ exponentialBackoffDelay }) => exponentialBackoffDelay,\n createRetryError = ({ message }) => new Error(message),\n }: {\n maxRetries?: number;\n initialDelayInMs?: number;\n backoffFactor?: number;\n abortSignal?: AbortSignal;\n shouldRetry: ShouldRetryFunction;\n getDelayInMs?: RetryDelayProvider;\n createRetryError?: RetryErrorFactory;\n }): RetryFunction =>\n async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n retryWithExponentialBackoffInternal(f, {\n maxRetries,\n delayInMs: initialDelayInMs,\n backoffFactor,\n abortSignal,\n shouldRetry,\n getDelayInMs,\n createRetryError,\n });\n\nasync function retryWithExponentialBackoffInternal<OUTPUT>(\n f: () => PromiseLike<OUTPUT>,\n {\n maxRetries,\n delayInMs,\n backoffFactor,\n abortSignal,\n shouldRetry,\n getDelayInMs,\n createRetryError,\n }: {\n maxRetries: number;\n delayInMs: number;\n backoffFactor: number;\n abortSignal: AbortSignal | undefined;\n shouldRetry: ShouldRetryFunction;\n getDelayInMs: RetryDelayProvider;\n createRetryError: RetryErrorFactory;\n },\n errors: unknown[] = [],\n): Promise<OUTPUT> {\n try {\n return await f();\n } catch (error) {\n if (isAbortError(error)) {\n throw error; // don't retry when the request was aborted\n }\n\n if (maxRetries === 0) {\n throw error; // don't wrap the error when retries are disabled\n }\n\n const errorMessage = getErrorMessage(error);\n const newErrors = [...errors, error];\n const tryNumber = newErrors.length;\n\n if (tryNumber > maxRetries) {\n throw createRetryError({\n message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,\n reason: 'maxRetriesExceeded',\n errors: newErrors,\n });\n }\n\n if ((await shouldRetry(error)) && tryNumber <= maxRetries) {\n await delay(\n getDelayInMs({\n error,\n exponentialBackoffDelay: delayInMs,\n }),\n { abortSignal },\n );\n\n return retryWithExponentialBackoffInternal(\n f,\n {\n maxRetries,\n delayInMs: backoffFactor * delayInMs,\n backoffFactor,\n abortSignal,\n shouldRetry,\n getDelayInMs,\n createRetryError,\n },\n newErrors,\n );\n }\n\n if (tryNumber === 1) {\n throw error; // don't wrap the error when a non-retryable error occurs on the first try\n }\n\n throw createRetryError({\n message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,\n reason: 'errorNotRetryable',\n errors: newErrors,\n });\n }\n}\n","import { APICallError, EmptyResponseBodyError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { parseJSON, safeParseJSON, type ParseResult } from './parse-json';\nimport { parseJsonEventStream } from './parse-json-event-stream';\nimport { readResponseWithSizeLimit } from './read-response-with-size-limit';\nimport type { FlexibleSchema } from './schema';\n\nexport type ResponseHandler<RETURN_TYPE> = (options: {\n url: string;\n requestBodyValues: unknown;\n response: Response;\n}) => PromiseLike<{\n value: RETURN_TYPE;\n rawValue?: unknown;\n responseHeaders?: Record<string, string>;\n}>;\n\nconst textDecoder = new TextDecoder();\n\nasync function readResponseBodyAsText({\n response,\n url,\n}: {\n response: Response;\n url: string;\n}) {\n return textDecoder.decode(\n await readResponseWithSizeLimit({\n response,\n url,\n }),\n );\n}\n\nexport const createJsonErrorResponseHandler =\n <T>({\n errorSchema,\n errorToMessage,\n isRetryable,\n }: {\n errorSchema: FlexibleSchema<T>;\n errorToMessage: (error: T) => string;\n isRetryable?: (response: Response, error?: T) => boolean;\n }): ResponseHandler<APICallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await readResponseBodyAsText({ response, url });\n const responseHeaders = extractResponseHeaders(response);\n\n // Some providers return an empty response body for some errors:\n if (responseBody.trim() === '') {\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable?.(response),\n }),\n };\n }\n\n // resilient parsing in case the response is not JSON or does not match the schema:\n try {\n const parsedError = await parseJSON({\n text: responseBody,\n schema: errorSchema,\n });\n\n return {\n responseHeaders,\n value: new APICallError({\n message: errorToMessage(parsedError),\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n data: parsedError,\n isRetryable: isRetryable?.(response, parsedError),\n }),\n };\n } catch {\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable?.(response),\n }),\n };\n }\n };\n\nexport const createEventSourceResponseHandler =\n <T>(\n chunkSchema: FlexibleSchema<T>,\n ): ResponseHandler<ReadableStream<ParseResult<T>>> =>\n async ({ response }: { response: Response }) => {\n const responseHeaders = extractResponseHeaders(response);\n\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n\n return {\n responseHeaders,\n value: parseJsonEventStream({\n stream: response.body,\n schema: chunkSchema,\n }),\n };\n };\n\nexport const createJsonResponseHandler =\n <T>(responseSchema: FlexibleSchema<T>): ResponseHandler<T> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await readResponseBodyAsText({ response, url });\n\n const parsedResult = await safeParseJSON({\n text: responseBody,\n schema: responseSchema,\n });\n\n const responseHeaders = extractResponseHeaders(response);\n\n if (!parsedResult.success) {\n throw new APICallError({\n message: 'Invalid JSON response',\n cause: parsedResult.error,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n url,\n requestBodyValues,\n });\n }\n\n return {\n responseHeaders,\n value: parsedResult.value,\n rawValue: parsedResult.rawValue,\n };\n };\n\nexport const createBinaryResponseHandler =\n (): ResponseHandler<Uint8Array> =>\n async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.body) {\n throw new APICallError({\n message: 'Response body is empty',\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: undefined,\n });\n }\n\n try {\n const buffer = await response.arrayBuffer();\n return {\n responseHeaders,\n value: new Uint8Array(buffer),\n };\n } catch (error) {\n throw new APICallError({\n message: 'Failed to read response as array buffer',\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: undefined,\n cause: error,\n });\n }\n };\n\nexport const createStatusCodeErrorResponseHandler =\n (): ResponseHandler<APICallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await readResponseBodyAsText({ response, url });\n\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues: requestBodyValues as Record<string, unknown>,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n }),\n };\n };\n","import type { JSONValue } from '@ai-sdk/provider';\n\n/**\n * Checks whether a value can cross a workflow serialization boundary.\n *\n * The check accepts JSON-like primitives, arrays, and plain objects whose\n * nested values are also serializable. It rejects functions, symbols,\n * bigints, and non-plain objects such as class instances, dates, and regexes.\n */\nexport function isJSONSerializable(value: unknown): value is JSONValue {\n if (value === null || value === undefined) return true;\n\n const type = typeof value;\n if (type === 'string' || type === 'number' || type === 'boolean') return true;\n if (type === 'function' || type === 'symbol' || type === 'bigint')\n return false;\n\n if (Array.isArray(value)) {\n return value.every(isJSONSerializable);\n }\n\n if (Object.getPrototypeOf(value) === Object.prototype) {\n return Object.values(value as Record<string, unknown>).every(\n isJSONSerializable,\n );\n }\n\n return false;\n}\n","import type { JSONObject } from '@ai-sdk/provider';\nimport { isJSONSerializable } from './is-json-serializable';\nimport type { Resolvable } from './resolve';\n\n/**\n * Serializes a model instance for workflow step boundaries.\n * Returns the `modelId` plus the JSON-serializable config properties.\n *\n * Non-serializable values are omitted. As a special case, a\n * function-valued `headers` property is resolved during serialization\n * and included if the returned value is JSON-serializable.\n *\n * Used as the body of `static [WORKFLOW_SERIALIZE]` in provider models.\n *\n * @example\n * ```ts\n * static [WORKFLOW_SERIALIZE](model: MyLanguageModel) {\n * return serializeModelOptions({\n * modelId: model.modelId,\n * config: model.config,\n * });\n * }\n * ```\n */\nexport function serializeModelOptions<\n CONFIG extends {\n headers?: Resolvable<Record<string, string | undefined>>;\n },\n>(options: {\n modelId: string;\n config: CONFIG;\n}): {\n modelId: string;\n config: JSONObject;\n} {\n const serializableConfig: JSONObject = {};\n for (const [key, value] of Object.entries(options.config)) {\n if (key === 'headers') {\n const resolvedHeaders = resolveSync(value);\n if (isJSONSerializable(resolvedHeaders)) {\n serializableConfig[key] = resolvedHeaders;\n }\n } else if (isJSONSerializable(value)) {\n serializableConfig[key] = value;\n }\n }\n return { modelId: options.modelId, config: serializableConfig };\n}\n\nfunction resolveSync<T>(value: Resolvable<T>): T {\n let next: unknown = value;\n if (typeof value === 'function') {\n next = (value as () => unknown)();\n }\n\n // the serialization for workflows currently only supports synchronous values\n // TODO introduce SerializationError\n if (next instanceof Promise) {\n throw new Error('Promise returned from resolveSync');\n }\n\n return next as T;\n}\n","import {\n InvalidResponseDataError,\n type LanguageModelV4StreamPart,\n type SharedV4ProviderMetadata,\n} from '@ai-sdk/provider';\nimport { generateId as defaultGenerateId } from './generate-id';\n\n/**\n * Minimal interface for a streaming tool call delta from an OpenAI-compatible API.\n */\nexport interface StreamingToolCallDelta {\n index?: number | null;\n id?: string | null;\n type?: string | null;\n function?: {\n name?: string | null;\n arguments?: string | null;\n } | null;\n}\n\nexport interface StreamingToolCallTrackerOptions<\n DELTA extends StreamingToolCallDelta = StreamingToolCallDelta,\n> {\n /**\n * ID generator function for tool call IDs.\n * Defaults to the standard generateId.\n */\n generateId?: () => string;\n\n /**\n * How to validate the `type` field on new tool call deltas.\n * - `'none'`: no validation (default)\n * - `'if-present'`: throw if type is present and not `'function'`\n * - `'required'`: throw if type is not exactly `'function'`\n */\n typeValidation?: 'none' | 'if-present' | 'required';\n\n /**\n * Extract provider-specific metadata from a tool call delta.\n * Called once when a new tool call is detected.\n * The returned metadata is stored on the tool call and passed to\n * `buildToolCallProviderMetadata` when the tool call is finalized.\n */\n extractMetadata?: (delta: DELTA) => SharedV4ProviderMetadata | undefined;\n\n /**\n * Build the `providerMetadata` object for a `tool-call` event.\n * Receives the metadata previously extracted via `extractMetadata`.\n * If `undefined` is returned, no `providerMetadata` is included in the event.\n */\n buildToolCallProviderMetadata?: (\n metadata: SharedV4ProviderMetadata | undefined,\n ) => SharedV4ProviderMetadata | undefined;\n}\n\ninterface TrackedToolCall {\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n hasFinished: boolean;\n metadata?: SharedV4ProviderMetadata;\n}\n\ntype StreamingToolCallTrackerController = Pick<\n TransformStreamDefaultController<LanguageModelV4StreamPart>,\n 'enqueue'\n>;\n\n/**\n * Tracks streaming tool call state across multiple deltas from an\n * OpenAI-compatible chat completion stream. Handles argument accumulation,\n * emits tool-input-start/delta/end and tool-call events, and finalizes\n * unfinished tool calls on flush.\n *\n * Used by openai, openai-compatible, groq, deepseek, and alibaba providers.\n */\nexport class StreamingToolCallTracker<\n DELTA extends StreamingToolCallDelta = StreamingToolCallDelta,\n> {\n private toolCalls: TrackedToolCall[] = [];\n private readonly controller: StreamingToolCallTrackerController;\n private readonly _generateId: () => string;\n private readonly typeValidation: 'none' | 'if-present' | 'required';\n private readonly extractMetadata?: (\n delta: DELTA,\n ) => SharedV4ProviderMetadata | undefined;\n private readonly buildToolCallProviderMetadata?: (\n metadata: SharedV4ProviderMetadata | undefined,\n ) => SharedV4ProviderMetadata | undefined;\n\n constructor(\n controller: StreamingToolCallTrackerController,\n options: StreamingToolCallTrackerOptions<DELTA> = {},\n ) {\n this.controller = controller;\n this._generateId = options.generateId ?? defaultGenerateId;\n this.typeValidation = options.typeValidation ?? 'none';\n this.extractMetadata = options.extractMetadata;\n this.buildToolCallProviderMetadata = options.buildToolCallProviderMetadata;\n }\n\n /**\n * Process a tool call delta from a streaming response chunk.\n * Emits tool-input-start, tool-input-delta, tool-input-end, and tool-call\n * events as appropriate.\n */\n processDelta(toolCallDelta: DELTA): void {\n const index = toolCallDelta.index ?? this.toolCalls.length;\n\n if (this.toolCalls[index] == null) {\n this.processNewToolCall(index, toolCallDelta);\n } else {\n this.processExistingToolCall(index, toolCallDelta);\n }\n }\n\n /**\n * Finalize any unfinished tool calls. Should be called during the stream's\n * flush handler to ensure all tool calls are properly completed.\n */\n flush(): void {\n for (const toolCall of this.toolCalls) {\n if (!toolCall.hasFinished) {\n this.finishToolCall(toolCall);\n }\n }\n }\n\n private processNewToolCall(index: number, toolCallDelta: DELTA): void {\n if (this.typeValidation === 'required') {\n if (toolCallDelta.type !== 'function') {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n } else if (this.typeValidation === 'if-present') {\n if (toolCallDelta.type != null && toolCallDelta.type !== 'function') {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n this.controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n const metadata = this.extractMetadata?.(toolCallDelta);\n\n this.toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n metadata,\n };\n\n const toolCall = this.toolCalls[index];\n\n // Emit initial delta if arguments already present\n if (toolCall.function.arguments.length > 0) {\n this.controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // Tool calls must not finalize before the stream ends: a parsable\n // argument buffer can still be the prefix of a longer argument string,\n // so acting on it early would use truncated inputs (see #13137).\n // Finalization happens in flush().\n }\n\n private processExistingToolCall(index: number, toolCallDelta: DELTA): void {\n const toolCall = this.toolCalls[index];\n\n if (toolCall.hasFinished) {\n return;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments += toolCallDelta.function.arguments;\n\n this.controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments,\n });\n }\n }\n\n private finishToolCall(toolCall: TrackedToolCall): void {\n this.controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n const providerMetadata = this.buildToolCallProviderMetadata?.(\n toolCall.metadata,\n );\n\n this.controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? this._generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n ...(providerMetadata ? { providerMetadata } : {}),\n });\n\n toolCall.hasFinished = true;\n }\n}\n","/**\n * Strips file extension segments from a filename.\n *\n * Examples:\n * - \"report.pdf\" -> \"report\"\n * - \"archive.tar.gz\" -> \"archive\"\n * - \"filename\" -> \"filename\"\n */\nexport function stripFileExtension(filename: string): string {\n const firstDotIndex = filename.indexOf('.');\n\n return firstDotIndex === -1 ? filename : filename.slice(0, firstDotIndex);\n}\n","import type {\n Experimental_TranscriptionModelV4StreamPart as TranscriptionModelV4StreamPart,\n JSONObject,\n} from '@ai-sdk/provider';\nimport { secureJsonParse } from './secure-json-parse';\n\n/**\n * Experimental transcription-stream WebSocket envelope (v1): the standard\n * serialization of `TranscriptionModelV4.doStream` over a WebSocket. Clients\n * (e.g. the `@ai-sdk/gateway` provider) encode with this module and servers\n * (e.g. AI Gateway) decode with it, so the two sides cannot drift.\n *\n * Envelope rules:\n *\n * 1. The client sends exactly one `transcription-stream.start` TEXT frame\n * first.\n * 2. Audio rides BINARY frames containing raw bytes in the declared\n * `inputAudioFormat` (base64 string chunks are decoded before sending).\n * 3. The client signals end of audio with the\n * `transcription-stream.audio-done` TEXT frame; a plain close without it\n * is an abort.\n * 4. Every server→client TEXT frame is one JSON-serialized\n * `TranscriptionModelV4StreamPart` (flattened, no wrapper). Payloads must\n * be JSON-serializable. `Date` values (`response-metadata.timestamp`)\n * serialize to ISO 8601 strings and are revived by\n * `parseTranscriptionStreamPart`. `Error` payloads in `error` parts\n * serialize as `{ name, message }`.\n * 5. The server closes with code 1000 after the `finish` part; on failure it\n * sends an `error` part and closes non-1000. A close without a prior\n * `finish` is an error.\n * 6. Unknown frame/part types are ignored in both directions (forward\n * compatibility).\n * 7. Servers may enforce a maximum frame size (the AI Gateway rejects frames\n * over 256 KiB); clients should split audio into frames of at most\n * 64 KiB.\n * 8. Connection establishment (URL, auth) is transport-specific and out of\n * scope.\n *\n * The envelope validates frame shape only; server policy (accepted audio\n * formats, required `rate`, size limits) layers on top. Both parsers use\n * `secureJsonParse`, so frames carrying `__proto__` / `constructor.prototype`\n * keys are rejected (prototype-pollution protection) rather than parsed.\n */\n\n/** Type of the first client TEXT frame. */\nexport const TRANSCRIPTION_STREAM_START_FRAME_TYPE =\n 'transcription-stream.start';\n\n/** Type of the client TEXT frame that signals the end of the audio input. */\nexport const TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE =\n 'transcription-stream.audio-done';\n\n/**\n * The client's session start frame. Optional keys are omitted when undefined.\n */\nexport type TranscriptionStreamStartFrame = {\n type: typeof TRANSCRIPTION_STREAM_START_FRAME_TYPE;\n\n /** Audio format of the binary audio frames, e.g. `{ type: 'audio/pcm', rate: 16000 }`. */\n inputAudioFormat: {\n type: string;\n rate?: number;\n };\n\n /** Provider-specific options, passed through verbatim. */\n providerOptions?: Record<string, JSONObject>;\n\n /** When true, the server should include `raw` parts in the stream. */\n includeRawChunks?: boolean;\n};\n\n/** Server-side classification of a client TEXT frame. */\nexport type TranscriptionStreamClientFrame =\n | {\n type: 'start';\n frame: TranscriptionStreamStartFrame;\n }\n | {\n type: 'audio-done';\n }\n | {\n /** Malformed JSON or a recognized frame with an invalid shape. */\n type: 'invalid';\n message: string;\n }\n | {\n /** Unrecognized frame type; ignore for forward compatibility. */\n type: 'unknown';\n };\n\n/**\n * Server-side: parse a client TEXT frame. Validates envelope shape only and\n * rejects prototype-pollution payloads (parsed with `secureJsonParse`). Never\n * throws.\n */\nexport function parseTranscriptionStreamClientFrame(\n text: string,\n): TranscriptionStreamClientFrame {\n let value: unknown;\n try {\n value = secureJsonParse(text);\n } catch {\n return { type: 'invalid', message: 'malformed JSON' };\n }\n\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return { type: 'invalid', message: 'frame must be a JSON object' };\n }\n\n const frame = value as Record<string, unknown>;\n\n if (typeof frame.type !== 'string') {\n return { type: 'invalid', message: 'frame type must be a string' };\n }\n\n switch (frame.type) {\n case TRANSCRIPTION_STREAM_START_FRAME_TYPE: {\n const inputAudioFormat = frame.inputAudioFormat as\n | Record<string, unknown>\n | null\n | undefined;\n if (\n inputAudioFormat == null ||\n typeof inputAudioFormat !== 'object' ||\n Array.isArray(inputAudioFormat) ||\n typeof inputAudioFormat.type !== 'string'\n ) {\n return {\n type: 'invalid',\n message:\n 'start frame must have an inputAudioFormat object with a string type',\n };\n }\n if (\n inputAudioFormat.rate !== undefined &&\n typeof inputAudioFormat.rate !== 'number'\n ) {\n return {\n type: 'invalid',\n message: 'inputAudioFormat.rate must be a number when present',\n };\n }\n if (\n frame.providerOptions !== undefined &&\n (frame.providerOptions == null ||\n typeof frame.providerOptions !== 'object' ||\n Array.isArray(frame.providerOptions))\n ) {\n return {\n type: 'invalid',\n message: 'providerOptions must be an object when present',\n };\n }\n if (\n frame.includeRawChunks !== undefined &&\n typeof frame.includeRawChunks !== 'boolean'\n ) {\n return {\n type: 'invalid',\n message: 'includeRawChunks must be a boolean when present',\n };\n }\n return {\n type: 'start',\n frame: frame as TranscriptionStreamStartFrame,\n };\n }\n\n case TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE:\n return { type: 'audio-done' };\n\n default:\n return { type: 'unknown' };\n }\n}\n\n/**\n * Server-side: serialize a transcription stream part as one TEXT frame.\n * `Error` payloads in `error` parts serialize as `{ name, message }` —\n * `Error` properties are non-enumerable, so a plain `JSON.stringify` would\n * serialize them to `{}` and lose the message end-to-end. Returns\n * `undefined` for payloads that are not JSON-serializable (envelope rule 4,\n * e.g. bigint or cyclic values); callers drop the frame.\n */\nexport function serializeTranscriptionStreamPart(\n part: TranscriptionModelV4StreamPart,\n): string | undefined {\n try {\n if (part.type === 'error' && isError(part.error)) {\n return JSON.stringify({\n ...part,\n error: { name: part.error.name, message: part.error.message },\n });\n }\n return JSON.stringify(part);\n } catch {\n return undefined;\n }\n}\n\n// `instanceof` misses cross-realm Errors; the brand check does not.\nfunction isError(value: unknown): value is Error {\n return (\n value instanceof Error ||\n Object.prototype.toString.call(value) === '[object Error]'\n );\n}\n\n/**\n * Client-side: parse a server TEXT frame into a transcription stream part.\n * Returns `undefined` for malformed or unsafe (prototype-polluting) JSON\n * (parsed with `secureJsonParse`), unknown part types, and known part types\n * whose required or optional fields are missing or mistyped (including\n * warning and segment elements) — downstream SDK code dereferences those\n * fields, so a drifted server must not crash or pollute the stream.\n * Revives `response-metadata.timestamp` to a `Date`.\n */\nexport function parseTranscriptionStreamPart(\n text: string,\n): TranscriptionModelV4StreamPart | undefined {\n let value: unknown;\n try {\n value = secureJsonParse(text);\n } catch {\n return undefined;\n }\n\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return undefined;\n }\n\n const part = value as TranscriptionModelV4StreamPart;\n\n switch (part.type) {\n case 'stream-start':\n return Array.isArray(part.warnings) && part.warnings.every(isWarning)\n ? part\n : undefined;\n\n case 'transcript-delta':\n return isString(part.delta) &&\n isOptional(part.id, isString) &&\n isOptional(part.providerMetadata, isPlainObject)\n ? part\n : undefined;\n\n case 'transcript-partial':\n return isString(part.text) &&\n isOptional(part.id, isString) &&\n isOptional(part.startSecond, isNumber) &&\n isOptional(part.durationInSeconds, isNumber) &&\n isOptional(part.channelIndex, isNumber) &&\n isOptional(part.providerMetadata, isPlainObject)\n ? part\n : undefined;\n\n case 'transcript-final':\n return isString(part.text) &&\n isOptional(part.id, isString) &&\n isOptional(part.startSecond, isNumber) &&\n isOptional(part.endSecond, isNumber) &&\n isOptional(part.channelIndex, isNumber) &&\n isOptional(part.providerMetadata, isPlainObject)\n ? part\n : undefined;\n\n case 'finish':\n return isString(part.text) &&\n Array.isArray(part.segments) &&\n part.segments.every(isSegment) &&\n isOptional(part.language, isString) &&\n isOptional(part.durationInSeconds, isNumber) &&\n isOptional(part.providerMetadata, isPlainObject)\n ? part\n : undefined;\n\n case 'response-metadata': {\n if (\n !(\n isOptional(part.modelId, isString) &&\n isOptional(part.headers, isPlainObject)\n )\n ) {\n return undefined;\n }\n // Envelope rule 4: timestamps ride as ISO 8601 strings.\n const timestamp: unknown = part.timestamp;\n if (timestamp == null) {\n return { ...part, timestamp: undefined };\n }\n if (typeof timestamp !== 'string') {\n return undefined;\n }\n const revived = new Date(timestamp);\n return Number.isNaN(revived.getTime())\n ? undefined\n : { ...part, timestamp: revived };\n }\n\n case 'raw':\n return 'rawValue' in part ? part : undefined;\n\n case 'error':\n return 'error' in part ? part : undefined;\n\n default:\n return undefined;\n }\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n\nfunction isOptional(\n value: unknown,\n check: (value: unknown) => boolean,\n): boolean {\n return value === undefined || check(value);\n}\n\nfunction isPlainObject(value: unknown): boolean {\n return typeof value === 'object' && value != null && !Array.isArray(value);\n}\n\nfunction isWarning(value: unknown): boolean {\n return isPlainObject(value) && isString((value as { type?: unknown }).type);\n}\n\nfunction isSegment(value: unknown): boolean {\n return (\n isPlainObject(value) &&\n isString((value as { text?: unknown }).text) &&\n isNumber((value as { startSecond?: unknown }).startSecond) &&\n isNumber((value as { endSecond?: unknown }).endSecond)\n );\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\n\nexport function validateBaseURL(baseURL: string | undefined) {\n if (baseURL?.trim() === '') {\n throw new InvalidArgumentError({\n argument: 'baseURL',\n message: 'baseURL must be a non-empty string.',\n });\n }\n\n return baseURL;\n}\n","export function withoutTrailingSlash(url: string | undefined) {\n return url?.replace(/\\/$/, '');\n}\n","import type { Tool } from './tool';\n\n/**\n * A tool that is guaranteed to expose an execute function.\n */\nexport type ExecutableTool<TOOL extends Tool = Tool> = TOOL & {\n execute: NonNullable<TOOL['execute']>;\n};\n\n/**\n * Checks whether a tool exposes an execute function.\n */\nexport function isExecutableTool<TOOL extends Tool>(\n tool: TOOL | undefined,\n): tool is ExecutableTool<TOOL> {\n return tool != null && typeof tool.execute === 'function';\n}\n","export function isAsyncIterable<T = any>(obj: any): obj is AsyncIterable<T> {\n return obj != null && typeof obj[Symbol.asyncIterator] === 'function';\n}\n","import { isAsyncIterable } from '../is-async-iterable';\nimport type { ExecutableTool } from './executable-tool';\nimport type { InferToolContext } from './infer-tool-context';\nimport type { InferToolInput } from './infer-tool-input';\nimport type { InferToolOutput } from './infer-tool-output';\nimport type { Tool } from './tool';\nimport type { ToolExecutionOptions } from './tool-execute-function';\n\n/**\n * Executes a tool function and normalizes its results into a stream of outputs.\n *\n * - If the tool's `execute` function returns an `AsyncIterable`, each yielded value is emitted as\n * `{ type: \"preliminary\", output }`. After iteration completes, the last yielded value is emitted\n * again as `{ type: \"final\", output }`.\n * - If the tool returns a direct value or Promise, a single `{ type: \"final\", output }` is yielded.\n *\n * @param params.tool The tool whose `execute` function should be invoked.\n * @param params.input The input value to pass to the tool.\n * @param params.options Additional options for tool execution.\n * @yields A preliminary output for each streamed value, followed by a final output, or a single final\n * output for non-streaming tools.\n */\nexport async function* executeTool<TOOL extends Tool>({\n tool,\n input,\n options,\n}: {\n tool: ExecutableTool<TOOL>;\n input: InferToolInput<TOOL>;\n options: ToolExecutionOptions<InferToolContext<TOOL>>;\n}): AsyncGenerator<\n | { type: 'preliminary'; output: InferToolOutput<TOOL> }\n | { type: 'final'; output: InferToolOutput<TOOL> }\n> {\n const result = tool.execute(input, options);\n\n if (isAsyncIterable(result)) {\n let lastOutput: InferToolOutput<TOOL> | undefined;\n for await (const output of result) {\n lastOutput = output;\n yield { type: 'preliminary', output };\n }\n yield { type: 'final', output: lastOutput! };\n } else {\n yield { type: 'final', output: await result };\n }\n}\n","export { asArray } from './as-array';\nexport type { Arrayable } from './as-array';\nexport * from './combine-headers';\nexport {\n connectToWebSocket,\n type WebSocketConnection,\n} from './connect-to-websocket';\nexport { convertAsyncIteratorToReadableStream } from './convert-async-iterator-to-readable-stream';\nexport { convertInlineFileDataToUint8Array } from './convert-inline-file-data-to-uint8-array';\nexport { convertImageModelFileToDataUri } from './convert-image-model-file-to-data-uri';\nexport { convertToFormData } from './convert-to-form-data';\nexport {\n createToolNameMapping,\n type ToolNameMapping,\n} from './create-tool-name-mapping';\nexport * from './delay';\nexport { DelayedPromise } from './delayed-promise';\nexport {\n detectMediaType,\n getTopLevelMediaType,\n isFullMediaType,\n} from './detect-media-type';\nexport { downloadBlob } from './download-blob';\nexport { DownloadError } from './download-error';\nexport { fetchWithValidatedRedirects } from './fetch-with-validated-redirects';\nexport { extractLines } from './extract-lines';\nexport * from './extract-response-headers';\nexport * from './fetch-function';\nexport { filterNullable } from './filter-nullable';\nexport { createIdGenerator, generateId, type IdGenerator } from './generate-id';\nexport * from './get-error-message';\nexport * from './get-from-api';\nexport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nexport type { HasRequiredKey } from './has-required-key';\nexport { injectJsonInstructionIntoMessages } from './inject-json-instruction';\nexport * from './is-abort-error';\nexport { isBrowserRuntime } from './is-browser-runtime';\nexport { isBuffer } from './is-buffer';\nexport { isSameOrigin } from './is-same-origin';\nexport { isNonNullable } from './is-non-nullable';\nexport { isProviderReference } from './is-provider-reference';\nexport { isUrlSupported } from './is-url-supported';\nexport * from './load-api-key';\nexport { loadOptionalSetting } from './load-optional-setting';\nexport { loadSetting } from './load-setting';\nexport {\n isCustomReasoning,\n mapReasoningToProviderBudget,\n mapReasoningToProviderEffort,\n} from './map-reasoning-to-provider';\nexport { type MaybePromiseLike } from './maybe-promise-like';\nexport { mediaTypeToExtension } from './media-type-to-extension';\nexport { normalizeHeaders } from './normalize-headers';\nexport * from './parse-json';\nexport { parseJsonEventStream } from './parse-json-event-stream';\nexport { parseProviderOptions } from './parse-provider-options';\nexport * from './post-to-api';\nexport {\n createProviderDefinedToolFactory,\n createProviderDefinedToolFactoryWithOutputSchema,\n type ProviderDefinedToolFactory,\n type ProviderDefinedToolFactoryWithOutputSchema,\n} from './provider-defined-tool-factory';\nexport {\n createProviderExecutedToolFactory,\n type ProviderExecutedToolFactory,\n} from './provider-executed-tool-factory';\nexport { cancelResponseBody } from './cancel-response-body';\nexport {\n DEFAULT_MAX_DOWNLOAD_SIZE,\n readResponseWithSizeLimit,\n} from './read-response-with-size-limit';\nexport * from './remove-undefined-entries';\nexport * from './resolve';\nexport { resolveFullMediaType } from './resolve-full-media-type';\nexport { resolveProviderReference } from './resolve-provider-reference';\nexport * from './retry-with-exponential-backoff';\nexport * from './response-handler';\nexport {\n asSchema,\n jsonSchema,\n lazySchema,\n zodSchema,\n type FlexibleSchema,\n type InferSchema,\n type LazySchema,\n type Schema,\n type ValidationResult,\n} from './schema';\nexport { serializeModelOptions } from './serialize-model-options';\nexport { secureJsonParse } from './secure-json-parse';\nexport {\n StreamingToolCallTracker,\n type StreamingToolCallDelta,\n type StreamingToolCallTrackerOptions,\n} from './streaming-tool-call-tracker';\nexport { stripFileExtension } from './strip-file-extension';\nexport {\n TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE as EXPERIMENTAL_TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE,\n TRANSCRIPTION_STREAM_START_FRAME_TYPE as EXPERIMENTAL_TRANSCRIPTION_STREAM_START_FRAME_TYPE,\n parseTranscriptionStreamClientFrame as experimental_parseTranscriptionStreamClientFrame,\n parseTranscriptionStreamPart as experimental_parseTranscriptionStreamPart,\n serializeTranscriptionStreamPart as experimental_serializeTranscriptionStreamPart,\n type TranscriptionStreamClientFrame as Experimental_TranscriptionStreamClientFrame,\n type TranscriptionStreamStartFrame as Experimental_TranscriptionStreamStartFrame,\n} from './transcription-stream-envelope';\nexport * from './uint8-utils';\nexport { validateBaseURL } from './validate-base-url';\nexport { validateDownloadUrl } from './validate-download-url';\nexport * from './validate-types';\nexport { VERSION } from './version';\nexport {\n getWebSocketConstructor,\n readWebSocketMessageText,\n toWebSocketUrl,\n waitForWebSocketBufferDrain,\n type WebSocketConstructor,\n type WebSocketLike,\n} from './websocket';\nexport { withUserAgentSuffix } from './with-user-agent-suffix';\nexport * from './without-trailing-slash';\n\n// folder re-exports\nexport * from './types';\n\n// external re-exports\nexport type * from '@standard-schema/spec';\nexport { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from '@workflow/serde';\nexport {\n EventSourceParserStream,\n type EventSourceMessage,\n} from 'eventsource-parser/stream';\n"],"mappings":"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","names":["resolve","_a","_a","tool","_a","resolve","_a","_a","name","_a","_b","APICallError","_a","_b","APICallError","_a","_b","_a","_b","mediaType","_a","TypeValidationError","TypeValidationError","jsonSchema","ZodFirstPartyTypeKind","_a","_b","ZodFirstPartyTypeKind","_a","_a","_b","ZodFirstPartyTypeKind","types","x","_a","ZodFirstPartyTypeKind","_a","jsonSchema","name","_a","name","schema","jsonSchema","standardSchema","zodSchema","_a","TypeValidationError","TypeValidationError","InvalidArgumentError","InvalidArgumentError","APICallError","getOriginalFetch","APICallError","tool","APICallError","textDecoder","APICallError","_a","_b","InvalidArgumentError","tool","tool","EventSourceParserStream"]}
1
+ {"version":3,"sources":["../src/as-array.ts","../src/combine-headers.ts","../src/remove-undefined-entries.ts","../src/delay.ts","../src/websocket.ts","../src/connect-to-websocket.ts","../src/convert-async-iterator-to-readable-stream.ts","../src/uint8-utils.ts","../src/convert-inline-file-data-to-uint8-array.ts","../src/convert-image-model-file-to-data-uri.ts","../src/convert-to-form-data.ts","../src/create-tool-name-mapping.ts","../src/delayed-promise.ts","../src/detect-media-type.ts","../src/cancel-response-body.ts","../src/download-error.ts","../src/is-browser-runtime.ts","../src/is-same-origin.ts","../src/sanitize-request-headers.ts","../src/validate-download-url.ts","../src/fetch-with-validated-redirects.ts","../src/read-response-with-size-limit.ts","../src/download-blob.ts","../src/extract-lines.ts","../src/extract-response-headers.ts","../src/filter-nullable.ts","../src/generate-id.ts","../src/get-error-message.ts","../src/get-from-api.ts","../src/handle-fetch-error.ts","../src/is-abort-error.ts","../src/get-runtime-environment-user-agent.ts","../src/normalize-headers.ts","../src/with-user-agent-suffix.ts","../src/version.ts","../src/inject-json-instruction.ts","../src/is-buffer.ts","../src/is-non-nullable.ts","../src/is-provider-reference.ts","../src/is-url-supported.ts","../src/load-api-key.ts","../src/load-optional-setting.ts","../src/load-setting.ts","../src/map-reasoning-to-provider.ts","../src/media-type-to-extension.ts","../src/parse-json.ts","../src/secure-json-parse.ts","../src/validate-types.ts","../src/schema.ts","../src/add-additional-properties-to-json-schema.ts","../src/to-json-schema/zod3-to-json-schema/options.ts","../src/to-json-schema/zod3-to-json-schema/select-parser.ts","../src/to-json-schema/zod3-to-json-schema/parsers/any.ts","../src/to-json-schema/zod3-to-json-schema/parsers/array.ts","../src/to-json-schema/zod3-to-json-schema/parsers/bigint.ts","../src/to-json-schema/zod3-to-json-schema/parsers/boolean.ts","../src/to-json-schema/zod3-to-json-schema/parsers/branded.ts","../src/to-json-schema/zod3-to-json-schema/parsers/catch.ts","../src/to-json-schema/zod3-to-json-schema/parsers/date.ts","../src/to-json-schema/zod3-to-json-schema/parsers/default.ts","../src/to-json-schema/zod3-to-json-schema/parsers/effects.ts","../src/to-json-schema/zod3-to-json-schema/parsers/enum.ts","../src/to-json-schema/zod3-to-json-schema/parsers/intersection.ts","../src/to-json-schema/zod3-to-json-schema/parsers/literal.ts","../src/to-json-schema/zod3-to-json-schema/parsers/record.ts","../src/to-json-schema/zod3-to-json-schema/parsers/string.ts","../src/to-json-schema/zod3-to-json-schema/parsers/map.ts","../src/to-json-schema/zod3-to-json-schema/parsers/native-enum.ts","../src/to-json-schema/zod3-to-json-schema/parsers/never.ts","../src/to-json-schema/zod3-to-json-schema/parsers/null.ts","../src/to-json-schema/zod3-to-json-schema/parsers/union.ts","../src/to-json-schema/zod3-to-json-schema/parsers/nullable.ts","../src/to-json-schema/zod3-to-json-schema/parsers/number.ts","../src/to-json-schema/zod3-to-json-schema/parsers/object.ts","../src/to-json-schema/zod3-to-json-schema/parsers/optional.ts","../src/to-json-schema/zod3-to-json-schema/parsers/pipeline.ts","../src/to-json-schema/zod3-to-json-schema/parsers/promise.ts","../src/to-json-schema/zod3-to-json-schema/parsers/set.ts","../src/to-json-schema/zod3-to-json-schema/parsers/tuple.ts","../src/to-json-schema/zod3-to-json-schema/parsers/undefined.ts","../src/to-json-schema/zod3-to-json-schema/parsers/unknown.ts","../src/to-json-schema/zod3-to-json-schema/parsers/readonly.ts","../src/to-json-schema/zod3-to-json-schema/get-relative-path.ts","../src/to-json-schema/zod3-to-json-schema/parse-def.ts","../src/to-json-schema/zod3-to-json-schema/refs.ts","../src/to-json-schema/zod3-to-json-schema/zod3-to-json-schema.ts","../src/parse-json-event-stream.ts","../src/parse-provider-options.ts","../src/post-to-api.ts","../src/types/tool.ts","../src/provider-defined-tool-factory.ts","../src/provider-executed-tool-factory.ts","../src/resolve.ts","../src/resolve-full-media-type.ts","../src/resolve-provider-reference.ts","../src/retry-with-exponential-backoff.ts","../src/response-handler.ts","../src/is-json-serializable.ts","../src/serialize-model-options.ts","../src/streaming-tool-call-tracker.ts","../src/strip-file-extension.ts","../src/transcription-stream-envelope.ts","../src/validate-base-url.ts","../src/without-trailing-slash.ts","../src/types/executable-tool.ts","../src/is-async-iterable.ts","../src/types/execute-tool.ts","../src/index.ts"],"sourcesContent":["/**\n * A value that can be provided either as a single item, an array of items,\n * or be left undefined.\n */\nexport type Arrayable<T> = T | T[] | undefined;\n\n/**\n * Normalizes a possibly undefined or non-array value into an array.\n */\nexport function asArray<T>(value: Arrayable<T>): T[] {\n return value === undefined ? [] : Array.isArray(value) ? value : [value];\n}\n","export function combineHeaders(\n ...headers: Array<Record<string, string | undefined> | undefined>\n): Record<string, string | undefined> {\n return headers.reduce(\n (combinedHeaders, currentHeaders) => ({\n ...combinedHeaders,\n ...(currentHeaders ?? {}),\n }),\n {},\n ) as Record<string, string | undefined>;\n}\n","/**\n * Removes entries from a record where the value is null or undefined.\n * @param record - The input object whose entries may be null or undefined.\n * @returns A new object containing only entries with non-null and non-undefined values.\n */\nexport function removeUndefinedEntries<T>(\n record: Record<string, T | undefined>,\n): Record<string, T> {\n return Object.fromEntries(\n Object.entries(record).filter(([_key, value]) => value != null),\n ) as Record<string, T>;\n}\n","/**\n * Creates a Promise that resolves after a specified delay\n * @param delayInMs - The delay duration in milliseconds. If null or undefined, resolves immediately.\n * @param signal - Optional AbortSignal to cancel the delay\n * @returns A Promise that resolves after the specified delay\n * @throws {DOMException} When the signal is aborted\n */\nexport async function delay(\n delayInMs?: number | null,\n options?: {\n abortSignal?: AbortSignal;\n },\n): Promise<void> {\n if (delayInMs == null) {\n return Promise.resolve();\n }\n\n const signal = options?.abortSignal;\n\n return new Promise<void>((resolve, reject) => {\n if (signal?.aborted) {\n reject(createAbortError());\n return;\n }\n\n const timeoutId = setTimeout(() => {\n cleanup();\n resolve();\n }, delayInMs);\n\n const cleanup = () => {\n clearTimeout(timeoutId);\n signal?.removeEventListener('abort', onAbort);\n };\n\n const onAbort = () => {\n cleanup();\n reject(createAbortError());\n };\n\n signal?.addEventListener('abort', onAbort);\n });\n}\n\nfunction createAbortError(): DOMException {\n return new DOMException('Delay was aborted', 'AbortError');\n}\n","import { delay } from './delay';\n\nexport type WebSocketLike = {\n readyState: number;\n /** Bytes queued by `send` but not yet transmitted (native + `ws`). */\n readonly bufferedAmount?: number;\n send(data: string | Uint8Array | ArrayBuffer): void;\n close(code?: number, reason?: string): void;\n onopen: ((event: unknown) => void) | null;\n onmessage: ((event: { data: unknown }) => void) | null;\n onerror: ((event: unknown) => void) | null;\n onclose: ((event: unknown) => void) | null;\n};\n\nexport type WebSocketConstructor = new (\n url: string | URL,\n protocols?: string | string[],\n options?: {\n headers?: Record<string, string | undefined>;\n },\n) => WebSocketLike;\n\nexport function getWebSocketConstructor(\n webSocket: WebSocketConstructor | undefined,\n): WebSocketConstructor {\n const WebSocketConstructor =\n webSocket ?? (globalThis.WebSocket as unknown as WebSocketConstructor);\n\n if (WebSocketConstructor == null) {\n throw new Error('No WebSocket implementation available.');\n }\n\n return WebSocketConstructor;\n}\n\n/**\n * Converts an http(s) URL to the corresponding ws(s) URL.\n */\nexport function toWebSocketUrl(url: string | URL): URL {\n const wsUrl = new URL(url);\n if (wsUrl.protocol === 'http:') {\n wsUrl.protocol = 'ws:';\n } else if (wsUrl.protocol === 'https:') {\n wsUrl.protocol = 'wss:';\n }\n return wsUrl;\n}\n\nconst textDecoder = new TextDecoder();\n\n/**\n * Reads WebSocket message data as text, handling string, binary,\n * and Blob payloads.\n */\nexport async function readWebSocketMessageText(data: unknown): Promise<string> {\n if (typeof data === 'string') return data;\n if (data instanceof ArrayBuffer) return textDecoder.decode(data);\n if (ArrayBuffer.isView(data)) {\n return textDecoder.decode(data);\n }\n if (typeof Blob !== 'undefined' && data instanceof Blob) {\n return data.text();\n }\n return String(data);\n}\n\nconst WEBSOCKET_OPEN_STATE = 1;\n\n/**\n * Waits until the socket's send buffer drains below `highWaterMark` bytes.\n * No-op for implementations that do not expose `bufferedAmount`. There is no\n * portable drain event, so this polls. Returns as soon as the socket is no\n * longer open or the signal aborts — `bufferedAmount` never drains on a\n * closed socket, so waiting on would poll forever.\n */\nexport async function waitForWebSocketBufferDrain(\n socket: WebSocketLike,\n {\n highWaterMark = 1024 * 1024,\n pollIntervalMs = 20,\n abortSignal,\n }: {\n highWaterMark?: number;\n pollIntervalMs?: number;\n abortSignal?: AbortSignal;\n } = {},\n): Promise<void> {\n while (\n socket.readyState === WEBSOCKET_OPEN_STATE &&\n (socket.bufferedAmount ?? 0) > highWaterMark\n ) {\n if (abortSignal?.aborted === true) {\n return;\n }\n await delay(pollIntervalMs);\n }\n}\n","import { removeUndefinedEntries } from './remove-undefined-entries';\nimport {\n getWebSocketConstructor,\n readWebSocketMessageText,\n type WebSocketConstructor,\n type WebSocketLike,\n} from './websocket';\n\nexport interface WebSocketConnection {\n /** Undefined when the constructor threw or the signal was already aborted. */\n socket: WebSocketLike | undefined;\n /**\n * Unregisters the abort listener and closes the socket. Never throws.\n * Handlers stay attached; callers guard their own terminal state.\n */\n close: (code?: number) => void;\n}\n\n/**\n * Opens a WebSocket for a provider model, owning the transport-generic layer\n * (analogous to `postToApi` for HTTP): constructor resolution, header hygiene,\n * abort wiring, and message decoding. Callers own the URL, the auth channel\n * (subprotocols vs headers), and the wire protocol.\n */\nexport function connectToWebSocket({\n url,\n protocols,\n headers,\n webSocket,\n abortSignal,\n onOpen,\n onMessageText,\n onProcessingError,\n onSocketError,\n onClose,\n onAbort,\n}: {\n url: string | URL;\n protocols?: string | string[];\n headers?: Record<string, string | undefined>;\n webSocket?: WebSocketConstructor;\n abortSignal?: AbortSignal;\n onOpen?: (socket: WebSocketLike) => void;\n /** One decoded message. Throws and rejections go to `onProcessingError`. */\n onMessageText: (text: string) => void | PromiseLike<void>;\n /** Constructor throws and message decoding/processing failures. */\n onProcessingError: (error: unknown) => void;\n onSocketError?: () => void;\n onClose?: () => void;\n /** Also called (without opening a socket) when the signal is already aborted. */\n onAbort?: (reason: unknown) => void;\n}): WebSocketConnection {\n let socket: WebSocketLike | undefined;\n let abortListener: (() => void) | undefined;\n\n const close = (code?: number) => {\n if (abortListener != null) {\n abortSignal?.removeEventListener('abort', abortListener);\n abortListener = undefined;\n }\n try {\n socket?.close(code);\n } catch {\n // socket may already be closed\n }\n };\n\n if (abortSignal?.aborted) {\n onAbort?.(abortSignal.reason ?? new Error('Aborted'));\n return { socket: undefined, close };\n }\n\n try {\n const WebSocketConstructor = getWebSocketConstructor(webSocket);\n // native `WebSocket` ignores the headers option; header-capable\n // implementations like `ws` forward it and throw on undefined values:\n socket = new WebSocketConstructor(url, protocols, {\n headers: removeUndefinedEntries(headers ?? {}),\n });\n } catch (error) {\n onProcessingError(error);\n return { socket: undefined, close };\n }\n\n if (abortSignal != null && onAbort != null) {\n abortListener = () => onAbort(abortSignal.reason ?? new Error('Aborted'));\n abortSignal.addEventListener('abort', abortListener, { once: true });\n }\n\n const openedSocket = socket;\n socket.onopen = () => {\n try {\n onOpen?.(openedSocket);\n } catch (error) {\n onProcessingError(error);\n }\n };\n // Messages are processed through a promise tail so async decoding (e.g.\n // Blob frames) cannot reorder them, and error/close handling cannot\n // overtake a still-decoding terminal frame.\n let tail: Promise<void> = Promise.resolve();\n socket.onmessage = event => {\n tail = tail\n .then(() => readWebSocketMessageText(event.data))\n .then(text => onMessageText(text))\n .catch(onProcessingError);\n };\n socket.onerror = () => {\n tail = tail.then(() => onSocketError?.()).catch(onProcessingError);\n };\n socket.onclose = () => {\n tail = tail.then(() => onClose?.()).catch(onProcessingError);\n };\n\n return { socket, close };\n}\n","/**\n * Converts an AsyncIterator to a ReadableStream.\n *\n * @template T - The type of elements produced by the AsyncIterator.\n * @param { <T>} iterator - The AsyncIterator to convert.\n * @returns {ReadableStream<T>} - A ReadableStream that provides the same data as the AsyncIterator.\n */\nexport function convertAsyncIteratorToReadableStream<T>(\n iterator: AsyncIterator<T>,\n): ReadableStream<T> {\n let cancelled = false;\n\n return new ReadableStream<T>({\n /**\n * Called when the consumer wants to pull more data from the stream.\n *\n * @param {ReadableStreamDefaultController<T>} controller - The controller to enqueue data into the stream.\n * @returns {Promise<void>}\n */\n async pull(controller) {\n if (cancelled) return;\n try {\n const { value, done } = await iterator.next();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n /**\n * Called when the consumer cancels the stream.\n */\n async cancel(reason?: unknown) {\n cancelled = true;\n if (iterator.return) {\n try {\n await iterator.return(reason);\n } catch {\n // intentionally ignore errors during cancellation\n }\n }\n },\n });\n}\n","// btoa and atob need to be invoked as a function call, not as a method call.\n// Otherwise CloudFlare will throw a\n// \"TypeError: Illegal invocation: function called with incorrect this reference\"\nconst { btoa, atob } = globalThis;\n\nexport function convertBase64ToUint8Array(base64String: string) {\n const base64Url = base64String.replace(/-/g, '+').replace(/_/g, '/');\n const latin1string = atob(base64Url);\n return Uint8Array.from(latin1string, byte => byte.codePointAt(0)!);\n}\n\nexport function convertUint8ArrayToBase64(array: Uint8Array): string {\n let latin1string = '';\n\n // Note: regular for loop to support older JavaScript versions that\n // do not support for..of on Uint8Array\n for (let i = 0; i < array.length; i++) {\n latin1string += String.fromCodePoint(array[i]);\n }\n\n return btoa(latin1string);\n}\n\nexport function convertToBase64(value: string | Uint8Array): string {\n return value instanceof Uint8Array ? convertUint8ArrayToBase64(value) : value;\n}\n","import type { FilePart } from './types/content-part';\nimport { convertBase64ToUint8Array } from './uint8-utils';\n\ntype InlineFileData = Extract<\n FilePart['data'],\n { type: 'data' } | { type: 'text' }\n>;\n\n/**\n * Converts inline file data (a tagged `data` or `text` shape) into raw bytes.\n *\n * - `{ type: 'text', text }` → UTF-8 encoded bytes\n * - `{ type: 'data', data: Uint8Array | Buffer }` → returned as-is\n * - `{ type: 'data', data: ArrayBuffer }` → wrapped in a `Uint8Array`\n * - `{ type: 'data', data: string }` → decoded as base64\n */\nexport function convertInlineFileDataToUint8Array(\n data: InlineFileData,\n): Uint8Array {\n if (data.type === 'text') {\n return new TextEncoder().encode(data.text);\n }\n if (data.data instanceof Uint8Array) {\n return data.data;\n }\n if (data.data instanceof ArrayBuffer) {\n return new Uint8Array(data.data);\n }\n return convertBase64ToUint8Array(data.data);\n}\n","import type { ImageModelV4File } from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from './uint8-utils';\n\n/**\n * Convert an ImageModelV4File to a URL or data URI string.\n *\n * If the file is a URL, it returns the URL as-is.\n * If the file is base64 data, it returns a data URI with the base64 data.\n * If the file is a Uint8Array, it converts it to base64 and returns a data URI.\n */\nexport function convertImageModelFileToDataUri(file: ImageModelV4File): string {\n if (file.type === 'url') return file.url;\n\n return `data:${file.mediaType};base64,${\n typeof file.data === 'string'\n ? file.data\n : convertUint8ArrayToBase64(file.data)\n }`;\n}\n","/**\n * Converts an input object to FormData for multipart/form-data requests.\n *\n * Handles the following cases:\n * - `null` or `undefined` values are skipped\n * - Arrays with a single element are appended as a single value\n * - Arrays with multiple elements are appended with `[]` suffix (e.g., `image[]`)\n * unless `useArrayBrackets` is set to `false`\n * - All other values are appended directly\n *\n * @param input - The input object to convert. Use a generic type for type validation.\n * @param options - Optional configuration object.\n * @param options.useArrayBrackets - Whether to add `[]` suffix for multi-element arrays.\n * Defaults to `true`. Set to `false` for APIs that expect repeated keys without brackets.\n * @returns A FormData object containing the input values.\n *\n * @example\n * ```ts\n * type MyInput = {\n * model: string;\n * prompt: string;\n * images: Blob[];\n * };\n *\n * const formData = convertToFormData<MyInput>({\n * model: 'gpt-image-1',\n * prompt: 'A cat',\n * images: [blob1, blob2],\n * });\n * ```\n */\nexport function convertToFormData<T extends Record<string, unknown>>(\n input: T,\n options: { useArrayBrackets?: boolean } = {},\n): FormData {\n const { useArrayBrackets = true } = options;\n const formData = new FormData();\n\n for (const [key, value] of Object.entries(input)) {\n if (value == null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n if (value.length === 1) {\n formData.append(key, value[0] as string | Blob);\n continue;\n }\n\n const arrayKey = useArrayBrackets ? `${key}[]` : key;\n for (const item of value) {\n formData.append(arrayKey, item as string | Blob);\n }\n continue;\n }\n\n formData.append(key, value as string | Blob);\n }\n\n return formData;\n}\n","import type {\n LanguageModelV4FunctionTool,\n LanguageModelV4ProviderTool,\n} from '@ai-sdk/provider';\n\n/**\n * Interface for mapping between custom tool names and provider tool names.\n */\nexport interface ToolNameMapping {\n /**\n * Maps a custom tool name (used by the client) to the provider's tool name.\n * If the custom tool name does not have a mapping, returns the input name.\n *\n * @param customToolName - The custom name of the tool defined by the client.\n * @returns The corresponding provider tool name, or the input name if not mapped.\n */\n toProviderToolName: (customToolName: string) => string;\n\n /**\n * Maps a provider tool name to the custom tool name used by the client.\n * If the provider tool name does not have a mapping, returns the input name.\n *\n * @param providerToolName - The name of the tool as understood by the provider.\n * @returns The corresponding custom tool name, or the input name if not mapped.\n */\n toCustomToolName: (providerToolName: string) => string;\n}\n\n/**\n * @param tools - Tools that were passed to the language model.\n * @param providerToolNames - Maps the provider tool ids to the provider tool names.\n */\nexport function createToolNameMapping({\n tools = [],\n providerToolNames,\n}: {\n /**\n * Tools that were passed to the language model.\n */\n tools:\n | Array<LanguageModelV4FunctionTool | LanguageModelV4ProviderTool>\n | undefined;\n\n /**\n * Maps the provider tool ids to the provider tool names.\n */\n providerToolNames: Record<`${string}.${string}`, string>;\n}): ToolNameMapping {\n const customToolNameToProviderToolName: Record<string, string> = {};\n const providerToolNameToCustomToolName: Record<string, string> = {};\n\n for (const tool of tools) {\n if (tool.type === 'provider' && tool.id in providerToolNames) {\n const providerToolName = providerToolNames[tool.id];\n customToolNameToProviderToolName[tool.name] = providerToolName;\n providerToolNameToCustomToolName[providerToolName] = tool.name;\n }\n }\n\n return {\n toProviderToolName: (customToolName: string) =>\n customToolNameToProviderToolName[customToolName] ?? customToolName,\n toCustomToolName: (providerToolName: string) =>\n providerToolNameToCustomToolName[providerToolName] ?? providerToolName,\n };\n}\n","/**\n * Delayed promise. It is only constructed once the value is accessed.\n * This is useful to avoid unhandled promise rejections when the promise is created\n * but not accessed.\n */\nexport class DelayedPromise<T> {\n private status:\n | { type: 'pending' }\n | { type: 'resolved'; value: T }\n | { type: 'rejected'; error: unknown } = { type: 'pending' };\n private _promise: Promise<T> | undefined;\n private _resolve: undefined | ((value: T) => void) = undefined;\n private _reject: undefined | ((error: unknown) => void) = undefined;\n\n get promise(): Promise<T> {\n if (this._promise) {\n return this._promise;\n }\n\n this._promise = new Promise<T>((resolve, reject) => {\n if (this.status.type === 'resolved') {\n resolve(this.status.value);\n } else if (this.status.type === 'rejected') {\n reject(this.status.error);\n }\n\n this._resolve = resolve;\n this._reject = reject;\n });\n\n return this._promise;\n }\n\n resolve(value: T): void {\n this.status = { type: 'resolved', value };\n\n if (this._promise) {\n this._resolve?.(value);\n }\n }\n\n reject(error: unknown): void {\n this.status = { type: 'rejected', error };\n\n if (this._promise) {\n this._reject?.(error);\n }\n }\n\n isResolved(): boolean {\n return this.status.type === 'resolved';\n }\n\n isRejected(): boolean {\n return this.status.type === 'rejected';\n }\n\n isPending(): boolean {\n return this.status.type === 'pending';\n }\n}\n","import { convertBase64ToUint8Array } from './uint8-utils';\n\nconst imageMediaTypeSignatures = [\n {\n mediaType: 'image/gif' as const,\n bytesPrefix: [0x47, 0x49, 0x46], // GIF\n },\n {\n mediaType: 'image/png' as const,\n bytesPrefix: [0x89, 0x50, 0x4e, 0x47], // PNG\n },\n {\n mediaType: 'image/jpeg' as const,\n bytesPrefix: [0xff, 0xd8], // JPEG\n },\n {\n mediaType: 'image/webp' as const,\n bytesPrefix: [\n 0x52,\n 0x49,\n 0x46,\n 0x46, // \"RIFF\"\n null,\n null,\n null,\n null, // file size (variable)\n 0x57,\n 0x45,\n 0x42,\n 0x50, // \"WEBP\"\n ],\n },\n {\n mediaType: 'image/bmp' as const,\n bytesPrefix: [0x42, 0x4d],\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x49, 0x49, 0x2a, 0x00],\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x4d, 0x4d, 0x00, 0x2a],\n },\n {\n mediaType: 'image/avif' as const,\n bytesPrefix: [\n 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66,\n ],\n },\n {\n mediaType: 'image/heic' as const,\n bytesPrefix: [\n 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x68, 0x65, 0x69, 0x63,\n ],\n },\n] as const;\n\nconst documentMediaTypeSignatures = [\n {\n mediaType: 'application/pdf' as const,\n bytesPrefix: [0x25, 0x50, 0x44, 0x46], // %PDF\n },\n] as const;\n\nconst audioMediaTypeSignaturesWithoutMp4 = [\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfb],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfa],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf3],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf2],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe3],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe2],\n },\n {\n mediaType: 'audio/wav' as const,\n bytesPrefix: [\n 0x52, // R\n 0x49, // I\n 0x46, // F\n 0x46, // F\n null,\n null,\n null,\n null,\n 0x57, // W\n 0x41, // A\n 0x56, // V\n 0x45, // E\n ],\n },\n {\n mediaType: 'audio/ogg' as const,\n bytesPrefix: [0x4f, 0x67, 0x67, 0x53],\n },\n {\n mediaType: 'audio/flac' as const,\n bytesPrefix: [0x66, 0x4c, 0x61, 0x43],\n },\n {\n mediaType: 'audio/aac' as const,\n bytesPrefix: [0x40, 0x15, 0x00, 0x00],\n },\n {\n mediaType: 'audio/webm',\n bytesPrefix: [0x1a, 0x45, 0xdf, 0xa3],\n },\n] as const;\n\nconst audioMediaTypeSignatures = [\n ...audioMediaTypeSignaturesWithoutMp4,\n {\n mediaType: 'audio/mp4' as const,\n bytesPrefix: [\n 0x00,\n 0x00,\n 0x00,\n null,\n 0x66,\n 0x74,\n 0x79,\n 0x70, // ftyp\n ],\n },\n] as const;\n\nconst videoMediaTypeSignatures = [\n {\n mediaType: 'video/mp4' as const,\n bytesPrefix: [\n 0x00,\n 0x00,\n 0x00,\n null,\n 0x66,\n 0x74,\n 0x79,\n 0x70, // ftyp\n ],\n },\n {\n mediaType: 'video/webm' as const,\n bytesPrefix: [0x1a, 0x45, 0xdf, 0xa3], // EBML\n },\n {\n mediaType: 'video/quicktime' as const,\n bytesPrefix: [\n 0x00,\n 0x00,\n 0x00,\n 0x14,\n 0x66,\n 0x74,\n 0x79,\n 0x70,\n 0x71,\n 0x74, // ftypqt\n ],\n },\n {\n mediaType: 'video/x-msvideo' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46], // RIFF (AVI)\n },\n] as const;\n\nconst DEFAULT_SNIFF_BYTES = 18;\n\n// Longest signature prefix in the tables above (e.g. image/avif = 12 bytes).\nconst MAX_SIGNATURE_BYTES = 12;\n\n// Largest ID3v2 tag (10-byte header + body) skipped to reach the audio frame.\n// Covers typical tags including embedded cover art while keeping the decode\n// bounded and O(1) in the attachment size. Exported for boundary tests.\nexport const MAX_ID3_TAG_BYTES = 128 * 1024;\n\n// Total prefix decoded when an ID3 tag is present: the tag plus room for the\n// trailing signature, so a tag right at the size limit stays detectable.\nconst ID3_SCAN_BYTES = MAX_ID3_TAG_BYTES + MAX_SIGNATURE_BYTES;\n\n// Decode/view exactly the first `maxBytes` bytes from the front of the input.\n// The base64 and raw-byte paths yield the same length, so detection does not\n// depend on the input's representation.\nfunction decodePrefix(data: Uint8Array | string, maxBytes: number): Uint8Array {\n if (typeof data !== 'string') {\n return data.length > maxBytes ? data.subarray(0, maxBytes) : data;\n }\n // base64: 4 chars -> 3 bytes. Decode whole 4-char groups, then trim the 0-2\n // extra bytes so the result matches the raw-byte path exactly.\n const maxChars = Math.ceil(maxBytes / 3) * 4;\n const bytes = convertBase64ToUint8Array(\n data.substring(0, Math.min(data.length, maxChars)),\n );\n return bytes.length > maxBytes ? bytes.subarray(0, maxBytes) : bytes;\n}\n\nfunction hasID3(bytes: Uint8Array): boolean {\n return (\n bytes.length > 10 &&\n bytes[0] === 0x49 && // 'I'\n bytes[1] === 0x44 && // 'D'\n bytes[2] === 0x33 // '3'\n );\n}\n\nconst stripID3 = (bytes: Uint8Array): Uint8Array => {\n const id3Size =\n ((bytes[6] & 0x7f) << 21) |\n ((bytes[7] & 0x7f) << 14) |\n ((bytes[8] & 0x7f) << 7) |\n (bytes[9] & 0x7f);\n return bytes.subarray(id3Size + 10);\n};\n\ntype MediaTypeSignatures = ReadonlyArray<{\n readonly mediaType: string;\n readonly bytesPrefix: ReadonlyArray<number | null>;\n}>;\n\nfunction detectMediaTypeBySignatures<T extends MediaTypeSignatures>({\n data,\n signatures,\n}: {\n data: Uint8Array | string;\n signatures: T;\n}): T[number]['mediaType'] | undefined {\n let bytes = decodePrefix(data, DEFAULT_SNIFF_BYTES);\n\n // ID3v2-tagged MP3s carry the audio frame after the tag; scan a bounded\n // prefix past it rather than decoding the whole input.\n if (hasID3(bytes)) {\n bytes = stripID3(decodePrefix(data, ID3_SCAN_BYTES));\n }\n\n for (const signature of signatures) {\n if (\n bytes.length >= signature.bytesPrefix.length &&\n signature.bytesPrefix.every(\n (byte, index) => byte === null || bytes[index] === byte,\n )\n ) {\n return signature.mediaType;\n }\n }\n\n return undefined;\n}\n\nconst topLevelSignatureTables = {\n image: imageMediaTypeSignatures,\n audio: audioMediaTypeSignatures,\n video: videoMediaTypeSignatures,\n application: documentMediaTypeSignatures,\n} as const;\n\ntype TopLevelMediaType = keyof typeof topLevelSignatureTables;\n\n/**\n * Detect the IANA media type of a file from its raw bytes or base64 string.\n *\n * - When `topLevelType` is omitted, every known signature is considered\n * (image, audio, video, and application). Returns `undefined` when the\n * bytes do not match any known signature.\n * - When `topLevelType` is provided, only signatures for that top-level\n * segment are considered. Returns `undefined` for unsupported segments\n * (e.g. `\"text\"`) or when no signature matches.\n */\nexport function detectMediaType({\n data,\n topLevelType,\n}: {\n data: Uint8Array | string;\n topLevelType?: string;\n}): string | undefined {\n if (topLevelType === undefined) {\n return detectMediaTypeBySignatures({\n data,\n signatures: [\n ...imageMediaTypeSignatures,\n ...documentMediaTypeSignatures,\n // MP4 containers cannot be distinguished as audio or video by ftyp alone.\n // Preserve the generic detection result as video/mp4.\n ...audioMediaTypeSignaturesWithoutMp4,\n ...videoMediaTypeSignatures,\n ],\n });\n }\n\n const signatures = topLevelSignatureTables[topLevelType as TopLevelMediaType];\n\n if (signatures === undefined) {\n return undefined;\n }\n\n return detectMediaTypeBySignatures({ data, signatures });\n}\n\n/**\n * Returns the top-level segment of a media type (the portion before `/`).\n *\n * Examples:\n * - `\"image/png\"` -> `\"image\"`\n * - `\"image/*\"` -> `\"image\"`\n * - `\"image\"` -> `\"image\"`\n * - `\"image/\"` -> `\"image\"`\n * - `\"\"` -> `\"\"`\n * - `\"/\"` -> `\"\"`\n */\nexport function getTopLevelMediaType(mediaType: string): string {\n const slashIndex = mediaType.indexOf('/');\n return slashIndex === -1 ? mediaType : mediaType.substring(0, slashIndex);\n}\n\n/**\n * Returns `true` only when the given media type has a non-empty, non-wildcard\n * subtype (i.e. matches the form `type/subtype`, and `subtype` is not `*`).\n *\n * Examples:\n * - `\"image/png\"` -> `true`\n * - `\"image/*\"` -> `false`\n * - `\"image\"` -> `false`\n * - `\"image/\"` -> `false`\n * - `\"\"` -> `false`\n * - `\"/\"` -> `false`\n */\nexport function isFullMediaType(mediaType: string): boolean {\n const slashIndex = mediaType.indexOf('/');\n if (slashIndex === -1) {\n return false;\n }\n const subtype = mediaType.substring(slashIndex + 1);\n return subtype.length > 0 && subtype !== '*';\n}\n","/**\n * Cancels a response body to release the underlying connection.\n *\n * When a fetch Response is rejected without consuming its body (e.g. a failed\n * status code, an open-redirect rejection, or a Content-Length that exceeds the\n * size limit), the underlying TCP socket is not returned to the connection pool\n * and may stay open until the process runs out of file descriptors. Cancelling\n * the body avoids this leak.\n *\n * Errors thrown while cancelling are ignored: the body may already be locked,\n * disturbed, or absent, none of which should mask the original rejection.\n */\nexport async function cancelResponseBody(response: Response): Promise<void> {\n try {\n await response.body?.cancel();\n } catch {\n // Ignore cancel errors so the original rejection is preserved.\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_DownloadError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class DownloadError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly url: string;\n readonly statusCode?: number;\n readonly statusText?: string;\n\n constructor({\n url,\n statusCode,\n statusText,\n cause,\n message = cause == null\n ? `Failed to download ${url}: ${statusCode} ${statusText}`\n : `Failed to download ${url}: ${cause}`,\n }: {\n url: string;\n statusCode?: number;\n statusText?: string;\n message?: string;\n cause?: unknown;\n }) {\n super({ name, message, cause });\n\n this.url = url;\n this.statusCode = statusCode;\n this.statusText = statusText;\n }\n\n static isInstance(error: unknown): error is DownloadError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","/**\n * Returns `true` when running in a browser.\n *\n * Detection keys on the presence of a global `window`, matching the browser\n * check used elsewhere in this package (see `getRuntimeEnvironmentUserAgent`)\n * so the SDK has a single, consistent definition of \"browser\". Server runtimes\n * (Node.js, Deno, Bun, edge/workers) do not define `window`.\n */\nexport function isBrowserRuntime(\n globalThisAny: any = globalThis as any,\n): boolean {\n return globalThisAny.window != null;\n}\n","/**\n * Returns true when `url` has the same origin (scheme + host + port) as\n * `baseUrl`.\n *\n * Used to decide whether provider credentials may be attached to a request to a\n * URL taken from a provider response (e.g. a polling or media-download URL).\n * Credentials must only be sent to the provider's own origin; a response that\n * names a foreign host (a CDN, or an attacker-controlled host if the response\n * is tampered with) must not receive the API key.\n *\n * Returns false if either value is not a valid absolute URL (fail-closed).\n */\nexport function isSameOrigin(url: string, baseUrl: string): boolean {\n try {\n return new URL(url).origin === new URL(baseUrl).origin;\n } catch {\n return false;\n }\n}\n","/**\n * Request headers stripped before fetching an untrusted URL: host/virtual-host\n * routing, proxy/origin spoofing, cloud-metadata, cookies, and hop-by-hop\n * transport headers (RFC 7230 §6.1).\n *\n * `Authorization` and other credential-bearing caller headers (e.g. `x-key`)\n * are intentionally not listed — they're needed on the first hop of some\n * provider polling calls. Instead, all caller headers except the user-agent are\n * dropped on a cross-origin redirect (see `fetch-with-validated-redirects`).\n */\nconst BLOCKED_REQUEST_HEADERS: readonly string[] = [\n // Hop-by-hop / transport (RFC 7230 §6.1)\n 'connection',\n 'keep-alive',\n 'te',\n 'trailer',\n 'transfer-encoding',\n 'upgrade',\n\n // Host / virtual-host routing\n 'host',\n\n // Proxy / origin spoofing\n 'forwarded',\n 'proxy-authorization',\n 'via',\n 'x-forwarded-for',\n 'x-forwarded-host',\n 'x-forwarded-proto',\n 'x-real-ip',\n\n // Cloud metadata (GCP, AWS IMDSv1/v2, Azure, Alibaba, DigitalOcean)\n 'metadata',\n 'metadata-flavor',\n 'x-aws-ec2-metadata-token',\n 'x-metadata-token',\n\n // Session / cookie\n 'cookie',\n 'set-cookie',\n];\n\n/**\n * Returns a fresh `Headers` built from `input` with {@link BLOCKED_REQUEST_HEADERS}\n * removed. The input is never mutated.\n */\nexport function sanitizeRequestHeaders(input: HeadersInit): Headers {\n const headers = new Headers(input);\n for (const name of BLOCKED_REQUEST_HEADERS) {\n headers.delete(name);\n }\n return headers;\n}\n","import { DownloadError } from './download-error';\n\n/**\n * Validates that a URL is safe to download from, blocking private/internal addresses\n * to prevent SSRF attacks.\n *\n * Note: this performs string/literal-IP checks only. It does not resolve DNS, so a\n * hostname that resolves to a private address is not blocked here (see callers, which\n * should additionally constrain egress at the network layer when handling untrusted URLs).\n *\n * @param url - The URL string to validate.\n * @throws DownloadError if the URL is unsafe.\n */\nexport function validateDownloadUrl(url: string): void {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new DownloadError({\n url,\n message: `Invalid URL: ${url}`,\n });\n }\n\n // data: URLs are inline content, so they do not trigger a network fetch or SSRF risk.\n if (parsed.protocol === 'data:') {\n return;\n }\n\n // Only allow http and https network protocols\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new DownloadError({\n url,\n message: `URL scheme must be http, https, or data, got ${parsed.protocol}`,\n });\n }\n\n // Strip a trailing dot so a fully-qualified name like `localhost.` (which resolves\n // identically to `localhost`) cannot bypass the hostname blocklist below.\n const hostname = parsed.hostname.toLowerCase().replace(/\\.+$/, '');\n\n // Block empty hostname\n if (!hostname) {\n throw new DownloadError({\n url,\n message: `URL must have a hostname`,\n });\n }\n\n // Block localhost and .local domains\n if (\n hostname === 'localhost' ||\n hostname.endsWith('.local') ||\n hostname.endsWith('.localhost')\n ) {\n throw new DownloadError({\n url,\n message: `URL with hostname ${hostname} is not allowed`,\n });\n }\n\n // Check for IPv6 addresses (enclosed in brackets in URLs)\n if (hostname.startsWith('[') && hostname.endsWith(']')) {\n const ipv6 = hostname.slice(1, -1);\n if (isPrivateIPv6(ipv6)) {\n throw new DownloadError({\n url,\n message: `URL with IPv6 address ${hostname} is not allowed`,\n });\n }\n return;\n }\n\n // Check for IPv4 addresses\n if (isIPv4(hostname)) {\n if (isPrivateIPv4(hostname)) {\n throw new DownloadError({\n url,\n message: `URL with IP address ${hostname} is not allowed`,\n });\n }\n return;\n }\n}\n\nfunction isIPv4(hostname: string): boolean {\n const parts = hostname.split('.');\n if (parts.length !== 4) return false;\n return parts.every(part => {\n const num = Number(part);\n return (\n Number.isInteger(num) && num >= 0 && num <= 255 && String(num) === part\n );\n });\n}\n\nfunction isPrivateIPv4(ip: string): boolean {\n const parts = ip.split('.').map(Number);\n const [a, b, c] = parts;\n\n // 0.0.0.0/8\n if (a === 0) return true;\n // 10.0.0.0/8\n if (a === 10) return true;\n // 100.64.0.0/10 (CGNAT, used by some cloud providers for internal traffic)\n if (a === 100 && b >= 64 && b <= 127) return true;\n // 127.0.0.0/8\n if (a === 127) return true;\n // 169.254.0.0/16\n if (a === 169 && b === 254) return true;\n // 172.16.0.0/12\n if (a === 172 && b >= 16 && b <= 31) return true;\n // 192.0.0.0/24 (IETF protocol assignments)\n if (a === 192 && b === 0 && c === 0) return true;\n // 192.0.2.0/24 (TEST-NET-1, documentation)\n if (a === 192 && b === 0 && c === 2) return true;\n // 192.168.0.0/16\n if (a === 192 && b === 168) return true;\n // 198.18.0.0/15 (benchmarking)\n if (a === 198 && (b === 18 || b === 19)) return true;\n // 198.51.100.0/24 (TEST-NET-2, documentation)\n if (a === 198 && b === 51 && c === 100) return true;\n // 203.0.113.0/24 (TEST-NET-3, documentation)\n if (a === 203 && b === 0 && c === 113) return true;\n // 224.0.0.0/4 (multicast) and 240.0.0.0/4 (reserved, incl. 255.255.255.255 broadcast)\n if (a >= 224) return true;\n\n return false;\n}\n\n/**\n * Expands an IPv6 address string into its 8 16-bit groups, handling `::`\n * compression and an optional dotted-decimal IPv4 tail (e.g. `::ffff:127.0.0.1`).\n *\n * @returns the 8 groups, or null if the input is not a parseable IPv6 address.\n */\nfunction parseIPv6(ip: string): number[] | null {\n // Strip an optional zone id (e.g. `fe80::1%eth0`).\n let address = ip.toLowerCase();\n const zoneIndex = address.indexOf('%');\n if (zoneIndex !== -1) {\n address = address.slice(0, zoneIndex);\n }\n\n // At most one `::` compression marker is allowed.\n const halves = address.split('::');\n if (halves.length > 2) return null;\n\n const toGroups = (segment: string): number[] | null => {\n if (segment === '') return [];\n const groups: number[] = [];\n const parts = segment.split(':');\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n // A dotted-decimal IPv4 tail is only valid as the final part.\n if (part.includes('.')) {\n if (i !== parts.length - 1 || !isIPv4(part)) return null;\n const [a, b, c, d] = part.split('.').map(Number);\n groups.push((a << 8) | b, (c << 8) | d);\n continue;\n }\n if (!/^[0-9a-f]{1,4}$/.test(part)) return null;\n groups.push(parseInt(part, 16));\n }\n return groups;\n };\n\n const head = toGroups(halves[0]);\n if (head === null) return null;\n\n if (halves.length === 2) {\n const tail = toGroups(halves[1]);\n if (tail === null) return null;\n const fill = 8 - head.length - tail.length;\n if (fill < 0) return null;\n return [...head, ...new Array<number>(fill).fill(0), ...tail];\n }\n\n // No `::` compression: the address must contain exactly 8 groups.\n return head.length === 8 ? head : null;\n}\n\nfunction isPrivateIPv6(ip: string): boolean {\n const groups = parseIPv6(ip);\n\n // Fail closed: if the address cannot be parsed, treat it as unsafe.\n if (groups === null) return true;\n\n const topZero = (count: number) =>\n groups.slice(0, count).every(group => group === 0);\n\n // ::1 (loopback) and :: (unspecified)\n if (topZero(7) && (groups[7] === 0 || groups[7] === 1)) return true;\n\n // fc00::/7 (unique local addresses)\n if ((groups[0] & 0xfe00) === 0xfc00) return true;\n\n // fe80::/10 (link-local)\n if ((groups[0] & 0xffc0) === 0xfe80) return true;\n\n // fec0::/10 (site-local, deprecated but still routable internally)\n if ((groups[0] & 0xffc0) === 0xfec0) return true;\n\n // ff00::/8 (multicast)\n if ((groups[0] & 0xff00) === 0xff00) return true;\n\n // 2001:db8::/32 (documentation range, not globally routable)\n if (groups[0] === 0x2001 && groups[1] === 0x0db8) return true;\n\n // 3fff::/20 (documentation range, RFC 9637)\n if (groups[0] === 0x3fff && (groups[1] & 0xf000) === 0x0000) return true;\n\n // Addresses that embed an IPv4 address in their last 32 bits. For these we\n // extract the embedded IPv4 and reuse the IPv4 private-range checks, so that\n // e.g. ::ffff:127.0.0.1 or 64:ff9b::169.254.169.254 are blocked.\n const embedsIPv4 =\n // ::/96 — IPv4-compatible (deprecated)\n topZero(6) ||\n // ::ffff:0:0/96 — IPv4-mapped (ffff in group 5)\n (topZero(5) && groups[5] === 0xffff) ||\n // ::ffff:0:0/96 — IPv4-translated form (ffff in group 4, group 5 zero)\n (topZero(4) && groups[4] === 0xffff && groups[5] === 0) ||\n // 64:ff9b::/96 — NAT64 well-known prefix\n (groups[0] === 0x0064 &&\n groups[1] === 0xff9b &&\n groups[2] === 0 &&\n groups[3] === 0 &&\n groups[4] === 0 &&\n groups[5] === 0) ||\n // 64:ff9b:1::/48 — NAT64 local-use prefix\n (groups[0] === 0x0064 && groups[1] === 0xff9b && groups[2] === 0x0001);\n\n if (embedsIPv4) {\n const a = (groups[6] >> 8) & 0xff;\n const b = groups[6] & 0xff;\n const c = (groups[7] >> 8) & 0xff;\n const d = groups[7] & 0xff;\n return isPrivateIPv4(`${a}.${b}.${c}.${d}`);\n }\n\n return false;\n}\n","import { cancelResponseBody } from './cancel-response-body';\nimport { DownloadError } from './download-error';\nimport type { FetchFunction } from './fetch-function';\nimport { isBrowserRuntime } from './is-browser-runtime';\nimport { isSameOrigin } from './is-same-origin';\nimport { sanitizeRequestHeaders } from './sanitize-request-headers';\nimport { validateDownloadUrl } from './validate-download-url';\n\nconst MAX_DOWNLOAD_REDIRECTS = 10;\n\n// Redirect status codes per the fetch spec (https://fetch.spec.whatwg.org/#redirect-status).\n// Notably 300 (Multiple Choices) and 304 (Not Modified) are NOT redirects,\n// even when a server attaches a Location header.\nconst REDIRECT_STATUS_CODES = new Set([301, 302, 303, 307, 308]);\n\n/**\n * Fetches a URL while enforcing the download guard on every hop.\n *\n * Redirects are followed manually (`redirect: 'manual'`) so each hop is\n * validated with {@link validateDownloadUrl} *before* it is requested. Relying\n * on the default `redirect: 'follow'` would issue the request to a redirect\n * target (e.g. an internal address) before we ever see its URL, defeating the\n * guard.\n *\n * Request headers are also protected: {@link sanitizeRequestHeaders} strips\n * proxy/metadata/cookie/hop-by-hop headers before the first request, and all\n * caller headers except `User-Agent` are dropped on a cross-origin redirect.\n * The fetch spec only strips `Authorization` on cross-origin redirects because\n * in a browser, CORS preflighting protects custom headers; there is no CORS on\n * the server, so provider API keys carried in custom headers (e.g. `x-key`)\n * must be dropped here as well.\n *\n * A `redirect: 'manual'` request yields an unreadable opaque response in the\n * browser (and in other spec-compliant fetch implementations), so the redirect\n * target cannot be validated here. In a real browser this is safe to follow\n * natively because reaching an internal network is not possible (fetch is\n * constrained by CORS and cannot reach a server's internal network or\n * cloud-metadata). On any other runtime we cannot validate the hop, so we fail\n * closed rather than follow it blindly and bypass the guard.\n *\n * A hop that is same-origin with `trustedOrigin` (the developer-configured\n * provider endpoint) skips target validation: that origin is exactly what an\n * unvalidated, config-derived request would fetch anyway, and validating it\n * would break legitimate self-hosted / localhost deployments whose response\n * URLs point back at the configured host. Hops on any other origin are always\n * validated.\n *\n * The returned response is the final (non-redirect) response. The caller is\n * responsible for checking `response.ok` and reading the body.\n *\n * Not solved here: this does string/literal checks only and does not resolve\n * DNS, so a hostname that *resolves* to a private address, and DNS rebinding\n * (the resolved IP flipping between validation and connect), are not blocked.\n * Server deployments fetching untrusted URLs should constrain egress at the\n * network layer or inject a Node `fetch` that pins the resolved IP at connect\n * time — those need DNS/socket APIs not available on all target runtimes\n * (edge, browser, Bun), so they are intentionally not built in.\n *\n * @throws DownloadError if a hop is unsafe, the redirect limit is exceeded, or\n * a redirect cannot be validated on a non-browser runtime.\n */\nexport async function fetchWithValidatedRedirects({\n url,\n headers,\n abortSignal,\n maxRedirects = MAX_DOWNLOAD_REDIRECTS,\n fetch = globalThis.fetch,\n trustedOrigin,\n}: {\n url: string;\n headers?: HeadersInit;\n abortSignal?: AbortSignal;\n maxRedirects?: number;\n fetch?: FetchFunction;\n /**\n * A developer-configured origin (e.g. the provider's `baseURL`) whose hops\n * skip target validation. Must never be derived from response data.\n */\n trustedOrigin?: string;\n}): Promise<Response> {\n // Left undefined when no headers are provided (bare request); otherwise\n // sanitized once and replaced on a cross-origin hop (credential drop below).\n let currentHeaders =\n headers === undefined ? undefined : sanitizeRequestHeaders(headers);\n\n const perHopInit = (redirect: RequestRedirect): RequestInit => {\n const init: RequestInit = { signal: abortSignal, redirect };\n if (currentHeaders !== undefined) {\n // Snapshot per hop: the platform fetch reads headers synchronously, but\n // an injected fetch may defer, and hops between credential drops would\n // otherwise share one instance.\n init.headers = new Headers(currentHeaders);\n }\n return init;\n };\n\n let currentUrl = url;\n // The bound also acts as a backstop against an unterminated redirect chain.\n for (let redirectCount = 0; redirectCount <= maxRedirects; redirectCount++) {\n // The developer-configured origin is trusted by definition; validating it\n // would reject legitimate self-hosted / localhost deployments.\n if (\n trustedOrigin === undefined ||\n !isSameOrigin(currentUrl, trustedOrigin)\n ) {\n validateDownloadUrl(currentUrl);\n }\n\n const response = await fetch(currentUrl, perHopInit('manual'));\n\n if (response.type === 'opaqueredirect') {\n if (!isBrowserRuntime()) {\n throw new DownloadError({\n url,\n message: `Redirect from ${currentUrl} could not be validated and was blocked`,\n });\n }\n return await fetch(currentUrl, perHopInit('follow'));\n }\n\n const location = response.headers.get('location');\n if (REDIRECT_STATUS_CODES.has(response.status) && location) {\n // Release the redirect response's connection before moving to the next\n // hop. Whether that hop is followed or rejected by the guard, an\n // unconsumed 3xx body would leak the underlying socket.\n await cancelResponseBody(response);\n const nextUrl = new URL(location, currentUrl).toString();\n\n // Drop all caller headers except the user-agent before following a\n // redirect that crosses origin. Only stripping Authorization (as the\n // fetch spec does) is not enough on the server: providers authenticate\n // with custom headers too (e.g. `x-key`), and without CORS there is\n // nothing else stopping them from riding to a foreign host.\n if (currentHeaders !== undefined && !isSameOrigin(nextUrl, currentUrl)) {\n const userAgent = currentHeaders.get('user-agent');\n currentHeaders = new Headers(\n userAgent == null ? undefined : { 'user-agent': userAgent },\n );\n }\n\n currentUrl = nextUrl;\n continue;\n }\n\n return response;\n }\n\n throw new DownloadError({\n url,\n message: `Too many redirects (max ${maxRedirects})`,\n });\n}\n","import { cancelResponseBody } from './cancel-response-body';\nimport { DownloadError } from './download-error';\n\n/**\n * Default maximum download size: 2 GiB.\n *\n * `fetch().arrayBuffer()` has ~2x peak memory overhead (undici buffers the\n * body internally, then creates the JS ArrayBuffer), so very large downloads\n * risk exceeding the default V8 heap limit on 64-bit systems and terminating\n * the process with an out-of-memory error.\n *\n * Setting this limit converts an unrecoverable OOM crash into a catchable\n * `DownloadError`.\n */\nexport const DEFAULT_MAX_DOWNLOAD_SIZE = 2 * 1024 * 1024 * 1024;\n\n/**\n * Reads a fetch Response body with a size limit to prevent memory exhaustion.\n *\n * Checks the Content-Length header for early rejection, then reads the body\n * incrementally via ReadableStream and aborts with a DownloadError when the\n * limit is exceeded.\n *\n * @param response - The fetch Response to read.\n * @param url - The URL being downloaded (used in error messages).\n * @param maxBytes - Maximum allowed bytes. Defaults to DEFAULT_MAX_DOWNLOAD_SIZE.\n * @returns A Uint8Array containing the response body.\n * @throws DownloadError if the response exceeds maxBytes.\n */\nexport async function readResponseWithSizeLimit({\n response,\n url,\n maxBytes = DEFAULT_MAX_DOWNLOAD_SIZE,\n}: {\n response: Response;\n url: string;\n maxBytes?: number;\n}): Promise<Uint8Array> {\n // Early rejection based on Content-Length header\n const contentLength = response.headers.get('content-length');\n if (contentLength != null) {\n const length = parseInt(contentLength, 10);\n if (!isNaN(length) && length > maxBytes) {\n // Cancel the body so the underlying connection is released back to the\n // pool instead of being left open until the socket is exhausted.\n await cancelResponseBody(response);\n throw new DownloadError({\n url,\n message: `Download of ${url} exceeded maximum size of ${maxBytes} bytes (Content-Length: ${length}).`,\n });\n }\n }\n\n const body = response.body;\n\n // Handle missing body (empty responses)\n if (body == null) {\n return new Uint8Array(0);\n }\n\n const reader = body.getReader();\n const chunks: Uint8Array[] = [];\n let totalBytes = 0;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n totalBytes += value.length;\n\n if (totalBytes > maxBytes) {\n throw new DownloadError({\n url,\n message: `Download of ${url} exceeded maximum size of ${maxBytes} bytes.`,\n });\n }\n\n chunks.push(value);\n }\n } finally {\n try {\n await reader.cancel();\n } finally {\n reader.releaseLock();\n }\n }\n\n // Concatenate chunks into a single Uint8Array\n const result = new Uint8Array(totalBytes);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n\n return result;\n}\n","import { cancelResponseBody } from './cancel-response-body';\nimport { DownloadError } from './download-error';\nimport { fetchWithValidatedRedirects } from './fetch-with-validated-redirects';\nimport {\n readResponseWithSizeLimit,\n DEFAULT_MAX_DOWNLOAD_SIZE,\n} from './read-response-with-size-limit';\n\n/**\n * Download a file from a URL and return it as a Blob.\n *\n * @param url - The URL to download from.\n * @param options - Optional settings for the download.\n * @param options.maxBytes - Maximum allowed download size in bytes. Defaults to 100 MiB.\n * @param options.abortSignal - An optional abort signal to cancel the download.\n * @returns A Promise that resolves to the downloaded Blob.\n *\n * @throws DownloadError if the download fails or exceeds maxBytes.\n */\nexport async function downloadBlob(\n url: string,\n options?: { maxBytes?: number; abortSignal?: AbortSignal },\n): Promise<Blob> {\n try {\n const response = await fetchWithValidatedRedirects({\n url,\n abortSignal: options?.abortSignal,\n });\n\n if (!response.ok) {\n // Release the connection before rejecting so an error status from an\n // attacker-controlled origin cannot leak open sockets.\n await cancelResponseBody(response);\n throw new DownloadError({\n url,\n statusCode: response.status,\n statusText: response.statusText,\n });\n }\n\n const data = await readResponseWithSizeLimit({\n response,\n url,\n maxBytes: options?.maxBytes ?? DEFAULT_MAX_DOWNLOAD_SIZE,\n });\n\n const contentType = response.headers.get('content-type') ?? undefined;\n return new Blob([data], contentType ? { type: contentType } : undefined);\n } catch (error) {\n if (DownloadError.isInstance(error)) {\n throw error;\n }\n\n throw new DownloadError({ url, cause: error });\n }\n}\n","/**\n * Extracts a 1-based inclusive line range from `text`, auto-detecting the\n * file's line ending (`\\r\\n`, `\\n`, or `\\r`, in that priority).\n *\n * Mixed line endings are not supported: detection picks one and uses it for\n * both the split and the rejoin, so files that mix conventions will not slice\n * cleanly. When neither `startLine` nor `endLine` is provided, the input is\n * returned unchanged. `endLine` past EOF clamps to the last line.\n */\nexport function extractLines({\n text,\n startLine,\n endLine,\n}: {\n text: string;\n startLine?: number;\n endLine?: number;\n}): string {\n if (startLine == null && endLine == null) return text;\n const lineEnding = text.includes('\\r\\n')\n ? '\\r\\n'\n : text.includes('\\n')\n ? '\\n'\n : text.includes('\\r')\n ? '\\r'\n : '\\n';\n const lines = text.split(lineEnding);\n const start = Math.max(1, startLine ?? 1) - 1;\n const end = Math.min(lines.length, endLine ?? lines.length);\n return lines.slice(start, end).join(lineEnding);\n}\n","/**\n * Extracts the headers from a response object and returns them as a key-value object.\n *\n * @param response - The response object to extract headers from.\n * @returns The headers as a key-value object.\n */\nexport function extractResponseHeaders(response: Response) {\n return Object.fromEntries<string>([...response.headers]);\n}\n","/**\n * Filters `null` and `undefined` values out of a list of values.\n *\n * @param values - The values to filter.\n * @returns A new array containing only non-nullish values.\n */\nexport function filterNullable<T>(\n ...values: Array<T | undefined | null>\n): Array<T> {\n return values.filter((value): value is NonNullable<T> => value != null);\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\n\n/**\n * Creates an ID generator.\n * The total length of the ID is the sum of the prefix, separator, and random part length.\n * Not cryptographically secure.\n *\n * @param alphabet - The alphabet to use for the ID. Default: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.\n * @param prefix - The prefix of the ID to generate. Optional.\n * @param separator - The separator between the prefix and the random part of the ID. Default: '-'.\n * @param size - The size of the random part of the ID to generate. Default: 16.\n */\nexport const createIdGenerator = ({\n prefix,\n size = 16,\n alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n separator = '-',\n}: {\n prefix?: string;\n separator?: string;\n size?: number;\n alphabet?: string;\n} = {}): IdGenerator => {\n const generator = () => {\n const alphabetLength = alphabet.length;\n const chars = new Array(size);\n for (let i = 0; i < size; i++) {\n chars[i] = alphabet[(Math.random() * alphabetLength) | 0];\n }\n return chars.join('');\n };\n\n if (prefix == null) {\n return generator;\n }\n\n // check that the prefix is not part of the alphabet (otherwise prefix checking can fail randomly)\n if (alphabet.includes(separator)) {\n throw new InvalidArgumentError({\n argument: 'separator',\n message: `The separator \"${separator}\" must not be part of the alphabet \"${alphabet}\".`,\n });\n }\n\n return () => `${prefix}${separator}${generator()}`;\n};\n\n/**\n * A function that generates an ID.\n */\nexport type IdGenerator = () => string;\n\n/**\n * Generates a 16-character random string to use for IDs.\n * Not cryptographically secure.\n */\nexport const generateId = createIdGenerator();\n","export { getErrorMessage } from '@ai-sdk/provider';\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { fetchWithValidatedRedirects } from './fetch-with-validated-redirects';\nimport type { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport { isSameOrigin } from './is-same-origin';\nimport type { ResponseHandler } from './response-handler';\nimport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nimport { withUserAgentSuffix } from './with-user-agent-suffix';\nimport { VERSION } from './version';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => globalThis.fetch;\n\nexport const getFromApi = async <T>({\n url,\n headers = {},\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch(),\n validateUrl,\n credentialedOrigin,\n trustedOrigin,\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n failedResponseHandler: ResponseHandler<Error>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n /**\n * Set `true` when `url` is untrusted (e.g. taken from a provider response\n * body): it is routed through {@link fetchWithValidatedRedirects}, which\n * rejects private/loopback/link-local targets and re-validates redirect\n * hops; blocked URLs throw `DownloadError`. Set `false` only for URLs built\n * from a developer-configured endpoint.\n *\n * Optional for backwards compatibility with existing callers; omitting it\n * behaves like `false` (no validation). Provider code in this repository\n * must always pass it explicitly so every call site makes a visible trust\n * decision — see `contributing/secure-url-handling.md`.\n */\n validateUrl?: boolean;\n /**\n * When set, `headers` are sent only if `url` is same-origin with this origin\n * (the user-agent suffix is always kept). Pass the provider's configured\n * base URL alongside `validateUrl: true` so credentials never ride a request\n * to a response-supplied host on a different origin (e.g. a CDN). Redirects\n * that later cross origin drop all caller headers regardless (see\n * {@link fetchWithValidatedRedirects}).\n */\n credentialedOrigin?: string;\n /**\n * A developer-configured origin (e.g. the provider's `baseURL`) that is\n * exempt from URL validation when `validateUrl` is `true`. A response URL\n * (or redirect hop) that is same-origin with it is fetched without target\n * validation — it points at exactly the host a config-derived\n * `validateUrl: false` request would fetch anyway, so blocking it would\n * only break legitimate self-hosted / localhost deployments whose response\n * URLs point back at the configured host. Hops on any other origin are\n * still validated. Must never be derived from response data.\n */\n trustedOrigin?: string;\n}) => {\n try {\n // Withhold caller headers when the URL is not same-origin with the origin\n // allowed to receive credentials; the user-agent suffix is still applied.\n const outgoingHeaders =\n credentialedOrigin !== undefined && !isSameOrigin(url, credentialedOrigin)\n ? {}\n : headers;\n\n const requestHeaders = withUserAgentSuffix(\n outgoingHeaders,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n );\n\n const response = validateUrl\n ? await fetchWithValidatedRedirects({\n url,\n headers: requestHeaders,\n abortSignal,\n fetch,\n trustedOrigin,\n })\n : await fetch(url, {\n method: 'GET',\n headers: requestHeaders,\n signal: abortSignal,\n });\n\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.ok) {\n let errorInformation: {\n value: Error;\n responseHeaders?: Record<string, string> | undefined;\n };\n\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: {},\n });\n } catch (error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n\n throw new APICallError({\n message: 'Failed to process error response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {},\n });\n }\n\n throw errorInformation.value;\n }\n\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: {},\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n }\n\n throw new APICallError({\n message: 'Failed to process successful response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {},\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: {} });\n }\n};\n","import { APICallError } from '@ai-sdk/provider';\nimport { isAbortError } from './is-abort-error';\n\nconst FETCH_FAILED_ERROR_MESSAGES = ['fetch failed', 'failed to fetch'];\n\nconst BUN_ERROR_CODES = [\n 'ConnectionRefused',\n 'ConnectionClosed',\n 'FailedToOpenSocket',\n 'ECONNRESET',\n 'ECONNREFUSED',\n 'ETIMEDOUT',\n 'EPIPE',\n];\n\nfunction isBunNetworkError(error: unknown): error is Error & { code?: string } {\n if (!(error instanceof Error)) {\n return false;\n }\n\n const code = (error as any).code;\n if (typeof code === 'string' && BUN_ERROR_CODES.includes(code)) {\n return true;\n }\n\n return false;\n}\n\nexport function handleFetchError({\n error,\n url,\n requestBodyValues,\n}: {\n error: unknown;\n url: string;\n requestBodyValues: unknown;\n}) {\n if (isAbortError(error)) {\n return error;\n }\n\n // unwrap original error when fetch failed (for easier debugging):\n if (\n error instanceof TypeError &&\n FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())\n ) {\n const cause = (error as any).cause;\n\n if (cause != null) {\n // Failed to connect to server:\n return new APICallError({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n requestBodyValues,\n isRetryable: true, // retry when network error\n });\n }\n }\n\n if (isBunNetworkError(error)) {\n return new APICallError({\n message: `Cannot connect to API: ${error.message}`,\n cause: error,\n url,\n requestBodyValues,\n isRetryable: true,\n });\n }\n\n return error;\n}\n","export function isAbortError(error: unknown): error is Error {\n return (\n (error instanceof Error || error instanceof DOMException) &&\n (error.name === 'AbortError' ||\n error.name === 'ResponseAborted' || // Next.js\n error.name === 'TimeoutError')\n );\n}\n","export function getRuntimeEnvironmentUserAgent(\n globalThisAny: any = globalThis as any,\n): string {\n // Browsers\n if (globalThisAny.window) {\n return `runtime/browser`;\n }\n\n // Cloudflare Workers / Deno / Bun / Node.js >= 21.1\n if (globalThisAny.navigator?.userAgent) {\n return `runtime/${globalThisAny.navigator.userAgent.toLowerCase()}`;\n }\n\n // Nodes.js < 21.1\n if (globalThisAny.process?.versions?.node) {\n return `runtime/node.js/${globalThisAny.process.version.substring(0)}`;\n }\n\n if (globalThisAny.EdgeRuntime) {\n return `runtime/vercel-edge`;\n }\n\n return 'runtime/unknown';\n}\n","/**\n * Normalizes different header inputs into a plain record with lower-case keys.\n * Entries with `undefined` or `null` values are removed.\n *\n * @param headers - Input headers (`Headers`, tuples array, plain record) to normalize.\n * @returns A record containing the normalized header entries.\n */\nexport function normalizeHeaders(\n headers:\n | HeadersInit\n | Record<string, string | undefined>\n | Array<[string, string | undefined]>\n | undefined,\n): Record<string, string> {\n if (headers == null) {\n return {};\n }\n\n const normalized: Record<string, string> = {};\n\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n normalized[key.toLowerCase()] = value;\n });\n } else {\n if (!Array.isArray(headers)) {\n headers = Object.entries(headers);\n }\n\n for (const [key, value] of headers) {\n if (value != null) {\n normalized[key.toLowerCase()] = value;\n }\n }\n }\n\n return normalized;\n}\n","import { normalizeHeaders } from './normalize-headers';\n\n/**\n * Appends suffix parts to the `user-agent` header.\n * If a `user-agent` header already exists, the suffix parts are appended to it.\n * If no `user-agent` header exists, a new one is created with the suffix parts.\n * Automatically removes undefined entries from the headers.\n *\n * @param headers - The original headers.\n * @param userAgentSuffixParts - The parts to append to the `user-agent` header.\n * @returns The new headers with the `user-agent` header set or updated.\n */\nexport function withUserAgentSuffix(\n headers: HeadersInit | Record<string, string | undefined> | undefined,\n ...userAgentSuffixParts: string[]\n): Record<string, string> {\n const normalizedHeaders = new Headers(normalizeHeaders(headers));\n\n const currentUserAgentHeader = normalizedHeaders.get('user-agent') || '';\n\n normalizedHeaders.set(\n 'user-agent',\n [currentUserAgentHeader, ...userAgentSuffixParts].filter(Boolean).join(' '),\n );\n\n return Object.fromEntries(normalizedHeaders.entries());\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import type {\n JSONSchema7,\n LanguageModelV4Message,\n LanguageModelV4Prompt,\n} from '@ai-sdk/provider';\n\nconst DEFAULT_SCHEMA_PREFIX = 'JSON schema:';\nconst DEFAULT_SCHEMA_SUFFIX =\n 'You MUST answer with a JSON object that matches the JSON schema above.';\nconst DEFAULT_GENERIC_SUFFIX = 'You MUST answer with JSON.';\n\nexport function injectJsonInstruction({\n prompt,\n schema,\n schemaPrefix = schema != null ? DEFAULT_SCHEMA_PREFIX : undefined,\n schemaSuffix = schema != null\n ? DEFAULT_SCHEMA_SUFFIX\n : DEFAULT_GENERIC_SUFFIX,\n}: {\n prompt?: string;\n schema?: JSONSchema7;\n schemaPrefix?: string;\n schemaSuffix?: string;\n}): string {\n return [\n prompt != null && prompt.length > 0 ? prompt : undefined,\n prompt != null && prompt.length > 0 ? '' : undefined, // add a newline if prompt is not null\n schemaPrefix,\n schema != null ? JSON.stringify(schema) : undefined,\n schemaSuffix,\n ]\n .filter(line => line != null)\n .join('\\n');\n}\n\nexport function injectJsonInstructionIntoMessages({\n messages,\n schema,\n schemaPrefix,\n schemaSuffix,\n}: {\n messages: LanguageModelV4Prompt;\n schema?: JSONSchema7;\n schemaPrefix?: string;\n schemaSuffix?: string;\n}): LanguageModelV4Prompt {\n const systemMessage: LanguageModelV4Message =\n messages[0]?.role === 'system'\n ? { ...messages[0] }\n : { role: 'system', content: '' };\n\n systemMessage.content = injectJsonInstruction({\n prompt: systemMessage.content,\n schema,\n schemaPrefix,\n schemaSuffix,\n });\n\n return [\n systemMessage,\n ...(messages[0]?.role === 'system' ? messages.slice(1) : messages),\n ];\n}\n","/**\n * Type-guard for Node.js `Buffer` instances.\n *\n * Uses optional chaining on `globalThis.Buffer` so it returns `false` in\n * runtimes where `Buffer` is not available (e.g. CloudFlare Workers).\n */\nexport function isBuffer(value: unknown): value is Buffer {\n return globalThis.Buffer?.isBuffer(value) ?? false;\n}\n","/**\n * Type guard that checks whether a value is not `null` or `undefined`.\n *\n * @template T - The type of the value to check.\n * @param value - The value to check.\n * @returns `true` if the value is neither `null` nor `undefined`, otherwise `false`.\n */\nexport function isNonNullable<T>(\n value: T | undefined | null,\n): value is NonNullable<T> {\n return value != null;\n}\n","import type { SharedV4ProviderReference } from '@ai-sdk/provider';\nimport { isBuffer } from './is-buffer';\n\n/**\n * Checks whether a value is a provider reference (a mapping of provider names\n * to provider-specific identifiers) as opposed to raw bytes, a URL, or a\n * tagged `{ type: ... }` object.\n */\nexport function isProviderReference(\n data: unknown,\n): data is SharedV4ProviderReference {\n return (\n typeof data === 'object' &&\n data !== null &&\n !(data instanceof Uint8Array) &&\n !(data instanceof URL) &&\n !(data instanceof ArrayBuffer) &&\n !isBuffer(data) &&\n !('type' in data)\n );\n}\n","/**\n * Checks if the given URL is supported natively by the model.\n *\n * @param mediaType - The media type of the URL. Case-sensitive. May be a full\n * `type/subtype`, a wildcard `type/*`, or just the\n * top-level segment (e.g. `image`).\n * @param url - The URL to check.\n * @param supportedUrls - A record where keys are case-sensitive media types (or '*')\n * and values are arrays of RegExp patterns for URLs.\n *\n * @returns `true` if the URL matches a pattern under the specific media type\n * or the wildcard '*', `false` otherwise.\n */\nexport function isUrlSupported({\n mediaType,\n url,\n supportedUrls,\n}: {\n mediaType: string;\n url: string;\n supportedUrls: Record<string, RegExp[]>;\n}): boolean {\n // standardize media type and url to lower case\n url = url.toLowerCase();\n mediaType = mediaType.toLowerCase();\n\n const isTopLevelOnly = !mediaType.includes('/');\n\n return (\n Object.entries(supportedUrls)\n // standardize supported url map into lowercase prefixes:\n .map(([key, value]) => {\n const mediaType = key.toLowerCase();\n return mediaType === '*' || mediaType === '*/*'\n ? { mediaTypePrefix: '', regexes: value }\n : { mediaTypePrefix: mediaType.replace(/\\*/, ''), regexes: value };\n })\n // gather all regexp pattern from matched media type prefixes:\n .filter(({ mediaTypePrefix }) => {\n if (mediaTypePrefix === '') {\n return true;\n }\n // For a top-level-only media type (e.g. `image`), we cannot determine\n // whether a specific subtype (e.g. `image/png`) would apply, so we\n // only match the corresponding `type/*` prefix exactly.\n if (isTopLevelOnly) {\n return `${mediaType}/` === mediaTypePrefix;\n }\n return mediaType.startsWith(mediaTypePrefix);\n })\n .flatMap(({ regexes }) => regexes)\n // check if any pattern matches the url:\n .some(pattern => pattern.test(url))\n );\n}\n","import { LoadAPIKeyError } from '@ai-sdk/provider';\n\nexport function loadApiKey({\n apiKey,\n environmentVariableName,\n apiKeyParameterName = 'apiKey',\n description,\n}: {\n apiKey: string | undefined;\n environmentVariableName: string;\n apiKeyParameterName?: string;\n description: string;\n}): string {\n if (typeof apiKey === 'string') {\n return apiKey;\n }\n\n if (apiKey != null) {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string.`,\n });\n }\n\n if (typeof process === 'undefined') {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables are not supported in this environment.`,\n });\n }\n\n apiKey = process.env[environmentVariableName];\n\n if (apiKey == null) {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`,\n });\n }\n\n if (typeof apiKey !== 'string') {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string. The value of the ${environmentVariableName} environment variable is not a string.`,\n });\n }\n\n return apiKey;\n}\n","/**\n * Loads an optional `string` setting from the environment or a parameter.\n *\n * @param settingValue - The setting value.\n * @param environmentVariableName - The environment variable name.\n * @returns The setting value.\n */\nexport function loadOptionalSetting({\n settingValue,\n environmentVariableName,\n}: {\n settingValue: string | undefined;\n environmentVariableName: string;\n}): string | undefined {\n if (typeof settingValue === 'string') {\n return settingValue;\n }\n\n if (settingValue != null || typeof process === 'undefined') {\n return undefined;\n }\n\n settingValue = process.env[environmentVariableName];\n\n if (settingValue == null || typeof settingValue !== 'string') {\n return undefined;\n }\n\n return settingValue;\n}\n","import { LoadSettingError } from '@ai-sdk/provider';\n\n/**\n * Loads a `string` setting from the environment or a parameter.\n *\n * @param settingValue - The setting value.\n * @param environmentVariableName - The environment variable name.\n * @param settingName - The setting name.\n * @param description - The description of the setting.\n * @returns The setting value.\n */\nexport function loadSetting({\n settingValue,\n environmentVariableName,\n settingName,\n description,\n}: {\n settingValue: string | undefined;\n environmentVariableName: string;\n settingName: string;\n description: string;\n}): string {\n if (typeof settingValue === 'string') {\n return settingValue;\n }\n\n if (settingValue != null) {\n throw new LoadSettingError({\n message: `${description} setting must be a string.`,\n });\n }\n\n if (typeof process === 'undefined') {\n throw new LoadSettingError({\n message:\n `${description} setting is missing. ` +\n `Pass it using the '${settingName}' parameter. ` +\n `Environment variables are not supported in this environment.`,\n });\n }\n\n settingValue = process.env[environmentVariableName];\n\n if (settingValue == null) {\n throw new LoadSettingError({\n message:\n `${description} setting is missing. ` +\n `Pass it using the '${settingName}' parameter ` +\n `or the ${environmentVariableName} environment variable.`,\n });\n }\n\n if (typeof settingValue !== 'string') {\n throw new LoadSettingError({\n message:\n `${description} setting must be a string. ` +\n `The value of the ${environmentVariableName} environment variable is not a string.`,\n });\n }\n\n return settingValue;\n}\n","import type {\n LanguageModelV4CallOptions,\n SharedV4Warning,\n} from '@ai-sdk/provider';\n\nexport type ReasoningLevel = Exclude<\n LanguageModelV4CallOptions['reasoning'],\n 'none' | 'provider-default' | undefined\n>;\n\nexport function isCustomReasoning(\n reasoning: LanguageModelV4CallOptions['reasoning'],\n): reasoning is Exclude<\n LanguageModelV4CallOptions['reasoning'],\n 'provider-default' | undefined\n> {\n return reasoning !== undefined && reasoning !== 'provider-default';\n}\n\n/**\n * Maps a top-level reasoning level to a provider-specific effort string using\n * the given effort map. Pushes a compatibility warning if the reasoning level\n * maps to a different string, or an unsupported warning if the level is not\n * present in the map.\n *\n * @returns The mapped effort string, or `undefined` if the level is not\n * supported.\n */\nexport function mapReasoningToProviderEffort<T extends string>({\n reasoning,\n effortMap,\n warnings,\n}: {\n reasoning: ReasoningLevel;\n effortMap: Partial<Record<ReasoningLevel, T>>;\n warnings: SharedV4Warning[];\n}): T | undefined {\n const mapped = effortMap[reasoning];\n\n if (mapped == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: `reasoning \"${reasoning}\" is not supported by this model.`,\n });\n return undefined;\n }\n\n if (mapped !== reasoning) {\n warnings.push({\n type: 'compatibility',\n feature: 'reasoning',\n details: `reasoning \"${reasoning}\" is not directly supported by this model. mapped to effort \"${mapped}\".`,\n });\n }\n\n return mapped;\n}\n\nconst DEFAULT_REASONING_BUDGET_PERCENTAGES: Record<ReasoningLevel, number> = {\n minimal: 0.02,\n low: 0.1,\n medium: 0.3,\n high: 0.6,\n xhigh: 0.9,\n};\n\n/**\n * Maps a top-level reasoning level to an absolute token budget by multiplying\n * the model's max output tokens by a percentage from the budget percentages\n * map. The result is clamped between `minReasoningBudget` (default 1024) and\n * `maxReasoningBudget`. Pushes an unsupported warning if the level is not\n * present in the budget percentages map.\n *\n * @returns The computed token budget, or `undefined` if the level is not\n * supported.\n */\nexport function mapReasoningToProviderBudget({\n reasoning,\n maxOutputTokens,\n maxReasoningBudget,\n minReasoningBudget = 1024,\n budgetPercentages = DEFAULT_REASONING_BUDGET_PERCENTAGES,\n warnings,\n}: {\n reasoning: ReasoningLevel;\n maxOutputTokens: number;\n maxReasoningBudget: number;\n minReasoningBudget?: number;\n budgetPercentages?: Partial<Record<ReasoningLevel, number>>;\n warnings: SharedV4Warning[];\n}): number | undefined {\n const pct = budgetPercentages[reasoning];\n\n if (pct == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: `reasoning \"${reasoning}\" is not supported by this model.`,\n });\n return undefined;\n }\n\n return Math.min(\n maxReasoningBudget,\n Math.max(minReasoningBudget, Math.round(maxOutputTokens * pct)),\n );\n}\n","/**\n * Maps a media type to its corresponding file extension.\n * It was originally introduced to set a filename for audio file uploads\n * in https://github.com/vercel/ai/pull/8159.\n *\n * @param mediaType The media type to map.\n * @returns The corresponding file extension\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types/Common_types\n */\nexport function mediaTypeToExtension(mediaType: string) {\n const [_type, subtype = ''] = mediaType.toLowerCase().split('/');\n\n return (\n {\n mpeg: 'mp3',\n 'x-wav': 'wav',\n opus: 'ogg',\n mp4: 'm4a',\n 'x-m4a': 'm4a',\n }[subtype] ?? subtype\n );\n}\n","import {\n JSONParseError,\n TypeValidationError,\n type JSONValue,\n} from '@ai-sdk/provider';\nimport { secureJsonParse } from './secure-json-parse';\nimport { safeValidateTypes, validateTypes } from './validate-types';\nimport type { FlexibleSchema } from './schema';\n\n/**\n * Parses a JSON string into an unknown object.\n *\n * @param text - The JSON string to parse.\n * @returns {JSONValue} - The parsed JSON object.\n */\nexport async function parseJSON(options: {\n text: string;\n schema?: undefined;\n}): Promise<JSONValue>;\n/**\n * Parses a JSON string into a strongly-typed object using the provided schema.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns {Promise<T>} - The parsed object.\n */\nexport async function parseJSON<T>(options: {\n text: string;\n schema: FlexibleSchema<T>;\n}): Promise<T>;\nexport async function parseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: FlexibleSchema<T>;\n}): Promise<T> {\n try {\n const value = secureJsonParse(text);\n\n if (schema == null) {\n return value;\n }\n\n return await validateTypes<T>({ value, schema });\n } catch (error) {\n if (\n JSONParseError.isInstance(error) ||\n TypeValidationError.isInstance(error)\n ) {\n throw error;\n }\n\n throw new JSONParseError({ text, cause: error });\n }\n}\n\nexport type ParseResult<T> =\n | { success: true; value: T; rawValue: unknown }\n | {\n success: false;\n error: JSONParseError | TypeValidationError;\n rawValue: unknown;\n };\n\n/**\n * Safely parses a JSON string and returns the result as an object of type `unknown`.\n *\n * @param text - The JSON string to parse.\n * @returns {Promise<object>} Either an object with `success: true` and the parsed data, or an object with `success: false` and the error that occurred.\n */\nexport async function safeParseJSON(options: {\n text: string;\n schema?: undefined;\n}): Promise<ParseResult<JSONValue>>;\n/**\n * Safely parses a JSON string into a strongly-typed object, using a provided schema to validate the object.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport async function safeParseJSON<T>(options: {\n text: string;\n schema: FlexibleSchema<T>;\n}): Promise<ParseResult<T>>;\nexport async function safeParseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: FlexibleSchema<T>;\n}): Promise<ParseResult<T>> {\n try {\n const value = secureJsonParse(text);\n\n if (schema == null) {\n return { success: true, value: value as T, rawValue: value };\n }\n\n return await safeValidateTypes<T>({ value, schema });\n } catch (error) {\n return {\n success: false,\n error: JSONParseError.isInstance(error)\n ? error\n : new JSONParseError({ text, cause: error }),\n rawValue: undefined,\n };\n }\n}\n\nexport function isParsableJson(input: string): boolean {\n try {\n secureJsonParse(input);\n return true;\n } catch {\n return false;\n }\n}\n","// Licensed under BSD-3-Clause (this file only)\n// Code adapted from https://github.com/fastify/secure-json-parse/blob/783fcb1b5434709466759847cec974381939673a/index.js\n//\n// Copyright (c) Vercel, Inc. (https://vercel.com)\n// Copyright (c) 2019 The Fastify Team\n// Copyright (c) 2019, Sideway Inc, and project contributors\n// All rights reserved.\n//\n// The complete list of contributors can be found at:\n// - https://github.com/hapijs/bourne/graphs/contributors\n// - https://github.com/fastify/secure-json-parse/graphs/contributors\n// - https://github.com/vercel/ai/commits/main/packages/provider-utils/src/secure-parse-json.ts\n//\n// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n//\n// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nconst suspectProtoRx =\n /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/;\nconst suspectConstructorRx =\n /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/;\n\nfunction _parse(text: string) {\n // Parse normally\n const obj = JSON.parse(text);\n\n // Ignore null and non-objects\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (\n suspectProtoRx.test(text) === false &&\n suspectConstructorRx.test(text) === false\n ) {\n return obj;\n }\n\n // Scan result for proto keys\n return filter(obj);\n}\n\nfunction filter(obj: any) {\n let next = [obj];\n\n while (next.length) {\n const nodes = next;\n next = [];\n\n for (const node of nodes) {\n if (Object.prototype.hasOwnProperty.call(node, '__proto__')) {\n throw new SyntaxError('Object contains forbidden prototype property');\n }\n\n if (\n Object.prototype.hasOwnProperty.call(node, 'constructor') &&\n node.constructor !== null &&\n typeof node.constructor === 'object' &&\n Object.prototype.hasOwnProperty.call(node.constructor, 'prototype')\n ) {\n throw new SyntaxError('Object contains forbidden prototype property');\n }\n\n for (const key in node) {\n const value = node[key];\n if (value && typeof value === 'object') {\n next.push(value);\n }\n }\n }\n }\n return obj;\n}\n\nexport function secureJsonParse(text: string) {\n const { stackTraceLimit } = Error;\n try {\n // Performance optimization, see https://github.com/fastify/secure-json-parse/pull/90\n Error.stackTraceLimit = 0;\n } catch {\n // Fallback in case Error is immutable (v8 readonly)\n return _parse(text);\n }\n\n try {\n return _parse(text);\n } finally {\n Error.stackTraceLimit = stackTraceLimit;\n }\n}\n","import {\n TypeValidationError,\n type TypeValidationContext,\n} from '@ai-sdk/provider';\nimport { asSchema, type FlexibleSchema } from './schema';\n/**\n * Validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @param {TypeValidationContext} options.context - Optional context about what is being validated.\n * @returns {Promise<T>} - The typed object.\n */\nexport async function validateTypes<OBJECT>({\n value,\n schema,\n context,\n}: {\n value: unknown;\n schema: FlexibleSchema<OBJECT>;\n context?: TypeValidationContext;\n}): Promise<OBJECT> {\n const result = await safeValidateTypes({ value, schema, context });\n\n if (!result.success) {\n throw TypeValidationError.wrap({ value, cause: result.error, context });\n }\n\n return result.value;\n}\n\n/**\n * Safely validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The JSON object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @param {TypeValidationContext} options.context - Optional context about what is being validated.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport async function safeValidateTypes<OBJECT>({\n value,\n schema,\n context,\n}: {\n value: unknown;\n schema: FlexibleSchema<OBJECT>;\n context?: TypeValidationContext;\n}): Promise<\n | {\n success: true;\n value: OBJECT;\n rawValue: unknown;\n }\n | {\n success: false;\n error: TypeValidationError;\n rawValue: unknown;\n }\n> {\n const actualSchema = asSchema(schema);\n\n try {\n if (actualSchema.validate == null) {\n return { success: true, value: value as OBJECT, rawValue: value };\n }\n\n const result = await actualSchema.validate(value);\n\n if (result.success) {\n return { success: true, value: result.value, rawValue: value };\n }\n\n return {\n success: false,\n error: TypeValidationError.wrap({ value, cause: result.error, context }),\n rawValue: value,\n };\n } catch (error) {\n return {\n success: false,\n error: TypeValidationError.wrap({ value, cause: error, context }),\n rawValue: value,\n };\n }\n}\n","import { TypeValidationError, type JSONSchema7 } from '@ai-sdk/provider';\nimport type {\n StandardSchemaV1,\n StandardJSONSchemaV1,\n} from '@standard-schema/spec';\nimport type * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4';\nimport { addAdditionalPropertiesToJsonSchema } from './add-additional-properties-to-json-schema';\nimport { zod3ToJsonSchema } from './to-json-schema/zod3-to-json-schema';\n\n/**\n * Used to mark schemas so we can support both Zod and custom schemas.\n */\nconst schemaSymbol = Symbol.for('vercel.ai.schema');\n\nexport type ValidationResult<OBJECT> =\n | { success: true; value: OBJECT }\n | { success: false; error: Error };\n\nexport type Schema<OBJECT = unknown> = {\n /**\n * Used to mark schemas so we can support both Zod and custom schemas.\n */\n [schemaSymbol]: true;\n\n /**\n * Schema type for inference.\n */\n _type: OBJECT;\n\n /**\n * Optional. Validates that the structure of a value matches this schema,\n * and returns a typed version of the value if it does.\n */\n readonly validate?: (\n value: unknown,\n ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>;\n\n /**\n * The JSON Schema for the schema. It is passed to the providers.\n */\n readonly jsonSchema: JSONSchema7 | PromiseLike<JSONSchema7>;\n};\n\n/**\n * Creates a schema with deferred creation.\n * This is important to reduce the startup time of the library\n * and to avoid initializing unused validators.\n *\n * @param createValidator A function that creates a schema.\n * @returns A function that returns a schema.\n */\nexport function lazySchema<SCHEMA>(\n createSchema: () => Schema<SCHEMA>,\n): LazySchema<SCHEMA> {\n // cache the validator to avoid initializing it multiple times\n let schema: Schema<SCHEMA> | undefined;\n return () => {\n if (schema == null) {\n schema = createSchema();\n }\n return schema;\n };\n}\n\nexport type LazySchema<SCHEMA> = () => Schema<SCHEMA>;\n\nexport type ZodSchema<SCHEMA = any> =\n | z3.Schema<SCHEMA, z3.ZodTypeDef, any>\n | z4.core.$ZodType<SCHEMA, any>;\n\nexport type StandardSchema<SCHEMA = any> = StandardSchemaV1<unknown, SCHEMA> & {\n readonly '~standard': StandardSchemaV1.Props<unknown, SCHEMA> & {\n readonly jsonSchema?: StandardJSONSchemaV1.Converter;\n };\n};\n\ntype StandardSchemaWithJsonSchema<SCHEMA = any> = StandardSchema<SCHEMA> &\n StandardJSONSchemaV1<unknown, SCHEMA>;\n\nexport type FlexibleSchema<SCHEMA = any> =\n | Schema<SCHEMA>\n | LazySchema<SCHEMA>\n | ZodSchema<SCHEMA>\n | StandardSchema<SCHEMA>;\n\nexport type InferSchema<SCHEMA> =\n SCHEMA extends ZodSchema<infer T>\n ? T\n : SCHEMA extends StandardSchema<infer T>\n ? T\n : SCHEMA extends LazySchema<infer T>\n ? T\n : SCHEMA extends Schema<infer T>\n ? T\n : never;\n\n/**\n * Create a schema using a JSON Schema.\n *\n * @param jsonSchema The JSON Schema for the schema.\n * @param options.validate Optional. A validation function for the schema.\n */\nexport function jsonSchema<OBJECT = unknown>(\n jsonSchema:\n | JSONSchema7\n | PromiseLike<JSONSchema7>\n | (() => JSONSchema7 | PromiseLike<JSONSchema7>),\n {\n validate,\n }: {\n validate?: (\n value: unknown,\n ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>;\n } = {},\n): Schema<OBJECT> {\n return {\n [schemaSymbol]: true,\n _type: undefined as OBJECT, // should never be used directly\n get jsonSchema() {\n if (typeof jsonSchema === 'function') {\n jsonSchema = jsonSchema(); // cache the function results\n }\n return jsonSchema;\n },\n validate,\n };\n}\n\nfunction isSchema(value: unknown): value is Schema {\n return (\n typeof value === 'object' &&\n value !== null &&\n schemaSymbol in value &&\n value[schemaSymbol] === true &&\n 'jsonSchema' in value &&\n 'validate' in value\n );\n}\n\nexport function asSchema<OBJECT>(\n schema: FlexibleSchema<OBJECT> | undefined,\n): Schema<OBJECT> {\n return schema == null\n ? jsonSchema({\n type: 'object',\n properties: {},\n additionalProperties: false,\n })\n : isSchema(schema)\n ? schema\n : '~standard' in schema\n ? schema['~standard'].vendor === 'zod'\n ? zodSchema(schema as ZodSchema<OBJECT>)\n : standardSchema(schema as StandardSchema<OBJECT>)\n : schema();\n}\n\nfunction standardSchema<OBJECT>(\n standardSchema: StandardSchema<OBJECT>,\n): Schema<OBJECT> {\n return jsonSchema(\n () => {\n if (!hasStandardJsonSchema(standardSchema)) {\n throw new Error(\n `Standard schema vendor '${standardSchema['~standard'].vendor}' does not support JSON Schema conversion.`,\n );\n }\n\n return addAdditionalPropertiesToJsonSchema(\n standardSchema['~standard'].jsonSchema.input({\n target: 'draft-07',\n }) as JSONSchema7,\n );\n },\n {\n validate: async value => {\n const result = await standardSchema['~standard'].validate(value);\n return 'value' in result\n ? { success: true, value: result.value }\n : {\n success: false,\n error: new TypeValidationError({\n value,\n cause: result.issues,\n }),\n };\n },\n },\n );\n}\n\nfunction hasStandardJsonSchema<OBJECT>(\n schema: StandardSchema<OBJECT>,\n): schema is StandardSchemaWithJsonSchema<OBJECT> {\n return schema['~standard'].jsonSchema != null;\n}\n\nexport function zod3Schema<OBJECT>(\n zodSchema: z3.Schema<OBJECT, z3.ZodTypeDef, any>,\n options?: {\n /**\n * Enables support for references in the schema.\n * This is required for recursive schemas, e.g. with `z.lazy`.\n * However, not all language models and providers support such references.\n * Defaults to `false`.\n */\n useReferences?: boolean;\n },\n): Schema<OBJECT> {\n // default to no references (to support openapi conversion for google)\n const useReferences = options?.useReferences ?? false;\n\n return jsonSchema(\n // defer json schema creation to avoid unnecessary computation when only validation is needed\n () =>\n zod3ToJsonSchema(zodSchema, {\n $refStrategy: useReferences ? 'root' : 'none',\n }) as JSONSchema7,\n {\n validate: async value => {\n const result = await zodSchema.safeParseAsync(value);\n return result.success\n ? { success: true, value: result.data }\n : { success: false, error: result.error };\n },\n },\n );\n}\n\nexport function zod4Schema<OBJECT>(\n zodSchema: z4.core.$ZodType<OBJECT, any>,\n options?: {\n /**\n * Enables support for references in the schema.\n * This is required for recursive schemas, e.g. with `z.lazy`.\n * However, not all language models and providers support such references.\n * Defaults to `false`.\n */\n useReferences?: boolean;\n },\n): Schema<OBJECT> {\n // default to no references (to support openapi conversion for google)\n const useReferences = options?.useReferences ?? false;\n\n return jsonSchema(\n // defer json schema creation to avoid unnecessary computation when only validation is needed\n () =>\n addAdditionalPropertiesToJsonSchema(\n z4.toJSONSchema(zodSchema, {\n target: 'draft-7',\n io: 'input',\n reused: useReferences ? 'ref' : 'inline',\n }) as JSONSchema7,\n ),\n {\n validate: async value => {\n const result = await z4.safeParseAsync(zodSchema, value);\n return result.success\n ? { success: true, value: result.data }\n : { success: false, error: result.error };\n },\n },\n );\n}\n\nexport function isZod4Schema(\n zodSchema: z4.core.$ZodType<any, any> | z3.Schema<any, z3.ZodTypeDef, any>,\n): zodSchema is z4.core.$ZodType<any, any> {\n // https://zod.dev/library-authors?id=how-to-support-zod-3-and-zod-4-simultaneously\n return '_zod' in zodSchema;\n}\n\nexport function zodSchema<OBJECT>(\n zodSchema:\n | z4.core.$ZodType<OBJECT, any>\n | z3.Schema<OBJECT, z3.ZodTypeDef, any>,\n options?: {\n /**\n * Enables support for references in the schema.\n * This is required for recursive schemas, e.g. with `z.lazy`.\n * However, not all language models and providers support such references.\n * Defaults to `false`.\n */\n useReferences?: boolean;\n },\n): Schema<OBJECT> {\n if (isZod4Schema(zodSchema)) {\n return zod4Schema(zodSchema, options);\n } else {\n return zod3Schema(zodSchema, options);\n }\n}\n","import type { JSONSchema7, JSONSchema7Definition } from '@ai-sdk/provider';\n\n/**\n * Recursively adds additionalProperties: false to the JSON schema. This is necessary because some providers (e.g. OpenAI) do not support additionalProperties: true.\n */\nexport function addAdditionalPropertiesToJsonSchema(\n jsonSchema: JSONSchema7,\n): JSONSchema7 {\n if (\n jsonSchema.type === 'object' ||\n (Array.isArray(jsonSchema.type) && jsonSchema.type.includes('object'))\n ) {\n jsonSchema.additionalProperties = false;\n const { properties } = jsonSchema;\n if (properties != null) {\n for (const key of Object.keys(properties)) {\n properties[key] = visit(properties[key]);\n }\n }\n }\n\n if (jsonSchema.items != null) {\n jsonSchema.items = Array.isArray(jsonSchema.items)\n ? jsonSchema.items.map(visit)\n : visit(jsonSchema.items);\n }\n\n if (jsonSchema.anyOf != null) {\n jsonSchema.anyOf = jsonSchema.anyOf.map(visit);\n }\n\n if (jsonSchema.allOf != null) {\n jsonSchema.allOf = jsonSchema.allOf.map(visit);\n }\n\n if (jsonSchema.oneOf != null) {\n jsonSchema.oneOf = jsonSchema.oneOf.map(visit);\n }\n\n const { definitions } = jsonSchema;\n if (definitions != null) {\n for (const key of Object.keys(definitions)) {\n definitions[key] = visit(definitions[key]);\n }\n }\n\n return jsonSchema;\n}\n\nfunction visit(def: JSONSchema7Definition): JSONSchema7Definition {\n if (typeof def === 'boolean') return def;\n return addAdditionalPropertiesToJsonSchema(def);\n}\n","import type { ZodSchema, ZodTypeDef } from 'zod/v3';\nimport type { Refs, Seen } from './refs';\nimport type { JsonSchema7Type } from './parse-types';\n\nexport type DateStrategy =\n | 'format:date-time'\n | 'format:date'\n | 'string'\n | 'integer';\n\nexport const ignoreOverride = Symbol(\n 'Let zodToJsonSchema decide on which parser to use',\n);\n\nexport type OverrideCallback = (\n def: ZodTypeDef,\n refs: Refs,\n seen: Seen | undefined,\n forceResolution?: boolean,\n) => JsonSchema7Type | undefined | typeof ignoreOverride;\n\nexport type PostProcessCallback = (\n jsonSchema: JsonSchema7Type | undefined,\n def: ZodTypeDef,\n refs: Refs,\n) => JsonSchema7Type | undefined;\n\nexport const jsonDescription: PostProcessCallback = (jsonSchema, def) => {\n if (def.description) {\n try {\n return {\n ...jsonSchema,\n ...JSON.parse(def.description),\n };\n } catch {}\n }\n\n return jsonSchema;\n};\n\nexport type Options = {\n name: string | undefined;\n $refStrategy: 'root' | 'relative' | 'none' | 'seen';\n basePath: string[];\n effectStrategy: 'input' | 'any';\n pipeStrategy: 'input' | 'output' | 'all';\n dateStrategy: DateStrategy | DateStrategy[];\n mapStrategy: 'entries' | 'record';\n removeAdditionalStrategy: 'passthrough' | 'strict';\n allowedAdditionalProperties: true | undefined;\n rejectedAdditionalProperties: false | undefined;\n strictUnions: boolean;\n definitionPath: string;\n definitions: Record<string, ZodSchema>;\n errorMessages: boolean;\n patternStrategy: 'escape' | 'preserve';\n applyRegexFlags: boolean;\n emailStrategy: 'format:email' | 'format:idn-email' | 'pattern:zod';\n base64Strategy: 'format:binary' | 'contentEncoding:base64' | 'pattern:zod';\n nameStrategy: 'ref' | 'title';\n override?: OverrideCallback;\n postProcess?: PostProcessCallback;\n};\n\nexport const defaultOptions: Options = {\n name: undefined,\n $refStrategy: 'root',\n basePath: ['#'],\n effectStrategy: 'input',\n pipeStrategy: 'all',\n dateStrategy: 'format:date-time',\n mapStrategy: 'entries',\n removeAdditionalStrategy: 'passthrough',\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: 'definitions',\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n patternStrategy: 'escape',\n applyRegexFlags: false,\n emailStrategy: 'format:email',\n base64Strategy: 'contentEncoding:base64',\n nameStrategy: 'ref',\n};\n\nexport const getDefaultOptions = (\n options: Partial<Options> | string | undefined,\n) =>\n (typeof options === 'string'\n ? {\n ...defaultOptions,\n name: options,\n }\n : {\n ...defaultOptions,\n ...options,\n }) as Options;\n","import { ZodFirstPartyTypeKind } from 'zod/v3';\nimport { parseAnyDef } from './parsers/any';\nimport { parseArrayDef } from './parsers/array';\nimport { parseBigintDef } from './parsers/bigint';\nimport { parseBooleanDef } from './parsers/boolean';\nimport { parseBrandedDef } from './parsers/branded';\nimport { parseCatchDef } from './parsers/catch';\nimport { parseDateDef } from './parsers/date';\nimport { parseDefaultDef } from './parsers/default';\nimport { parseEffectsDef } from './parsers/effects';\nimport { parseEnumDef } from './parsers/enum';\nimport { parseIntersectionDef } from './parsers/intersection';\nimport { parseLiteralDef } from './parsers/literal';\nimport { parseMapDef } from './parsers/map';\nimport { parseNativeEnumDef } from './parsers/native-enum';\nimport { parseNeverDef } from './parsers/never';\nimport { parseNullDef } from './parsers/null';\nimport { parseNullableDef } from './parsers/nullable';\nimport { parseNumberDef } from './parsers/number';\nimport { parseObjectDef } from './parsers/object';\nimport { parseOptionalDef } from './parsers/optional';\nimport { parsePipelineDef } from './parsers/pipeline';\nimport { parsePromiseDef } from './parsers/promise';\nimport { parseRecordDef } from './parsers/record';\nimport { parseSetDef } from './parsers/set';\nimport { parseStringDef } from './parsers/string';\nimport { parseTupleDef } from './parsers/tuple';\nimport { parseUndefinedDef } from './parsers/undefined';\nimport { parseUnionDef } from './parsers/union';\nimport { parseUnknownDef } from './parsers/unknown';\nimport type { Refs } from './refs';\nimport { parseReadonlyDef } from './parsers/readonly';\nimport type { JsonSchema7Type } from './parse-types';\n\nexport type InnerDefGetter = () => any;\n\nexport const selectParser = (\n def: any,\n typeName: ZodFirstPartyTypeKind,\n refs: Refs,\n): JsonSchema7Type | undefined | InnerDefGetter => {\n switch (typeName) {\n case ZodFirstPartyTypeKind.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNumber:\n return parseNumberDef(def);\n case ZodFirstPartyTypeKind.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBigInt:\n return parseBigintDef(def);\n case ZodFirstPartyTypeKind.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUndefined:\n return parseUndefinedDef();\n case ZodFirstPartyTypeKind.ZodNull:\n return parseNullDef();\n case ZodFirstPartyTypeKind.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUnion:\n case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLiteral:\n return parseLiteralDef(def);\n case ZodFirstPartyTypeKind.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLazy:\n return () => (def as any).getter()._def;\n case ZodFirstPartyTypeKind.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNaN:\n case ZodFirstPartyTypeKind.ZodNever:\n return parseNeverDef();\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef();\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef();\n case ZodFirstPartyTypeKind.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind.ZodFunction:\n case ZodFirstPartyTypeKind.ZodVoid:\n case ZodFirstPartyTypeKind.ZodSymbol:\n return undefined;\n default:\n /* c8 ignore next */\n return ((_: never) => undefined)(typeName);\n }\n};\n","export type JsonSchema7AnyType = { $ref?: string };\n\nexport function parseAnyDef(): JsonSchema7AnyType {\n return {};\n}\n","import { ZodFirstPartyTypeKind, type ZodArrayDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport type JsonSchema7ArrayType = {\n type: 'array';\n items?: JsonSchema7Type;\n minItems?: number;\n maxItems?: number;\n};\n\nexport function parseArrayDef(def: ZodArrayDef, refs: Refs) {\n const res: JsonSchema7ArrayType = {\n type: 'array',\n };\n if (\n def.type?._def &&\n def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny\n ) {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items'],\n });\n }\n\n if (def.minLength) {\n res.minItems = def.minLength.value;\n }\n if (def.maxLength) {\n res.maxItems = def.maxLength.value;\n }\n if (def.exactLength) {\n res.minItems = def.exactLength.value;\n res.maxItems = def.exactLength.value;\n }\n return res;\n}\n","import type { ZodBigIntDef } from 'zod/v3';\n\nexport type JsonSchema7BigintType = {\n type: 'integer';\n format: 'int64';\n minimum?: BigInt;\n exclusiveMinimum?: BigInt;\n maximum?: BigInt;\n exclusiveMaximum?: BigInt;\n multipleOf?: BigInt;\n};\n\nexport function parseBigintDef(def: ZodBigIntDef): JsonSchema7BigintType {\n const res: JsonSchema7BigintType = {\n type: 'integer',\n format: 'int64',\n };\n\n if (!def.checks) return res;\n\n for (const check of def.checks) {\n switch (check.kind) {\n case 'min':\n if (check.inclusive) {\n res.minimum = check.value;\n } else {\n res.exclusiveMinimum = check.value;\n }\n break;\n case 'max':\n if (check.inclusive) {\n res.maximum = check.value;\n } else {\n res.exclusiveMaximum = check.value;\n }\n\n break;\n case 'multipleOf':\n res.multipleOf = check.value;\n break;\n }\n }\n return res;\n}\n","export type JsonSchema7BooleanType = {\n type: 'boolean';\n};\n\nexport function parseBooleanDef(): JsonSchema7BooleanType {\n return { type: 'boolean' };\n}\n","import type { ZodBrandedDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { Refs } from '../refs';\n\nexport function parseBrandedDef(_def: ZodBrandedDef<any>, refs: Refs) {\n return parseDef(_def.type._def, refs);\n}\n","import type { ZodCatchDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { Refs } from '../refs';\n\nexport const parseCatchDef = (def: ZodCatchDef<any>, refs: Refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import type { ZodDateDef } from 'zod/v3';\nimport type { Refs } from '../refs';\nimport type { DateStrategy } from '../options';\n\nexport type JsonSchema7DateType =\n | {\n type: 'integer' | 'string';\n format: 'unix-time' | 'date-time' | 'date';\n minimum?: number;\n maximum?: number;\n }\n | {\n anyOf: JsonSchema7DateType[];\n };\n\nexport function parseDateDef(\n def: ZodDateDef,\n refs: Refs,\n overrideDateStrategy?: DateStrategy,\n): JsonSchema7DateType {\n const strategy = overrideDateStrategy ?? refs.dateStrategy;\n\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map(item => parseDateDef(def, refs, item)),\n };\n }\n\n switch (strategy) {\n case 'string':\n case 'format:date-time':\n return {\n type: 'string',\n format: 'date-time',\n };\n case 'format:date':\n return {\n type: 'string',\n format: 'date',\n };\n case 'integer':\n return integerDateParser(def);\n }\n}\n\nconst integerDateParser = (def: ZodDateDef) => {\n const res: JsonSchema7DateType = {\n type: 'integer',\n format: 'unix-time',\n };\n\n for (const check of def.checks) {\n switch (check.kind) {\n case 'min':\n res.minimum = check.value;\n break;\n case 'max':\n res.maximum = check.value;\n break;\n }\n }\n\n return res;\n};\n","import type { ZodDefaultDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport function parseDefaultDef(\n _def: ZodDefaultDef,\n refs: Refs,\n): JsonSchema7Type & { default: any } {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue(),\n };\n}\n","import type { ZodEffectsDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseAnyDef } from './any';\n\nexport function parseEffectsDef(\n _def: ZodEffectsDef,\n refs: Refs,\n): JsonSchema7Type | undefined {\n return refs.effectStrategy === 'input'\n ? parseDef(_def.schema._def, refs)\n : parseAnyDef();\n}\n","import type { ZodEnumDef } from 'zod/v3';\n\nexport type JsonSchema7EnumType = {\n type: 'string';\n enum: string[];\n};\n\nexport function parseEnumDef(def: ZodEnumDef): JsonSchema7EnumType {\n return {\n type: 'string',\n enum: Array.from(def.values),\n };\n}\n","import type { ZodIntersectionDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { JsonSchema7StringType } from './string';\n\nexport type JsonSchema7AllOfType = {\n allOf: JsonSchema7Type[];\n unevaluatedProperties?: boolean;\n};\n\nconst isJsonSchema7AllOfType = (\n type: JsonSchema7Type | JsonSchema7StringType,\n): type is JsonSchema7AllOfType => {\n if ('type' in type && type.type === 'string') return false;\n return 'allOf' in type;\n};\n\nexport function parseIntersectionDef(\n def: ZodIntersectionDef,\n refs: Refs,\n): JsonSchema7AllOfType | JsonSchema7Type | undefined {\n const allOf = [\n parseDef(def.left._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', '0'],\n }),\n parseDef(def.right._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', '1'],\n }),\n ].filter((x): x is JsonSchema7Type => !!x);\n\n const mergedAllOf: JsonSchema7Type[] = [];\n // If either of the schemas is an allOf, merge them into a single allOf\n allOf.forEach(schema => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n } else {\n let nestedSchema: JsonSchema7Type = schema;\n if (\n 'additionalProperties' in schema &&\n schema.additionalProperties === false\n ) {\n const { additionalProperties: _additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length ? { allOf: mergedAllOf } : undefined;\n}\n","import type { ZodLiteralDef } from 'zod/v3';\n\nexport type JsonSchema7LiteralType =\n | {\n type: 'string' | 'number' | 'integer' | 'boolean';\n const: string | number | boolean;\n }\n | {\n type: 'object' | 'array';\n };\n\nexport function parseLiteralDef(def: ZodLiteralDef): JsonSchema7LiteralType {\n const parsedType = typeof def.value;\n if (\n parsedType !== 'bigint' &&\n parsedType !== 'number' &&\n parsedType !== 'boolean' &&\n parsedType !== 'string'\n ) {\n return {\n type: Array.isArray(def.value) ? 'array' : 'object',\n };\n }\n\n return {\n type: parsedType === 'bigint' ? 'integer' : parsedType,\n const: def.value,\n };\n}\n","import {\n ZodFirstPartyTypeKind,\n type ZodMapDef,\n type ZodRecordDef,\n type ZodTypeAny,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseBrandedDef } from './branded';\nimport type { JsonSchema7EnumType } from './enum';\nimport { parseStringDef, type JsonSchema7StringType } from './string';\ntype JsonSchema7RecordPropertyNamesType =\n | Omit<JsonSchema7StringType, 'type'>\n | Omit<JsonSchema7EnumType, 'type'>;\n\nexport type JsonSchema7RecordType = {\n type: 'object';\n additionalProperties?: JsonSchema7Type | true;\n propertyNames?: JsonSchema7RecordPropertyNamesType;\n};\n\nexport function parseRecordDef(\n def: ZodRecordDef<ZodTypeAny, ZodTypeAny> | ZodMapDef,\n refs: Refs,\n): JsonSchema7RecordType {\n const schema: JsonSchema7RecordType = {\n type: 'object',\n additionalProperties:\n parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'additionalProperties'],\n }) ?? refs.allowedAdditionalProperties,\n };\n\n if (\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.checks?.length\n ) {\n const { type: _type, ...keyType } = parseStringDef(def.keyType._def, refs);\n\n return {\n ...schema,\n propertyNames: keyType,\n };\n } else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values,\n },\n };\n } else if (\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.type._def.checks?.length\n ) {\n const { type: _type, ...keyType } = parseBrandedDef(\n def.keyType._def,\n refs,\n ) as JsonSchema7StringType;\n\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n\n return schema;\n}\n","import type { ZodStringDef } from 'zod/v3';\nimport type { Refs } from '../refs';\n\nlet emojiRegex: RegExp | undefined = undefined;\n\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email:\n /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\n '^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$',\n 'u',\n );\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr:\n /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr:\n /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url:\n /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n} as const;\n\nexport type JsonSchema7StringType = {\n type: 'string';\n minLength?: number;\n maxLength?: number;\n format?:\n | 'email'\n | 'idn-email'\n | 'uri'\n | 'uuid'\n | 'date-time'\n | 'ipv4'\n | 'ipv6'\n | 'date'\n | 'time'\n | 'duration';\n pattern?: string;\n allOf?: {\n pattern: string;\n }[];\n anyOf?: {\n format: string;\n }[];\n contentEncoding?: string;\n};\n\nexport function parseStringDef(\n def: ZodStringDef,\n refs: Refs,\n): JsonSchema7StringType {\n const res: JsonSchema7StringType = {\n type: 'string',\n };\n\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case 'min':\n res.minLength =\n typeof res.minLength === 'number'\n ? Math.max(res.minLength, check.value)\n : check.value;\n break;\n case 'max':\n res.maxLength =\n typeof res.maxLength === 'number'\n ? Math.min(res.maxLength, check.value)\n : check.value;\n\n break;\n case 'email':\n switch (refs.emailStrategy) {\n case 'format:email':\n addFormat(res, 'email', check.message, refs);\n break;\n case 'format:idn-email':\n addFormat(res, 'idn-email', check.message, refs);\n break;\n case 'pattern:zod':\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n\n break;\n case 'url':\n addFormat(res, 'uri', check.message, refs);\n break;\n case 'uuid':\n addFormat(res, 'uuid', check.message, refs);\n break;\n case 'regex':\n addPattern(res, check.regex, check.message, refs);\n break;\n case 'cuid':\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case 'cuid2':\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case 'startsWith':\n addPattern(\n res,\n RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`),\n check.message,\n refs,\n );\n break;\n case 'endsWith':\n addPattern(\n res,\n RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`),\n check.message,\n refs,\n );\n break;\n case 'datetime':\n addFormat(res, 'date-time', check.message, refs);\n break;\n case 'date':\n addFormat(res, 'date', check.message, refs);\n break;\n case 'time':\n addFormat(res, 'time', check.message, refs);\n break;\n case 'duration':\n addFormat(res, 'duration', check.message, refs);\n break;\n case 'length':\n res.minLength =\n typeof res.minLength === 'number'\n ? Math.max(res.minLength, check.value)\n : check.value;\n res.maxLength =\n typeof res.maxLength === 'number'\n ? Math.min(res.maxLength, check.value)\n : check.value;\n break;\n case 'includes': {\n addPattern(\n res,\n RegExp(escapeLiteralCheckValue(check.value, refs)),\n check.message,\n refs,\n );\n break;\n }\n case 'ip': {\n if (check.version !== 'v6') {\n addFormat(res, 'ipv4', check.message, refs);\n }\n if (check.version !== 'v4') {\n addFormat(res, 'ipv6', check.message, refs);\n }\n break;\n }\n case 'base64url':\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case 'jwt':\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case 'cidr': {\n if (check.version !== 'v6') {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== 'v4') {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case 'emoji':\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case 'ulid': {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case 'base64': {\n switch (refs.base64Strategy) {\n case 'format:binary': {\n addFormat(res, 'binary' as any, check.message, refs);\n break;\n }\n\n case 'contentEncoding:base64': {\n res.contentEncoding = 'base64';\n break;\n }\n\n case 'pattern:zod': {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case 'nanoid': {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case 'toLowerCase':\n case 'toUpperCase':\n case 'trim':\n break;\n default:\n /* c8 ignore next */\n ((_: never) => {})(check);\n }\n }\n }\n\n return res;\n}\n\nfunction escapeLiteralCheckValue(literal: string, refs: Refs): string {\n return refs.patternStrategy === 'escape'\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\n\nconst ALPHA_NUMERIC = new Set(\n 'ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789',\n);\n\nfunction escapeNonAlphaNumeric(source: string) {\n let result = '';\n\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += '\\\\';\n }\n\n result += source[i];\n }\n\n return result;\n}\n\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(\n schema: JsonSchema7StringType,\n value: Required<JsonSchema7StringType>['format'],\n message: string | undefined,\n refs: Refs,\n) {\n if (schema.format || schema.anyOf?.some(x => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n\n if (schema.format) {\n schema.anyOf!.push({\n format: schema.format,\n });\n delete schema.format;\n }\n\n schema.anyOf!.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n } else {\n schema.format = value;\n }\n}\n\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(\n schema: JsonSchema7StringType,\n regex: RegExp,\n message: string | undefined,\n refs: Refs,\n) {\n if (schema.pattern || schema.allOf?.some(x => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n\n if (schema.pattern) {\n schema.allOf!.push({\n pattern: schema.pattern,\n });\n delete schema.pattern;\n }\n\n schema.allOf!.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n } else {\n schema.pattern = stringifyRegExpWithFlags(regex, refs);\n }\n}\n\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex: RegExp, refs: Refs): string {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n\n // Currently handled flags\n const flags = {\n i: regex.flags.includes('i'), // Case-insensitive\n m: regex.flags.includes('m'), // `^` and `$` matches adjacent to newline characters\n s: regex.flags.includes('s'), // `.` matches newlines\n };\n\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = '';\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n } else if (source[i + 1] === '-' && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n } else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n } else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n\n if (flags.m) {\n if (source[i] === '^') {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n } else if (source[i] === '$') {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n\n if (flags.s && source[i] === '.') {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n\n pattern += source[i];\n if (source[i] === '\\\\') {\n isEscaped = true;\n } else if (inCharGroup && source[i] === ']') {\n inCharGroup = false;\n } else if (!inCharGroup && source[i] === '[') {\n inCharGroup = true;\n }\n }\n\n try {\n new RegExp(pattern);\n } catch {\n console.warn(\n `Could not convert regex pattern at ${refs.currentPath.join(\n '/',\n )} to a flag-independent form! Falling back to the flag-ignorant source`,\n );\n return regex.source;\n }\n\n return pattern;\n}\n","import type { ZodMapDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseAnyDef } from './any';\nimport { parseRecordDef, type JsonSchema7RecordType } from './record';\nexport type JsonSchema7MapType = {\n type: 'array';\n maxItems: 125;\n items: {\n type: 'array';\n items: [JsonSchema7Type, JsonSchema7Type];\n minItems: 2;\n maxItems: 2;\n };\n};\n\nexport function parseMapDef(\n def: ZodMapDef,\n refs: Refs,\n): JsonSchema7MapType | JsonSchema7RecordType {\n if (refs.mapStrategy === 'record') {\n return parseRecordDef(def, refs);\n }\n\n const keys =\n parseDef(def.keyType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', 'items', '0'],\n }) || parseAnyDef();\n const values =\n parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', 'items', '1'],\n }) || parseAnyDef();\n return {\n type: 'array',\n maxItems: 125,\n items: {\n type: 'array',\n items: [keys, values],\n minItems: 2,\n maxItems: 2,\n },\n };\n}\n","import type { ZodNativeEnumDef } from 'zod/v3';\n\nexport type JsonSchema7NativeEnumType = {\n type: 'string' | 'number' | ['string', 'number'];\n enum: (string | number)[];\n};\n\nexport function parseNativeEnumDef(\n def: ZodNativeEnumDef,\n): JsonSchema7NativeEnumType {\n const object = def.values;\n const actualKeys = Object.keys(def.values).filter((key: string) => {\n return typeof object[object[key]] !== 'number';\n });\n\n const actualValues = actualKeys.map((key: string) => object[key]);\n\n const parsedTypes = Array.from(\n new Set(actualValues.map((values: string | number) => typeof values)),\n );\n\n return {\n type:\n parsedTypes.length === 1\n ? parsedTypes[0] === 'string'\n ? 'string'\n : 'number'\n : ['string', 'number'],\n enum: actualValues,\n };\n}\n","import { parseAnyDef, type JsonSchema7AnyType } from './any';\nexport type JsonSchema7NeverType = {\n not: JsonSchema7AnyType;\n};\n\nexport function parseNeverDef(): JsonSchema7NeverType | undefined {\n return { not: parseAnyDef() };\n}\n","export type JsonSchema7NullType = {\n type: 'null';\n};\n\nexport function parseNullDef(): JsonSchema7NullType {\n return {\n type: 'null',\n };\n}\n","import type {\n ZodDiscriminatedUnionDef,\n ZodLiteralDef,\n ZodTypeAny,\n ZodUnionDef,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport const primitiveMappings = {\n ZodString: 'string',\n ZodNumber: 'number',\n ZodBigInt: 'integer',\n ZodBoolean: 'boolean',\n ZodNull: 'null',\n} as const;\ntype ZodPrimitive = keyof typeof primitiveMappings;\ntype JsonSchema7Primitive =\n (typeof primitiveMappings)[keyof typeof primitiveMappings];\n\nexport type JsonSchema7UnionType =\n | JsonSchema7PrimitiveUnionType\n | JsonSchema7AnyOfType;\n\ntype JsonSchema7PrimitiveUnionType =\n | {\n type: JsonSchema7Primitive | JsonSchema7Primitive[];\n }\n | {\n type: JsonSchema7Primitive | JsonSchema7Primitive[];\n enum: (string | number | bigint | boolean | null)[];\n };\n\ntype JsonSchema7AnyOfType = {\n anyOf: JsonSchema7Type[];\n};\n\nexport function parseUnionDef(\n def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n refs: Refs,\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined {\n const options: readonly ZodTypeAny[] =\n def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n\n // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n if (\n options.every(\n x =>\n x._def.typeName in primitiveMappings &&\n (!x._def.checks || !x._def.checks.length),\n )\n ) {\n // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n\n const types = options.reduce((types: JsonSchema7Primitive[], x) => {\n const type = primitiveMappings[x._def.typeName as ZodPrimitive]; //Can be safely casted due to row 43\n return type && !types.includes(type) ? [...types, type] : types;\n }, []);\n\n return {\n type: types.length > 1 ? types : types[0],\n };\n } else if (\n options.every(x => x._def.typeName === 'ZodLiteral' && !x.description)\n ) {\n // all options literals\n\n const types = options.reduce(\n (acc: JsonSchema7Primitive[], x: { _def: ZodLiteralDef }) => {\n const type = typeof x._def.value;\n switch (type) {\n case 'string':\n case 'number':\n case 'boolean':\n return [...acc, type];\n case 'bigint':\n return [...acc, 'integer' as const];\n case 'object':\n if (x._def.value === null) return [...acc, 'null' as const];\n case 'symbol':\n case 'undefined':\n case 'function':\n default:\n return acc;\n }\n },\n [],\n );\n\n if (types.length === options.length) {\n // all the literals are primitive, as far as null can be considered primitive\n\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce(\n (acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n },\n [] as (string | number | bigint | boolean | null)[],\n ),\n };\n }\n } else if (options.every(x => x._def.typeName === 'ZodEnum')) {\n return {\n type: 'string',\n enum: options.reduce(\n (acc: string[], x) => [\n ...acc,\n ...x._def.values.filter((x: string) => !acc.includes(x)),\n ],\n [],\n ),\n };\n }\n\n return asAnyOf(def, refs);\n}\n\nconst asAnyOf = (\n def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n refs: Refs,\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined => {\n const anyOf = (\n (def.options instanceof Map\n ? Array.from(def.options.values())\n : def.options) as any[]\n )\n .map((x, i) =>\n parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'anyOf', `${i}`],\n }),\n )\n .filter(\n (x): x is JsonSchema7Type =>\n !!x &&\n (!refs.strictUnions ||\n (typeof x === 'object' && Object.keys(x).length > 0)),\n );\n\n return anyOf.length ? { anyOf } : undefined;\n};\n","import type { ZodNullableDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { JsonSchema7NullType } from './null';\nimport { primitiveMappings } from './union';\n\nexport type JsonSchema7NullableType =\n | {\n anyOf: [JsonSchema7Type, JsonSchema7NullType];\n }\n | {\n type: [string, 'null'];\n };\n\nexport function parseNullableDef(\n def: ZodNullableDef,\n refs: Refs,\n): JsonSchema7NullableType | undefined {\n if (\n ['ZodString', 'ZodNumber', 'ZodBigInt', 'ZodBoolean', 'ZodNull'].includes(\n def.innerType._def.typeName,\n ) &&\n (!def.innerType._def.checks || !def.innerType._def.checks.length)\n ) {\n return {\n type: [\n primitiveMappings[\n def.innerType._def.typeName as keyof typeof primitiveMappings\n ],\n 'null',\n ],\n };\n }\n\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'anyOf', '0'],\n });\n\n return base && { anyOf: [base, { type: 'null' }] };\n}\n","import type { ZodNumberDef } from 'zod/v3';\n\nexport type JsonSchema7NumberType = {\n type: 'number' | 'integer';\n minimum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n exclusiveMaximum?: number;\n multipleOf?: number;\n};\n\nexport function parseNumberDef(def: ZodNumberDef): JsonSchema7NumberType {\n const res: JsonSchema7NumberType = {\n type: 'number',\n };\n\n if (!def.checks) return res;\n\n for (const check of def.checks) {\n switch (check.kind) {\n case 'int':\n res.type = 'integer';\n break;\n case 'min':\n if (check.inclusive) {\n res.minimum = check.value;\n } else {\n res.exclusiveMinimum = check.value;\n }\n break;\n case 'max':\n if (check.inclusive) {\n res.maximum = check.value;\n } else {\n res.exclusiveMaximum = check.value;\n }\n break;\n case 'multipleOf':\n res.multipleOf = check.value;\n break;\n }\n }\n return res;\n}\n","import type { ZodObjectDef, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport type JsonSchema7ObjectType = {\n type: 'object';\n properties: Record<string, JsonSchema7Type>;\n additionalProperties?: boolean | JsonSchema7Type;\n required?: string[];\n};\n\nexport function parseObjectDef(def: ZodObjectDef, refs: Refs) {\n const result: JsonSchema7ObjectType = {\n type: 'object',\n properties: {},\n };\n\n const required: string[] = [];\n\n const shape = def.shape();\n\n for (const propName in shape) {\n let propDef = shape[propName];\n\n if (propDef === undefined || propDef._def === undefined) {\n continue;\n }\n\n const propOptional = safeIsOptional(propDef);\n\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'properties', propName],\n propertyPath: [...refs.currentPath, 'properties', propName],\n });\n\n if (parsedDef === undefined) {\n continue;\n }\n\n result.properties[propName] = parsedDef;\n\n if (!propOptional) {\n required.push(propName);\n }\n }\n\n if (required.length) {\n result.required = required;\n }\n\n const additionalProperties = decideAdditionalProperties(def, refs);\n\n if (additionalProperties !== undefined) {\n result.additionalProperties = additionalProperties;\n }\n\n return result;\n}\n\nfunction decideAdditionalProperties(def: ZodObjectDef, refs: Refs) {\n if (def.catchall._def.typeName !== 'ZodNever') {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'additionalProperties'],\n });\n }\n\n switch (def.unknownKeys) {\n case 'passthrough':\n return refs.allowedAdditionalProperties;\n case 'strict':\n return refs.rejectedAdditionalProperties;\n case 'strip':\n return refs.removeAdditionalStrategy === 'strict'\n ? refs.allowedAdditionalProperties\n : refs.rejectedAdditionalProperties;\n }\n}\n\nfunction safeIsOptional(schema: ZodTypeAny): boolean {\n try {\n return schema.isOptional();\n } catch {\n return true;\n }\n}\n","import type { ZodOptionalDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseAnyDef } from './any';\n\nexport const parseOptionalDef = (\n def: ZodOptionalDef,\n refs: Refs,\n): JsonSchema7Type | undefined => {\n if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n return parseDef(def.innerType._def, refs);\n }\n\n const innerSchema = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'anyOf', '1'],\n });\n\n return innerSchema\n ? { anyOf: [{ not: parseAnyDef() }, innerSchema] }\n : parseAnyDef();\n};\n","import type { ZodPipelineDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { JsonSchema7AllOfType } from './intersection';\n\nexport const parsePipelineDef = (\n def: ZodPipelineDef<any, any>,\n refs: Refs,\n): JsonSchema7AllOfType | JsonSchema7Type | undefined => {\n if (refs.pipeStrategy === 'input') {\n return parseDef(def.in._def, refs);\n } else if (refs.pipeStrategy === 'output') {\n return parseDef(def.out._def, refs);\n }\n\n const inputSchema = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', '0'],\n });\n const outputSchema = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', inputSchema ? '1' : '0'],\n });\n\n return {\n allOf: [inputSchema, outputSchema].filter(\n (schema): schema is JsonSchema7Type => schema !== undefined,\n ),\n };\n};\n","import type { ZodPromiseDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport function parsePromiseDef(\n def: ZodPromiseDef,\n refs: Refs,\n): JsonSchema7Type | undefined {\n return parseDef(def.type._def, refs);\n}\n","import type { ZodSetDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport type JsonSchema7SetType = {\n type: 'array';\n uniqueItems: true;\n items?: JsonSchema7Type;\n minItems?: number;\n maxItems?: number;\n};\n\nexport function parseSetDef(def: ZodSetDef, refs: Refs): JsonSchema7SetType {\n const items = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items'],\n });\n\n const schema: JsonSchema7SetType = {\n type: 'array',\n uniqueItems: true,\n items,\n };\n\n if (def.minSize) {\n schema.minItems = def.minSize.value;\n }\n\n if (def.maxSize) {\n schema.maxItems = def.maxSize.value;\n }\n\n return schema;\n}\n","import type { ZodTupleDef, ZodTupleItems, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\n\nexport type JsonSchema7TupleType = {\n type: 'array';\n minItems: number;\n items: JsonSchema7Type[];\n} & (\n | {\n maxItems: number;\n }\n | {\n additionalItems?: JsonSchema7Type;\n }\n);\n\nexport function parseTupleDef(\n def: ZodTupleDef<ZodTupleItems | [], ZodTypeAny | null>,\n refs: Refs,\n): JsonSchema7TupleType {\n if (def.rest) {\n return {\n type: 'array',\n minItems: def.items.length,\n items: def.items\n .map((x, i) =>\n parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', `${i}`],\n }),\n )\n .reduce(\n (acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]),\n [],\n ),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'additionalItems'],\n }),\n };\n } else {\n return {\n type: 'array',\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items\n .map((x, i) =>\n parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', `${i}`],\n }),\n )\n .reduce(\n (acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]),\n [],\n ),\n };\n }\n}\n","import { parseAnyDef, type JsonSchema7AnyType } from './any';\nexport type JsonSchema7UndefinedType = {\n not: JsonSchema7AnyType;\n};\n\nexport function parseUndefinedDef(): JsonSchema7UndefinedType {\n return {\n not: parseAnyDef(),\n };\n}\n","import { parseAnyDef, type JsonSchema7AnyType } from './any';\nexport type JsonSchema7UnknownType = JsonSchema7AnyType;\n\nexport function parseUnknownDef(): JsonSchema7UnknownType {\n return parseAnyDef();\n}\n","import type { ZodReadonlyDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { Refs } from '../refs';\n\nexport const parseReadonlyDef = (def: ZodReadonlyDef<any>, refs: Refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","export const getRelativePath = (pathA: string[], pathB: string[]) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i]) break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join('/');\n};\n","import type { ZodTypeDef } from 'zod/v3';\nimport type { Refs, Seen } from './refs';\nimport { ignoreOverride } from './options';\nimport type { JsonSchema7Type } from './parse-types';\nimport { selectParser } from './select-parser';\nimport { getRelativePath } from './get-relative-path';\nimport { parseAnyDef } from './parsers/any';\n\nexport function parseDef(\n def: ZodTypeDef,\n refs: Refs,\n forceResolution = false, // Forces a new schema to be instantiated even though its def has been seen. Used for improving refs in definitions. See https://github.com/StefanTerdell/zod-to-json-schema/pull/61.\n): JsonSchema7Type | undefined {\n const seenItem = refs.seen.get(def);\n\n if (refs.override) {\n const overrideResult = refs.override?.(\n def,\n refs,\n seenItem,\n forceResolution,\n );\n\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n\n if (seenSchema !== undefined) {\n return seenSchema;\n }\n }\n\n const newItem: Seen = { def, path: refs.currentPath, jsonSchema: undefined };\n\n refs.seen.set(def, newItem);\n\n const jsonSchemaOrGetter = selectParser(def, (def as any).typeName, refs);\n\n // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n const jsonSchema =\n typeof jsonSchemaOrGetter === 'function'\n ? parseDef(jsonSchemaOrGetter(), refs)\n : jsonSchemaOrGetter;\n\n if (jsonSchema) {\n addMeta(def, refs, jsonSchema);\n }\n\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n\n newItem.jsonSchema = jsonSchema;\n\n return postProcessResult;\n }\n\n newItem.jsonSchema = jsonSchema;\n\n return jsonSchema;\n}\n\nconst get$ref = (\n item: Seen,\n refs: Refs,\n):\n | {\n $ref: string;\n }\n | {}\n | undefined => {\n switch (refs.$refStrategy) {\n case 'root':\n return { $ref: item.path.join('/') };\n case 'relative':\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case 'none':\n case 'seen': {\n if (\n item.path.length < refs.currentPath.length &&\n item.path.every((value, index) => refs.currentPath[index] === value)\n ) {\n console.warn(\n `Recursive reference detected at ${refs.currentPath.join(\n '/',\n )}! Defaulting to any`,\n );\n\n return parseAnyDef();\n }\n\n return refs.$refStrategy === 'seen' ? parseAnyDef() : undefined;\n }\n }\n};\n\nconst addMeta = (\n def: ZodTypeDef,\n refs: Refs,\n jsonSchema: JsonSchema7Type,\n): JsonSchema7Type => {\n if (def.description) {\n jsonSchema.description = def.description;\n }\n return jsonSchema;\n};\n","import type { ZodTypeDef } from 'zod/v3';\nimport { getDefaultOptions, type Options } from './options';\nimport type { JsonSchema7Type } from './parse-types';\n\nexport type Refs = {\n seen: Map<ZodTypeDef, Seen>;\n currentPath: string[];\n propertyPath: string[] | undefined;\n} & Options;\n\nexport type Seen = {\n def: ZodTypeDef;\n path: string[];\n jsonSchema: JsonSchema7Type | undefined;\n};\n\nexport const getRefs = (options?: string | Partial<Options>): Refs => {\n const _options = getDefaultOptions(options);\n const currentPath =\n _options.name !== undefined\n ? [..._options.basePath, _options.definitionPath, _options.name]\n : _options.basePath;\n return {\n ..._options,\n currentPath: currentPath,\n propertyPath: undefined,\n seen: new Map(\n Object.entries(_options.definitions).map(([name, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: undefined,\n },\n ]),\n ),\n };\n};\n","import type { ZodSchema } from 'zod/v3';\nimport type { Options } from './options';\nimport { parseDef } from './parse-def';\nimport type { JsonSchema7Type } from './parse-types';\nimport { getRefs } from './refs';\nimport { parseAnyDef } from './parsers/any';\n\nconst zod3ToJsonSchema = (\n schema: ZodSchema<any>,\n options?: Partial<Options> | string,\n): JsonSchema7Type & {\n $schema?: string;\n definitions?: {\n [key: string]: JsonSchema7Type;\n };\n} => {\n const refs = getRefs(options);\n\n let definitions =\n typeof options === 'object' && options.definitions\n ? Object.entries(options.definitions).reduce(\n (acc: { [key: string]: JsonSchema7Type }, [name, schema]) => ({\n ...acc,\n [name]:\n parseDef(\n schema._def,\n {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n },\n true,\n ) ?? parseAnyDef(),\n }),\n {},\n )\n : undefined;\n\n const name =\n typeof options === 'string'\n ? options\n : options?.nameStrategy === 'title'\n ? undefined\n : options?.name;\n\n const main =\n parseDef(\n schema._def,\n name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n },\n false,\n ) ?? (parseAnyDef() as JsonSchema7Type);\n\n const title =\n typeof options === 'object' &&\n options.name !== undefined &&\n options.nameStrategy === 'title'\n ? options.name\n : undefined;\n\n if (title !== undefined) {\n main.title = title;\n }\n\n const combined: ReturnType<typeof zod3ToJsonSchema> =\n name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === 'relative' ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join('/'),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n\n combined.$schema = 'http://json-schema.org/draft-07/schema#';\n\n return combined;\n};\n\nexport { zod3ToJsonSchema };\n","import {\n EventSourceParserStream,\n type EventSourceMessage,\n} from 'eventsource-parser/stream';\nimport { safeParseJSON, type ParseResult } from './parse-json';\nimport type { FlexibleSchema } from './schema';\n\n/**\n * Parses a JSON event stream into a stream of parsed JSON objects.\n */\nexport function parseJsonEventStream<T>({\n stream,\n schema,\n}: {\n stream: ReadableStream<Uint8Array>;\n schema: FlexibleSchema<T>;\n}): ReadableStream<ParseResult<T>> {\n return stream\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream())\n .pipeThrough(\n new TransformStream<EventSourceMessage, ParseResult<T>>({\n async transform({ data }, controller) {\n // ignore the 'DONE' event that e.g. OpenAI sends:\n if (data === '[DONE]') {\n return;\n }\n\n controller.enqueue(await safeParseJSON({ text: data, schema }));\n },\n }),\n );\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\nimport { safeValidateTypes } from './validate-types';\nimport type { FlexibleSchema } from './schema';\n\nexport async function parseProviderOptions<OPTIONS>({\n provider,\n providerOptions,\n schema,\n}: {\n provider: string;\n providerOptions: Record<string, unknown> | undefined;\n schema: FlexibleSchema<OPTIONS>;\n}): Promise<OPTIONS | undefined> {\n if (providerOptions?.[provider] == null) {\n return undefined;\n }\n\n const parsedProviderOptions = await safeValidateTypes<OPTIONS | undefined>({\n value: providerOptions[provider],\n schema,\n });\n\n if (!parsedProviderOptions.success) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: `invalid ${provider} provider options`,\n cause: parsedProviderOptions.error,\n });\n }\n\n return parsedProviderOptions.value;\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport type { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport type { ResponseHandler } from './response-handler';\nimport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nimport { withUserAgentSuffix } from './with-user-agent-suffix';\nimport { VERSION } from './version';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => globalThis.fetch;\n\nexport const postJsonToApi = async <T>({\n url,\n headers,\n body,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n body: unknown;\n failedResponseHandler: ResponseHandler<APICallError>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}) =>\n await postToApi({\n url,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n });\n\nexport const postFormDataToApi = async <T>({\n url,\n headers,\n formData,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n formData: FormData;\n failedResponseHandler: ResponseHandler<APICallError>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}) =>\n await postToApi({\n url,\n headers,\n body: {\n content: formData,\n values: Object.fromEntries((formData as any).entries()),\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n });\n\nexport const postToApi = async <T>({\n url,\n headers = {},\n body,\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch(),\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n body: {\n content: string | FormData | Uint8Array;\n values: unknown;\n };\n failedResponseHandler: ResponseHandler<Error>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}) => {\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: withUserAgentSuffix(\n headers,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n ),\n body: body.content,\n signal: abortSignal,\n });\n\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.ok) {\n let errorInformation: {\n value: Error;\n responseHeaders?: Record<string, string> | undefined;\n };\n\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n\n throw new APICallError({\n message: 'Failed to process error response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values,\n });\n }\n\n throw errorInformation.value;\n }\n\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n }\n\n throw new APICallError({\n message: 'Failed to process successful response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values,\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: body.values });\n }\n};\n","import type { JSONValue, JSONObject } from '@ai-sdk/provider';\nimport type { FlexibleSchema } from '../schema';\nimport type { ToolResultOutput } from './content-part';\nimport type { Context } from './context';\nimport type { ExecutableTool } from './executable-tool';\nimport type { NeverOptional } from './never-optional';\nimport type { ProviderOptions } from './provider-options';\nimport type {\n ToolExecuteFunction,\n ToolExecutionOptions,\n} from './tool-execute-function';\nimport type { ToolNeedsApprovalFunction } from './tool-needs-approval-function';\nimport type { SandboxSession } from './sandbox';\n\n/**\n * Helper type to determine the outputSchema and execute function properties of a tool.\n */\ntype ToolOutputProperties<\n INPUT,\n OUTPUT,\n CONTEXT extends Context | unknown | never,\n> = NeverOptional<\n OUTPUT,\n | {\n /**\n * The optional schema of the output that the tool produces.\n *\n * If not provided, the output shape will be inferred from the execute function.\n */\n outputSchema?: FlexibleSchema<OUTPUT>;\n\n /**\n * An async function that is called with the arguments from the tool call and produces a result.\n * If not provided, the tool will not be executed automatically.\n *\n * @args is the input of the tool call.\n * @options.abortSignal is a signal that can be used to abort the tool call.\n */\n execute: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n }\n | {\n /**\n * The schema of the output that the tool produces.\n *\n * Required when no execute function is provided.\n */\n outputSchema: FlexibleSchema<OUTPUT>;\n\n execute?: never;\n }\n>;\n\n/**\n * Common properties shared by all tool kinds.\n */\ntype BaseTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = {\n /**\n * An optional title of the tool.\n *\n * @deprecated Use `providerMetadata` for source-specific tool display metadata.\n */\n title?: string;\n\n /**\n * Additional provider-specific metadata. They are passed through\n * to the provider from the AI SDK and enable provider-specific\n * functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * Optional metadata about the tool itself (e.g. its source).\n *\n * Unlike `providerOptions`, this metadata is not sent to the language\n * model. Instead, it is propagated onto the resulting tool call's\n * `toolMetadata` so consumers can read it from tool call / result parts\n * and UI message parts. This is useful for sources of dynamic tools (e.g.\n * an MCP server) to identify themselves.\n */\n metadata?: JSONObject;\n\n /**\n * The schema of the input that the tool expects.\n * The language model will use this to generate the input.\n * It is also used to validate the output of the language model.\n *\n * You can use descriptions on the schema properties to make the input understandable for the language model.\n */\n inputSchema: FlexibleSchema<INPUT>;\n\n /**\n * An optional schema describing the context that the tool expects.\n *\n * The context is passed to execute function as part of the execution options.\n */\n contextSchema?: FlexibleSchema<CONTEXT>;\n\n /**\n * Whether the tool needs approval before it can be executed.\n *\n * @deprecated Tool approval is handled on a `generateText` / `streamText` level now.\n */\n needsApproval?:\n | boolean\n | ToolNeedsApprovalFunction<\n [INPUT] extends [never] ? unknown : INPUT,\n NoInfer<CONTEXT>\n >;\n\n /**\n * Optional function that is called when the model starts generating the tool input.\n * In non-streaming contexts, it is called immediately before `onInputAvailable`.\n */\n onInputStart?: (\n options: ToolExecutionOptions<NoInfer<CONTEXT>>,\n ) => void | PromiseLike<void>;\n\n /**\n * Optional function that is called when an argument streaming delta is available.\n * Only called when the tool is used in a streaming context.\n */\n onInputDelta?: (\n options: { inputTextDelta: string } & ToolExecutionOptions<\n NoInfer<CONTEXT>\n >,\n ) => void | PromiseLike<void>;\n\n /**\n * Optional function that is called when a tool call can be started,\n * even if the execute function is not provided.\n */\n onInputAvailable?: (\n options: {\n input: [INPUT] extends [never] ? unknown : INPUT;\n } & ToolExecutionOptions<NoInfer<CONTEXT>>,\n ) => void | PromiseLike<void>;\n\n /**\n * Optional conversion function that maps the tool result to an output that can be used by the language model.\n *\n * If not provided, the tool result will be sent as a JSON object.\n *\n * This function is invoked on the server by `convertToModelMessages`, so ensure that you pass the same \"tools\" (ToolSet) to both \"convertToModelMessages\" and \"streamText\" (or other generation APIs).\n */\n toModelOutput?: (options: {\n /**\n * The ID of the tool call. You can use it e.g. when sending tool-call related information with stream data.\n */\n toolCallId: string;\n\n /**\n * The input of the tool call.\n */\n input: [INPUT] extends [never] ? unknown : INPUT;\n\n /**\n * The output of the tool call.\n */\n output: 0 extends 1 & OUTPUT\n ? any\n : [OUTPUT] extends [never]\n ? any\n : NoInfer<OUTPUT>;\n }) => ToolResultOutput | PromiseLike<ToolResultOutput>;\n} & ToolOutputProperties<INPUT, OUTPUT, NoInfer<CONTEXT>>;\n\n/**\n * Common properties shared by function-style tools.\n */\ntype BaseFunctionTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseTool<INPUT, OUTPUT, CONTEXT> & {\n /**\n * Optional description of what the tool does.\n *\n * Included in the tool definition sent to the language model so it can\n * decide when and how to call the tool.\n *\n * Provide a string for a fixed description, or a function that returns a\n * string from the current `context` (and optional `experimental_sandbox`) when the\n * description should vary per call.\n */\n description?:\n | string\n | ((options: {\n context: NoInfer<CONTEXT>;\n experimental_sandbox?: SandboxSession;\n }) => string);\n\n /**\n * Strict mode setting for the tool.\n *\n * Providers that support strict mode will use this setting to determine\n * how the input should be generated. Strict mode will always produce\n * valid inputs, but it might limit what input schemas are supported.\n */\n strict?: boolean;\n\n /**\n * An optional list of input examples that show the language\n * model what the input should look like.\n */\n inputExamples?: Array<{ input: NoInfer<INPUT> }>;\n\n // make all properties available to improve usage dx\n id?: never;\n isProviderExecuted?: never;\n args?: never;\n supportsDeferredResults?: never;\n};\n\n/**\n * Tool with user-defined input and output schemas that is executed by the AI SDK.\n */\nexport type FunctionTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseFunctionTool<INPUT, OUTPUT, CONTEXT> & {\n type?: undefined | 'function';\n};\n\n/**\n * Tool that is defined at runtime.\n * The types of input and output are not known at development time.\n *\n * For example, MCP tools that are not known at development time.\n */\nexport type DynamicTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseFunctionTool<INPUT, OUTPUT, CONTEXT> & {\n type: 'dynamic';\n};\n\n/**\n * Common properties shared by provider tools.\n */\ntype BaseProviderTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseTool<INPUT, OUTPUT, CONTEXT> & {\n type: 'provider';\n\n /**\n * The ID of the tool. Must follow the format `<provider-name>.<unique-tool-name>`.\n */\n id: `${string}.${string}`;\n\n /**\n * The arguments for configuring the tool. Must match the expected arguments defined by the provider for this tool.\n */\n args: Record<string, unknown>;\n\n // make all properties available to improve usage dx\n description?: never;\n strict?: never;\n inputExamples?: never;\n};\n\n/**\n * Tool with provider-defined input and output schemas that is executed by the\n * user.\n *\n * For example, shell tools that are executed in a local shell, but have provider-defined input and output schemas.\n */\nexport type ProviderDefinedTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseProviderTool<INPUT, OUTPUT, CONTEXT> & {\n /**\n * Flag that indicates whether the tool is executed by the provider.\n */\n isProviderExecuted: false;\n\n // make all properties available to improve usage dx\n supportsDeferredResults?: never;\n};\n\n/**\n * Tool with provider-defined input and output schemas that is executed by the\n * provider.\n *\n * For example, web search tools and code execution tools that are executed by the provider itself.\n */\nexport type ProviderExecutedTool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> = BaseProviderTool<INPUT, OUTPUT, CONTEXT> & {\n /**\n * Flag that indicates whether the tool is executed by the provider.\n */\n isProviderExecuted: true;\n\n /**\n * Whether this provider-executed tool supports deferred results.\n *\n * When true, the tool result may not be returned in the same turn as the\n * tool call (e.g., when using programmatic tool calling where a server tool\n * triggers a client-executed tool, and the server tool's result is deferred\n * until the client tool is resolved).\n *\n * This flag allows the AI SDK to handle tool results that arrive without\n * a matching tool call in the current response.\n *\n * @default false\n */\n supportsDeferredResults?: boolean;\n};\n\n/**\n * A tool can either be user-defined or provider-defined.\n *\n * It contains the schemas and metadata needed for the language model to call\n * the tool and can include an execute function for tools that are executed by\n * the AI SDK.\n */\nexport type Tool<\n INPUT extends JSONValue | unknown | never = any,\n OUTPUT extends JSONValue | unknown | never = any,\n CONTEXT extends Context | unknown | never = any,\n> =\n | FunctionTool<INPUT, OUTPUT, CONTEXT>\n | DynamicTool<INPUT, OUTPUT, CONTEXT>\n | ProviderDefinedTool<INPUT, OUTPUT, CONTEXT>\n | ProviderExecutedTool<INPUT, OUTPUT, CONTEXT>;\n\n/**\n * Infer the tool type from a tool object.\n *\n * This is useful for type inference when working with tool objects.\n *\n * When the input has an `execute` function, the return type narrows to\n * `ExecutableTool<Tool<...>>` so that `.execute` is non-nullable without\n * needing `isExecutableTool` or a `!` assertion at the call site.\n */\n// Note: overload order is important for auto-completion.\n// The \"with execute\" overload comes first so calls that include an\n// `execute` function get the narrowed return type. Calls without\n// `execute` fall through to the overloads below.\nexport function tool<INPUT, OUTPUT, CONTEXT extends Context>(\n tool: Tool<INPUT, OUTPUT, CONTEXT> & {\n execute: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n },\n): ExecutableTool<Tool<INPUT, OUTPUT, CONTEXT>>;\nexport function tool<INPUT, OUTPUT, CONTEXT extends Context>(\n tool: Tool<INPUT, OUTPUT, CONTEXT>,\n): Tool<INPUT, OUTPUT, CONTEXT>;\nexport function tool<INPUT, CONTEXT extends Context>(\n tool: Tool<INPUT, never, CONTEXT>,\n): Tool<INPUT, never, CONTEXT>;\nexport function tool<OUTPUT, CONTEXT extends Context>(\n tool: Tool<never, OUTPUT, CONTEXT>,\n): Tool<never, OUTPUT, CONTEXT>;\nexport function tool<CONTEXT extends Context>(\n tool: Tool<never, never, CONTEXT>,\n): Tool<never, never, CONTEXT>;\nexport function tool(tool: any): any {\n return tool;\n}\n\n/**\n * Define a dynamic tool.\n */\nexport function dynamicTool(\n tool: Omit<DynamicTool<unknown, unknown, Context>, 'type'>,\n): DynamicTool<unknown, unknown, Context> {\n return { ...tool, type: 'dynamic' } as DynamicTool<unknown, unknown, Context>;\n}\n","import { tool, type ProviderDefinedTool, type Tool } from './types/tool';\nimport type { FlexibleSchema } from './schema';\nimport type { Context } from './types/context';\nimport type { ToolExecuteFunction } from './types/tool-execute-function';\n/**\n * A provider-defined tool is a tool for which the provider defines the input\n * and output schemas, but does not execute the tool.\n */\nexport type ProviderDefinedToolFactory<\n INPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n> = <OUTPUT>(\n options: ARGS & {\n execute?: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n needsApproval?: Tool<INPUT, OUTPUT, CONTEXT>['needsApproval'];\n toModelOutput?: Tool<INPUT, OUTPUT, CONTEXT>['toModelOutput'];\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n },\n) => ProviderDefinedTool<INPUT, OUTPUT, CONTEXT>;\n\nexport function createProviderDefinedToolFactory<\n INPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n>({\n id,\n inputSchema,\n}: {\n id: `${string}.${string}`;\n inputSchema: FlexibleSchema<INPUT>;\n}): ProviderDefinedToolFactory<INPUT, ARGS, CONTEXT> {\n return <OUTPUT>({\n execute,\n outputSchema,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }: ARGS & {\n execute?: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n outputSchema?: FlexibleSchema<OUTPUT>;\n needsApproval?: Tool<INPUT, OUTPUT, CONTEXT>['needsApproval'];\n toModelOutput?: Tool<INPUT, OUTPUT, CONTEXT>['toModelOutput'];\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n }): ProviderDefinedTool<INPUT, OUTPUT, CONTEXT> =>\n tool({\n type: 'provider',\n isProviderExecuted: false,\n id,\n args,\n inputSchema,\n outputSchema,\n execute,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n }) as ProviderDefinedTool<INPUT, OUTPUT, CONTEXT>;\n}\n\nexport type ProviderDefinedToolFactoryWithOutputSchema<\n INPUT,\n OUTPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n> = (\n options: ARGS & {\n execute?: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n needsApproval?: Tool<INPUT, OUTPUT, CONTEXT>['needsApproval'];\n toModelOutput?: Tool<INPUT, OUTPUT, CONTEXT>['toModelOutput'];\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n },\n) => ProviderDefinedTool<INPUT, OUTPUT, CONTEXT>;\n\nexport function createProviderDefinedToolFactoryWithOutputSchema<\n INPUT,\n OUTPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n>({\n id,\n inputSchema,\n outputSchema,\n}: {\n id: `${string}.${string}`;\n inputSchema: FlexibleSchema<INPUT>;\n outputSchema: FlexibleSchema<OUTPUT>;\n}): ProviderDefinedToolFactoryWithOutputSchema<INPUT, OUTPUT, ARGS, CONTEXT> {\n return ({\n execute,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }: ARGS & {\n execute?: ToolExecuteFunction<INPUT, OUTPUT, CONTEXT>;\n needsApproval?: Tool<INPUT, OUTPUT, CONTEXT>['needsApproval'];\n toModelOutput?: Tool<INPUT, OUTPUT, CONTEXT>['toModelOutput'];\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n }): ProviderDefinedTool<INPUT, OUTPUT, CONTEXT> =>\n tool({\n type: 'provider',\n isProviderExecuted: false,\n id,\n args,\n inputSchema,\n outputSchema,\n execute,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n }) as ProviderDefinedTool<INPUT, OUTPUT, CONTEXT>;\n}\n","import type { FlexibleSchema } from './schema';\nimport type { Context } from './types/context';\nimport { tool, type ProviderExecutedTool, type Tool } from './types/tool';\n/**\n * A provider-executed tool is a tool for which the provider executes the tool.\n */\nexport type ProviderExecutedToolFactory<\n INPUT,\n OUTPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n> = (\n options: ARGS & {\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n },\n) => ProviderExecutedTool<INPUT, OUTPUT, CONTEXT>;\n\nexport function createProviderExecutedToolFactory<\n INPUT,\n OUTPUT,\n ARGS extends object,\n CONTEXT extends Context = {},\n>({\n id,\n inputSchema,\n outputSchema,\n supportsDeferredResults,\n}: {\n id: `${string}.${string}`;\n inputSchema: FlexibleSchema<INPUT>;\n outputSchema: FlexibleSchema<OUTPUT>;\n\n /**\n * Whether this provider-executed tool supports deferred results.\n *\n * When true, the tool result may not be returned in the same turn as the\n * tool call (e.g., when using programmatic tool calling where a server tool\n * triggers a client-executed tool, and the server tool's result is deferred\n * until the client tool is resolved).\n *\n * @default false\n */\n supportsDeferredResults?: boolean;\n}): ProviderExecutedToolFactory<INPUT, OUTPUT, ARGS, CONTEXT> {\n return ({\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }: ARGS & {\n onInputStart?: Tool<INPUT, OUTPUT, CONTEXT>['onInputStart'];\n onInputDelta?: Tool<INPUT, OUTPUT, CONTEXT>['onInputDelta'];\n onInputAvailable?: Tool<INPUT, OUTPUT, CONTEXT>['onInputAvailable'];\n }): ProviderExecutedTool<INPUT, OUTPUT, CONTEXT> =>\n tool({\n type: 'provider',\n isProviderExecuted: true,\n id,\n args,\n inputSchema,\n outputSchema,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n supportsDeferredResults,\n }) as ProviderExecutedTool<INPUT, OUTPUT, CONTEXT>;\n}\n","import type { MaybePromiseLike } from './maybe-promise-like';\n\n/**\n * A value or a lazy provider of a value, each of which may be synchronous or asynchronous.\n *\n * @template T The resolved type after {@link resolve} runs.\n *\n * One of:\n * - A plain value of type {@link T}\n * - A {@link PromiseLike} of {@link T} (e.g. a `Promise<T>`)\n * - A zero-argument function that returns a plain {@link T}\n * - A zero-argument function that returns a {@link PromiseLike} of {@link T}\n *\n * The function form is only invoked when passed to {@link resolve}; it is not distinguished from\n * a {@link T} that happens to be a function—callers should wrap function values if disambiguation\n * is required.\n */\nexport type Resolvable<T> = MaybePromiseLike<T> | (() => MaybePromiseLike<T>);\n\n/**\n * Resolves a value that could be a raw value, a Promise, a function returning a value,\n * or a function returning a Promise.\n */\nexport async function resolve<T>(value: Resolvable<T>): Promise<T> {\n // If it's a function, call it to get the value/promise\n if (typeof value === 'function') {\n value = (value as Function)();\n }\n\n // Otherwise just resolve whatever we got (value or promise)\n return Promise.resolve(value as T);\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4FilePart,\n} from '@ai-sdk/provider';\nimport {\n detectMediaType,\n getTopLevelMediaType,\n isFullMediaType,\n} from './detect-media-type';\n\n/**\n * Resolves a file part's media type to a full `type/subtype` form required by\n * providers whose API demands the full IANA media type.\n *\n * - If `part.mediaType` is already a full media type (e.g. `image/png`), it is\n * returned as-is.\n * - Otherwise, when inline bytes are available (`part.data.type === 'data'`),\n * the subtype is sniffed from the bytes using the signature table that\n * corresponds to the top-level segment.\n * - When neither applies (e.g. top-level-only with a URL source, or bytes that\n * cannot be detected), an `UnsupportedFunctionalityError` is thrown.\n */\nexport function resolveFullMediaType({\n part,\n}: {\n part: LanguageModelV4FilePart;\n}): string {\n if (isFullMediaType(part.mediaType)) {\n return part.mediaType;\n }\n\n if (part.data.type === 'data') {\n const detected = detectMediaType({\n data: part.data.data,\n topLevelType: getTopLevelMediaType(part.mediaType),\n });\n if (detected) {\n return detected;\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file of media type \"${part.mediaType}\" must specify subtype since it could not be auto-detected`,\n });\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file of media type \"${part.mediaType}\" must specify subtype since it is not passed as inline bytes`,\n });\n}\n","import {\n NoSuchProviderReferenceError,\n type SharedV4ProviderReference,\n} from '@ai-sdk/provider';\n/**\n * Resolves a provider reference to the provider-specific identifier for the\n * given provider. Throws `NoSuchProviderReferenceError` if the provider is not\n * found in the reference mapping.\n */\nexport function resolveProviderReference({\n reference,\n provider,\n}: {\n reference: SharedV4ProviderReference;\n provider: string;\n}): string {\n const id = reference[provider];\n if (id != null) {\n return id;\n }\n\n throw new NoSuchProviderReferenceError({\n provider,\n reference,\n });\n}\n","import { delay } from './delay';\nimport { getErrorMessage } from './get-error-message';\nimport { isAbortError } from './is-abort-error';\n\nexport type RetryFunction = <OUTPUT>(\n fn: () => PromiseLike<OUTPUT>,\n) => PromiseLike<OUTPUT>;\n\nexport type RetryErrorReason = 'maxRetriesExceeded' | 'errorNotRetryable';\n\nexport type RetryErrorFactory = ({\n message,\n reason,\n errors,\n}: {\n message: string;\n reason: RetryErrorReason;\n errors: Array<unknown>;\n}) => unknown;\n\nexport type RetryDelayProvider = ({\n error,\n exponentialBackoffDelay,\n}: {\n error: unknown;\n exponentialBackoffDelay: number;\n}) => number;\n\nexport type ShouldRetryFunction = (\n error: unknown,\n) => boolean | Promise<boolean>;\n\n/**\n * Retries a failed operation with exponential backoff.\n */\nexport const retryWithExponentialBackoff =\n ({\n maxRetries = 2,\n initialDelayInMs = 2000,\n backoffFactor = 2,\n abortSignal,\n shouldRetry,\n getDelayInMs = ({ exponentialBackoffDelay }) => exponentialBackoffDelay,\n createRetryError = ({ message }) => new Error(message),\n }: {\n maxRetries?: number;\n initialDelayInMs?: number;\n backoffFactor?: number;\n abortSignal?: AbortSignal;\n shouldRetry: ShouldRetryFunction;\n getDelayInMs?: RetryDelayProvider;\n createRetryError?: RetryErrorFactory;\n }): RetryFunction =>\n async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n retryWithExponentialBackoffInternal(f, {\n maxRetries,\n delayInMs: initialDelayInMs,\n backoffFactor,\n abortSignal,\n shouldRetry,\n getDelayInMs,\n createRetryError,\n });\n\nasync function retryWithExponentialBackoffInternal<OUTPUT>(\n f: () => PromiseLike<OUTPUT>,\n {\n maxRetries,\n delayInMs,\n backoffFactor,\n abortSignal,\n shouldRetry,\n getDelayInMs,\n createRetryError,\n }: {\n maxRetries: number;\n delayInMs: number;\n backoffFactor: number;\n abortSignal: AbortSignal | undefined;\n shouldRetry: ShouldRetryFunction;\n getDelayInMs: RetryDelayProvider;\n createRetryError: RetryErrorFactory;\n },\n errors: unknown[] = [],\n): Promise<OUTPUT> {\n try {\n return await f();\n } catch (error) {\n if (isAbortError(error)) {\n throw error; // don't retry when the request was aborted\n }\n\n if (maxRetries === 0) {\n throw error; // don't wrap the error when retries are disabled\n }\n\n const errorMessage = getErrorMessage(error);\n const newErrors = [...errors, error];\n const tryNumber = newErrors.length;\n\n if (tryNumber > maxRetries) {\n throw createRetryError({\n message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,\n reason: 'maxRetriesExceeded',\n errors: newErrors,\n });\n }\n\n if ((await shouldRetry(error)) && tryNumber <= maxRetries) {\n await delay(\n getDelayInMs({\n error,\n exponentialBackoffDelay: delayInMs,\n }),\n { abortSignal },\n );\n\n return retryWithExponentialBackoffInternal(\n f,\n {\n maxRetries,\n delayInMs: backoffFactor * delayInMs,\n backoffFactor,\n abortSignal,\n shouldRetry,\n getDelayInMs,\n createRetryError,\n },\n newErrors,\n );\n }\n\n if (tryNumber === 1) {\n throw error; // don't wrap the error when a non-retryable error occurs on the first try\n }\n\n throw createRetryError({\n message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,\n reason: 'errorNotRetryable',\n errors: newErrors,\n });\n }\n}\n","import { APICallError, EmptyResponseBodyError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { parseJSON, safeParseJSON, type ParseResult } from './parse-json';\nimport { parseJsonEventStream } from './parse-json-event-stream';\nimport { readResponseWithSizeLimit } from './read-response-with-size-limit';\nimport type { FlexibleSchema } from './schema';\n\nexport type ResponseHandler<RETURN_TYPE> = (options: {\n url: string;\n requestBodyValues: unknown;\n response: Response;\n}) => PromiseLike<{\n value: RETURN_TYPE;\n rawValue?: unknown;\n responseHeaders?: Record<string, string>;\n}>;\n\nconst textDecoder = new TextDecoder();\n\nasync function readResponseBodyAsText({\n response,\n url,\n}: {\n response: Response;\n url: string;\n}) {\n return textDecoder.decode(\n await readResponseWithSizeLimit({\n response,\n url,\n }),\n );\n}\n\nexport const createJsonErrorResponseHandler =\n <T>({\n errorSchema,\n errorToMessage,\n isRetryable,\n }: {\n errorSchema: FlexibleSchema<T>;\n errorToMessage: (error: T) => string;\n isRetryable?: (response: Response, error?: T) => boolean;\n }): ResponseHandler<APICallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await readResponseBodyAsText({ response, url });\n const responseHeaders = extractResponseHeaders(response);\n\n // Some providers return an empty response body for some errors:\n if (responseBody.trim() === '') {\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable?.(response),\n }),\n };\n }\n\n // resilient parsing in case the response is not JSON or does not match the schema:\n try {\n const parsedError = await parseJSON({\n text: responseBody,\n schema: errorSchema,\n });\n\n return {\n responseHeaders,\n value: new APICallError({\n message: errorToMessage(parsedError),\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n data: parsedError,\n isRetryable: isRetryable?.(response, parsedError),\n }),\n };\n } catch {\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable?.(response),\n }),\n };\n }\n };\n\nexport const createEventSourceResponseHandler =\n <T>(\n chunkSchema: FlexibleSchema<T>,\n ): ResponseHandler<ReadableStream<ParseResult<T>>> =>\n async ({ response }: { response: Response }) => {\n const responseHeaders = extractResponseHeaders(response);\n\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n\n return {\n responseHeaders,\n value: parseJsonEventStream({\n stream: response.body,\n schema: chunkSchema,\n }),\n };\n };\n\nexport const createJsonResponseHandler =\n <T>(responseSchema: FlexibleSchema<T>): ResponseHandler<T> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await readResponseBodyAsText({ response, url });\n\n const parsedResult = await safeParseJSON({\n text: responseBody,\n schema: responseSchema,\n });\n\n const responseHeaders = extractResponseHeaders(response);\n\n if (!parsedResult.success) {\n throw new APICallError({\n message: 'Invalid JSON response',\n cause: parsedResult.error,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n url,\n requestBodyValues,\n });\n }\n\n return {\n responseHeaders,\n value: parsedResult.value,\n rawValue: parsedResult.rawValue,\n };\n };\n\nexport const createBinaryResponseHandler =\n (): ResponseHandler<Uint8Array> =>\n async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.body) {\n throw new APICallError({\n message: 'Response body is empty',\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: undefined,\n });\n }\n\n try {\n const buffer = await response.arrayBuffer();\n return {\n responseHeaders,\n value: new Uint8Array(buffer),\n };\n } catch (error) {\n throw new APICallError({\n message: 'Failed to read response as array buffer',\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: undefined,\n cause: error,\n });\n }\n };\n\nexport const createStatusCodeErrorResponseHandler =\n (): ResponseHandler<APICallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await readResponseBodyAsText({ response, url });\n\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues: requestBodyValues as Record<string, unknown>,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n }),\n };\n };\n","import type { JSONValue } from '@ai-sdk/provider';\n\n/**\n * Checks whether a value can cross a workflow serialization boundary.\n *\n * The check accepts JSON-like primitives, arrays, and plain objects whose\n * nested values are also serializable. It rejects functions, symbols,\n * bigints, and non-plain objects such as class instances, dates, and regexes.\n */\nexport function isJSONSerializable(value: unknown): value is JSONValue {\n if (value === null || value === undefined) return true;\n\n const type = typeof value;\n if (type === 'string' || type === 'number' || type === 'boolean') return true;\n if (type === 'function' || type === 'symbol' || type === 'bigint')\n return false;\n\n if (Array.isArray(value)) {\n return value.every(isJSONSerializable);\n }\n\n if (Object.getPrototypeOf(value) === Object.prototype) {\n return Object.values(value as Record<string, unknown>).every(\n isJSONSerializable,\n );\n }\n\n return false;\n}\n","import type { JSONObject } from '@ai-sdk/provider';\nimport { isJSONSerializable } from './is-json-serializable';\nimport type { Resolvable } from './resolve';\n\n/**\n * Serializes a model instance for workflow step boundaries.\n * Returns the `modelId` plus the JSON-serializable config properties.\n *\n * Non-serializable values are omitted. As a special case, a\n * function-valued `headers` property is resolved during serialization\n * and included if the returned value is JSON-serializable.\n *\n * Used as the body of `static [WORKFLOW_SERIALIZE]` in provider models.\n *\n * @example\n * ```ts\n * static [WORKFLOW_SERIALIZE](model: MyLanguageModel) {\n * return serializeModelOptions({\n * modelId: model.modelId,\n * config: model.config,\n * });\n * }\n * ```\n */\nexport function serializeModelOptions<\n CONFIG extends {\n headers?: Resolvable<Record<string, string | undefined>>;\n },\n>(options: {\n modelId: string;\n config: CONFIG;\n}): {\n modelId: string;\n config: JSONObject;\n} {\n const serializableConfig: JSONObject = {};\n for (const [key, value] of Object.entries(options.config)) {\n if (key === 'headers') {\n const resolvedHeaders = resolveSync(value);\n if (isJSONSerializable(resolvedHeaders)) {\n serializableConfig[key] = resolvedHeaders;\n }\n } else if (isJSONSerializable(value)) {\n serializableConfig[key] = value;\n }\n }\n return { modelId: options.modelId, config: serializableConfig };\n}\n\nfunction resolveSync<T>(value: Resolvable<T>): T {\n let next: unknown = value;\n if (typeof value === 'function') {\n next = (value as () => unknown)();\n }\n\n // the serialization for workflows currently only supports synchronous values\n // TODO introduce SerializationError\n if (next instanceof Promise) {\n throw new Error('Promise returned from resolveSync');\n }\n\n return next as T;\n}\n","import {\n InvalidResponseDataError,\n type LanguageModelV4StreamPart,\n type SharedV4ProviderMetadata,\n} from '@ai-sdk/provider';\nimport { generateId as defaultGenerateId } from './generate-id';\n\n/**\n * Minimal interface for a streaming tool call delta from an OpenAI-compatible API.\n */\nexport interface StreamingToolCallDelta {\n index?: number | null;\n id?: string | null;\n type?: string | null;\n function?: {\n name?: string | null;\n arguments?: string | null;\n } | null;\n}\n\nexport interface StreamingToolCallTrackerOptions<\n DELTA extends StreamingToolCallDelta = StreamingToolCallDelta,\n> {\n /**\n * ID generator function for tool call IDs.\n * Defaults to the standard generateId.\n */\n generateId?: () => string;\n\n /**\n * How to validate the `type` field on new tool call deltas.\n * - `'none'`: no validation (default)\n * - `'if-present'`: throw if type is present and not `'function'`\n * - `'required'`: throw if type is not exactly `'function'`\n */\n typeValidation?: 'none' | 'if-present' | 'required';\n\n /**\n * Extract provider-specific metadata from a tool call delta.\n * Called once when a new tool call is detected.\n * The returned metadata is stored on the tool call and passed to\n * `buildToolCallProviderMetadata` when the tool call is finalized.\n */\n extractMetadata?: (delta: DELTA) => SharedV4ProviderMetadata | undefined;\n\n /**\n * Build the `providerMetadata` object for a `tool-call` event.\n * Receives the metadata previously extracted via `extractMetadata`.\n * If `undefined` is returned, no `providerMetadata` is included in the event.\n */\n buildToolCallProviderMetadata?: (\n metadata: SharedV4ProviderMetadata | undefined,\n ) => SharedV4ProviderMetadata | undefined;\n}\n\ninterface TrackedToolCall {\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n hasFinished: boolean;\n metadata?: SharedV4ProviderMetadata;\n}\n\ntype StreamingToolCallTrackerController = Pick<\n TransformStreamDefaultController<LanguageModelV4StreamPart>,\n 'enqueue'\n>;\n\n/**\n * Tracks streaming tool call state across multiple deltas from an\n * OpenAI-compatible chat completion stream. Handles argument accumulation,\n * emits tool-input-start/delta/end and tool-call events, and finalizes\n * unfinished tool calls on flush.\n *\n * Used by openai, openai-compatible, groq, deepseek, and alibaba providers.\n */\nexport class StreamingToolCallTracker<\n DELTA extends StreamingToolCallDelta = StreamingToolCallDelta,\n> {\n private toolCalls: TrackedToolCall[] = [];\n private readonly controller: StreamingToolCallTrackerController;\n private readonly _generateId: () => string;\n private readonly typeValidation: 'none' | 'if-present' | 'required';\n private readonly extractMetadata?: (\n delta: DELTA,\n ) => SharedV4ProviderMetadata | undefined;\n private readonly buildToolCallProviderMetadata?: (\n metadata: SharedV4ProviderMetadata | undefined,\n ) => SharedV4ProviderMetadata | undefined;\n\n constructor(\n controller: StreamingToolCallTrackerController,\n options: StreamingToolCallTrackerOptions<DELTA> = {},\n ) {\n this.controller = controller;\n this._generateId = options.generateId ?? defaultGenerateId;\n this.typeValidation = options.typeValidation ?? 'none';\n this.extractMetadata = options.extractMetadata;\n this.buildToolCallProviderMetadata = options.buildToolCallProviderMetadata;\n }\n\n /**\n * Process a tool call delta from a streaming response chunk.\n * Emits tool-input-start, tool-input-delta, tool-input-end, and tool-call\n * events as appropriate.\n */\n processDelta(toolCallDelta: DELTA): void {\n const index = toolCallDelta.index ?? this.toolCalls.length;\n\n if (this.toolCalls[index] == null) {\n this.processNewToolCall(index, toolCallDelta);\n } else {\n this.processExistingToolCall(index, toolCallDelta);\n }\n }\n\n /**\n * Finalize any unfinished tool calls. Should be called during the stream's\n * flush handler to ensure all tool calls are properly completed.\n */\n flush(): void {\n for (const toolCall of this.toolCalls) {\n if (!toolCall.hasFinished) {\n this.finishToolCall(toolCall);\n }\n }\n }\n\n private processNewToolCall(index: number, toolCallDelta: DELTA): void {\n if (this.typeValidation === 'required') {\n if (toolCallDelta.type !== 'function') {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n } else if (this.typeValidation === 'if-present') {\n if (toolCallDelta.type != null && toolCallDelta.type !== 'function') {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n this.controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n const metadata = this.extractMetadata?.(toolCallDelta);\n\n this.toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n metadata,\n };\n\n const toolCall = this.toolCalls[index];\n\n // Emit initial delta if arguments already present\n if (toolCall.function.arguments.length > 0) {\n this.controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // Tool calls must not finalize before the stream ends: a parsable\n // argument buffer can still be the prefix of a longer argument string,\n // so acting on it early would use truncated inputs (see #13137).\n // Finalization happens in flush().\n }\n\n private processExistingToolCall(index: number, toolCallDelta: DELTA): void {\n const toolCall = this.toolCalls[index];\n\n if (toolCall.hasFinished) {\n return;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments += toolCallDelta.function.arguments;\n\n this.controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments,\n });\n }\n }\n\n private finishToolCall(toolCall: TrackedToolCall): void {\n this.controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n const providerMetadata = this.buildToolCallProviderMetadata?.(\n toolCall.metadata,\n );\n\n this.controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? this._generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n ...(providerMetadata ? { providerMetadata } : {}),\n });\n\n toolCall.hasFinished = true;\n }\n}\n","/**\n * Strips file extension segments from a filename.\n *\n * Examples:\n * - \"report.pdf\" -> \"report\"\n * - \"archive.tar.gz\" -> \"archive\"\n * - \"filename\" -> \"filename\"\n */\nexport function stripFileExtension(filename: string): string {\n const firstDotIndex = filename.indexOf('.');\n\n return firstDotIndex === -1 ? filename : filename.slice(0, firstDotIndex);\n}\n","import type {\n Experimental_TranscriptionModelV4StreamPart as TranscriptionModelV4StreamPart,\n JSONObject,\n} from '@ai-sdk/provider';\nimport { secureJsonParse } from './secure-json-parse';\n\n/**\n * Experimental transcription-stream WebSocket envelope (v1): the standard\n * serialization of `TranscriptionModelV4.doStream` over a WebSocket. Clients\n * (e.g. the `@ai-sdk/gateway` provider) encode with this module and servers\n * (e.g. AI Gateway) decode with it, so the two sides cannot drift.\n *\n * Envelope rules:\n *\n * 1. The client sends exactly one `transcription-stream.start` TEXT frame\n * first.\n * 2. Audio rides BINARY frames containing raw bytes in the declared\n * `inputAudioFormat` (base64 string chunks are decoded before sending).\n * 3. The client signals end of audio with the\n * `transcription-stream.audio-done` TEXT frame; a plain close without it\n * is an abort.\n * 4. Every server→client TEXT frame is one JSON-serialized\n * `TranscriptionModelV4StreamPart` (flattened, no wrapper). Payloads must\n * be JSON-serializable. `Date` values (`response-metadata.timestamp`)\n * serialize to ISO 8601 strings and are revived by\n * `parseTranscriptionStreamPart`. `Error` payloads in `error` parts\n * serialize as `{ name, message }`.\n * 5. The server closes with code 1000 after the `finish` part; on failure it\n * sends an `error` part and closes non-1000. A close without a prior\n * `finish` is an error.\n * 6. Unknown frame/part types are ignored in both directions (forward\n * compatibility).\n * 7. Servers may enforce a maximum frame size (the AI Gateway rejects frames\n * over 256 KiB); clients should split audio into frames of at most\n * 64 KiB.\n * 8. Connection establishment (URL, auth) is transport-specific and out of\n * scope.\n *\n * The envelope validates frame shape only; server policy (accepted audio\n * formats, required `rate`, size limits) layers on top. Both parsers use\n * `secureJsonParse`, so frames carrying `__proto__` / `constructor.prototype`\n * keys are rejected (prototype-pollution protection) rather than parsed.\n */\n\n/** Type of the first client TEXT frame. */\nexport const TRANSCRIPTION_STREAM_START_FRAME_TYPE =\n 'transcription-stream.start';\n\n/** Type of the client TEXT frame that signals the end of the audio input. */\nexport const TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE =\n 'transcription-stream.audio-done';\n\n/**\n * The client's session start frame. Optional keys are omitted when undefined.\n */\nexport type TranscriptionStreamStartFrame = {\n type: typeof TRANSCRIPTION_STREAM_START_FRAME_TYPE;\n\n /** Audio format of the binary audio frames, e.g. `{ type: 'audio/pcm', rate: 16000 }`. */\n inputAudioFormat: {\n type: string;\n rate?: number;\n };\n\n /** Provider-specific options, passed through verbatim. */\n providerOptions?: Record<string, JSONObject>;\n\n /** When true, the server should include `raw` parts in the stream. */\n includeRawChunks?: boolean;\n};\n\n/** Server-side classification of a client TEXT frame. */\nexport type TranscriptionStreamClientFrame =\n | {\n type: 'start';\n frame: TranscriptionStreamStartFrame;\n }\n | {\n type: 'audio-done';\n }\n | {\n /** Malformed JSON or a recognized frame with an invalid shape. */\n type: 'invalid';\n message: string;\n }\n | {\n /** Unrecognized frame type; ignore for forward compatibility. */\n type: 'unknown';\n };\n\n/**\n * Server-side: parse a client TEXT frame. Validates envelope shape only and\n * rejects prototype-pollution payloads (parsed with `secureJsonParse`). Never\n * throws.\n */\nexport function parseTranscriptionStreamClientFrame(\n text: string,\n): TranscriptionStreamClientFrame {\n let value: unknown;\n try {\n value = secureJsonParse(text);\n } catch {\n return { type: 'invalid', message: 'malformed JSON' };\n }\n\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return { type: 'invalid', message: 'frame must be a JSON object' };\n }\n\n const frame = value as Record<string, unknown>;\n\n if (typeof frame.type !== 'string') {\n return { type: 'invalid', message: 'frame type must be a string' };\n }\n\n switch (frame.type) {\n case TRANSCRIPTION_STREAM_START_FRAME_TYPE: {\n const inputAudioFormat = frame.inputAudioFormat as\n | Record<string, unknown>\n | null\n | undefined;\n if (\n inputAudioFormat == null ||\n typeof inputAudioFormat !== 'object' ||\n Array.isArray(inputAudioFormat) ||\n typeof inputAudioFormat.type !== 'string'\n ) {\n return {\n type: 'invalid',\n message:\n 'start frame must have an inputAudioFormat object with a string type',\n };\n }\n if (\n inputAudioFormat.rate !== undefined &&\n typeof inputAudioFormat.rate !== 'number'\n ) {\n return {\n type: 'invalid',\n message: 'inputAudioFormat.rate must be a number when present',\n };\n }\n if (\n frame.providerOptions !== undefined &&\n (frame.providerOptions == null ||\n typeof frame.providerOptions !== 'object' ||\n Array.isArray(frame.providerOptions))\n ) {\n return {\n type: 'invalid',\n message: 'providerOptions must be an object when present',\n };\n }\n if (\n frame.includeRawChunks !== undefined &&\n typeof frame.includeRawChunks !== 'boolean'\n ) {\n return {\n type: 'invalid',\n message: 'includeRawChunks must be a boolean when present',\n };\n }\n return {\n type: 'start',\n frame: frame as TranscriptionStreamStartFrame,\n };\n }\n\n case TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE:\n return { type: 'audio-done' };\n\n default:\n return { type: 'unknown' };\n }\n}\n\n/**\n * Server-side: serialize a transcription stream part as one TEXT frame.\n * `Error` payloads in `error` parts serialize as `{ name, message }` —\n * `Error` properties are non-enumerable, so a plain `JSON.stringify` would\n * serialize them to `{}` and lose the message end-to-end. Returns\n * `undefined` for payloads that are not JSON-serializable (envelope rule 4,\n * e.g. bigint or cyclic values); callers drop the frame.\n */\nexport function serializeTranscriptionStreamPart(\n part: TranscriptionModelV4StreamPart,\n): string | undefined {\n try {\n if (part.type === 'error' && isError(part.error)) {\n return JSON.stringify({\n ...part,\n error: { name: part.error.name, message: part.error.message },\n });\n }\n return JSON.stringify(part);\n } catch {\n return undefined;\n }\n}\n\n// `instanceof` misses cross-realm Errors; the brand check does not.\nfunction isError(value: unknown): value is Error {\n return (\n value instanceof Error ||\n Object.prototype.toString.call(value) === '[object Error]'\n );\n}\n\n/**\n * Client-side: parse a server TEXT frame into a transcription stream part.\n * Returns `undefined` for malformed or unsafe (prototype-polluting) JSON\n * (parsed with `secureJsonParse`), unknown part types, and known part types\n * whose required or optional fields are missing or mistyped (including\n * warning and segment elements) — downstream SDK code dereferences those\n * fields, so a drifted server must not crash or pollute the stream.\n * Revives `response-metadata.timestamp` to a `Date`.\n */\nexport function parseTranscriptionStreamPart(\n text: string,\n): TranscriptionModelV4StreamPart | undefined {\n let value: unknown;\n try {\n value = secureJsonParse(text);\n } catch {\n return undefined;\n }\n\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return undefined;\n }\n\n const part = value as TranscriptionModelV4StreamPart;\n\n switch (part.type) {\n case 'stream-start':\n return Array.isArray(part.warnings) && part.warnings.every(isWarning)\n ? part\n : undefined;\n\n case 'transcript-delta':\n return isString(part.delta) &&\n isOptional(part.id, isString) &&\n isOptional(part.providerMetadata, isPlainObject)\n ? part\n : undefined;\n\n case 'transcript-partial':\n return isString(part.text) &&\n isOptional(part.id, isString) &&\n isOptional(part.startSecond, isNumber) &&\n isOptional(part.durationInSeconds, isNumber) &&\n isOptional(part.channelIndex, isNumber) &&\n isOptional(part.providerMetadata, isPlainObject)\n ? part\n : undefined;\n\n case 'transcript-final':\n return isString(part.text) &&\n isOptional(part.id, isString) &&\n isOptional(part.startSecond, isNumber) &&\n isOptional(part.endSecond, isNumber) &&\n isOptional(part.channelIndex, isNumber) &&\n isOptional(part.providerMetadata, isPlainObject)\n ? part\n : undefined;\n\n case 'finish':\n return isString(part.text) &&\n Array.isArray(part.segments) &&\n part.segments.every(isSegment) &&\n isOptional(part.language, isString) &&\n isOptional(part.durationInSeconds, isNumber) &&\n isOptional(part.providerMetadata, isPlainObject)\n ? part\n : undefined;\n\n case 'response-metadata': {\n if (\n !(\n isOptional(part.modelId, isString) &&\n isOptional(part.headers, isPlainObject)\n )\n ) {\n return undefined;\n }\n // Envelope rule 4: timestamps ride as ISO 8601 strings.\n const timestamp: unknown = part.timestamp;\n if (timestamp == null) {\n return { ...part, timestamp: undefined };\n }\n if (typeof timestamp !== 'string') {\n return undefined;\n }\n const revived = new Date(timestamp);\n return Number.isNaN(revived.getTime())\n ? undefined\n : { ...part, timestamp: revived };\n }\n\n case 'raw':\n return 'rawValue' in part ? part : undefined;\n\n case 'error':\n return 'error' in part ? part : undefined;\n\n default:\n return undefined;\n }\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n\nfunction isOptional(\n value: unknown,\n check: (value: unknown) => boolean,\n): boolean {\n return value === undefined || check(value);\n}\n\nfunction isPlainObject(value: unknown): boolean {\n return typeof value === 'object' && value != null && !Array.isArray(value);\n}\n\nfunction isWarning(value: unknown): boolean {\n return isPlainObject(value) && isString((value as { type?: unknown }).type);\n}\n\nfunction isSegment(value: unknown): boolean {\n return (\n isPlainObject(value) &&\n isString((value as { text?: unknown }).text) &&\n isNumber((value as { startSecond?: unknown }).startSecond) &&\n isNumber((value as { endSecond?: unknown }).endSecond)\n );\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\n\nexport function validateBaseURL(baseURL: string | undefined) {\n if (baseURL?.trim() === '') {\n throw new InvalidArgumentError({\n argument: 'baseURL',\n message: 'baseURL must be a non-empty string.',\n });\n }\n\n return baseURL;\n}\n","export function withoutTrailingSlash(url: string | undefined) {\n return url?.replace(/\\/$/, '');\n}\n","import type { Tool } from './tool';\n\n/**\n * A tool that is guaranteed to expose an execute function.\n */\nexport type ExecutableTool<TOOL extends Tool = Tool> = TOOL & {\n execute: NonNullable<TOOL['execute']>;\n};\n\n/**\n * Checks whether a tool exposes an execute function.\n */\nexport function isExecutableTool<TOOL extends Tool>(\n tool: TOOL | undefined,\n): tool is ExecutableTool<TOOL> {\n return tool != null && typeof tool.execute === 'function';\n}\n","export function isAsyncIterable<T = any>(obj: any): obj is AsyncIterable<T> {\n return obj != null && typeof obj[Symbol.asyncIterator] === 'function';\n}\n","import { isAsyncIterable } from '../is-async-iterable';\nimport type { ExecutableTool } from './executable-tool';\nimport type { InferToolContext } from './infer-tool-context';\nimport type { InferToolInput } from './infer-tool-input';\nimport type { InferToolOutput } from './infer-tool-output';\nimport type { Tool } from './tool';\nimport type { ToolExecutionOptions } from './tool-execute-function';\n\n/**\n * Executes a tool function and normalizes its results into a stream of outputs.\n *\n * - If the tool's `execute` function returns an `AsyncIterable`, each yielded value is emitted as\n * `{ type: \"preliminary\", output }`. After iteration completes, the last yielded value is emitted\n * again as `{ type: \"final\", output }`.\n * - If the tool returns a direct value or Promise, a single `{ type: \"final\", output }` is yielded.\n *\n * @param params.tool The tool whose `execute` function should be invoked.\n * @param params.input The input value to pass to the tool.\n * @param params.options Additional options for tool execution.\n * @yields A preliminary output for each streamed value, followed by a final output, or a single final\n * output for non-streaming tools.\n */\nexport async function* executeTool<TOOL extends Tool>({\n tool,\n input,\n options,\n}: {\n tool: ExecutableTool<TOOL>;\n input: InferToolInput<TOOL>;\n options: ToolExecutionOptions<InferToolContext<TOOL>>;\n}): AsyncGenerator<\n | { type: 'preliminary'; output: InferToolOutput<TOOL> }\n | { type: 'final'; output: InferToolOutput<TOOL> }\n> {\n const result = tool.execute(input, options);\n\n if (isAsyncIterable(result)) {\n let lastOutput: InferToolOutput<TOOL> | undefined;\n for await (const output of result) {\n lastOutput = output;\n yield { type: 'preliminary', output };\n }\n yield { type: 'final', output: lastOutput! };\n } else {\n yield { type: 'final', output: await result };\n }\n}\n","export { asArray } from './as-array';\nexport type { Arrayable } from './as-array';\nexport * from './combine-headers';\nexport {\n connectToWebSocket,\n type WebSocketConnection,\n} from './connect-to-websocket';\nexport { convertAsyncIteratorToReadableStream } from './convert-async-iterator-to-readable-stream';\nexport { convertInlineFileDataToUint8Array } from './convert-inline-file-data-to-uint8-array';\nexport { convertImageModelFileToDataUri } from './convert-image-model-file-to-data-uri';\nexport { convertToFormData } from './convert-to-form-data';\nexport {\n createToolNameMapping,\n type ToolNameMapping,\n} from './create-tool-name-mapping';\nexport * from './delay';\nexport { DelayedPromise } from './delayed-promise';\nexport {\n detectMediaType,\n getTopLevelMediaType,\n isFullMediaType,\n} from './detect-media-type';\nexport { downloadBlob } from './download-blob';\nexport { DownloadError } from './download-error';\nexport { fetchWithValidatedRedirects } from './fetch-with-validated-redirects';\nexport { extractLines } from './extract-lines';\nexport * from './extract-response-headers';\nexport * from './fetch-function';\nexport { filterNullable } from './filter-nullable';\nexport { createIdGenerator, generateId, type IdGenerator } from './generate-id';\nexport * from './get-error-message';\nexport * from './get-from-api';\nexport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nexport type { HasRequiredKey } from './has-required-key';\nexport { injectJsonInstructionIntoMessages } from './inject-json-instruction';\nexport * from './is-abort-error';\nexport { isBrowserRuntime } from './is-browser-runtime';\nexport { isBuffer } from './is-buffer';\nexport { isSameOrigin } from './is-same-origin';\nexport { isNonNullable } from './is-non-nullable';\nexport { isProviderReference } from './is-provider-reference';\nexport { isUrlSupported } from './is-url-supported';\nexport * from './load-api-key';\nexport { loadOptionalSetting } from './load-optional-setting';\nexport { loadSetting } from './load-setting';\nexport {\n isCustomReasoning,\n mapReasoningToProviderBudget,\n mapReasoningToProviderEffort,\n} from './map-reasoning-to-provider';\nexport { type MaybePromiseLike } from './maybe-promise-like';\nexport { mediaTypeToExtension } from './media-type-to-extension';\nexport { normalizeHeaders } from './normalize-headers';\nexport * from './parse-json';\nexport { parseJsonEventStream } from './parse-json-event-stream';\nexport { parseProviderOptions } from './parse-provider-options';\nexport * from './post-to-api';\nexport {\n createProviderDefinedToolFactory,\n createProviderDefinedToolFactoryWithOutputSchema,\n type ProviderDefinedToolFactory,\n type ProviderDefinedToolFactoryWithOutputSchema,\n} from './provider-defined-tool-factory';\nexport {\n createProviderExecutedToolFactory,\n type ProviderExecutedToolFactory,\n} from './provider-executed-tool-factory';\nexport { cancelResponseBody } from './cancel-response-body';\nexport {\n DEFAULT_MAX_DOWNLOAD_SIZE,\n readResponseWithSizeLimit,\n} from './read-response-with-size-limit';\nexport * from './remove-undefined-entries';\nexport * from './resolve';\nexport { resolveFullMediaType } from './resolve-full-media-type';\nexport { resolveProviderReference } from './resolve-provider-reference';\nexport * from './retry-with-exponential-backoff';\nexport * from './response-handler';\nexport {\n asSchema,\n jsonSchema,\n lazySchema,\n zodSchema,\n type FlexibleSchema,\n type InferSchema,\n type LazySchema,\n type Schema,\n type ValidationResult,\n} from './schema';\nexport { serializeModelOptions } from './serialize-model-options';\nexport { secureJsonParse } from './secure-json-parse';\nexport {\n StreamingToolCallTracker,\n type StreamingToolCallDelta,\n type StreamingToolCallTrackerOptions,\n} from './streaming-tool-call-tracker';\nexport { stripFileExtension } from './strip-file-extension';\nexport {\n TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE as EXPERIMENTAL_TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE,\n TRANSCRIPTION_STREAM_START_FRAME_TYPE as EXPERIMENTAL_TRANSCRIPTION_STREAM_START_FRAME_TYPE,\n parseTranscriptionStreamClientFrame as experimental_parseTranscriptionStreamClientFrame,\n parseTranscriptionStreamPart as experimental_parseTranscriptionStreamPart,\n serializeTranscriptionStreamPart as experimental_serializeTranscriptionStreamPart,\n type TranscriptionStreamClientFrame as Experimental_TranscriptionStreamClientFrame,\n type TranscriptionStreamStartFrame as Experimental_TranscriptionStreamStartFrame,\n} from './transcription-stream-envelope';\nexport * from './uint8-utils';\nexport { validateBaseURL } from './validate-base-url';\nexport { validateDownloadUrl } from './validate-download-url';\nexport * from './validate-types';\nexport { VERSION } from './version';\nexport {\n getWebSocketConstructor,\n readWebSocketMessageText,\n toWebSocketUrl,\n waitForWebSocketBufferDrain,\n type WebSocketConstructor,\n type WebSocketLike,\n} from './websocket';\nexport { withUserAgentSuffix } from './with-user-agent-suffix';\nexport * from './without-trailing-slash';\n\n// folder re-exports\nexport * from './types';\n\n// external re-exports\nexport type * from '@standard-schema/spec';\nexport { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from '@workflow/serde';\nexport {\n EventSourceParserStream,\n type EventSourceMessage,\n} from 'eventsource-parser/stream';\n"],"mappings":"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","names":["resolve","_a","_a","tool","_a","resolve","_a","_a","name","_a","_b","APICallError","_a","_b","APICallError","_a","_b","_a","_b","mediaType","_a","TypeValidationError","TypeValidationError","jsonSchema","ZodFirstPartyTypeKind","_a","_b","ZodFirstPartyTypeKind","_a","_a","_b","ZodFirstPartyTypeKind","types","x","_a","ZodFirstPartyTypeKind","_a","jsonSchema","name","_a","name","schema","jsonSchema","standardSchema","zodSchema","_a","TypeValidationError","TypeValidationError","InvalidArgumentError","InvalidArgumentError","APICallError","getOriginalFetch","APICallError","tool","APICallError","textDecoder","APICallError","_a","_b","InvalidArgumentError","tool","tool","EventSourceParserStream"]}