openai 7.16.0 → 7.17.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 +28 -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 +1 -0
- package/client.d.mts.map +1 -1
- package/client.d.ts +1 -0
- package/client.d.ts.map +1 -1
- package/client.js +27 -6
- package/client.js.map +1 -1
- package/client.mjs +27 -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 +9 -0
- package/internal/ws.d.mts.map +1 -1
- package/internal/ws.d.ts +9 -0
- package/internal/ws.d.ts.map +1 -1
- package/internal/ws.js +36 -4
- package/internal/ws.js.map +1 -1
- package/internal/ws.mjs +35 -4
- 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/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/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 +51 -3
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +51 -3
- 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 +5 -1
- package/resources/beta/responses/ws-base.d.mts.map +1 -1
- package/resources/beta/responses/ws-base.d.ts +5 -1
- package/resources/beta/responses/ws-base.d.ts.map +1 -1
- package/resources/beta/responses/ws-base.js +2 -4
- package/resources/beta/responses/ws-base.js.map +1 -1
- package/resources/beta/responses/ws-base.mjs +2 -4
- 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 +12 -3
- package/resources/beta/responses/ws.js.map +1 -1
- package/resources/beta/responses/ws.mjs +12 -3
- 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/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/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 +36 -3
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +36 -3
- 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 +5 -1
- package/resources/responses/ws-base.d.mts.map +1 -1
- package/resources/responses/ws-base.d.ts +5 -1
- package/resources/responses/ws-base.d.ts.map +1 -1
- package/resources/responses/ws-base.js +2 -4
- package/resources/responses/ws-base.js.map +1 -1
- package/resources/responses/ws-base.mjs +2 -4
- 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 +12 -3
- package/resources/responses/ws.js.map +1 -1
- package/resources/responses/ws.mjs +12 -3
- package/resources/responses/ws.mjs.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 +35 -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 +44 -4
- 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/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/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 +58 -0
- package/src/resources/beta/responses/ws-base.ts +7 -5
- package/src/resources/beta/responses/ws.ts +21 -6
- package/src/resources/live/forks/internal-base.ts +24 -5
- package/src/resources/live/internal-base.ts +24 -5
- package/src/resources/live/sideband/internal-base.ts +24 -5
- package/src/resources/responses/api.md +1 -0
- package/src/resources/responses/internal-base.ts +24 -11
- package/src/resources/responses/responses.ts +41 -0
- package/src/resources/responses/ws-base.ts +7 -5
- package/src/resources/responses/ws.ts +21 -6
- 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
|
@@ -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');
|
package/src/helpers/zod.ts
CHANGED
|
@@ -16,7 +16,7 @@ import type { ResponseFormatTextJSONSchemaConfig } from '../resources/responses/
|
|
|
16
16
|
import type { RealtimeFunctionTool } from '../resources/realtime/realtime';
|
|
17
17
|
import { forEachJSONSchemaChild, toStrictJsonSchema } from '../lib/transform';
|
|
18
18
|
import type { JSONSchema } from '../lib/jsonschema';
|
|
19
|
-
import { hasOwn } from '../internal/utils/values';
|
|
19
|
+
import { hasOwn, isObj } from '../internal/utils/values';
|
|
20
20
|
import { assertJSONSerializableSchema, assertSupportedZodV3Schema } from './zod-v3-strict-schema';
|
|
21
21
|
|
|
22
22
|
type ZodV4Schema = z4.ZodType | z4Mini.ZodMiniType;
|
|
@@ -39,6 +39,7 @@ type ZodTypeLike = (
|
|
|
39
39
|
}
|
|
40
40
|
) & {
|
|
41
41
|
/** Synchronous schema parser when the validator exposes an instance-level parse method. */
|
|
42
|
+
// oxlint-disable-next-line anti-slop/no-unknown-returns -- The public schema adapter accepts arbitrary validated outputs and derives their concrete type separately. Zod parsers and their recursive metadata accept untrusted values before schema validation.
|
|
42
43
|
parse?: (data: unknown) => unknown;
|
|
43
44
|
};
|
|
44
45
|
|
|
@@ -97,11 +98,12 @@ function escapeSchemaDefinitionRefs<T extends object>(
|
|
|
97
98
|
|
|
98
99
|
const visited = new Set<object>();
|
|
99
100
|
const visit = (value: unknown): void => {
|
|
100
|
-
if (!
|
|
101
|
+
if (!isObj(value) || visited.has(value)) {
|
|
101
102
|
return;
|
|
102
103
|
}
|
|
103
104
|
|
|
104
105
|
visited.add(value);
|
|
106
|
+
// SAFETY: The traversal has excluded primitives, null, arrays, and previously visited objects; schema property values remain unknown for validation.
|
|
105
107
|
const record = value as Record<string, unknown>;
|
|
106
108
|
const ref = record['$ref'];
|
|
107
109
|
if (typeof ref === 'string') {
|
|
@@ -134,8 +136,10 @@ function zodV3ToJsonSchema(
|
|
|
134
136
|
schema: z3.ZodType,
|
|
135
137
|
options: { name: string; schemaDefinitions?: ZodSchemaDefinitions | undefined },
|
|
136
138
|
): Record<string, unknown> {
|
|
139
|
+
// SAFETY: This is the Zod v3 conversion path; assertSupportedZodV3Schema verifies the root and named definitions before conversion.
|
|
137
140
|
assertSupportedZodV3Schema(schema, options.schemaDefinitions as Record<string, z3.ZodType> | undefined);
|
|
138
141
|
const rootName = getZodV3RootName(options.name, options.schemaDefinitions);
|
|
142
|
+
// SAFETY: This is the Zod v3 conversion path; assertSupportedZodV3Schema verifies the root and named definitions before conversion.
|
|
139
143
|
const jsonSchema = _zodToJsonSchema(schema, {
|
|
140
144
|
openaiStrictMode: true,
|
|
141
145
|
name: rootName,
|
|
@@ -143,7 +147,7 @@ function zodV3ToJsonSchema(
|
|
|
143
147
|
$refStrategy: 'extract-to-root',
|
|
144
148
|
nullableStrategy: 'property',
|
|
145
149
|
...(options.schemaDefinitions
|
|
146
|
-
? { definitions: options.schemaDefinitions as
|
|
150
|
+
? { definitions: options.schemaDefinitions as Record<string, z3.ZodType> }
|
|
147
151
|
: undefined),
|
|
148
152
|
});
|
|
149
153
|
|
|
@@ -159,15 +163,17 @@ function zodV4ToJsonSchema(
|
|
|
159
163
|
schema: ZodV4Schema,
|
|
160
164
|
options: { schemaDefinitions?: ZodSchemaDefinitions | undefined } = {},
|
|
161
165
|
): Record<string, unknown> {
|
|
162
|
-
const metadata = options.schemaDefinitions ? z4.registry<
|
|
166
|
+
const metadata = options.schemaDefinitions ? z4.registry<{ id: string }>() : undefined;
|
|
163
167
|
const definitionNames = new Map<string, string>();
|
|
164
168
|
for (const [name, definition] of Object.entries(options.schemaDefinitions ?? {})) {
|
|
165
169
|
// Avoid `/` and `~` so Zod versions that escape JSON Pointer tokens emit the same IDs.
|
|
166
170
|
const id = encodeURIComponent(name).replace(/~/g, '%7E');
|
|
167
171
|
definitionNames.set(id, name);
|
|
168
|
-
|
|
172
|
+
// SAFETY: The Zod v4 conversion path registers these definitions with the v4 metadata registry before toJSONSchema uses them.
|
|
173
|
+
metadata?.add(definition as z4.ZodType, { id });
|
|
169
174
|
}
|
|
170
175
|
|
|
176
|
+
// SAFETY: The v4 schema converter produces JSON Schema; the following normalization checks and rewrites its schema records.
|
|
171
177
|
const jsonSchema = z4.toJSONSchema(schema, {
|
|
172
178
|
target: 'draft-7',
|
|
173
179
|
...(metadata ? { metadata } : undefined),
|
|
@@ -208,6 +214,7 @@ function zodV4ToJsonSchema(
|
|
|
208
214
|
);
|
|
209
215
|
}
|
|
210
216
|
|
|
217
|
+
// SAFETY: Strict conversion returns the normalized object schema; the record view exposes keywords without trusting arbitrary values.
|
|
211
218
|
return toStrictJsonSchema(escapedSchema) as Record<string, unknown>;
|
|
212
219
|
}
|
|
213
220
|
|
|
@@ -221,6 +228,7 @@ function zodV3ToNonStrictJsonSchema(schema: z3.ZodType, options: { name: string
|
|
|
221
228
|
}
|
|
222
229
|
|
|
223
230
|
function zodV4ToNonStrictJsonSchema(schema: ZodV4Schema): Record<string, unknown> {
|
|
231
|
+
// SAFETY: Zod v4 owns this JSON Schema output; the record return preserves arbitrary supported keyword properties.
|
|
224
232
|
return z4.toJSONSchema(schema, {
|
|
225
233
|
target: 'draft-7',
|
|
226
234
|
io: 'input',
|
|
@@ -236,17 +244,20 @@ function parseZodObject<ZodInput extends ZodTypeLike>(
|
|
|
236
244
|
content: string,
|
|
237
245
|
): InferZodType<ZodInput> {
|
|
238
246
|
const parsed = parseResponseFormatContent({ type: 'json_schema', $parseRaw: undefined }, content);
|
|
239
|
-
const parser =
|
|
247
|
+
const parser = zodObject.parse;
|
|
240
248
|
|
|
241
249
|
if (typeof parser === 'function') {
|
|
250
|
+
// SAFETY: The schema's parse method is invoked with its original receiver and owns the inferred output type.
|
|
242
251
|
const result = parser.call(zodObject, parsed) as InferZodType<ZodInput>;
|
|
243
|
-
|
|
252
|
+
// SAFETY: This read only identifies the supported Zod version before applying its corresponding serialization checks.
|
|
253
|
+
if (!isZodV4(zodObject as ZodSchema)) {
|
|
244
254
|
assertJSONSerializableSchema(result);
|
|
245
255
|
}
|
|
246
256
|
return result;
|
|
247
257
|
}
|
|
248
258
|
|
|
249
|
-
|
|
259
|
+
// SAFETY: Schemas without a parse method use the supported Zod v4 core parser, which validates the input and supplies the inferred output.
|
|
260
|
+
return z4.parse(zodObject as ZodV4Schema, parsed) as InferZodType<ZodInput>;
|
|
250
261
|
}
|
|
251
262
|
|
|
252
263
|
/**
|
|
@@ -297,7 +308,8 @@ export function zodResponseFormat<ZodInput extends ZodTypeLike>(
|
|
|
297
308
|
name: string,
|
|
298
309
|
props?: ZodResponseFormatProps,
|
|
299
310
|
): AutoParseableResponseFormat<InferZodType<ZodInput>> {
|
|
300
|
-
|
|
311
|
+
// SAFETY: The public structural Zod input is dispatched by version below; each version-specific converter validates its supported schema contract.
|
|
312
|
+
const zodSchema = zodObject as ZodSchema;
|
|
301
313
|
const { schemaDefinitions, ...responseFormatProps } = props ?? {};
|
|
302
314
|
validateSchemaDefinitions(schemaDefinitions);
|
|
303
315
|
|
|
@@ -343,7 +355,8 @@ export function zodTextFormat<ZodInput extends ZodTypeLike>(
|
|
|
343
355
|
name: string,
|
|
344
356
|
props?: Omit<ResponseFormatTextJSONSchemaConfig, 'schema' | 'type' | 'strict' | 'name'>,
|
|
345
357
|
): AutoParseableTextFormat<InferZodType<ZodInput>> {
|
|
346
|
-
|
|
358
|
+
// SAFETY: The public structural Zod input is dispatched by version below; each version-specific converter validates its supported schema contract.
|
|
359
|
+
const zodSchema = zodObject as ZodSchema;
|
|
347
360
|
|
|
348
361
|
return makeParseableTextFormat<InferZodType<ZodInput>>(
|
|
349
362
|
{
|
|
@@ -366,6 +379,7 @@ interface ZodFunctionOptions<Parameters extends ZodTypeLike> {
|
|
|
366
379
|
parameters: Parameters;
|
|
367
380
|
|
|
368
381
|
/** Optional callback invoked with validated arguments by chat `runTools()`. */
|
|
382
|
+
// oxlint-disable-next-line anti-slop/no-unknown-returns -- Public tool callbacks may return arbitrary application values; preserve the published callback contract.
|
|
369
383
|
function?: ((args: InferZodType<Parameters>) => unknown | Promise<unknown>) | undefined;
|
|
370
384
|
|
|
371
385
|
/** Optional model-visible explanation of when and how the function should be used. */
|
|
@@ -415,7 +429,8 @@ export function zodFunction<Parameters extends ZodTypeLike>(
|
|
|
415
429
|
/** Builds a strict Chat Completions function tool from the supplied Zod schema. */
|
|
416
430
|
export function zodFunction<Parameters extends ZodTypeLike>(options: ZodFunctionOptions<Parameters>) {
|
|
417
431
|
const parameters = options.parameters;
|
|
418
|
-
|
|
432
|
+
// SAFETY: The public structural Zod input is dispatched by version below; each version-specific converter validates its supported schema contract.
|
|
433
|
+
const zodSchema = parameters as ZodSchema;
|
|
419
434
|
|
|
420
435
|
return makeParseableTool<any>(
|
|
421
436
|
{
|
|
@@ -455,6 +470,7 @@ export function zodResponsesFunction<Parameters extends ZodTypeLike>(options: {
|
|
|
455
470
|
parameters: Parameters;
|
|
456
471
|
|
|
457
472
|
/** Optional callback retained on the tool; `responses.parse()` does not execute it. */
|
|
473
|
+
// oxlint-disable-next-line anti-slop/no-unknown-returns -- Public tool callbacks may return arbitrary application values; preserve the published callback contract.
|
|
458
474
|
function?: ((args: InferZodType<Parameters>) => unknown | Promise<unknown>) | undefined;
|
|
459
475
|
|
|
460
476
|
/** Optional model-visible explanation of when and how the function should be used. */
|
|
@@ -467,10 +483,12 @@ export function zodResponsesFunction<Parameters extends ZodTypeLike>(options: {
|
|
|
467
483
|
name: string;
|
|
468
484
|
|
|
469
485
|
/** Callback signature associated with validated function-call arguments. */
|
|
486
|
+
// oxlint-disable-next-line anti-slop/no-unknown-returns -- Public tool callbacks may return arbitrary application values; preserve the published callback contract.
|
|
470
487
|
function: (args: InferZodType<Parameters>) => unknown;
|
|
471
488
|
}> {
|
|
472
489
|
const parameters = options.parameters;
|
|
473
|
-
|
|
490
|
+
// SAFETY: The public structural Zod input is dispatched by version below; each version-specific converter validates its supported schema contract.
|
|
491
|
+
const zodSchema = parameters as ZodSchema;
|
|
474
492
|
|
|
475
493
|
return makeParseableResponseTool<any>(
|
|
476
494
|
{
|
|
@@ -510,7 +528,8 @@ export function zodRealtimeFunction<Parameters extends ZodTypeLike>(options: {
|
|
|
510
528
|
/** Optional model-visible explanation of when and how the function should be used. */
|
|
511
529
|
description?: string | undefined;
|
|
512
530
|
}): RealtimeFunctionTool {
|
|
513
|
-
|
|
531
|
+
// SAFETY: The public structural Zod input is dispatched by version below; each version-specific converter validates its supported schema contract.
|
|
532
|
+
const zodSchema = options.parameters as ZodSchema;
|
|
514
533
|
|
|
515
534
|
return {
|
|
516
535
|
type: 'function',
|
|
@@ -68,7 +68,7 @@ function commitAssistantStreamArrayProjection(projection: AssistantStreamDeltaPr
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
function isPrimitiveAssistantStreamValue(value: unknown):
|
|
71
|
+
function isPrimitiveAssistantStreamValue(value: unknown): value is string | number {
|
|
72
72
|
return typeof value === 'string' || typeof value === 'number';
|
|
73
73
|
}
|
|
74
74
|
|
|
@@ -118,6 +118,7 @@ function getAssistantStreamDeltaIndex(
|
|
|
118
118
|
);
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
// SAFETY: Number.isSafeInteger rejects non-numbers before numeric comparisons; the remaining checks enforce the permitted index range.
|
|
121
122
|
if (
|
|
122
123
|
!Number.isSafeInteger(index) ||
|
|
123
124
|
(index as number) < 0 ||
|
|
@@ -128,6 +129,7 @@ function getAssistantStreamDeltaIndex(
|
|
|
128
129
|
throw new OpenAIError(`Assistant stream delta contains an invalid ${kind} index: ${safeIndex}`);
|
|
129
130
|
}
|
|
130
131
|
|
|
132
|
+
// SAFETY: Number.isSafeInteger rejects non-numbers before numeric comparisons; the remaining checks enforce the permitted index range.
|
|
131
133
|
return index as number;
|
|
132
134
|
}
|
|
133
135
|
|
|
@@ -323,6 +325,7 @@ function applyAssistantStreamArrayDelta(
|
|
|
323
325
|
}
|
|
324
326
|
accumulator[index] = deltaEntry;
|
|
325
327
|
} else {
|
|
328
|
+
// SAFETY: The preceding validation accepts this accumulated record before recursively merging the matching delta entry.
|
|
326
329
|
accumulator[index] = applyRecord(accumulatedEntry as AssistantStreamRecord, deltaEntry);
|
|
327
330
|
}
|
|
328
331
|
} else {
|
|
@@ -398,11 +401,14 @@ export function assertSafeAssistantStreamDelta(value: unknown): void {
|
|
|
398
401
|
|
|
399
402
|
export function accumulateAssistantStreamDelta<Accumulator extends object>(
|
|
400
403
|
accumulator: Accumulator,
|
|
404
|
+
// oxlint-disable-next-line anti-slop/no-object-parameters -- This exported accumulator accepts heterogeneous partial SDK deltas and validates their properties at runtime.
|
|
401
405
|
delta: object,
|
|
402
406
|
cacheArrays = false,
|
|
403
407
|
): Accumulator {
|
|
404
408
|
assertSafeAssistantStreamDelta(delta);
|
|
409
|
+
// SAFETY: The generic accumulator uses record entries after delta validation; recursive merge retains the original accumulator's public type.
|
|
405
410
|
const accumulatorRecord = accumulator as AssistantStreamRecord;
|
|
411
|
+
// SAFETY: The generic accumulator uses record entries after delta validation; recursive merge retains the original accumulator's public type.
|
|
406
412
|
const deltaRecord = delta as AssistantStreamRecord;
|
|
407
413
|
const projection = createAssistantStreamDeltaProjection(
|
|
408
414
|
cacheArrays && !isAssistantStreamValueExternallyMutable(accumulator),
|
|
@@ -13,6 +13,7 @@ export function normalizeX509CredentialOptions(options: ClientOptions): {
|
|
|
13
13
|
} {
|
|
14
14
|
const { credential } = options;
|
|
15
15
|
if (credential === undefined) {
|
|
16
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- Preserve the exported normalization contract when no X.509 credential is configured.
|
|
16
17
|
return { credential, options };
|
|
17
18
|
}
|
|
18
19
|
|
|
@@ -32,6 +33,7 @@ export function normalizeX509CredentialOptions(options: ClientOptions): {
|
|
|
32
33
|
);
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- The declared ClientOptions return contract supports both normalized and unchanged client options.
|
|
35
37
|
return {
|
|
36
38
|
credential,
|
|
37
39
|
options: {
|
|
@@ -142,5 +144,6 @@ export function prepareX509ClientClone(
|
|
|
142
144
|
}
|
|
143
145
|
}
|
|
144
146
|
|
|
147
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- Preserve the exported clone contract across inherited and replaced credentials and providers.
|
|
145
148
|
return { credential: nextCredential, provider: prepareProviderClone(inherited, overrides) };
|
|
146
149
|
}
|
|
@@ -74,6 +74,7 @@ function cancelResponseBody(response: Response): void {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
// oxlint-disable-next-line anti-slop/no-unknown-returns -- Decoded token JSON remains untrusted until the caller validates its fields.
|
|
77
78
|
async function readResponseBody(response: Response, signal?: AbortSignal): Promise<unknown> {
|
|
78
79
|
if (!response.body) {
|
|
79
80
|
throw new OpenAIError('X.509 workload identity token exchange returned invalid JSON.');
|
|
@@ -124,12 +125,20 @@ async function readResponseBody(response: Response, signal?: AbortSignal): Promi
|
|
|
124
125
|
}
|
|
125
126
|
}
|
|
126
127
|
|
|
128
|
+
interface UnvalidatedTokenResponse {
|
|
129
|
+
access_token?: unknown;
|
|
130
|
+
token_type?: unknown;
|
|
131
|
+
issued_token_type?: unknown;
|
|
132
|
+
expires_in?: unknown;
|
|
133
|
+
}
|
|
134
|
+
|
|
127
135
|
function validateTokenResponse(value: unknown): X509ExchangedToken {
|
|
128
136
|
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
129
137
|
throw new OpenAIError('X.509 workload identity token exchange returned an invalid token response.');
|
|
130
138
|
}
|
|
131
139
|
|
|
132
|
-
|
|
140
|
+
// SAFETY: The object check above establishes a container; optional unknown fields make no claim about its values.
|
|
141
|
+
const response = value as UnvalidatedTokenResponse;
|
|
133
142
|
if (
|
|
134
143
|
!hasOwn(response, 'access_token') ||
|
|
135
144
|
typeof response['access_token'] !== 'string' ||
|
|
@@ -44,7 +44,7 @@ class NodeX509Transport implements X509Transport {
|
|
|
44
44
|
Object.freeze(this);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
static dispatcher(value:
|
|
47
|
+
static dispatcher(value: X509Transport): Agent | ProxyAgent | undefined {
|
|
48
48
|
return #dispatcher in value ? value.#dispatcher : undefined;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -66,6 +66,7 @@ export function registerX509Transport(transport: X509Transport, registered: Regi
|
|
|
66
66
|
rememberRegisteredX509Transport(transport, Object.freeze(registered));
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
// oxlint-disable-next-line anti-slop/no-unknown-returns -- Own data-property values must remain untrusted until their option-specific validators run.
|
|
69
70
|
function dataOption(options: X509TransportOptions, name: keyof X509TransportOptions): unknown {
|
|
70
71
|
const descriptor = Object.getOwnPropertyDescriptor(options, name);
|
|
71
72
|
if (!descriptor || !('value' in descriptor)) {
|
|
@@ -43,10 +43,7 @@ function assertSafeHeaders(headers: Headers): void {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
function exchangeDeadline(
|
|
47
|
-
timeout: number | undefined,
|
|
48
|
-
callerSignal: AbortSignal | null | undefined,
|
|
49
|
-
): { signal: AbortSignal; dispose: () => void } {
|
|
46
|
+
function exchangeDeadline(timeout: number | undefined, callerSignal: AbortSignal | null | undefined) {
|
|
50
47
|
const deadline = new AbortController();
|
|
51
48
|
const timer =
|
|
52
49
|
timeout === undefined
|
|
@@ -104,10 +101,7 @@ interface X509TokenRequestContext {
|
|
|
104
101
|
fetchOptions: MergedRequestInit;
|
|
105
102
|
}
|
|
106
103
|
|
|
107
|
-
function waitForRefresh(
|
|
108
|
-
attempt: X509RefreshAttempt,
|
|
109
|
-
signal: AbortSignal,
|
|
110
|
-
): { result: Promise<X509ExchangedToken>; dispose: () => void } {
|
|
104
|
+
function waitForRefresh(attempt: X509RefreshAttempt, signal: AbortSignal) {
|
|
111
105
|
let abort: (() => void) | undefined;
|
|
112
106
|
// AbortSignal remains callback-only on supported TypeScript/runtime combinations.
|
|
113
107
|
// oxlint-disable-next-line promise/avoid-new -- A callback-only AbortSignal must race a shared refresh.
|
|
@@ -145,6 +139,7 @@ export function isX509WorkloadIdentity(
|
|
|
145
139
|
}
|
|
146
140
|
break;
|
|
147
141
|
}
|
|
142
|
+
// SAFETY: Object.getPrototypeOf returns an object or null; the traversal checks descriptors rather than assuming a credential-provider subtype.
|
|
148
143
|
providerOwner = Object.getPrototypeOf(providerOwner) as object | null;
|
|
149
144
|
}
|
|
150
145
|
|
|
@@ -157,6 +152,7 @@ export function isX509WorkloadIdentity(
|
|
|
157
152
|
}
|
|
158
153
|
return discriminator.value === 'x509';
|
|
159
154
|
}
|
|
155
|
+
// SAFETY: Object.getPrototypeOf returns an object or null; the traversal checks descriptors rather than assuming a credential-provider subtype.
|
|
160
156
|
current = Object.getPrototypeOf(current) as object | null;
|
|
161
157
|
}
|
|
162
158
|
return false;
|
|
@@ -267,9 +263,11 @@ export class X509WorkloadIdentityAuth {
|
|
|
267
263
|
type: 'x509',
|
|
268
264
|
identityProviderId: this.#identityProviderId,
|
|
269
265
|
serviceAccountId: this.#serviceAccountId,
|
|
266
|
+
// Spread creates an own data property without invoking inherited setters or changing the object prototype.
|
|
270
267
|
...(this.#configuredRefreshBufferMs === undefined
|
|
271
268
|
? {}
|
|
272
269
|
: { refreshBufferMs: this.#configuredRefreshBufferMs }),
|
|
270
|
+
// Spread creates an own data property without invoking inherited setters or changing the object prototype.
|
|
273
271
|
...(this.#configuredRefreshBufferSeconds === undefined
|
|
274
272
|
? {}
|
|
275
273
|
: { refreshBufferSeconds: this.#configuredRefreshBufferSeconds }),
|
|
@@ -302,6 +300,7 @@ export class X509WorkloadIdentityAuth {
|
|
|
302
300
|
if (!defaultHeaders || !requestHeaders) {
|
|
303
301
|
throw new OpenAIError('X.509 workload identity requires snapshotted request headers.');
|
|
304
302
|
}
|
|
303
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- The exposed snapshot contract deliberately hides the private request-scope representation.
|
|
305
304
|
return { defaultHeaders, requestHeaders };
|
|
306
305
|
}
|
|
307
306
|
|
|
@@ -495,6 +494,7 @@ export class X509WorkloadIdentityAuth {
|
|
|
495
494
|
}
|
|
496
495
|
|
|
497
496
|
/** Establishes an independent scope even when concurrent requests share caller options. */
|
|
497
|
+
// oxlint-disable-next-line anti-slop/no-object-parameters -- Logical request owners are opaque identity tokens; their properties are never read.
|
|
498
498
|
runRequest<T>(operation: () => Promise<T>, requestOwner: object): Promise<T> {
|
|
499
499
|
return this.#transport.run(async () => {
|
|
500
500
|
const scope = this.#transport.current();
|
|
@@ -515,6 +515,7 @@ export class X509WorkloadIdentityAuth {
|
|
|
515
515
|
}
|
|
516
516
|
|
|
517
517
|
/** Reports whether a public request-building call already belongs to an active logical operation. */
|
|
518
|
+
// oxlint-disable-next-line anti-slop/no-object-parameters -- Request scope membership compares the opaque caller token by identity only.
|
|
518
519
|
inRequest(requestOwner: object): boolean {
|
|
519
520
|
const scope = this.#transport.current();
|
|
520
521
|
return scope?.owner === this && scope.requestOwner === requestOwner && scope.phase !== 'authorizing';
|
|
@@ -540,9 +541,13 @@ export class X509WorkloadIdentityAuth {
|
|
|
540
541
|
wallStartedAt,
|
|
541
542
|
monotonicStartedAt,
|
|
542
543
|
owner: this,
|
|
544
|
+
// Spread creates an own data property without invoking inherited setters or changing the object prototype.
|
|
543
545
|
...(deadlineArmed ? { deadlineArmed } : {}),
|
|
546
|
+
// Spread creates an own data property without invoking inherited setters or changing the object prototype.
|
|
544
547
|
...(request ? { request } : {}),
|
|
548
|
+
// Spread creates an own data property without invoking inherited setters or changing the object prototype.
|
|
545
549
|
...(effectiveSignal ? { effectiveSignal } : {}),
|
|
550
|
+
// Spread creates an own data property without invoking inherited setters or changing the object prototype.
|
|
546
551
|
...(requestOwner ? { requestOwner } : {}),
|
|
547
552
|
};
|
|
548
553
|
return (operation) =>
|