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,11 +1,5 @@
|
|
|
1
1
|
import { MalformedJSON, partialParse } from '../_vendor/partial-json-parser/parser';
|
|
2
|
-
import {
|
|
3
|
-
APIError,
|
|
4
|
-
APIUserAbortError,
|
|
5
|
-
ContentFilterFinishReasonError,
|
|
6
|
-
LengthFinishReasonError,
|
|
7
|
-
OpenAIError,
|
|
8
|
-
} from '../error';
|
|
2
|
+
import { APIError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from '../error';
|
|
9
3
|
import type OpenAI from '../index';
|
|
10
4
|
import { observeJSONRequestBody, type RequestOptions } from '../internal/request-options';
|
|
11
5
|
import type { ReadableStream } from '../internal/shim-types';
|
|
@@ -35,8 +29,20 @@ import type {
|
|
|
35
29
|
} from '../resources/chat/completions/completions';
|
|
36
30
|
import { Stream } from '../streaming';
|
|
37
31
|
import { AbstractChatCompletionRunner } from './AbstractChatCompletionRunner';
|
|
38
|
-
import type { AbstractChatCompletionRunnerEvents } from './AbstractChatCompletionRunner';
|
|
32
|
+
import type { AbstractChatCompletionRunnerEvents, RunnerOptions } from './AbstractChatCompletionRunner';
|
|
33
|
+
import type {
|
|
34
|
+
ChatCompletionRunner,
|
|
35
|
+
ChatCompletionToolRunnerParamsWithContext,
|
|
36
|
+
ChatCompletionToolRunnerParamsWithoutContext,
|
|
37
|
+
} from './ChatCompletionRunner';
|
|
38
|
+
import type {
|
|
39
|
+
ChatCompletionStreamingRunner,
|
|
40
|
+
ChatCompletionStreamingToolRunnerParamsWithContext,
|
|
41
|
+
ChatCompletionStreamingToolRunnerParamsWithoutContext,
|
|
42
|
+
} from './ChatCompletionStreamingRunner';
|
|
43
|
+
import type { BaseFunctionsArgs } from './RunnableFunction';
|
|
39
44
|
|
|
45
|
+
// oxlint-disable-next-line anti-slop/no-unknown-returns -- Partial JSON may have any shape; callers validate or parse it against their response schema.
|
|
40
46
|
function parseStructuredStreamingJSON(content: string): unknown {
|
|
41
47
|
try {
|
|
42
48
|
return partialParse(content);
|
|
@@ -218,6 +224,7 @@ export function makeChatCompletionReadableStreamMessageChunk(
|
|
|
218
224
|
const payload: ChatCompletionReadableStreamMessage = {
|
|
219
225
|
type: 'message',
|
|
220
226
|
message,
|
|
227
|
+
// Spread creates an own data property without invoking inherited setters or changing the object prototype.
|
|
221
228
|
...(toolCallIds ? { tool_call_ids: toolCallIds } : {}),
|
|
222
229
|
};
|
|
223
230
|
|
|
@@ -248,6 +255,7 @@ function getChatCompletionReadableStreamMessage(
|
|
|
248
255
|
return item;
|
|
249
256
|
}
|
|
250
257
|
|
|
258
|
+
// SAFETY: This decoder reads the SDK's tagged readable-stream envelope; JSON parsing restores its serialized message fields for the stream accumulator.
|
|
251
259
|
return JSON.parse(
|
|
252
260
|
item.object.slice(CHAT_COMPLETION_READABLE_STREAM_MESSAGE_PREFIX.length),
|
|
253
261
|
) as ChatCompletionReadableStreamMessage;
|
|
@@ -465,16 +473,18 @@ function reservePartialJSONParse(state: PartialJSONParseState, budget: PartialJS
|
|
|
465
473
|
}
|
|
466
474
|
|
|
467
475
|
function captureStructuredJSONSnapshot(
|
|
468
|
-
snapshot:
|
|
476
|
+
snapshot: ChatCompletionSnapshot.Choice.Message | ChatCompletionSnapshot.Choice.Message.ToolCall.Function,
|
|
469
477
|
property: 'content' | 'arguments' | 'refusal',
|
|
470
478
|
): string | null | undefined {
|
|
471
479
|
const descriptor = Object.getOwnPropertyDescriptor(snapshot, property);
|
|
472
480
|
if (!descriptor) {
|
|
481
|
+
// SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
|
|
473
482
|
let prototype = Object.getPrototypeOf(snapshot) as object | null;
|
|
474
483
|
for (let depth = 0; prototype !== null; depth += 1) {
|
|
475
484
|
if (depth >= MAX_PARTIAL_JSON_DEPTH || Object.getOwnPropertyDescriptor(prototype, property)) {
|
|
476
485
|
throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
|
|
477
486
|
}
|
|
487
|
+
// SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
|
|
478
488
|
prototype = Object.getPrototypeOf(prototype) as object | null;
|
|
479
489
|
}
|
|
480
490
|
return undefined;
|
|
@@ -486,6 +496,7 @@ function captureStructuredJSONSnapshot(
|
|
|
486
496
|
throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
|
|
487
497
|
}
|
|
488
498
|
|
|
499
|
+
// SAFETY: The own data descriptor was explicitly checked to contain only a string, null, or undefined.
|
|
489
500
|
return descriptor.value as string | null | undefined;
|
|
490
501
|
}
|
|
491
502
|
|
|
@@ -502,22 +513,25 @@ function captureStructuredMessageSnapshot(
|
|
|
502
513
|
throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
|
|
503
514
|
}
|
|
504
515
|
|
|
516
|
+
// SAFETY: The choice contract supplies a message; the own data descriptor check prevents getters from changing which object is captured.
|
|
505
517
|
return descriptor.value as ChatCompletionSnapshot.Choice.Message;
|
|
506
518
|
}
|
|
507
519
|
|
|
508
520
|
function captureSnapshotArray<Item>(
|
|
509
|
-
snapshot:
|
|
521
|
+
snapshot: ChatCompletionSnapshot | ChatCompletionSnapshot.Choice.Message,
|
|
510
522
|
property: 'choices' | 'tool_calls',
|
|
511
523
|
maximum: number,
|
|
512
524
|
kind: 'choice' | 'tool-call',
|
|
513
525
|
): Item[] | undefined {
|
|
514
526
|
const descriptor = Object.getOwnPropertyDescriptor(snapshot, property);
|
|
515
527
|
if (!descriptor) {
|
|
528
|
+
// SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
|
|
516
529
|
let prototype = Object.getPrototypeOf(snapshot) as object | null;
|
|
517
530
|
for (let depth = 0; prototype !== null; depth += 1) {
|
|
518
531
|
if (depth >= MAX_PARTIAL_JSON_DEPTH || Object.getOwnPropertyDescriptor(prototype, property)) {
|
|
519
532
|
throw new OpenAIError(`Chat completion stream contains an unsafe snapshot ${kind} collection`);
|
|
520
533
|
}
|
|
534
|
+
// SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
|
|
521
535
|
prototype = Object.getPrototypeOf(prototype) as object | null;
|
|
522
536
|
}
|
|
523
537
|
return undefined;
|
|
@@ -531,6 +545,7 @@ function captureSnapshotArray<Item>(
|
|
|
531
545
|
throw new OpenAIError(`Chat completion stream exceeded its snapshot ${kind} limit`);
|
|
532
546
|
}
|
|
533
547
|
|
|
548
|
+
// SAFETY: The captured data property is an array with a checked bounded length; Item comes from the owning snapshot collection's contract.
|
|
534
549
|
return descriptor.value as Item[];
|
|
535
550
|
}
|
|
536
551
|
|
|
@@ -543,6 +558,7 @@ function captureSnapshotArrayItem<Item>(array: Item[], index: number): Item | un
|
|
|
543
558
|
throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
|
|
544
559
|
}
|
|
545
560
|
|
|
561
|
+
// SAFETY: The descriptor is a data property of the typed Item array, so its value retains that array's element contract.
|
|
546
562
|
return descriptor.value as Item;
|
|
547
563
|
}
|
|
548
564
|
|
|
@@ -568,6 +584,7 @@ function mapCapturedSnapshotArray<Item, Mapped>(
|
|
|
568
584
|
if (!('value' in item)) {
|
|
569
585
|
throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
|
|
570
586
|
}
|
|
587
|
+
// SAFETY: The descriptor is a data property of the typed Item array, so its value retains that array's element contract.
|
|
571
588
|
mapped[index] = map(item.value as Item, index);
|
|
572
589
|
}
|
|
573
590
|
|
|
@@ -616,6 +633,7 @@ function assertBoundToolCallIdentity(toolCall: PartialToolCallSnapshot, identity
|
|
|
616
633
|
}
|
|
617
634
|
}
|
|
618
635
|
|
|
636
|
+
// oxlint-disable-next-line anti-slop/no-object-parameters -- This assignment primitive copies own properties from heterogeneous snapshot and delta objects.
|
|
619
637
|
function assignOwnProperties<T extends object>(target: T, source: object): T {
|
|
620
638
|
if (Object.prototype.propertyIsEnumerable.call(source, '__proto__') && !hasOwn(target, '__proto__')) {
|
|
621
639
|
Object.defineProperty(target, '__proto__', {
|
|
@@ -641,6 +659,7 @@ function cloneParserConfigObject<Value extends object>(
|
|
|
641
659
|
}
|
|
642
660
|
|
|
643
661
|
descriptors[field] = {
|
|
662
|
+
// oxlint-disable-next-line anti-slop/no-reflect-get -- Generic config cloning must resolve inherited/accessor keys outside the declared config shape.
|
|
644
663
|
value: descriptor && 'value' in descriptor ? descriptor.value : Reflect.get(value, field, value),
|
|
645
664
|
enumerable: descriptor?.enumerable ?? false,
|
|
646
665
|
configurable: descriptor?.configurable ?? true,
|
|
@@ -648,6 +667,7 @@ function cloneParserConfigObject<Value extends object>(
|
|
|
648
667
|
};
|
|
649
668
|
}
|
|
650
669
|
|
|
670
|
+
// SAFETY: The clone preserves the original prototype and descriptors, replacing only the parser metadata captured from that same value.
|
|
651
671
|
return Object.create(Object.getPrototypeOf(value), descriptors) as Value;
|
|
652
672
|
}
|
|
653
673
|
|
|
@@ -670,6 +690,7 @@ function snapshotChatCompletionParserParams(params: ChatCompletionCreateParams):
|
|
|
670
690
|
continue;
|
|
671
691
|
}
|
|
672
692
|
|
|
693
|
+
// SAFETY: This own data descriptor comes from the request's typed tools array; the following code captures its parser metadata.
|
|
673
694
|
const tool = item.value as NonNullable<ChatCompletionCreateParams['tools']>[number];
|
|
674
695
|
const stableTool = cloneParserConfigObject(tool, [
|
|
675
696
|
'type',
|
|
@@ -690,6 +711,7 @@ function snapshotChatCompletionParserParams(params: ChatCompletionCreateParams):
|
|
|
690
711
|
};
|
|
691
712
|
}
|
|
692
713
|
|
|
714
|
+
// SAFETY: The cloned tool retains the original prototype and descriptors while substituting its captured parser configuration.
|
|
693
715
|
stableTools[index] = Object.create(Object.getPrototypeOf(tool), descriptors) as typeof tool;
|
|
694
716
|
}
|
|
695
717
|
snapshot.tools = stableTools;
|
|
@@ -763,6 +785,7 @@ function canonicalSerializedParserSchema(
|
|
|
763
785
|
return true;
|
|
764
786
|
};
|
|
765
787
|
|
|
788
|
+
// SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
|
|
766
789
|
const visit = (current: unknown, depth: number): CanonicalSerializedParserValue => {
|
|
767
790
|
if (depth > MAX_SERIALIZED_PARSER_SCHEMA_DEPTH || budget.nodes >= MAX_SERIALIZED_PARSER_SCHEMA_NODES) {
|
|
768
791
|
return UNSAFE_SERIALIZED_PARSER_VALUE;
|
|
@@ -792,6 +815,7 @@ function canonicalSerializedParserSchema(
|
|
|
792
815
|
}
|
|
793
816
|
|
|
794
817
|
const array = Array.isArray(current);
|
|
818
|
+
// SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
|
|
795
819
|
const prototype = Object.getPrototypeOf(current) as object | null;
|
|
796
820
|
if (
|
|
797
821
|
(array && prototype !== Array.prototype) ||
|
|
@@ -923,7 +947,9 @@ function canonicalSerializedParserSchema(
|
|
|
923
947
|
|
|
924
948
|
function rememberSerializedParserSchema(
|
|
925
949
|
signatures: WeakMap<object, string>,
|
|
950
|
+
// oxlint-disable-next-line anti-slop/no-object-parameters -- Parser owners are tracked by identity before their metadata descriptors are validated.
|
|
926
951
|
source: object,
|
|
952
|
+
// oxlint-disable-next-line anti-slop/no-object-parameters -- Serialized schema holders may be arbitrary objects with hostile accessors or prototypes.
|
|
927
953
|
holder: object,
|
|
928
954
|
key: string,
|
|
929
955
|
): void {
|
|
@@ -947,7 +973,9 @@ function rememberSerializedParserSchema(
|
|
|
947
973
|
|
|
948
974
|
function hasMatchingSerializedParserSchema(
|
|
949
975
|
signatures: WeakMap<object, string>,
|
|
976
|
+
// oxlint-disable-next-line anti-slop/no-object-parameters -- Parser signatures belong to the original object identity, independent of its fields.
|
|
950
977
|
source: object | undefined,
|
|
978
|
+
// oxlint-disable-next-line anti-slop/no-object-parameters -- The schema holder is inspected through own descriptors before its contents are trusted.
|
|
951
979
|
holder: object,
|
|
952
980
|
key: string,
|
|
953
981
|
value: unknown,
|
|
@@ -973,7 +1001,7 @@ function serializedParserDescriptor(
|
|
|
973
1001
|
|
|
974
1002
|
function shadowSerializedParserMetadata(
|
|
975
1003
|
descriptors: PropertyDescriptorMap,
|
|
976
|
-
source:
|
|
1004
|
+
source: ChatCompletionInputTool | ChatCompletionResponseFormat,
|
|
977
1005
|
fields: readonly string[],
|
|
978
1006
|
): void {
|
|
979
1007
|
for (const field of fields) {
|
|
@@ -994,6 +1022,7 @@ function shadowSerializedParserMetadata(
|
|
|
994
1022
|
}
|
|
995
1023
|
|
|
996
1024
|
function snapshotSerializedParserTool(serialized: SerializedToolParserConfig): ChatCompletionInputTool {
|
|
1025
|
+
// SAFETY: The fallback is a serialization scaffold: the code below installs the captured wire fields before the tool is returned.
|
|
997
1026
|
const source =
|
|
998
1027
|
serialized.source ??
|
|
999
1028
|
({
|
|
@@ -1008,10 +1037,12 @@ function snapshotSerializedParserTool(serialized: SerializedToolParserConfig): C
|
|
|
1008
1037
|
descriptors.function = serializedParserDescriptor(descriptors.function, undefined);
|
|
1009
1038
|
}
|
|
1010
1039
|
shadowSerializedParserMetadata(descriptors, source, ['$brand', '$parseRaw', '$callback']);
|
|
1040
|
+
// SAFETY: The descriptors reconstruct the tool's captured serialized fields and shadow parser metadata while retaining its original prototype.
|
|
1011
1041
|
return Object.create(Object.getPrototypeOf(source), descriptors) as ChatCompletionInputTool;
|
|
1012
1042
|
}
|
|
1013
1043
|
|
|
1014
1044
|
const descriptor = descriptors.function;
|
|
1045
|
+
// SAFETY: The preceding guard proves this data descriptor contains a non-null object; no more specific type is assumed.
|
|
1015
1046
|
const original =
|
|
1016
1047
|
descriptor && 'value' in descriptor && typeof descriptor.value === 'object' && descriptor.value !== null
|
|
1017
1048
|
? (descriptor.value as object)
|
|
@@ -1033,21 +1064,25 @@ function snapshotSerializedParserTool(serialized: SerializedToolParserConfig): C
|
|
|
1033
1064
|
shadowSerializedParserMetadata(descriptors, source, ['$brand', '$parseRaw', '$callback']);
|
|
1034
1065
|
}
|
|
1035
1066
|
|
|
1067
|
+
// SAFETY: The descriptors reconstruct the tool's captured serialized fields and shadow parser metadata while retaining its original prototype.
|
|
1036
1068
|
return Object.create(Object.getPrototypeOf(source), descriptors) as ChatCompletionInputTool;
|
|
1037
1069
|
}
|
|
1038
1070
|
|
|
1039
1071
|
function snapshotSerializedResponseFormat(
|
|
1040
1072
|
serialized: SerializedResponseParserConfig,
|
|
1041
1073
|
): ChatCompletionResponseFormat {
|
|
1074
|
+
// SAFETY: The fallback seeds only the discriminator; the captured response-format fields are installed below before returning it.
|
|
1042
1075
|
const source = serialized.source ?? ({ type: serialized.type } as ChatCompletionResponseFormat);
|
|
1043
1076
|
const descriptors = Object.getOwnPropertyDescriptors(source);
|
|
1044
1077
|
descriptors.type = serializedParserDescriptor(descriptors.type, serialized.type);
|
|
1045
1078
|
if (serialized.type !== 'json_schema' || !serialized.source || !serialized.schemaMatches) {
|
|
1046
1079
|
shadowSerializedParserMetadata(descriptors, source, ['$brand', '$parseRaw']);
|
|
1047
1080
|
}
|
|
1081
|
+
// SAFETY: The descriptors restore the captured response-format fields and parser metadata on the original prototype.
|
|
1048
1082
|
return Object.create(Object.getPrototypeOf(source), descriptors) as ChatCompletionResponseFormat;
|
|
1049
1083
|
}
|
|
1050
1084
|
|
|
1085
|
+
// oxlint-disable-next-line anti-slop/no-object-parameters -- The serialization visitor accepts arbitrary object and array holders, inspecting own descriptors only.
|
|
1051
1086
|
function ownSerializedParserObject(holder: object, key: string): object | undefined {
|
|
1052
1087
|
const descriptor = Object.getOwnPropertyDescriptor(holder, key);
|
|
1053
1088
|
if (!descriptor || !('value' in descriptor)) {
|
|
@@ -1126,6 +1161,8 @@ function observeSerializedChatCompletionParserParams(
|
|
|
1126
1161
|
if (Array.isArray(value)) {
|
|
1127
1162
|
tools = new Proxy(value, {
|
|
1128
1163
|
get(target, property) {
|
|
1164
|
+
// SAFETY: Proxy property values may be arbitrary; unknown preserves that uncertainty before the property-specific checks below.
|
|
1165
|
+
// oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys with the original target as accessor receiver.
|
|
1129
1166
|
const actual = Reflect.get(target, property, target) as unknown;
|
|
1130
1167
|
if (typeof property === 'string') {
|
|
1131
1168
|
const index = Number(property);
|
|
@@ -1254,6 +1291,7 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
1254
1291
|
implements AsyncIterable<ChatCompletionChunk>
|
|
1255
1292
|
{
|
|
1256
1293
|
#params: ChatCompletionCreateParams | null;
|
|
1294
|
+
#rejectsUnfinishedTurns = false;
|
|
1257
1295
|
#audioDoneChoiceIndexes: Set<number>;
|
|
1258
1296
|
#choiceEventStates: ChoiceEventState[];
|
|
1259
1297
|
#currentChatCompletionSnapshot: ChatCompletionSnapshot | undefined;
|
|
@@ -1276,6 +1314,7 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
1276
1314
|
if (!descriptor || !('value' in descriptor)) {
|
|
1277
1315
|
continue;
|
|
1278
1316
|
}
|
|
1317
|
+
// SAFETY: The descriptor is read from the typed request tools array and checked as an own data property before accessing the tool.
|
|
1279
1318
|
const tool = descriptor.value as ChatCompletionInputTool;
|
|
1280
1319
|
if (
|
|
1281
1320
|
isChatCompletionFunctionTool(tool) &&
|
|
@@ -1313,6 +1352,7 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
1313
1352
|
params: ChatCompletionStreamParams,
|
|
1314
1353
|
options?: RequestOptions,
|
|
1315
1354
|
): ChatCompletionStream<ParsedT> {
|
|
1355
|
+
// SAFETY: The runner forces stream: true when sending this request; the same parameters retain the caller's parsing configuration.
|
|
1316
1356
|
const runner = new ChatCompletionStream<ParsedT>(params as ChatCompletionCreateParamsStreaming);
|
|
1317
1357
|
runner._run(() =>
|
|
1318
1358
|
runner._runChatCompletion(
|
|
@@ -1490,10 +1530,12 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
1490
1530
|
}
|
|
1491
1531
|
|
|
1492
1532
|
if (toolCallSnapshot.type === 'function') {
|
|
1533
|
+
// SAFETY: The find predicate verifies the function-tool discriminator before matching its name; the cast carries that refinement through find.
|
|
1493
1534
|
const inputTool = this.#params?.tools?.find(
|
|
1494
1535
|
(tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name,
|
|
1495
1536
|
) as ChatCompletionFunctionTool | undefined; // TS doesn't narrow based on isChatCompletionTool
|
|
1496
1537
|
|
|
1538
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- The initial null is replaced with an arbitrary tool-parser result after snapshot validation.
|
|
1497
1539
|
let parsedArguments: unknown = null;
|
|
1498
1540
|
const parseable = isAutoParsableTool(inputTool) || inputTool?.function.strict === true;
|
|
1499
1541
|
let argumentsSnapshot: string;
|
|
@@ -1680,6 +1722,7 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
1680
1722
|
if (!descriptor || !('value' in descriptor)) {
|
|
1681
1723
|
throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
|
|
1682
1724
|
}
|
|
1725
|
+
// SAFETY: The tool-call function is captured through an own data descriptor; its fields are subsequently checked by the structured snapshot reader.
|
|
1683
1726
|
const fn = descriptor.value as ChatCompletionSnapshot.Choice.Message.ToolCall.Function;
|
|
1684
1727
|
const argumentsSnapshot = captureStructuredJSONSnapshot(fn, 'arguments');
|
|
1685
1728
|
if (typeof argumentsSnapshot !== 'string') {
|
|
@@ -1717,6 +1760,21 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
1717
1760
|
return finalizeChatCompletion(snapshot, this.#params, audioDoneChoiceIndexes, validatedMessages);
|
|
1718
1761
|
}
|
|
1719
1762
|
|
|
1763
|
+
/** Rejects unfinished turns before tool callbacks while preserving ordinary stream and replay behavior. */
|
|
1764
|
+
protected override _runTools<FunctionsArgs extends BaseFunctionsArgs, ToolContext>(
|
|
1765
|
+
client: OpenAI,
|
|
1766
|
+
params:
|
|
1767
|
+
| ChatCompletionToolRunnerParamsWithContext<FunctionsArgs, ToolContext>
|
|
1768
|
+
| ChatCompletionToolRunnerParamsWithoutContext<FunctionsArgs>
|
|
1769
|
+
| ChatCompletionStreamingToolRunnerParamsWithContext<FunctionsArgs, ToolContext>
|
|
1770
|
+
| ChatCompletionStreamingToolRunnerParamsWithoutContext<FunctionsArgs>,
|
|
1771
|
+
runner: ChatCompletionRunner<any> | ChatCompletionStreamingRunner<any>,
|
|
1772
|
+
options?: RunnerOptions,
|
|
1773
|
+
): Promise<void> {
|
|
1774
|
+
this.#rejectsUnfinishedTurns = true;
|
|
1775
|
+
return super._runTools(client, params, runner, options);
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1720
1778
|
protected override async _createChatCompletion(
|
|
1721
1779
|
client: OpenAI,
|
|
1722
1780
|
params: ChatCompletionCreateParams,
|
|
@@ -1757,7 +1815,7 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
1757
1815
|
this.#addChunk(chunk);
|
|
1758
1816
|
}
|
|
1759
1817
|
if (stream.controller.signal?.aborted) {
|
|
1760
|
-
throw
|
|
1818
|
+
throw this._userAbortError();
|
|
1761
1819
|
}
|
|
1762
1820
|
return this._addChatCompletion(this.#endRequest());
|
|
1763
1821
|
}
|
|
@@ -1810,7 +1868,7 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
1810
1868
|
}
|
|
1811
1869
|
}
|
|
1812
1870
|
if (stream.controller.signal?.aborted) {
|
|
1813
|
-
throw
|
|
1871
|
+
throw this._userAbortError();
|
|
1814
1872
|
}
|
|
1815
1873
|
if (this.#currentChatCompletionSnapshot) {
|
|
1816
1874
|
return this._addChatCompletion(this.#endRequest());
|
|
@@ -1896,7 +1954,7 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
1896
1954
|
if (finish_reason) {
|
|
1897
1955
|
choice.finish_reason = finish_reason;
|
|
1898
1956
|
|
|
1899
|
-
if (this.#params && hasAutoParseableInput(this.#params)) {
|
|
1957
|
+
if (this.#params && (this.#rejectsUnfinishedTurns || hasAutoParseableInput(this.#params))) {
|
|
1900
1958
|
if (finish_reason === 'length') {
|
|
1901
1959
|
throw new LengthFinishReasonError();
|
|
1902
1960
|
}
|
|
@@ -1915,6 +1973,7 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
1915
1973
|
} // Shouldn't happen; just in case.
|
|
1916
1974
|
|
|
1917
1975
|
this.#audioDoneChoiceIndexes.delete(index);
|
|
1976
|
+
// SAFETY: Streaming audio fields arrive incrementally even though the generated delta type omits them; each present field is merged below.
|
|
1918
1977
|
const { audio, content, refusal, function_call, role, ...capturedDeltaFields } =
|
|
1919
1978
|
delta as typeof delta & {
|
|
1920
1979
|
audio?: Partial<ChatCompletionAudio> | null;
|
|
@@ -2001,6 +2060,7 @@ export class ChatCompletionStream<ParsedT = null>
|
|
|
2001
2060
|
// Tool calls are built up across chunks, so while the stream is in progress the
|
|
2002
2061
|
// entries are only partially filled in; they match `ChatCompletionSnapshot.Choice.Message.ToolCall`
|
|
2003
2062
|
// once every delta for them has been accumulated.
|
|
2063
|
+
// SAFETY: This SDK-owned collection holds partial tool calls during accumulation; finalization checks required fields before exposing completed calls.
|
|
2004
2064
|
const toolCallSnapshots = (choice.message.tool_calls ??= []) as PartialToolCallSnapshot[];
|
|
2005
2065
|
|
|
2006
2066
|
for (const toolCallDelta of tool_calls) {
|
|
@@ -2159,6 +2219,7 @@ function finalizeChatCompletion<ParsedT>(
|
|
|
2159
2219
|
}
|
|
2160
2220
|
const stableChoice = new Proxy(choice, {
|
|
2161
2221
|
get(target, property, receiver) {
|
|
2222
|
+
// oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys and the original accessor receiver.
|
|
2162
2223
|
return property === 'message' ? validated.message : Reflect.get(target, property, receiver);
|
|
2163
2224
|
},
|
|
2164
2225
|
});
|
|
@@ -2174,6 +2235,7 @@ function finalizeChatCompletion<ParsedT>(
|
|
|
2174
2235
|
if (property === 'tool_calls') {
|
|
2175
2236
|
return validated.toolCallCollection;
|
|
2176
2237
|
}
|
|
2238
|
+
// oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys and the original accessor receiver.
|
|
2177
2239
|
return Reflect.get(target, property, receiver);
|
|
2178
2240
|
},
|
|
2179
2241
|
});
|
|
@@ -2186,7 +2248,9 @@ function finalizeChatCompletion<ParsedT>(
|
|
|
2186
2248
|
throw new OpenAIError(`missing finish_reason for choice ${index}`);
|
|
2187
2249
|
}
|
|
2188
2250
|
|
|
2251
|
+
// SAFETY: The completed API response contract supplies the audio fields; this preserves the existing pass-through behavior at finalization.
|
|
2189
2252
|
const audioResponse = audio ? { audio: audio as ChatCompletionAudio } : {};
|
|
2253
|
+
// SAFETY: The API completion contract uses assistant role; retaining the wire role preserves existing behavior without adding runtime rejection.
|
|
2190
2254
|
const role = message.role as 'assistant'; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.
|
|
2191
2255
|
if (!role) {
|
|
2192
2256
|
throw new OpenAIError(`missing role for choice ${index}`);
|
|
@@ -2262,6 +2326,7 @@ function finalizeChatCompletion<ParsedT>(
|
|
|
2262
2326
|
if (property === 'name') {
|
|
2263
2327
|
return captured.name;
|
|
2264
2328
|
}
|
|
2329
|
+
// oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys and the original accessor receiver.
|
|
2265
2330
|
return Reflect.get(target, property, receiver);
|
|
2266
2331
|
},
|
|
2267
2332
|
});
|
|
@@ -2275,6 +2340,7 @@ function finalizeChatCompletion<ParsedT>(
|
|
|
2275
2340
|
if (property === 'function') {
|
|
2276
2341
|
return stableFunction;
|
|
2277
2342
|
}
|
|
2343
|
+
// oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys and the original accessor receiver.
|
|
2278
2344
|
return Reflect.get(target, property, receiver);
|
|
2279
2345
|
},
|
|
2280
2346
|
})
|
|
@@ -2329,6 +2395,7 @@ function finalizeChatCompletion<ParsedT>(
|
|
|
2329
2395
|
created,
|
|
2330
2396
|
model,
|
|
2331
2397
|
object: 'chat.completion',
|
|
2398
|
+
// Spread creates an own data property without invoking inherited setters or changing the object prototype.
|
|
2332
2399
|
...(system_fingerprint ? { system_fingerprint } : {}),
|
|
2333
2400
|
};
|
|
2334
2401
|
|
package/src/lib/EventEmitter.ts
CHANGED
|
@@ -66,12 +66,14 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
66
66
|
return this;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
// SAFETY: Listener functions are object identities used as WeakMap keys; registration and removal use the same function instance.
|
|
69
70
|
const emittedRegistration = this.#emittedListenerRegistrations.get(listener as object);
|
|
70
71
|
if (
|
|
71
72
|
emittedRegistration?.event === event &&
|
|
72
73
|
!emittedRegistration.registration.removed &&
|
|
73
74
|
!emittedRegistration.registration.detached
|
|
74
75
|
) {
|
|
76
|
+
// SAFETY: The stored registration event was compared with this event above, preserving the event/listener type correlation.
|
|
75
77
|
this.#removeEmittedListener(
|
|
76
78
|
event,
|
|
77
79
|
emittedRegistration.registration as EventListeners<EventTypes, Event>[number],
|
|
@@ -113,6 +115,7 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
113
115
|
registration?.listener === listener &&
|
|
114
116
|
registration.once
|
|
115
117
|
) {
|
|
118
|
+
// SAFETY: Listener functions are object identities used as WeakMap keys; registration and removal use the same function instance.
|
|
116
119
|
this.#emittedListenerRegistrations.set(listener as object, { event, registration });
|
|
117
120
|
}
|
|
118
121
|
}
|
|
@@ -126,6 +129,7 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
registration.removed = true;
|
|
132
|
+
// SAFETY: Listener functions are object identities used as WeakMap keys; registration and removal use the same function instance.
|
|
129
133
|
this.#emittedListenerRegistrations.delete(registration.listener as object);
|
|
130
134
|
this.#pendingListenerCleanup.add(event);
|
|
131
135
|
if (this.#listenerDispatchDepth === 0) {
|
|
@@ -135,9 +139,11 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
135
139
|
|
|
136
140
|
#cleanupEmittedListeners(): void {
|
|
137
141
|
for (const event of this.#pendingListenerCleanup) {
|
|
142
|
+
// SAFETY: Pending cleanup keys are added only from registered EventTypes events; the key retains its event-map membership.
|
|
138
143
|
const eventType = event as keyof EventTypes;
|
|
139
144
|
const listeners = this.#listeners[eventType];
|
|
140
145
|
if (listeners) {
|
|
146
|
+
// SAFETY: Filtering only removes registrations from the same event bucket and preserves the listener signatures for that event.
|
|
141
147
|
this.#listeners[eventType] = listeners.filter((listener) => !listener.removed) as any;
|
|
142
148
|
}
|
|
143
149
|
}
|
|
@@ -161,20 +167,26 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
161
167
|
event: Event,
|
|
162
168
|
): Promise<EmittedEventResult<EventParameters<EventTypes, Event>>> {
|
|
163
169
|
return new Promise((resolve, reject) => {
|
|
170
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters -- Failures and rejection reasons can be arbitrary JavaScript values; preserve them until inspection or forwarding.
|
|
164
171
|
const onError = (error: unknown) => {
|
|
172
|
+
// SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
|
|
165
173
|
this.off(event, onEvent as any);
|
|
166
174
|
reject(error);
|
|
167
175
|
};
|
|
168
176
|
const onEvent = (...values: unknown[]) => {
|
|
169
177
|
if (event !== 'error') {
|
|
178
|
+
// SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
|
|
170
179
|
this.off('error', onError as any);
|
|
171
180
|
}
|
|
181
|
+
// SAFETY: The emitted API returns the sole argument or the full tuple according to its existing EventTypes-dependent result contract.
|
|
172
182
|
resolve((values.length > 1 ? values : values[0]) as any);
|
|
173
183
|
};
|
|
174
184
|
|
|
175
185
|
if (event !== 'error') {
|
|
186
|
+
// SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
|
|
176
187
|
this.#onceForEmitted('error', onError as any);
|
|
177
188
|
}
|
|
189
|
+
// SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
|
|
178
190
|
this.#onceForEmitted(event, onEvent as any);
|
|
179
191
|
});
|
|
180
192
|
}
|
|
@@ -186,6 +198,7 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
186
198
|
) {
|
|
187
199
|
const listeners: EventListeners<EventTypes, Event> | undefined = this.#listeners[event];
|
|
188
200
|
if (listeners) {
|
|
201
|
+
// SAFETY: Filtering only removes registrations from the same event bucket and preserves the listener signatures for that event.
|
|
189
202
|
this.#listeners[event] = listeners.filter((listener) => {
|
|
190
203
|
if (listener.once) {
|
|
191
204
|
listener.detached = true;
|
|
@@ -196,10 +209,12 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
|
|
|
196
209
|
let firstListenerError: unknown;
|
|
197
210
|
this.#listenerDispatchDepth += 1;
|
|
198
211
|
try {
|
|
212
|
+
// SAFETY: The listener bucket and argument tuple come from the same EventTypes key; this bridges TypeScript generic indexed-access correlation.
|
|
199
213
|
for (const registration of listeners as any) {
|
|
200
214
|
if (!registration.removed) {
|
|
201
215
|
try {
|
|
202
216
|
const { listener } = registration;
|
|
217
|
+
// SAFETY: The listener bucket and argument tuple come from the same EventTypes key; this bridges TypeScript generic indexed-access correlation.
|
|
203
218
|
listener(...(args as any));
|
|
204
219
|
} catch (error) {
|
|
205
220
|
if (!listenerThrew) {
|