openai 7.16.0 → 7.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/_vendor/zod-to-json-schema/Options.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/Options.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/Options.js +2 -0
- package/_vendor/zod-to-json-schema/Options.js.map +1 -1
- package/_vendor/zod-to-json-schema/Options.mjs +2 -0
- package/_vendor/zod-to-json-schema/Options.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.js +1 -0
- package/_vendor/zod-to-json-schema/parseDef.js.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.mjs +1 -0
- package/_vendor/zod-to-json-schema/parseDef.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.js +2 -0
- package/_vendor/zod-to-json-schema/parsers/bigint.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.mjs +2 -0
- package/_vendor/zod-to-json-schema/parsers/bigint.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.js +1 -0
- package/_vendor/zod-to-json-schema/parsers/literal.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.mjs +1 -0
- package/_vendor/zod-to-json-schema/parsers/literal.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.js +1 -0
- package/_vendor/zod-to-json-schema/parsers/null.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.mjs +1 -0
- package/_vendor/zod-to-json-schema/parsers/null.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.js +4 -0
- package/_vendor/zod-to-json-schema/parsers/nullable.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.mjs +4 -0
- package/_vendor/zod-to-json-schema/parsers/nullable.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.js +2 -0
- package/_vendor/zod-to-json-schema/parsers/number.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.mjs +2 -0
- package/_vendor/zod-to-json-schema/parsers/number.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.js +6 -7
- package/_vendor/zod-to-json-schema/parsers/optional.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.mjs +6 -7
- package/_vendor/zod-to-json-schema/parsers/optional.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.js +2 -0
- package/_vendor/zod-to-json-schema/parsers/record.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.mjs +2 -0
- package/_vendor/zod-to-json-schema/parsers/record.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.js +1 -0
- package/_vendor/zod-to-json-schema/parsers/string.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.mjs +1 -0
- package/_vendor/zod-to-json-schema/parsers/string.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.js +3 -0
- package/_vendor/zod-to-json-schema/parsers/union.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.mjs +3 -0
- package/_vendor/zod-to-json-schema/parsers/union.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/util.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/util.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/util.js +1 -0
- package/_vendor/zod-to-json-schema/util.js.map +1 -1
- package/_vendor/zod-to-json-schema/util.mjs +1 -0
- package/_vendor/zod-to-json-schema/util.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.js +2 -0
- package/_vendor/zod-to-json-schema/zodToJsonSchema.js.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs +2 -0
- package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs.map +1 -1
- package/auth/subject-token-providers.d.mts.map +1 -1
- package/auth/subject-token-providers.d.ts.map +1 -1
- package/auth/subject-token-providers.js +6 -1
- package/auth/subject-token-providers.js.map +1 -1
- package/auth/subject-token-providers.mjs +6 -1
- package/auth/subject-token-providers.mjs.map +1 -1
- package/auth/workload-identity-auth.d.mts.map +1 -1
- package/auth/workload-identity-auth.d.ts.map +1 -1
- package/auth/workload-identity-auth.js +9 -0
- package/auth/workload-identity-auth.js.map +1 -1
- package/auth/workload-identity-auth.mjs +9 -0
- package/auth/workload-identity-auth.mjs.map +1 -1
- package/auth/x509-transport.d.mts.map +1 -1
- package/auth/x509-transport.d.ts.map +1 -1
- package/auth/x509-transport.js +11 -0
- package/auth/x509-transport.js.map +1 -1
- package/auth/x509-transport.mjs +11 -0
- package/auth/x509-transport.mjs.map +1 -1
- package/azure.d.mts.map +1 -1
- package/azure.d.ts.map +1 -1
- package/azure.js +3 -0
- package/azure.js.map +1 -1
- package/azure.mjs +3 -0
- package/azure.mjs.map +1 -1
- package/bedrock.d.mts.map +1 -1
- package/bedrock.d.ts.map +1 -1
- package/bedrock.js +5 -0
- package/bedrock.js.map +1 -1
- package/bedrock.mjs +5 -0
- package/bedrock.mjs.map +1 -1
- package/beta/realtime/internal-base.d.mts.map +1 -1
- package/beta/realtime/internal-base.d.ts.map +1 -1
- package/beta/realtime/internal-base.js +1 -0
- package/beta/realtime/internal-base.js.map +1 -1
- package/beta/realtime/internal-base.mjs +1 -0
- package/beta/realtime/internal-base.mjs.map +1 -1
- package/beta/realtime/websocket.d.mts.map +1 -1
- package/beta/realtime/websocket.d.ts.map +1 -1
- package/beta/realtime/websocket.js +9 -1
- package/beta/realtime/websocket.js.map +1 -1
- package/beta/realtime/websocket.mjs +9 -1
- package/beta/realtime/websocket.mjs.map +1 -1
- package/beta/realtime/ws.d.mts.map +1 -1
- package/beta/realtime/ws.d.ts.map +1 -1
- package/beta/realtime/ws.js +3 -0
- package/beta/realtime/ws.js.map +1 -1
- package/beta/realtime/ws.mjs +3 -0
- package/beta/realtime/ws.mjs.map +1 -1
- package/client.d.mts +3 -0
- package/client.d.mts.map +1 -1
- package/client.d.ts +3 -0
- package/client.d.ts.map +1 -1
- package/client.js +39 -6
- package/client.js.map +1 -1
- package/client.mjs +39 -6
- package/client.mjs.map +1 -1
- package/core/EventEmitter.d.mts.map +1 -1
- package/core/EventEmitter.d.ts.map +1 -1
- package/core/EventEmitter.js +15 -0
- package/core/EventEmitter.js.map +1 -1
- package/core/EventEmitter.mjs +15 -0
- package/core/EventEmitter.mjs.map +1 -1
- package/core/streaming.d.mts +1 -0
- package/core/streaming.d.mts.map +1 -1
- package/core/streaming.d.ts +1 -0
- package/core/streaming.d.ts.map +1 -1
- package/core/streaming.js +28 -1
- package/core/streaming.js.map +1 -1
- package/core/streaming.mjs +28 -1
- package/core/streaming.mjs.map +1 -1
- package/helpers/audio.d.mts.map +1 -1
- package/helpers/audio.d.ts.map +1 -1
- package/helpers/audio.js +2 -0
- package/helpers/audio.js.map +1 -1
- package/helpers/audio.mjs +2 -0
- package/helpers/audio.mjs.map +1 -1
- package/helpers/standard-schema.d.mts.map +1 -1
- package/helpers/standard-schema.d.ts.map +1 -1
- package/helpers/standard-schema.js +28 -18
- package/helpers/standard-schema.js.map +1 -1
- package/helpers/standard-schema.mjs +28 -18
- package/helpers/standard-schema.mjs.map +1 -1
- package/helpers/zod-v3-strict-schema.d.mts.map +1 -1
- package/helpers/zod-v3-strict-schema.d.ts.map +1 -1
- package/helpers/zod-v3-strict-schema.js +5 -0
- package/helpers/zod-v3-strict-schema.js.map +1 -1
- package/helpers/zod-v3-strict-schema.mjs +5 -0
- package/helpers/zod-v3-strict-schema.mjs.map +1 -1
- package/helpers/zod.d.mts.map +1 -1
- package/helpers/zod.d.ts.map +1 -1
- package/helpers/zod.js +16 -1
- package/helpers/zod.js.map +1 -1
- package/helpers/zod.mjs +17 -2
- package/helpers/zod.mjs.map +1 -1
- package/internal/assistant-stream-delta.d.mts.map +1 -1
- package/internal/assistant-stream-delta.d.ts.map +1 -1
- package/internal/assistant-stream-delta.js +8 -1
- package/internal/assistant-stream-delta.js.map +1 -1
- package/internal/assistant-stream-delta.mjs +8 -1
- package/internal/assistant-stream-delta.mjs.map +1 -1
- package/internal/auth/x509-credential-options.d.mts.map +1 -1
- package/internal/auth/x509-credential-options.d.ts.map +1 -1
- package/internal/auth/x509-credential-options.js +3 -0
- package/internal/auth/x509-credential-options.js.map +1 -1
- package/internal/auth/x509-credential-options.mjs +3 -0
- package/internal/auth/x509-credential-options.mjs.map +1 -1
- package/internal/auth/x509-token-exchange.d.mts.map +1 -1
- package/internal/auth/x509-token-exchange.d.ts.map +1 -1
- package/internal/auth/x509-token-exchange.js +2 -0
- package/internal/auth/x509-token-exchange.js.map +1 -1
- package/internal/auth/x509-token-exchange.mjs +2 -0
- package/internal/auth/x509-token-exchange.mjs.map +1 -1
- package/internal/auth/x509-transport-capability.d.mts.map +1 -1
- package/internal/auth/x509-transport-capability.d.ts.map +1 -1
- package/internal/auth/x509-transport-capability.js +1 -0
- package/internal/auth/x509-transport-capability.js.map +1 -1
- package/internal/auth/x509-transport-capability.mjs +1 -0
- package/internal/auth/x509-transport-capability.mjs.map +1 -1
- package/internal/auth/x509-transport-state.mjs +1 -0
- package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -1
- package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -1
- package/internal/auth/x509-workload-identity-auth.js +11 -0
- package/internal/auth/x509-workload-identity-auth.js.map +1 -1
- package/internal/auth/x509-workload-identity-auth.mjs +11 -0
- package/internal/auth/x509-workload-identity-auth.mjs.map +1 -1
- package/internal/bedrock.d.mts.map +1 -1
- package/internal/bedrock.d.ts.map +1 -1
- package/internal/bedrock.js +17 -1
- package/internal/bedrock.js.map +1 -1
- package/internal/bedrock.mjs +17 -1
- package/internal/bedrock.mjs.map +1 -1
- package/internal/decoders/line.d.mts.map +1 -1
- package/internal/decoders/line.d.ts.map +1 -1
- package/internal/decoders/line.js +1 -0
- package/internal/decoders/line.js.map +1 -1
- package/internal/decoders/line.mjs +1 -0
- package/internal/decoders/line.mjs.map +1 -1
- package/internal/parse.d.mts +1 -0
- package/internal/parse.d.mts.map +1 -1
- package/internal/parse.d.ts +1 -0
- package/internal/parse.d.ts.map +1 -1
- package/internal/parse.js.map +1 -1
- package/internal/parse.mjs.map +1 -1
- package/internal/provider.d.mts.map +1 -1
- package/internal/provider.d.ts.map +1 -1
- package/internal/provider.js +3 -0
- package/internal/provider.js.map +1 -1
- package/internal/provider.mjs +3 -0
- package/internal/provider.mjs.map +1 -1
- package/internal/qs/stringify.d.mts.map +1 -1
- package/internal/qs/stringify.d.ts.map +1 -1
- package/internal/qs/stringify.js +3 -0
- package/internal/qs/stringify.js.map +1 -1
- package/internal/qs/stringify.mjs +3 -0
- package/internal/qs/stringify.mjs.map +1 -1
- package/internal/qs/utils.d.mts.map +1 -1
- package/internal/qs/utils.d.ts.map +1 -1
- package/internal/qs/utils.js +15 -3
- package/internal/qs/utils.js.map +1 -1
- package/internal/qs/utils.mjs +15 -3
- package/internal/qs/utils.mjs.map +1 -1
- package/internal/responses/response-accumulator.d.mts.map +1 -1
- package/internal/responses/response-accumulator.d.ts.map +1 -1
- package/internal/responses/response-accumulator.js +20 -4
- package/internal/responses/response-accumulator.js.map +1 -1
- package/internal/responses/response-accumulator.mjs +20 -4
- package/internal/responses/response-accumulator.mjs.map +1 -1
- package/internal/to-file.js.map +1 -1
- package/internal/to-file.mjs.map +1 -1
- package/internal/uploads.d.mts.map +1 -1
- package/internal/uploads.d.ts.map +1 -1
- package/internal/uploads.js +10 -0
- package/internal/uploads.js.map +1 -1
- package/internal/uploads.mjs +10 -0
- package/internal/uploads.mjs.map +1 -1
- package/internal/utils/abort.d.mts.map +1 -1
- package/internal/utils/abort.d.ts.map +1 -1
- package/internal/utils/abort.js +9 -2
- package/internal/utils/abort.js.map +1 -1
- package/internal/utils/abort.mjs +9 -2
- package/internal/utils/abort.mjs.map +1 -1
- package/internal/utils/bytes.d.mts.map +1 -1
- package/internal/utils/bytes.d.ts.map +1 -1
- package/internal/utils/bytes.js +2 -0
- package/internal/utils/bytes.js.map +1 -1
- package/internal/utils/bytes.mjs +2 -0
- package/internal/utils/bytes.mjs.map +1 -1
- package/internal/utils/path.d.mts.map +1 -1
- package/internal/utils/path.d.ts.map +1 -1
- package/internal/utils/path.js +2 -0
- package/internal/utils/path.js.map +1 -1
- package/internal/utils/path.mjs +2 -0
- package/internal/utils/path.mjs.map +1 -1
- package/internal/utils/sleep.d.mts +1 -1
- package/internal/utils/sleep.d.mts.map +1 -1
- package/internal/utils/sleep.d.ts +1 -1
- package/internal/utils/sleep.d.ts.map +1 -1
- package/internal/utils/sleep.js +51 -1
- package/internal/utils/sleep.js.map +1 -1
- package/internal/utils/sleep.mjs +51 -1
- package/internal/utils/sleep.mjs.map +1 -1
- package/internal/ws-adapter-browser.d.mts.map +1 -1
- package/internal/ws-adapter-browser.d.ts.map +1 -1
- package/internal/ws-adapter-browser.js +2 -0
- package/internal/ws-adapter-browser.js.map +1 -1
- package/internal/ws-adapter-browser.mjs +2 -0
- package/internal/ws-adapter-browser.mjs.map +1 -1
- package/internal/ws.d.mts +16 -0
- package/internal/ws.d.mts.map +1 -1
- package/internal/ws.d.ts +16 -0
- package/internal/ws.d.ts.map +1 -1
- package/internal/ws.js +71 -5
- package/internal/ws.js.map +1 -1
- package/internal/ws.mjs +68 -6
- package/internal/ws.mjs.map +1 -1
- package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
- package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
- package/lib/AbstractChatCompletionRunner.js +41 -16
- package/lib/AbstractChatCompletionRunner.js.map +1 -1
- package/lib/AbstractChatCompletionRunner.mjs +42 -17
- package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
- package/lib/AssistantStream.d.mts.map +1 -1
- package/lib/AssistantStream.d.ts.map +1 -1
- package/lib/AssistantStream.js +19 -5
- package/lib/AssistantStream.js.map +1 -1
- package/lib/AssistantStream.mjs +20 -6
- package/lib/AssistantStream.mjs.map +1 -1
- package/lib/ChatCompletionRunner.d.mts.map +1 -1
- package/lib/ChatCompletionRunner.d.ts.map +1 -1
- package/lib/ChatCompletionRunner.js +1 -0
- package/lib/ChatCompletionRunner.js.map +1 -1
- package/lib/ChatCompletionRunner.mjs +1 -0
- package/lib/ChatCompletionRunner.mjs.map +1 -1
- package/lib/ChatCompletionStream.d.mts +6 -1
- package/lib/ChatCompletionStream.d.mts.map +1 -1
- package/lib/ChatCompletionStream.d.ts +6 -1
- package/lib/ChatCompletionStream.d.ts.map +1 -1
- package/lib/ChatCompletionStream.js +63 -7
- package/lib/ChatCompletionStream.js.map +1 -1
- package/lib/ChatCompletionStream.mjs +64 -8
- package/lib/ChatCompletionStream.mjs.map +1 -1
- package/lib/EventEmitter.d.mts.map +1 -1
- package/lib/EventEmitter.d.ts.map +1 -1
- package/lib/EventEmitter.js +15 -0
- package/lib/EventEmitter.js.map +1 -1
- package/lib/EventEmitter.mjs +15 -0
- package/lib/EventEmitter.mjs.map +1 -1
- package/lib/EventStream.d.mts +2 -0
- package/lib/EventStream.d.mts.map +1 -1
- package/lib/EventStream.d.ts +2 -0
- package/lib/EventStream.d.ts.map +1 -1
- package/lib/EventStream.js +111 -14
- package/lib/EventStream.js.map +1 -1
- package/lib/EventStream.mjs +111 -14
- package/lib/EventStream.mjs.map +1 -1
- package/lib/ResponsesParser.d.mts.map +1 -1
- package/lib/ResponsesParser.d.ts.map +1 -1
- package/lib/ResponsesParser.js +4 -0
- package/lib/ResponsesParser.js.map +1 -1
- package/lib/ResponsesParser.mjs +4 -0
- package/lib/ResponsesParser.mjs.map +1 -1
- package/lib/RunnableFunction.d.mts.map +1 -1
- package/lib/RunnableFunction.d.ts.map +1 -1
- package/lib/RunnableFunction.js.map +1 -1
- package/lib/RunnableFunction.mjs.map +1 -1
- package/lib/agents/agent-session-stream.d.mts.map +1 -1
- package/lib/agents/agent-session-stream.d.ts.map +1 -1
- package/lib/agents/agent-session-stream.js +5 -2
- package/lib/agents/agent-session-stream.js.map +1 -1
- package/lib/agents/agent-session-stream.mjs +5 -2
- package/lib/agents/agent-session-stream.mjs.map +1 -1
- package/lib/embeddings.d.mts.map +1 -1
- package/lib/embeddings.d.ts.map +1 -1
- package/lib/embeddings.js +2 -0
- package/lib/embeddings.js.map +1 -1
- package/lib/embeddings.mjs +2 -0
- package/lib/embeddings.mjs.map +1 -1
- package/lib/live/transcript-grouper.d.mts.map +1 -1
- package/lib/live/transcript-grouper.d.ts.map +1 -1
- package/lib/live/transcript-grouper.js +8 -2
- package/lib/live/transcript-grouper.js.map +1 -1
- package/lib/live/transcript-grouper.mjs +8 -2
- package/lib/live/transcript-grouper.mjs.map +1 -1
- package/lib/parser.d.mts.map +1 -1
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js +13 -0
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs +13 -0
- package/lib/parser.mjs.map +1 -1
- package/lib/responses/ResponseInputItems.d.mts.map +1 -1
- package/lib/responses/ResponseInputItems.d.ts.map +1 -1
- package/lib/responses/ResponseInputItems.js +11 -0
- package/lib/responses/ResponseInputItems.js.map +1 -1
- package/lib/responses/ResponseInputItems.mjs +11 -0
- package/lib/responses/ResponseInputItems.mjs.map +1 -1
- package/lib/responses/ResponseStream.d.mts.map +1 -1
- package/lib/responses/ResponseStream.d.ts.map +1 -1
- package/lib/responses/ResponseStream.js +7 -3
- package/lib/responses/ResponseStream.js.map +1 -1
- package/lib/responses/ResponseStream.mjs +8 -4
- package/lib/responses/ResponseStream.mjs.map +1 -1
- package/lib/responses/responses-websocket-lane.d.mts +63 -0
- package/lib/responses/responses-websocket-lane.d.mts.map +1 -0
- package/lib/responses/responses-websocket-lane.d.ts +63 -0
- package/lib/responses/responses-websocket-lane.d.ts.map +1 -0
- package/lib/responses/responses-websocket-lane.js +314 -0
- package/lib/responses/responses-websocket-lane.js.map +1 -0
- package/lib/responses/responses-websocket-lane.mjs +309 -0
- package/lib/responses/responses-websocket-lane.mjs.map +1 -0
- package/lib/responses/responses-websocket-session.d.mts +38 -0
- package/lib/responses/responses-websocket-session.d.mts.map +1 -0
- package/lib/responses/responses-websocket-session.d.ts +38 -0
- package/lib/responses/responses-websocket-session.d.ts.map +1 -0
- package/lib/responses/responses-websocket-session.js +268 -0
- package/lib/responses/responses-websocket-session.js.map +1 -0
- package/lib/responses/responses-websocket-session.mjs +263 -0
- package/lib/responses/responses-websocket-session.mjs.map +1 -0
- package/lib/transform.d.mts.map +1 -1
- package/lib/transform.d.ts.map +1 -1
- package/lib/transform.js +69 -33
- package/lib/transform.js.map +1 -1
- package/lib/transform.mjs +69 -33
- package/lib/transform.mjs.map +1 -1
- package/lib/webrtc/connection.d.mts.map +1 -1
- package/lib/webrtc/connection.d.ts.map +1 -1
- package/lib/webrtc/connection.js +6 -1
- package/lib/webrtc/connection.js.map +1 -1
- package/lib/webrtc/connection.mjs +6 -1
- package/lib/webrtc/connection.mjs.map +1 -1
- package/lib/webrtc/data-channel.d.mts.map +1 -1
- package/lib/webrtc/data-channel.d.ts.map +1 -1
- package/lib/webrtc/data-channel.js +9 -1
- package/lib/webrtc/data-channel.js.map +1 -1
- package/lib/webrtc/data-channel.mjs +9 -1
- package/lib/webrtc/data-channel.mjs.map +1 -1
- package/lib/webrtc/subscriptions.d.mts.map +1 -1
- package/lib/webrtc/subscriptions.d.ts.map +1 -1
- package/lib/webrtc/subscriptions.js +2 -0
- package/lib/webrtc/subscriptions.js.map +1 -1
- package/lib/webrtc/subscriptions.mjs +2 -0
- package/lib/webrtc/subscriptions.mjs.map +1 -1
- package/lib/webrtc/types.d.mts.map +1 -1
- package/lib/webrtc/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/providers/bedrock/aws.d.mts.map +1 -1
- package/providers/bedrock/aws.d.ts.map +1 -1
- package/providers/bedrock/aws.js +4 -0
- package/providers/bedrock/aws.js.map +1 -1
- package/providers/bedrock/aws.mjs +4 -0
- package/providers/bedrock/aws.mjs.map +1 -1
- package/realtime/internal-base.d.mts.map +1 -1
- package/realtime/internal-base.d.ts.map +1 -1
- package/realtime/internal-base.js +1 -0
- package/realtime/internal-base.js.map +1 -1
- package/realtime/internal-base.mjs +1 -0
- package/realtime/internal-base.mjs.map +1 -1
- package/realtime/websocket.d.mts.map +1 -1
- package/realtime/websocket.d.ts.map +1 -1
- package/realtime/websocket.js +9 -1
- package/realtime/websocket.js.map +1 -1
- package/realtime/websocket.mjs +9 -1
- package/realtime/websocket.mjs.map +1 -1
- package/realtime/ws.d.mts.map +1 -1
- package/realtime/ws.d.ts.map +1 -1
- package/realtime/ws.js +3 -0
- package/realtime/ws.js.map +1 -1
- package/realtime/ws.mjs +3 -0
- package/realtime/ws.mjs.map +1 -1
- package/resources/beta/agents/agents.d.mts +2 -1
- package/resources/beta/agents/agents.d.mts.map +1 -1
- package/resources/beta/agents/agents.d.ts +2 -1
- package/resources/beta/agents/agents.d.ts.map +1 -1
- package/resources/beta/agents/agents.js.map +1 -1
- package/resources/beta/agents/agents.mjs.map +1 -1
- package/resources/beta/agents/sessions/sessions.d.mts +42 -1
- package/resources/beta/agents/sessions/sessions.d.mts.map +1 -1
- package/resources/beta/agents/sessions/sessions.d.ts +42 -1
- package/resources/beta/agents/sessions/sessions.d.ts.map +1 -1
- package/resources/beta/agents/sessions/sessions.js +2 -1
- package/resources/beta/agents/sessions/sessions.js.map +1 -1
- package/resources/beta/agents/sessions/sessions.mjs +2 -1
- package/resources/beta/agents/sessions/sessions.mjs.map +1 -1
- package/resources/beta/beta.d.mts +2 -2
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +2 -2
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/index.d.mts +1 -1
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +1 -1
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs.map +1 -1
- package/resources/beta/responses/index.d.mts +1 -1
- package/resources/beta/responses/index.d.mts.map +1 -1
- package/resources/beta/responses/index.d.ts +1 -1
- package/resources/beta/responses/index.d.ts.map +1 -1
- package/resources/beta/responses/index.js.map +1 -1
- package/resources/beta/responses/index.mjs.map +1 -1
- package/resources/beta/responses/internal-base.d.mts +3 -0
- package/resources/beta/responses/internal-base.d.mts.map +1 -1
- package/resources/beta/responses/internal-base.d.ts +3 -0
- package/resources/beta/responses/internal-base.d.ts.map +1 -1
- package/resources/beta/responses/internal-base.js +21 -12
- package/resources/beta/responses/internal-base.js.map +1 -1
- package/resources/beta/responses/internal-base.mjs +21 -12
- package/resources/beta/responses/internal-base.mjs.map +1 -1
- package/resources/beta/responses/responses.d.mts +65 -7
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +65 -7
- package/resources/beta/responses/responses.d.ts.map +1 -1
- package/resources/beta/responses/responses.js.map +1 -1
- package/resources/beta/responses/responses.mjs.map +1 -1
- package/resources/beta/responses/ws-base.d.mts +9 -1
- package/resources/beta/responses/ws-base.d.mts.map +1 -1
- package/resources/beta/responses/ws-base.d.ts +9 -1
- package/resources/beta/responses/ws-base.d.ts.map +1 -1
- package/resources/beta/responses/ws-base.js +24 -5
- package/resources/beta/responses/ws-base.js.map +1 -1
- package/resources/beta/responses/ws-base.mjs +23 -6
- package/resources/beta/responses/ws-base.mjs.map +1 -1
- package/resources/beta/responses/ws.d.mts +2 -0
- package/resources/beta/responses/ws.d.mts.map +1 -1
- package/resources/beta/responses/ws.d.ts +2 -0
- package/resources/beta/responses/ws.d.ts.map +1 -1
- package/resources/beta/responses/ws.js +21 -8
- package/resources/beta/responses/ws.js.map +1 -1
- package/resources/beta/responses/ws.mjs +21 -8
- package/resources/beta/responses/ws.mjs.map +1 -1
- package/resources/live/forks/internal-base.d.mts +3 -0
- package/resources/live/forks/internal-base.d.mts.map +1 -1
- package/resources/live/forks/internal-base.d.ts +3 -0
- package/resources/live/forks/internal-base.d.ts.map +1 -1
- package/resources/live/forks/internal-base.js +21 -5
- package/resources/live/forks/internal-base.js.map +1 -1
- package/resources/live/forks/internal-base.mjs +21 -5
- package/resources/live/forks/internal-base.mjs.map +1 -1
- package/resources/live/forks/ws.d.mts.map +1 -1
- package/resources/live/forks/ws.d.ts.map +1 -1
- package/resources/live/forks/ws.js +2 -4
- package/resources/live/forks/ws.js.map +1 -1
- package/resources/live/forks/ws.mjs +2 -4
- package/resources/live/forks/ws.mjs.map +1 -1
- package/resources/live/internal-base.d.mts +3 -0
- package/resources/live/internal-base.d.mts.map +1 -1
- package/resources/live/internal-base.d.ts +3 -0
- package/resources/live/internal-base.d.ts.map +1 -1
- package/resources/live/internal-base.js +21 -5
- package/resources/live/internal-base.js.map +1 -1
- package/resources/live/internal-base.mjs +21 -5
- package/resources/live/internal-base.mjs.map +1 -1
- package/resources/live/sideband/internal-base.d.mts +3 -0
- package/resources/live/sideband/internal-base.d.mts.map +1 -1
- package/resources/live/sideband/internal-base.d.ts +3 -0
- package/resources/live/sideband/internal-base.d.ts.map +1 -1
- package/resources/live/sideband/internal-base.js +21 -5
- package/resources/live/sideband/internal-base.js.map +1 -1
- package/resources/live/sideband/internal-base.mjs +21 -5
- package/resources/live/sideband/internal-base.mjs.map +1 -1
- package/resources/live/sideband/ws.d.mts.map +1 -1
- package/resources/live/sideband/ws.d.ts.map +1 -1
- package/resources/live/sideband/ws.js +2 -4
- package/resources/live/sideband/ws.js.map +1 -1
- package/resources/live/sideband/ws.mjs +2 -4
- package/resources/live/sideband/ws.mjs.map +1 -1
- package/resources/live/ws.d.mts.map +1 -1
- package/resources/live/ws.d.ts.map +1 -1
- package/resources/live/ws.js +2 -4
- package/resources/live/ws.js.map +1 -1
- package/resources/live/ws.mjs +2 -4
- package/resources/live/ws.mjs.map +1 -1
- package/resources/responses/internal-base.d.mts +3 -0
- package/resources/responses/internal-base.d.mts.map +1 -1
- package/resources/responses/internal-base.d.ts +3 -0
- package/resources/responses/internal-base.d.ts.map +1 -1
- package/resources/responses/internal-base.js +21 -12
- package/resources/responses/internal-base.js.map +1 -1
- package/resources/responses/internal-base.mjs +21 -12
- package/resources/responses/internal-base.mjs.map +1 -1
- package/resources/responses/responses.d.mts +47 -4
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +47 -4
- package/resources/responses/responses.d.ts.map +1 -1
- package/resources/responses/responses.js.map +1 -1
- package/resources/responses/responses.mjs.map +1 -1
- package/resources/responses/ws-base.d.mts +11 -1
- package/resources/responses/ws-base.d.mts.map +1 -1
- package/resources/responses/ws-base.d.ts +11 -1
- package/resources/responses/ws-base.d.ts.map +1 -1
- package/resources/responses/ws-base.js +29 -8
- package/resources/responses/ws-base.js.map +1 -1
- package/resources/responses/ws-base.mjs +28 -9
- package/resources/responses/ws-base.mjs.map +1 -1
- package/resources/responses/ws.d.mts +2 -0
- package/resources/responses/ws.d.mts.map +1 -1
- package/resources/responses/ws.d.ts +2 -0
- package/resources/responses/ws.d.ts.map +1 -1
- package/resources/responses/ws.js +21 -8
- package/resources/responses/ws.js.map +1 -1
- package/resources/responses/ws.mjs +21 -8
- package/resources/responses/ws.mjs.map +1 -1
- package/resources/shared.d.mts +1 -1
- package/resources/shared.d.mts.map +1 -1
- package/resources/shared.d.ts +1 -1
- package/resources/shared.d.ts.map +1 -1
- package/resources/webhooks/webhooks.d.mts +3 -4
- package/resources/webhooks/webhooks.d.mts.map +1 -1
- package/resources/webhooks/webhooks.d.ts +3 -4
- package/resources/webhooks/webhooks.d.ts.map +1 -1
- package/src/_vendor/zod-to-json-schema/Options.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parseDef.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/bigint.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parsers/literal.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/null.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/nullable.ts +4 -0
- package/src/_vendor/zod-to-json-schema/parsers/number.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parsers/optional.ts +6 -7
- package/src/_vendor/zod-to-json-schema/parsers/record.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parsers/string.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/union.ts +3 -0
- package/src/_vendor/zod-to-json-schema/util.ts +1 -0
- package/src/_vendor/zod-to-json-schema/zodToJsonSchema.ts +3 -1
- package/src/auth/subject-token-providers.ts +6 -1
- package/src/auth/workload-identity-auth.ts +10 -1
- package/src/auth/x509-transport.ts +13 -2
- package/src/azure.ts +3 -0
- package/src/bedrock.ts +5 -0
- package/src/beta/realtime/internal-base.ts +2 -0
- package/src/beta/realtime/websocket.ts +11 -1
- package/src/beta/realtime/ws.ts +3 -0
- package/src/client.ts +50 -3
- package/src/core/EventEmitter.ts +15 -0
- package/src/core/streaming.ts +30 -2
- package/src/helpers/audio.ts +2 -0
- package/src/helpers/standard-schema.ts +31 -19
- package/src/helpers/zod-v3-strict-schema.ts +8 -2
- package/src/helpers/zod.ts +32 -13
- package/src/internal/assistant-stream-delta.ts +7 -1
- package/src/internal/auth/x509-credential-options.ts +3 -0
- package/src/internal/auth/x509-token-exchange.ts +10 -1
- package/src/internal/auth/x509-transport-capability.ts +2 -1
- package/src/internal/auth/x509-workload-identity-auth.ts +13 -8
- package/src/internal/bedrock.ts +15 -0
- package/src/internal/decoders/line.ts +1 -0
- package/src/internal/parse.ts +1 -0
- package/src/internal/provider.ts +3 -0
- package/src/internal/qs/stringify.ts +3 -0
- package/src/internal/qs/utils.ts +14 -3
- package/src/internal/responses/response-accumulator.ts +34 -4
- package/src/internal/to-file.ts +1 -1
- package/src/internal/uploads.ts +11 -1
- package/src/internal/utils/abort.ts +7 -2
- package/src/internal/utils/bytes.ts +2 -0
- package/src/internal/utils/path.ts +2 -0
- package/src/internal/utils/sleep.ts +52 -1
- package/src/internal/ws-adapter-browser.ts +2 -0
- package/src/internal/ws.ts +80 -6
- package/src/lib/AbstractChatCompletionRunner.ts +40 -17
- package/src/lib/AssistantStream.ts +31 -20
- package/src/lib/ChatCompletionRunner.ts +1 -0
- package/src/lib/ChatCompletionStream.ts +81 -14
- package/src/lib/EventEmitter.ts +15 -0
- package/src/lib/EventStream.ts +93 -3
- package/src/lib/ResponsesParser.ts +5 -0
- package/src/lib/RunnableFunction.ts +4 -1
- package/src/lib/agents/agent-session-stream.ts +5 -3
- package/src/lib/embeddings.ts +3 -1
- package/src/lib/live/transcript-grouper.ts +4 -0
- package/src/lib/parser.ts +16 -2
- package/src/lib/responses/ResponseInputItems.ts +11 -0
- package/src/lib/responses/ResponseStream.ts +6 -3
- package/src/lib/responses/responses-websocket-lane.ts +388 -0
- package/src/lib/responses/responses-websocket-session.ts +317 -0
- package/src/lib/transform.ts +70 -35
- package/src/lib/webrtc/connection.ts +5 -1
- package/src/lib/webrtc/data-channel.ts +7 -0
- package/src/lib/webrtc/subscriptions.ts +3 -0
- package/src/lib/webrtc/types.ts +1 -0
- package/src/providers/bedrock/aws.ts +5 -1
- package/src/realtime/internal-base.ts +2 -0
- package/src/realtime/websocket.ts +11 -1
- package/src/realtime/ws.ts +3 -0
- package/src/resources/beta/agents/agents.ts +2 -0
- package/src/resources/beta/agents/sessions/sessions.ts +47 -1
- package/src/resources/beta/beta.ts +2 -0
- package/src/resources/beta/index.ts +1 -0
- package/src/resources/beta/responses/index.ts +1 -0
- package/src/resources/beta/responses/internal-base.ts +24 -11
- package/src/resources/beta/responses/responses.ts +82 -4
- package/src/resources/beta/responses/ws-base.ts +31 -6
- package/src/resources/beta/responses/ws.ts +29 -11
- package/src/resources/live/forks/internal-base.ts +24 -5
- package/src/resources/live/forks/ws.ts +4 -5
- package/src/resources/live/internal-base.ts +24 -5
- package/src/resources/live/sideband/internal-base.ts +24 -5
- package/src/resources/live/sideband/ws.ts +4 -5
- package/src/resources/live/ws.ts +4 -5
- package/src/resources/responses/api.md +1 -0
- package/src/resources/responses/internal-base.ts +24 -11
- package/src/resources/responses/responses.ts +56 -1
- package/src/resources/responses/ws-base.ts +36 -9
- package/src/resources/responses/ws.ts +29 -11
- package/src/resources/shared.ts +4 -2
- package/src/resources/webhooks/webhooks.ts +3 -4
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/src/client.ts
CHANGED
|
@@ -739,6 +739,21 @@ export class OpenAI {
|
|
|
739
739
|
return this._options.defaultQuery;
|
|
740
740
|
}
|
|
741
741
|
|
|
742
|
+
/** @internal Client request headers for each new WebSocket handshake. */
|
|
743
|
+
_buildWebSocketHeaders(authHeaders: Record<string, string>): Record<string, string> {
|
|
744
|
+
return Object.fromEntries(
|
|
745
|
+
buildHeaders([
|
|
746
|
+
{
|
|
747
|
+
'User-Agent': this.getUserAgent(),
|
|
748
|
+
'OpenAI-Organization': this.organization,
|
|
749
|
+
'OpenAI-Project': this.project,
|
|
750
|
+
},
|
|
751
|
+
authHeaders,
|
|
752
|
+
this._options.defaultHeaders,
|
|
753
|
+
]).values,
|
|
754
|
+
);
|
|
755
|
+
}
|
|
756
|
+
|
|
742
757
|
protected validateHeaders(
|
|
743
758
|
{ values, nulls }: NullableHeaders,
|
|
744
759
|
schemes: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean } = {
|
|
@@ -856,6 +871,10 @@ export class OpenAI {
|
|
|
856
871
|
return Errors.APIError.generate(status, normalizedError, message, headers);
|
|
857
872
|
}
|
|
858
873
|
|
|
874
|
+
_hasApiKeyProvider(): boolean {
|
|
875
|
+
return typeof this._options.apiKey === 'function';
|
|
876
|
+
}
|
|
877
|
+
|
|
859
878
|
/**
|
|
860
879
|
* Resolves a function-based API key and retains the resolved value on this client.
|
|
861
880
|
* Returns whether a provider was invoked. Internal callers can capture this
|
|
@@ -1108,6 +1127,8 @@ export class OpenAI {
|
|
|
1108
1127
|
props.options,
|
|
1109
1128
|
retriesRemaining,
|
|
1110
1129
|
props.retryOfRequestLogID ?? props.requestLogID,
|
|
1130
|
+
undefined,
|
|
1131
|
+
props.requestSignal,
|
|
1111
1132
|
);
|
|
1112
1133
|
Object.assign(props, next);
|
|
1113
1134
|
} finally {
|
|
@@ -1318,7 +1339,13 @@ export class OpenAI {
|
|
|
1318
1339
|
message: x509Authentication ? 'X.509 workload identity API connection failed.' : response.message,
|
|
1319
1340
|
}),
|
|
1320
1341
|
);
|
|
1321
|
-
return this.retryRequest(
|
|
1342
|
+
return this.retryRequest(
|
|
1343
|
+
options,
|
|
1344
|
+
retriesRemaining,
|
|
1345
|
+
retryOfRequestLogID ?? requestLogID,
|
|
1346
|
+
undefined,
|
|
1347
|
+
req.signal,
|
|
1348
|
+
);
|
|
1322
1349
|
}
|
|
1323
1350
|
const terminalMessage = hasStreamingBody
|
|
1324
1351
|
? 'error; streaming body cannot be retried'
|
|
@@ -1442,6 +1469,7 @@ export class OpenAI {
|
|
|
1442
1469
|
retriesRemaining,
|
|
1443
1470
|
retryOfRequestLogID ?? requestLogID,
|
|
1444
1471
|
response.headers,
|
|
1472
|
+
req.signal,
|
|
1445
1473
|
);
|
|
1446
1474
|
}
|
|
1447
1475
|
|
|
@@ -1497,7 +1525,15 @@ export class OpenAI {
|
|
|
1497
1525
|
helperMethod: options.__metadata?.['helperMethod'],
|
|
1498
1526
|
...(continueRequest ? { continueRequest } : {}),
|
|
1499
1527
|
});
|
|
1500
|
-
return {
|
|
1528
|
+
return {
|
|
1529
|
+
response,
|
|
1530
|
+
options,
|
|
1531
|
+
controller,
|
|
1532
|
+
requestSignal: req.signal,
|
|
1533
|
+
requestLogID,
|
|
1534
|
+
retryOfRequestLogID,
|
|
1535
|
+
startTime,
|
|
1536
|
+
};
|
|
1501
1537
|
}
|
|
1502
1538
|
|
|
1503
1539
|
getAPIList<Item, PageClass extends Pagination.AbstractPage<Item> = Pagination.AbstractPage<Item>>(
|
|
@@ -1638,6 +1674,7 @@ export class OpenAI {
|
|
|
1638
1674
|
retriesRemaining: number,
|
|
1639
1675
|
requestLogID: string,
|
|
1640
1676
|
responseHeaders?: Headers | undefined,
|
|
1677
|
+
requestSignal: AbortSignal | null | undefined = options.signal,
|
|
1641
1678
|
): Promise<APIResponseProps> {
|
|
1642
1679
|
let timeoutMillis: number | undefined;
|
|
1643
1680
|
|
|
@@ -1685,7 +1722,17 @@ export class OpenAI {
|
|
|
1685
1722
|
if (x509Authentication) {
|
|
1686
1723
|
await x509Authentication.waitForRetry(timeoutMillis, x509Authentication.effectiveSignal());
|
|
1687
1724
|
} else {
|
|
1688
|
-
|
|
1725
|
+
const retrySignals =
|
|
1726
|
+
requestSignal === options.signal ? [requestSignal] : [requestSignal, options.signal];
|
|
1727
|
+
try {
|
|
1728
|
+
await sleep(timeoutMillis, ...retrySignals);
|
|
1729
|
+
} catch (error) {
|
|
1730
|
+
const abortedSignal = retrySignals.find((signal) => signal?.aborted);
|
|
1731
|
+
if (abortedSignal) {
|
|
1732
|
+
throw this._makeUserAbortError(abortedSignal);
|
|
1733
|
+
}
|
|
1734
|
+
throw error;
|
|
1735
|
+
}
|
|
1689
1736
|
}
|
|
1690
1737
|
|
|
1691
1738
|
return this.makeRequest(options, retriesRemaining - 1, requestLogID);
|
package/src/core/EventEmitter.ts
CHANGED
|
@@ -54,12 +54,14 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
54
54
|
return this;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
// SAFETY: Listener functions are object identities used as WeakMap keys; registration and removal use the same function instance.
|
|
57
58
|
const emittedRegistration = this.#emittedListenerRegistrations.get(listener as object);
|
|
58
59
|
if (
|
|
59
60
|
emittedRegistration?.event === event &&
|
|
60
61
|
!emittedRegistration.registration.removed &&
|
|
61
62
|
!emittedRegistration.registration.detached
|
|
62
63
|
) {
|
|
64
|
+
// SAFETY: The stored registration event was compared with this event above, preserving the event/listener type correlation.
|
|
63
65
|
this.#removeEmittedListener(
|
|
64
66
|
event,
|
|
65
67
|
emittedRegistration.registration as EventListeners<EventTypes, Event>[number],
|
|
@@ -101,6 +103,7 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
101
103
|
registration?.listener === listener &&
|
|
102
104
|
registration.once
|
|
103
105
|
) {
|
|
106
|
+
// SAFETY: Listener functions are object identities used as WeakMap keys; registration and removal use the same function instance.
|
|
104
107
|
this.#emittedListenerRegistrations.set(listener as object, { event, registration });
|
|
105
108
|
}
|
|
106
109
|
}
|
|
@@ -114,6 +117,7 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
114
117
|
}
|
|
115
118
|
|
|
116
119
|
registration.removed = true;
|
|
120
|
+
// SAFETY: Listener functions are object identities used as WeakMap keys; registration and removal use the same function instance.
|
|
117
121
|
this.#emittedListenerRegistrations.delete(registration.listener as object);
|
|
118
122
|
this.#pendingListenerCleanup.add(event);
|
|
119
123
|
if (this.#listenerDispatchDepth === 0) {
|
|
@@ -123,9 +127,11 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
123
127
|
|
|
124
128
|
#cleanupEmittedListeners(): void {
|
|
125
129
|
for (const event of this.#pendingListenerCleanup) {
|
|
130
|
+
// SAFETY: Pending cleanup keys are added only from registered EventTypes events; the key retains its event-map membership.
|
|
126
131
|
const eventType = event as keyof EventTypes;
|
|
127
132
|
const listeners = this.#listeners[eventType];
|
|
128
133
|
if (listeners) {
|
|
134
|
+
// SAFETY: Filtering only removes registrations from the same event bucket and preserves the listener signatures for that event.
|
|
129
135
|
this.#listeners[eventType] = listeners.filter((listener) => !listener.removed) as any;
|
|
130
136
|
}
|
|
131
137
|
}
|
|
@@ -150,21 +156,27 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
150
156
|
): Promise<EmittedEventResult<EventParameters<EventTypes, Event>>> {
|
|
151
157
|
return new Promise((resolve, reject) => {
|
|
152
158
|
const listeners = {
|
|
159
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters -- Failures and rejection reasons can be arbitrary JavaScript values; preserve them until inspection or forwarding.
|
|
153
160
|
onError: (error: unknown) => {
|
|
161
|
+
// SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
|
|
154
162
|
this.off(event, listeners.onEvent as any);
|
|
155
163
|
reject(error);
|
|
156
164
|
},
|
|
157
165
|
onEvent: (...values: unknown[]) => {
|
|
158
166
|
if (event !== 'error') {
|
|
167
|
+
// SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
|
|
159
168
|
this.off('error', listeners.onError as any);
|
|
160
169
|
}
|
|
170
|
+
// SAFETY: The emitted API returns the sole argument or the full tuple according to its existing EventTypes-dependent result contract.
|
|
161
171
|
resolve((values.length > 1 ? values : values[0]) as any);
|
|
162
172
|
},
|
|
163
173
|
};
|
|
164
174
|
|
|
165
175
|
if (event !== 'error') {
|
|
176
|
+
// SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
|
|
166
177
|
this.#onceForEmitted('error', listeners.onError as any);
|
|
167
178
|
}
|
|
179
|
+
// SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
|
|
168
180
|
this.#onceForEmitted(event, listeners.onEvent as any);
|
|
169
181
|
});
|
|
170
182
|
}
|
|
@@ -176,6 +188,7 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
176
188
|
) {
|
|
177
189
|
const listeners: EventListeners<EventTypes, Event> | undefined = this.#listeners[event];
|
|
178
190
|
if (listeners) {
|
|
191
|
+
// SAFETY: Filtering only removes registrations from the same event bucket and preserves the listener signatures for that event.
|
|
179
192
|
this.#listeners[event] = listeners.filter((listener) => {
|
|
180
193
|
if (listener.once) {
|
|
181
194
|
listener.detached = true;
|
|
@@ -186,10 +199,12 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
186
199
|
let firstListenerError: unknown;
|
|
187
200
|
this.#listenerDispatchDepth += 1;
|
|
188
201
|
try {
|
|
202
|
+
// SAFETY: The listener bucket and argument tuple come from the same EventTypes key; this bridges TypeScript generic indexed-access correlation.
|
|
189
203
|
for (const registration of listeners as any) {
|
|
190
204
|
if (!registration.removed) {
|
|
191
205
|
try {
|
|
192
206
|
const { listener } = registration;
|
|
207
|
+
// SAFETY: The listener bucket and argument tuple come from the same EventTypes key; this bridges TypeScript generic indexed-access correlation.
|
|
193
208
|
listener(...(args as any));
|
|
194
209
|
} catch (error) {
|
|
195
210
|
if (!listenerThrew) {
|
package/src/core/streaming.ts
CHANGED
|
@@ -139,7 +139,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
|
|
|
139
139
|
let data;
|
|
140
140
|
|
|
141
141
|
try {
|
|
142
|
-
data = JSON.parse(sse.data)
|
|
142
|
+
data = JSON.parse(sse.data);
|
|
143
143
|
} catch {
|
|
144
144
|
logger.error(`Could not parse message into JSON:`);
|
|
145
145
|
logger.error(`From chunk:`);
|
|
@@ -164,6 +164,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
|
|
|
164
164
|
logger.error(`From chunk:`);
|
|
165
165
|
throw new SyntaxError('Error reading response: malformed server-sent event JSON.');
|
|
166
166
|
}
|
|
167
|
+
// SAFETY: Named SSE events use the public stream's event/data envelope; Item is the caller-selected API event contract.
|
|
167
168
|
yield { event: sse.event, data } as any;
|
|
168
169
|
}
|
|
169
170
|
}
|
|
@@ -264,6 +265,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
|
|
|
264
265
|
if (line) {
|
|
265
266
|
let data: Item;
|
|
266
267
|
try {
|
|
268
|
+
// SAFETY: Item is the caller's NDJSON response contract; JSON syntax is parsed here without a per-resource runtime schema.
|
|
267
269
|
data = JSON.parse(line) as Item;
|
|
268
270
|
} catch (error) {
|
|
269
271
|
if (error instanceof SyntaxError) {
|
|
@@ -352,10 +354,13 @@ export class Stream<Item> implements AsyncIterable<Item> {
|
|
|
352
354
|
* which can be turned back into a Stream with `Stream.fromReadableStream()`.
|
|
353
355
|
* Canceling a response-backed readable aborts its request. Canceling a tee
|
|
354
356
|
* branch discards its buffered events and leaves sibling consumers running.
|
|
357
|
+
* Read or serialization failures also release the iterator without replacing the original error.
|
|
355
358
|
*/
|
|
356
359
|
toReadableStream(): ReadableStream {
|
|
357
360
|
const { controller } = this;
|
|
358
361
|
let iter: AsyncIterator<Item>;
|
|
362
|
+
let cancellation: Promise<void> | undefined;
|
|
363
|
+
const cancel = () => (cancellation ??= this.#cancelIterator(iter, controller));
|
|
359
364
|
|
|
360
365
|
return makeReadableStream({
|
|
361
366
|
start: async () => {
|
|
@@ -373,9 +378,12 @@ export class Stream<Item> implements AsyncIterable<Item> {
|
|
|
373
378
|
ctrl.enqueue(bytes);
|
|
374
379
|
} catch (err) {
|
|
375
380
|
ctrl.error(err);
|
|
381
|
+
// An errored readable never invokes its cancel hook. Release the source ourselves,
|
|
382
|
+
// without letting failed or stalled cleanup replace the read/serialization error.
|
|
383
|
+
void cancel().catch(() => undefined);
|
|
376
384
|
}
|
|
377
385
|
},
|
|
378
|
-
cancel
|
|
386
|
+
cancel,
|
|
379
387
|
});
|
|
380
388
|
}
|
|
381
389
|
|
|
@@ -385,6 +393,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
|
|
|
385
393
|
if (!this.#isTeeBranch) {
|
|
386
394
|
controller.abort();
|
|
387
395
|
}
|
|
396
|
+
// oxlint-disable-next-line anti-slop/no-reflect-apply -- Invoke the captured iterator method with its receiver even if a caller-supplied function shadows call.
|
|
388
397
|
await Reflect.apply(returnMethod, iterator, []);
|
|
389
398
|
}
|
|
390
399
|
}
|
|
@@ -524,6 +533,7 @@ export async function* _iterSSEMessages(
|
|
|
524
533
|
): AsyncGenerator<ServerSentEvent, void, unknown> {
|
|
525
534
|
if (!response.body) {
|
|
526
535
|
controller.abort();
|
|
536
|
+
// SAFETY: navigator is optional across SDK runtimes; this compatibility branch checks its presence before identifying React Native.
|
|
527
537
|
if (
|
|
528
538
|
(globalThis as any).navigator !== undefined &&
|
|
529
539
|
(globalThis as any).navigator.product === 'ReactNative'
|
|
@@ -569,6 +579,15 @@ export async function* _iterSSEMessages(
|
|
|
569
579
|
yield sse;
|
|
570
580
|
}
|
|
571
581
|
}
|
|
582
|
+
// Servers sometimes omit the trailing blank line that normally
|
|
583
|
+
// terminates the last event. Flush any in-progress event exactly once.
|
|
584
|
+
if (signal.aborted) {
|
|
585
|
+
return;
|
|
586
|
+
}
|
|
587
|
+
const pending = sseDecoder.flush();
|
|
588
|
+
if (pending) {
|
|
589
|
+
yield pending;
|
|
590
|
+
}
|
|
572
591
|
} catch (error) {
|
|
573
592
|
failed = true;
|
|
574
593
|
if (!signal.aborted || (!isAbortError(error) && error !== signal.reason)) {
|
|
@@ -699,6 +718,15 @@ class SSEDecoder {
|
|
|
699
718
|
|
|
700
719
|
return null;
|
|
701
720
|
}
|
|
721
|
+
|
|
722
|
+
/**
|
|
723
|
+
* Emits a pending event at EOF when the stream omitted the trailing blank
|
|
724
|
+
* line. Returns `null` when no event is in progress so a record that already
|
|
725
|
+
* ended with a blank line is not delivered twice.
|
|
726
|
+
*/
|
|
727
|
+
flush(): ServerSentEvent | null {
|
|
728
|
+
return this.decode('');
|
|
729
|
+
}
|
|
702
730
|
}
|
|
703
731
|
|
|
704
732
|
function partition(str: string, delimiter: string): [string, string, string] {
|
package/src/helpers/audio.ts
CHANGED
|
@@ -47,11 +47,13 @@ async function nodejsPlayAudio(stream: NodeJS.ReadableStream | Response | File):
|
|
|
47
47
|
try {
|
|
48
48
|
let source: NodeJS.ReadableStream;
|
|
49
49
|
if (isResponse(stream)) {
|
|
50
|
+
// SAFETY: Fetch implementations may expose a web or Node response body; the following pipe check selects the matching stream adapter.
|
|
50
51
|
const body = stream.body as NodeReadableStream | NodeJS.ReadableStream | null;
|
|
51
52
|
if (!body) {
|
|
52
53
|
throw new Error('Cannot play audio from a response without a body');
|
|
53
54
|
}
|
|
54
55
|
|
|
56
|
+
// SAFETY: The preceding branch handled Node pipe streams; the remaining response body follows the web ReadableStream contract consumed by fromWeb.
|
|
55
57
|
source =
|
|
56
58
|
'pipe' in body && typeof body.pipe === 'function'
|
|
57
59
|
? body
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isObj } from '../internal/utils/values';
|
|
1
2
|
import { OpenAIError } from '../error';
|
|
2
3
|
import type { AutoParseableResponseFormat, AutoParseableTextFormat, AutoParseableTool } from '../lib/parser';
|
|
3
4
|
import {
|
|
@@ -138,6 +139,7 @@ type StandardTextFormatProps = Omit<
|
|
|
138
139
|
/** Function callback invoked with arguments validated by a Standard Schema implementation. */
|
|
139
140
|
type StandardToolFunction<Parameters extends StandardSchemaLike> = (
|
|
140
141
|
args: InferStandardOutput<Parameters>,
|
|
142
|
+
// oxlint-disable-next-line anti-slop/no-unknown-returns -- Public tool callbacks may return arbitrary application values; preserve the published callback contract.
|
|
141
143
|
) => unknown | Promise<unknown>;
|
|
142
144
|
|
|
143
145
|
/** Model-facing function-tool settings and optional Standard Schema validation callback. */
|
|
@@ -198,10 +200,11 @@ const JSON_SCHEMA_TYPES = new Set(['string', 'number', 'integer', 'boolean', 'ob
|
|
|
198
200
|
type JSONPrimitive = string | number | boolean | null;
|
|
199
201
|
|
|
200
202
|
function getSchemaTypes(schema: unknown): Set<string> | undefined {
|
|
201
|
-
if (!
|
|
203
|
+
if (!isObj(schema)) {
|
|
202
204
|
return undefined;
|
|
203
205
|
}
|
|
204
206
|
|
|
207
|
+
// SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
|
|
205
208
|
const type = (schema as Record<string, unknown>)['type'];
|
|
206
209
|
if (type === undefined) {
|
|
207
210
|
return getLiteralSchemaTypes(schema);
|
|
@@ -227,10 +230,11 @@ function isJSONPrimitive(value: unknown): value is JSONPrimitive {
|
|
|
227
230
|
}
|
|
228
231
|
|
|
229
232
|
function getLiteralValues(schema: unknown): JSONPrimitive[] | undefined {
|
|
230
|
-
if (!
|
|
233
|
+
if (!isObj(schema)) {
|
|
231
234
|
return undefined;
|
|
232
235
|
}
|
|
233
236
|
|
|
237
|
+
// SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
|
|
234
238
|
const record = schema as Record<string, unknown>;
|
|
235
239
|
if ('const' in record && isJSONPrimitive(record['const'])) {
|
|
236
240
|
return [record['const']];
|
|
@@ -286,19 +290,17 @@ function haveDisjointObjectDiscriminator(left: unknown, right: unknown, root: JS
|
|
|
286
290
|
return false;
|
|
287
291
|
}
|
|
288
292
|
|
|
293
|
+
// SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
|
|
289
294
|
const leftRecord = left as Record<string, unknown>;
|
|
295
|
+
// SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
|
|
290
296
|
const rightRecord = right as Record<string, unknown>;
|
|
291
297
|
const leftProperties = leftRecord['properties'];
|
|
292
298
|
const rightProperties = rightRecord['properties'];
|
|
293
299
|
const leftRequired = leftRecord['required'];
|
|
294
300
|
const rightRequired = rightRecord['required'];
|
|
295
301
|
if (
|
|
296
|
-
!leftProperties ||
|
|
297
|
-
|
|
298
|
-
Array.isArray(leftProperties) ||
|
|
299
|
-
!rightProperties ||
|
|
300
|
-
typeof rightProperties !== 'object' ||
|
|
301
|
-
Array.isArray(rightProperties) ||
|
|
302
|
+
!isObj(leftProperties) ||
|
|
303
|
+
!isObj(rightProperties) ||
|
|
302
304
|
!Array.isArray(leftRequired) ||
|
|
303
305
|
!Array.isArray(rightRequired)
|
|
304
306
|
) {
|
|
@@ -306,6 +308,7 @@ function haveDisjointObjectDiscriminator(left: unknown, right: unknown, root: JS
|
|
|
306
308
|
}
|
|
307
309
|
|
|
308
310
|
for (const property of leftRequired) {
|
|
311
|
+
// SAFETY: Both properties maps were checked as non-null non-array objects; the selected values remain untrusted inputs to reference resolution.
|
|
309
312
|
if (
|
|
310
313
|
typeof property === 'string' &&
|
|
311
314
|
rightRequired.includes(property) &&
|
|
@@ -328,14 +331,13 @@ function getClosedObjectPropertySet(
|
|
|
328
331
|
return undefined;
|
|
329
332
|
}
|
|
330
333
|
|
|
334
|
+
// SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
|
|
331
335
|
const record = schema as Record<string, unknown>;
|
|
332
336
|
const properties = record['properties'];
|
|
333
337
|
const required = record['required'];
|
|
334
338
|
if (
|
|
335
339
|
record['additionalProperties'] !== false ||
|
|
336
|
-
!properties ||
|
|
337
|
-
typeof properties !== 'object' ||
|
|
338
|
-
Array.isArray(properties) ||
|
|
340
|
+
!isObj(properties) ||
|
|
339
341
|
!Array.isArray(required) ||
|
|
340
342
|
required.some((property) => typeof property !== 'string')
|
|
341
343
|
) {
|
|
@@ -343,6 +345,7 @@ function getClosedObjectPropertySet(
|
|
|
343
345
|
}
|
|
344
346
|
|
|
345
347
|
const propertySet = new Set(Object.keys(properties));
|
|
348
|
+
// SAFETY: The preceding every check proved each required-property name is a string.
|
|
346
349
|
const requiredProperties = required as string[];
|
|
347
350
|
// A required undeclared property makes a closed branch unsatisfiable, but
|
|
348
351
|
// the strictifier rejects that shape rather than representing it. Keep this
|
|
@@ -355,9 +358,9 @@ function getClosedObjectPropertySet(
|
|
|
355
358
|
}
|
|
356
359
|
|
|
357
360
|
function haveDisjointClosedObjectPropertySets(left: unknown, right: unknown): boolean {
|
|
358
|
-
const
|
|
359
|
-
const
|
|
360
|
-
if (!
|
|
361
|
+
const leftPropertySet = getClosedObjectPropertySet(left);
|
|
362
|
+
const rightPropertySet = getClosedObjectPropertySet(right);
|
|
363
|
+
if (!leftPropertySet || !rightPropertySet) {
|
|
361
364
|
return false;
|
|
362
365
|
}
|
|
363
366
|
|
|
@@ -366,8 +369,8 @@ function haveDisjointClosedObjectPropertySets(left: unknown, right: unknown): bo
|
|
|
366
369
|
// an additional property. This proves oneOf exclusivity without widening
|
|
367
370
|
// overlapping closed shapes.
|
|
368
371
|
return (
|
|
369
|
-
|
|
370
|
-
|
|
372
|
+
leftPropertySet.required.some((property) => !rightPropertySet.properties.has(property)) ||
|
|
373
|
+
rightPropertySet.required.some((property) => !leftPropertySet.properties.has(property))
|
|
371
374
|
);
|
|
372
375
|
}
|
|
373
376
|
|
|
@@ -395,17 +398,20 @@ function resolveLocalRefForExclusivity(
|
|
|
395
398
|
schema: unknown,
|
|
396
399
|
root: JSONSchema,
|
|
397
400
|
seenRefs = new Set<string>(),
|
|
401
|
+
// oxlint-disable-next-line anti-slop/no-unknown-returns -- Resolving untrusted schema references may produce any value; callers perform the schema checks.
|
|
398
402
|
): unknown | undefined {
|
|
399
|
-
if (!
|
|
403
|
+
if (!isObj(schema)) {
|
|
400
404
|
return schema;
|
|
401
405
|
}
|
|
402
406
|
|
|
407
|
+
// SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
|
|
403
408
|
const record = schema as Record<string, unknown>;
|
|
404
409
|
const ref = record['$ref'];
|
|
405
410
|
if (ref !== undefined) {
|
|
406
411
|
// Annotation keywords do not affect Draft 7 validation, so they are safe
|
|
407
412
|
// to retain while proving the referenced branches are mutually exclusive.
|
|
408
413
|
// Keep the proof conservative for every other sibling constraint.
|
|
414
|
+
// SAFETY: The helper only checks allowed sibling keys on this object; it does not assume that arbitrary property values form a valid schema.
|
|
409
415
|
if (typeof ref !== 'string' || !hasOnlyRefAndAnnotations(record as JSONSchema)) {
|
|
410
416
|
return undefined;
|
|
411
417
|
}
|
|
@@ -425,6 +431,7 @@ function resolveLocalRefForExclusivity(
|
|
|
425
431
|
if (!Array.isArray(record['allOf'])) {
|
|
426
432
|
return undefined;
|
|
427
433
|
}
|
|
434
|
+
// SAFETY: The allOf value was checked as an array; normalization performs the remaining branch-shape checks before proving exclusivity.
|
|
428
435
|
const normalized = normalizeObjectAllOfForExclusivity(record as JSONSchema, root);
|
|
429
436
|
if (normalized === undefined) {
|
|
430
437
|
return undefined;
|
|
@@ -460,9 +467,10 @@ function normalizeStructuredOutputSchema(schema: JSONSchema): JSONSchema {
|
|
|
460
467
|
const visitedSchemas = new Set<Record<string, unknown>>();
|
|
461
468
|
|
|
462
469
|
const visitSchema = (value: unknown): void => {
|
|
463
|
-
if (!
|
|
470
|
+
if (!isObj(value)) {
|
|
464
471
|
return;
|
|
465
472
|
}
|
|
473
|
+
// SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
|
|
466
474
|
const record = value as Record<string, unknown>;
|
|
467
475
|
if (visitedSchemas.has(record)) {
|
|
468
476
|
return;
|
|
@@ -528,6 +536,7 @@ function parseStandardSchema<Schema extends StandardSchemaLike>(
|
|
|
528
536
|
): InferStandardOutput<Schema> {
|
|
529
537
|
const parsed = parseResponseFormatContent({ type: 'json_schema', $parseRaw: undefined }, content);
|
|
530
538
|
const { standard, validate } = getBinding();
|
|
539
|
+
// oxlint-disable-next-line anti-slop/no-reflect-apply -- A validator may shadow call; invoke the captured function with its original metadata receiver.
|
|
531
540
|
const result = Reflect.apply(validate, standard, [parsed]);
|
|
532
541
|
|
|
533
542
|
if (isPromiseLike(result)) {
|
|
@@ -541,6 +550,7 @@ function parseStandardSchema<Schema extends StandardSchemaLike>(
|
|
|
541
550
|
throw new OpenAIError(`Standard Schema validation failed: ${formatStandardSchemaIssues(result.issues)}`);
|
|
542
551
|
}
|
|
543
552
|
|
|
553
|
+
// SAFETY: The captured Standard Schema validator completed synchronously without issues, so its value follows that schema's inferred output contract.
|
|
544
554
|
return result.value as InferStandardOutput<Schema>;
|
|
545
555
|
}
|
|
546
556
|
|
|
@@ -548,6 +558,7 @@ function resolveStandardJSONSchema<Schema extends StandardSchemaLike>(
|
|
|
548
558
|
getBinding: () => StandardSchemaBinding<Schema>,
|
|
549
559
|
schemaOverride?: JSONSchema | Record<string, unknown> | undefined,
|
|
550
560
|
): Record<string, unknown> {
|
|
561
|
+
// SAFETY: The override or Standard Schema input converter supplies the schema; normalization and strict conversion below validate the supported structure.
|
|
551
562
|
const schema = (schemaOverride ?? getBinding().standard.jsonSchema?.input({ target: 'draft-07' })) as
|
|
552
563
|
| JSONSchema
|
|
553
564
|
| undefined;
|
|
@@ -558,7 +569,8 @@ function resolveStandardJSONSchema<Schema extends StandardSchemaLike>(
|
|
|
558
569
|
);
|
|
559
570
|
}
|
|
560
571
|
|
|
561
|
-
|
|
572
|
+
// SAFETY: Strict conversion returns an object schema here; the record view exposes its JSON keyword properties without narrowing their values.
|
|
573
|
+
return toStrictJsonSchema(normalizeStructuredOutputSchema(schema)) as Record<string, unknown>;
|
|
562
574
|
}
|
|
563
575
|
|
|
564
576
|
/**
|
|
@@ -10,6 +10,7 @@ interface SchemaDefinition {
|
|
|
10
10
|
typeName: string;
|
|
11
11
|
checks?: readonly { kind: string; value?: unknown }[];
|
|
12
12
|
coerce?: boolean;
|
|
13
|
+
// oxlint-disable-next-line anti-slop/no-shape-in-symbol-names -- Zod v3 defines this property name on object schemas.
|
|
13
14
|
shape: () => Record<string, SchemaNode>;
|
|
14
15
|
type: SchemaNode;
|
|
15
16
|
innerType: SchemaNode;
|
|
@@ -32,6 +33,7 @@ interface SchemaChild {
|
|
|
32
33
|
path: string;
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- Runtime Zod type names index this dictionary, including unsupported names outside the known entries.
|
|
35
37
|
const simpleJSONDomains: Readonly<Record<string, JSONDomain['type']>> = {
|
|
36
38
|
ZodString: 'string',
|
|
37
39
|
ZodNumber: 'number',
|
|
@@ -109,6 +111,7 @@ function nativeEnumDomains(def: SchemaDefinition): JSONDomain[] {
|
|
|
109
111
|
if (!definitionValues || Array.isArray(definitionValues)) {
|
|
110
112
|
return [];
|
|
111
113
|
}
|
|
114
|
+
// SAFETY: The preceding guard accepts a non-array object; its values remain unknown until individual definition checks.
|
|
112
115
|
const object = definitionValues as Record<string, unknown>;
|
|
113
116
|
const values = Object.keys(object)
|
|
114
117
|
.filter((key) => {
|
|
@@ -429,12 +432,15 @@ export function assertSupportedZodV3Schema(
|
|
|
429
432
|
definitions: Record<string, ZodV3Schema> | undefined,
|
|
430
433
|
): void {
|
|
431
434
|
const visited = new Set<SchemaDefinition>();
|
|
432
|
-
|
|
435
|
+
// SAFETY: The public Zod v3 input is viewed through the validator's minimal schema-node contract; visit checks its definition and rejects unsupported kinds.
|
|
436
|
+
visit(schema as SchemaNode, '$', visited);
|
|
433
437
|
for (const [name, definition] of Object.entries(definitions ?? {})) {
|
|
434
|
-
visit
|
|
438
|
+
// SAFETY: The public Zod v3 input is viewed through the validator's minimal schema-node contract; visit checks its definition and rejects unsupported kinds.
|
|
439
|
+
visit(definition as SchemaNode, `$.definitions.${name}`, visited);
|
|
435
440
|
}
|
|
436
441
|
}
|
|
437
442
|
|
|
443
|
+
// oxlint-disable-next-line anti-slop/no-object-parameters -- Serialization validation must inspect any object, including arrays and foreign prototypes, without trusting fields.
|
|
438
444
|
function assertNoJSONSerializationHook(value: object, path: string): void {
|
|
439
445
|
for (let current: object | null = value; current !== null; current = Object.getPrototypeOf(current)) {
|
|
440
446
|
const descriptor = Object.getOwnPropertyDescriptor(current, 'toJSON');
|