openai 7.5.0 → 7.6.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 +105 -0
- package/README.md +46 -2
- package/auth/index.d.mts +1 -1
- package/auth/index.d.mts.map +1 -1
- package/auth/index.d.ts +1 -1
- package/auth/index.d.ts.map +1 -1
- package/auth/index.js.map +1 -1
- package/auth/index.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 +176 -4
- package/auth/subject-token-providers.js.map +1 -1
- package/auth/subject-token-providers.mjs +176 -4
- package/auth/subject-token-providers.mjs.map +1 -1
- package/auth/types.d.mts +17 -0
- package/auth/types.d.mts.map +1 -1
- package/auth/types.d.ts +17 -0
- package/auth/types.d.ts.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 +80 -7
- package/auth/workload-identity-auth.js.map +1 -1
- package/auth/workload-identity-auth.mjs +80 -7
- package/auth/workload-identity-auth.mjs.map +1 -1
- package/auth/x509-transport.d.mts +5 -0
- package/auth/x509-transport.d.mts.map +1 -0
- package/auth/x509-transport.d.ts +5 -0
- package/auth/x509-transport.d.ts.map +1 -0
- package/auth/x509-transport.js +39 -0
- package/auth/x509-transport.js.map +1 -0
- package/auth/x509-transport.mjs +36 -0
- package/auth/x509-transport.mjs.map +1 -0
- package/azure.d.mts +11 -2
- package/azure.d.mts.map +1 -1
- package/azure.d.ts +11 -2
- package/azure.d.ts.map +1 -1
- package/azure.js +7 -1
- package/azure.js.map +1 -1
- package/azure.mjs +7 -1
- package/azure.mjs.map +1 -1
- package/bedrock.d.mts +6 -2
- package/bedrock.d.mts.map +1 -1
- package/bedrock.d.ts +6 -2
- package/bedrock.d.ts.map +1 -1
- package/bedrock.js +34 -4
- package/bedrock.js.map +1 -1
- package/bedrock.mjs +35 -5
- package/bedrock.mjs.map +1 -1
- package/beta/realtime/internal-base.d.mts +2 -0
- package/beta/realtime/internal-base.d.mts.map +1 -1
- package/beta/realtime/internal-base.d.ts +2 -0
- package/beta/realtime/internal-base.d.ts.map +1 -1
- package/beta/realtime/internal-base.js +15 -0
- package/beta/realtime/internal-base.js.map +1 -1
- package/beta/realtime/internal-base.mjs +14 -0
- package/beta/realtime/internal-base.mjs.map +1 -1
- package/beta/realtime/websocket.d.mts +11 -5
- package/beta/realtime/websocket.d.mts.map +1 -1
- package/beta/realtime/websocket.d.ts +11 -5
- package/beta/realtime/websocket.d.ts.map +1 -1
- package/beta/realtime/websocket.js +106 -31
- package/beta/realtime/websocket.js.map +1 -1
- package/beta/realtime/websocket.mjs +107 -32
- package/beta/realtime/websocket.mjs.map +1 -1
- package/beta/realtime/ws.d.mts +0 -2
- package/beta/realtime/ws.d.mts.map +1 -1
- package/beta/realtime/ws.d.ts +0 -2
- package/beta/realtime/ws.d.ts.map +1 -1
- package/beta/realtime/ws.js +24 -5
- package/beta/realtime/ws.js.map +1 -1
- package/beta/realtime/ws.mjs +25 -6
- package/beta/realtime/ws.mjs.map +1 -1
- package/client.d.mts +17 -2
- package/client.d.mts.map +1 -1
- package/client.d.ts +17 -2
- package/client.d.ts.map +1 -1
- package/client.js +422 -70
- package/client.js.map +1 -1
- package/client.mjs +423 -71
- 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 +67 -9
- package/core/EventEmitter.js.map +1 -1
- package/core/EventEmitter.mjs +68 -10
- 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 +58 -19
- package/core/streaming.js.map +1 -1
- package/core/streaming.mjs +58 -19
- package/core/streaming.mjs.map +1 -1
- package/helpers/audio.d.mts +5 -5
- package/helpers/audio.d.mts.map +1 -1
- package/helpers/audio.d.ts +5 -5
- package/helpers/audio.d.ts.map +1 -1
- package/helpers/audio.js +93 -22
- package/helpers/audio.js.map +1 -1
- package/helpers/audio.mjs +93 -22
- 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 +34 -14
- package/helpers/standard-schema.js.map +1 -1
- package/helpers/standard-schema.mjs +35 -15
- package/helpers/standard-schema.mjs.map +1 -1
- package/helpers/zod-v3-strict-schema.d.mts +7 -0
- package/helpers/zod-v3-strict-schema.d.mts.map +1 -0
- package/helpers/zod-v3-strict-schema.d.ts +7 -0
- package/helpers/zod-v3-strict-schema.d.ts.map +1 -0
- package/helpers/zod-v3-strict-schema.js +403 -0
- package/helpers/zod-v3-strict-schema.js.map +1 -0
- package/helpers/zod-v3-strict-schema.mjs +399 -0
- package/helpers/zod-v3-strict-schema.mjs.map +1 -0
- package/helpers/zod.d.mts.map +1 -1
- package/helpers/zod.d.ts.map +1 -1
- package/helpers/zod.js +11 -3
- package/helpers/zod.js.map +1 -1
- package/helpers/zod.mjs +12 -4
- package/helpers/zod.mjs.map +1 -1
- package/index.d.mts +1 -1
- package/index.d.mts.map +1 -1
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js.map +1 -1
- package/index.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 +28 -8
- package/internal/assistant-stream-delta.js.map +1 -1
- package/internal/assistant-stream-delta.mjs +28 -8
- package/internal/assistant-stream-delta.mjs.map +1 -1
- package/internal/auth/x509-token-exchange.d.mts +16 -0
- package/internal/auth/x509-token-exchange.d.mts.map +1 -0
- package/internal/auth/x509-token-exchange.d.ts +16 -0
- package/internal/auth/x509-token-exchange.d.ts.map +1 -0
- package/internal/auth/x509-token-exchange.js +246 -0
- package/internal/auth/x509-token-exchange.js.map +1 -0
- package/internal/auth/x509-token-exchange.mjs +243 -0
- package/internal/auth/x509-token-exchange.mjs.map +1 -0
- package/internal/auth/x509-transport-capability.d.mts +37 -0
- package/internal/auth/x509-transport-capability.d.mts.map +1 -0
- package/internal/auth/x509-transport-capability.d.ts +37 -0
- package/internal/auth/x509-transport-capability.d.ts.map +1 -0
- package/internal/auth/x509-transport-capability.js +169 -0
- package/internal/auth/x509-transport-capability.js.map +1 -0
- package/internal/auth/x509-transport-capability.mjs +164 -0
- package/internal/auth/x509-transport-capability.mjs.map +1 -0
- package/internal/auth/x509-transport-registry.d.mts +63 -0
- package/internal/auth/x509-transport-registry.d.mts.map +1 -0
- package/internal/auth/x509-transport-registry.d.ts +63 -0
- package/internal/auth/x509-transport-registry.d.ts.map +1 -0
- package/internal/auth/x509-transport-registry.js +53 -0
- package/internal/auth/x509-transport-registry.js.map +1 -0
- package/internal/auth/x509-transport-registry.mjs +48 -0
- package/internal/auth/x509-transport-registry.mjs.map +1 -0
- package/internal/auth/x509-transport-state-browser.d.mts +21 -0
- package/internal/auth/x509-transport-state-browser.d.mts.map +1 -0
- package/internal/auth/x509-transport-state-browser.d.ts +21 -0
- package/internal/auth/x509-transport-state-browser.d.ts.map +1 -0
- package/internal/auth/x509-transport-state-browser.js +30 -0
- package/internal/auth/x509-transport-state-browser.js.map +1 -0
- package/internal/auth/x509-transport-state-browser.mjs +27 -0
- package/internal/auth/x509-transport-state-browser.mjs.map +1 -0
- package/internal/auth/x509-transport-state.cjs +30 -0
- package/internal/auth/x509-transport-state.cjs.map +1 -0
- package/internal/auth/x509-transport-state.d.cts +21 -0
- package/internal/auth/x509-transport-state.d.cts.map +1 -0
- package/internal/auth/x509-workload-identity-auth.d.mts +128 -0
- package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -0
- package/internal/auth/x509-workload-identity-auth.d.ts +128 -0
- package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -0
- package/internal/auth/x509-workload-identity-auth.js +767 -0
- package/internal/auth/x509-workload-identity-auth.js.map +1 -0
- package/internal/auth/x509-workload-identity-auth.mjs +757 -0
- package/internal/auth/x509-workload-identity-auth.mjs.map +1 -0
- package/internal/bedrock.d.mts +2 -0
- package/internal/bedrock.d.mts.map +1 -1
- package/internal/bedrock.d.ts +2 -0
- package/internal/bedrock.d.ts.map +1 -1
- package/internal/bedrock.js +169 -5
- package/internal/bedrock.js.map +1 -1
- package/internal/bedrock.mjs +168 -5
- package/internal/bedrock.mjs.map +1 -1
- package/internal/data-residency.d.mts +12 -0
- package/internal/data-residency.d.mts.map +1 -0
- package/internal/data-residency.d.ts +12 -0
- package/internal/data-residency.d.ts.map +1 -0
- package/internal/data-residency.js +34 -0
- package/internal/data-residency.js.map +1 -0
- package/internal/data-residency.mjs +30 -0
- package/internal/data-residency.mjs.map +1 -0
- package/internal/multipart-encoding.d.mts +8 -0
- package/internal/multipart-encoding.d.mts.map +1 -0
- package/internal/multipart-encoding.d.ts +8 -0
- package/internal/multipart-encoding.d.ts.map +1 -0
- package/internal/multipart-encoding.js +51 -0
- package/internal/multipart-encoding.js.map +1 -0
- package/internal/multipart-encoding.mjs +48 -0
- package/internal/multipart-encoding.mjs.map +1 -0
- package/internal/qs/utils.d.mts.map +1 -1
- package/internal/qs/utils.d.ts.map +1 -1
- package/internal/qs/utils.js +307 -10
- package/internal/qs/utils.js.map +1 -1
- package/internal/qs/utils.mjs +307 -10
- package/internal/qs/utils.mjs.map +1 -1
- package/internal/request-options.d.mts +7 -0
- package/internal/request-options.d.mts.map +1 -1
- package/internal/request-options.d.ts +7 -0
- package/internal/request-options.d.ts.map +1 -1
- package/internal/request-options.js +43 -1
- package/internal/request-options.js.map +1 -1
- package/internal/request-options.mjs +42 -1
- package/internal/request-options.mjs.map +1 -1
- package/internal/responses/canonical-output-text.js +3 -3
- package/internal/responses/canonical-output-text.js.map +1 -1
- package/internal/responses/canonical-output-text.mjs +3 -3
- package/internal/responses/canonical-output-text.mjs.map +1 -1
- package/internal/responses/response-accumulator.d.mts +1 -1
- package/internal/responses/response-accumulator.d.mts.map +1 -1
- package/internal/responses/response-accumulator.d.ts +1 -1
- package/internal/responses/response-accumulator.d.ts.map +1 -1
- package/internal/responses/response-accumulator.js +331 -25
- package/internal/responses/response-accumulator.js.map +1 -1
- package/internal/responses/response-accumulator.mjs +331 -25
- package/internal/responses/response-accumulator.mjs.map +1 -1
- package/internal/tslib.js +6 -0
- package/internal/tslib.mjs +6 -1
- package/internal/uploads.d.mts +10 -6
- package/internal/uploads.d.mts.map +1 -1
- package/internal/uploads.d.ts +10 -6
- package/internal/uploads.d.ts.map +1 -1
- package/internal/uploads.js +65 -24
- package/internal/uploads.js.map +1 -1
- package/internal/uploads.mjs +65 -24
- package/internal/uploads.mjs.map +1 -1
- package/internal/utils/env.d.mts.map +1 -1
- package/internal/utils/env.d.ts.map +1 -1
- package/internal/utils/env.js +9 -4
- package/internal/utils/env.js.map +1 -1
- package/internal/utils/env.mjs +9 -4
- package/internal/utils/env.mjs.map +1 -1
- package/internal/ws.d.mts.map +1 -1
- package/internal/ws.d.ts.map +1 -1
- package/internal/ws.js +23 -1
- package/internal/ws.js.map +1 -1
- package/internal/ws.mjs +23 -1
- 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 +32 -7
- package/lib/AbstractChatCompletionRunner.js.map +1 -1
- package/lib/AbstractChatCompletionRunner.mjs +34 -9
- 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 +211 -23
- package/lib/AssistantStream.js.map +1 -1
- package/lib/AssistantStream.mjs +211 -23
- package/lib/AssistantStream.mjs.map +1 -1
- package/lib/ChatCompletionStream.d.mts +1 -1
- package/lib/ChatCompletionStream.d.mts.map +1 -1
- package/lib/ChatCompletionStream.d.ts +1 -1
- package/lib/ChatCompletionStream.d.ts.map +1 -1
- package/lib/ChatCompletionStream.js +1118 -67
- package/lib/ChatCompletionStream.js.map +1 -1
- package/lib/ChatCompletionStream.mjs +1119 -68
- 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 +67 -9
- package/lib/EventEmitter.js.map +1 -1
- package/lib/EventEmitter.mjs +68 -10
- package/lib/EventEmitter.mjs.map +1 -1
- package/lib/EventStream.d.mts +4 -0
- package/lib/EventStream.d.mts.map +1 -1
- package/lib/EventStream.d.ts +4 -0
- package/lib/EventStream.d.ts.map +1 -1
- package/lib/EventStream.js +1096 -11
- package/lib/EventStream.js.map +1 -1
- package/lib/EventStream.mjs +1097 -12
- 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 +1 -1
- package/lib/ResponsesParser.js.map +1 -1
- package/lib/ResponsesParser.mjs +1 -1
- package/lib/ResponsesParser.mjs.map +1 -1
- package/lib/Util.d.mts +2 -0
- package/lib/Util.d.mts.map +1 -1
- package/lib/Util.d.ts +2 -0
- package/lib/Util.d.ts.map +1 -1
- package/lib/Util.js +7 -4
- package/lib/Util.js.map +1 -1
- package/lib/Util.mjs +7 -4
- package/lib/Util.mjs.map +1 -1
- package/lib/assistant-run-polling.d.mts +12 -0
- package/lib/assistant-run-polling.d.mts.map +1 -0
- package/lib/assistant-run-polling.d.ts +12 -0
- package/lib/assistant-run-polling.d.ts.map +1 -0
- package/lib/assistant-run-polling.js +17 -0
- package/lib/assistant-run-polling.js.map +1 -0
- package/lib/assistant-run-polling.mjs +14 -0
- package/lib/assistant-run-polling.mjs.map +1 -0
- package/lib/embeddings.d.mts +18 -0
- package/lib/embeddings.d.mts.map +1 -0
- package/lib/embeddings.d.ts +18 -0
- package/lib/embeddings.d.ts.map +1 -0
- package/lib/embeddings.js +50 -0
- package/lib/embeddings.js.map +1 -0
- package/lib/embeddings.mjs +47 -0
- package/lib/embeddings.mjs.map +1 -0
- package/lib/file-processing.d.mts +10 -0
- package/lib/file-processing.d.mts.map +1 -0
- package/lib/file-processing.d.ts +10 -0
- package/lib/file-processing.d.ts.map +1 -0
- package/lib/file-processing.js +30 -0
- package/lib/file-processing.js.map +1 -0
- package/lib/file-processing.mjs +27 -0
- package/lib/file-processing.mjs.map +1 -0
- package/lib/parser.d.mts.map +1 -1
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js +16 -4
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs +16 -4
- package/lib/parser.mjs.map +1 -1
- package/lib/polling.d.mts +20 -0
- package/lib/polling.d.mts.map +1 -0
- package/lib/polling.d.ts +20 -0
- package/lib/polling.d.ts.map +1 -0
- package/lib/polling.js +130 -0
- package/lib/polling.js.map +1 -0
- package/lib/polling.mjs +127 -0
- package/lib/polling.mjs.map +1 -0
- package/lib/responses/ResponseStream.d.mts.map +1 -1
- package/lib/responses/ResponseStream.d.ts.map +1 -1
- package/lib/responses/ResponseStream.js +21 -11
- package/lib/responses/ResponseStream.js.map +1 -1
- package/lib/responses/ResponseStream.mjs +21 -11
- package/lib/responses/ResponseStream.mjs.map +1 -1
- package/lib/vector-store-polling.d.mts +22 -0
- package/lib/vector-store-polling.d.mts.map +1 -0
- package/lib/vector-store-polling.d.ts +22 -0
- package/lib/vector-store-polling.d.ts.map +1 -0
- package/lib/vector-store-polling.js +24 -0
- package/lib/vector-store-polling.js.map +1 -0
- package/lib/vector-store-polling.mjs +20 -0
- package/lib/vector-store-polling.mjs.map +1 -0
- package/lib/vector-store-upload.d.mts +17 -0
- package/lib/vector-store-upload.d.mts.map +1 -0
- package/lib/vector-store-upload.d.ts +17 -0
- package/lib/vector-store-upload.d.ts.map +1 -0
- package/lib/vector-store-upload.js +37 -0
- package/lib/vector-store-upload.js.map +1 -0
- package/lib/vector-store-upload.mjs +34 -0
- package/lib/vector-store-upload.mjs.map +1 -0
- package/lib/webhook-signature.d.mts +15 -0
- package/lib/webhook-signature.d.mts.map +1 -0
- package/lib/webhook-signature.d.ts +15 -0
- package/lib/webhook-signature.d.ts.map +1 -0
- package/lib/webhook-signature.js +125 -0
- package/lib/webhook-signature.js.map +1 -0
- package/lib/webhook-signature.mjs +121 -0
- package/lib/webhook-signature.mjs.map +1 -0
- package/package.json +14 -1
- package/realtime/internal-base.d.mts +2 -0
- package/realtime/internal-base.d.mts.map +1 -1
- package/realtime/internal-base.d.ts +2 -0
- package/realtime/internal-base.d.ts.map +1 -1
- package/realtime/internal-base.js +15 -0
- package/realtime/internal-base.js.map +1 -1
- package/realtime/internal-base.mjs +14 -0
- package/realtime/internal-base.mjs.map +1 -1
- package/realtime/websocket.d.mts +3 -2
- package/realtime/websocket.d.mts.map +1 -1
- package/realtime/websocket.d.ts +3 -2
- package/realtime/websocket.d.ts.map +1 -1
- package/realtime/websocket.js +90 -26
- package/realtime/websocket.js.map +1 -1
- package/realtime/websocket.mjs +91 -27
- 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 +9 -1
- package/realtime/ws.js.map +1 -1
- package/realtime/ws.mjs +10 -2
- package/realtime/ws.mjs.map +1 -1
- package/resources/admin/organization/index.d.mts +2 -2
- package/resources/admin/organization/index.d.mts.map +1 -1
- package/resources/admin/organization/index.d.ts +2 -2
- package/resources/admin/organization/index.d.ts.map +1 -1
- package/resources/admin/organization/index.js.map +1 -1
- package/resources/admin/organization/index.mjs.map +1 -1
- package/resources/admin/organization/organization.d.mts +4 -4
- package/resources/admin/organization/organization.d.mts.map +1 -1
- package/resources/admin/organization/organization.d.ts +4 -4
- package/resources/admin/organization/organization.d.ts.map +1 -1
- package/resources/admin/organization/organization.js.map +1 -1
- package/resources/admin/organization/organization.mjs.map +1 -1
- package/resources/admin/organization/projects/index.d.mts +1 -1
- package/resources/admin/organization/projects/index.d.mts.map +1 -1
- package/resources/admin/organization/projects/index.d.ts +1 -1
- package/resources/admin/organization/projects/index.d.ts.map +1 -1
- package/resources/admin/organization/projects/index.js.map +1 -1
- package/resources/admin/organization/projects/index.mjs.map +1 -1
- package/resources/admin/organization/projects/projects.d.mts +22 -5
- package/resources/admin/organization/projects/projects.d.mts.map +1 -1
- package/resources/admin/organization/projects/projects.d.ts +22 -5
- package/resources/admin/organization/projects/projects.d.ts.map +1 -1
- package/resources/admin/organization/projects/projects.js.map +1 -1
- package/resources/admin/organization/projects/projects.mjs.map +1 -1
- package/resources/admin/organization/usage.d.mts +62 -1
- package/resources/admin/organization/usage.d.mts.map +1 -1
- package/resources/admin/organization/usage.d.ts +62 -1
- package/resources/admin/organization/usage.d.ts.map +1 -1
- package/resources/admin/organization/usage.js.map +1 -1
- package/resources/admin/organization/usage.mjs.map +1 -1
- package/resources/beta/responses/internal-base.d.mts.map +1 -1
- package/resources/beta/responses/internal-base.d.ts.map +1 -1
- package/resources/beta/responses/internal-base.js +2 -0
- package/resources/beta/responses/internal-base.js.map +1 -1
- package/resources/beta/responses/internal-base.mjs +2 -0
- package/resources/beta/responses/internal-base.mjs.map +1 -1
- package/resources/beta/responses/responses.d.mts +9 -12
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +9 -12
- 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/threads/runs/index.d.mts +1 -1
- package/resources/beta/threads/runs/index.d.mts.map +1 -1
- package/resources/beta/threads/runs/index.d.ts +1 -1
- package/resources/beta/threads/runs/index.d.ts.map +1 -1
- package/resources/beta/threads/runs/runs.d.mts.map +1 -1
- package/resources/beta/threads/runs/runs.d.ts.map +1 -1
- package/resources/beta/threads/runs/runs.js +2 -43
- package/resources/beta/threads/runs/runs.js.map +1 -1
- package/resources/beta/threads/runs/runs.mjs +2 -43
- package/resources/beta/threads/runs/runs.mjs.map +1 -1
- package/resources/chat/completions/completions.d.mts +6 -0
- package/resources/chat/completions/completions.d.mts.map +1 -1
- package/resources/chat/completions/completions.d.ts +6 -0
- package/resources/chat/completions/completions.d.ts.map +1 -1
- package/resources/chat/completions/completions.js.map +1 -1
- package/resources/chat/completions/completions.mjs.map +1 -1
- package/resources/embeddings.d.mts.map +1 -1
- package/resources/embeddings.d.ts.map +1 -1
- package/resources/embeddings.js +2 -36
- package/resources/embeddings.js.map +1 -1
- package/resources/embeddings.mjs +2 -36
- package/resources/embeddings.mjs.map +1 -1
- package/resources/files.d.mts.map +1 -1
- package/resources/files.d.ts.map +1 -1
- package/resources/files.js +2 -15
- package/resources/files.js.map +1 -1
- package/resources/files.mjs +2 -15
- package/resources/files.mjs.map +1 -1
- package/resources/images.d.mts +12 -22
- package/resources/images.d.mts.map +1 -1
- package/resources/images.d.ts +12 -22
- package/resources/images.d.ts.map +1 -1
- package/resources/realtime/calls.d.mts +23 -1
- package/resources/realtime/calls.d.mts.map +1 -1
- package/resources/realtime/calls.d.ts +23 -1
- package/resources/realtime/calls.d.ts.map +1 -1
- package/resources/realtime/calls.js +24 -0
- package/resources/realtime/calls.js.map +1 -1
- package/resources/realtime/calls.mjs +24 -0
- package/resources/realtime/calls.mjs.map +1 -1
- package/resources/realtime/index.d.mts +1 -1
- package/resources/realtime/index.d.mts.map +1 -1
- package/resources/realtime/index.d.ts +1 -1
- package/resources/realtime/index.d.ts.map +1 -1
- package/resources/realtime/index.js.map +1 -1
- package/resources/realtime/index.mjs +1 -1
- package/resources/realtime/index.mjs.map +1 -1
- package/resources/realtime/realtime.d.mts +5 -4
- package/resources/realtime/realtime.d.mts.map +1 -1
- package/resources/realtime/realtime.d.ts +5 -4
- package/resources/realtime/realtime.d.ts.map +1 -1
- package/resources/realtime/realtime.js.map +1 -1
- package/resources/realtime/realtime.mjs.map +1 -1
- package/resources/responses/internal-base.d.mts.map +1 -1
- package/resources/responses/internal-base.d.ts.map +1 -1
- package/resources/responses/internal-base.js +2 -0
- package/resources/responses/internal-base.js.map +1 -1
- package/resources/responses/internal-base.mjs +2 -0
- package/resources/responses/internal-base.mjs.map +1 -1
- package/resources/responses/responses.d.mts +9 -12
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +9 -12
- 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/vector-stores/file-batches.d.mts.map +1 -1
- package/resources/vector-stores/file-batches.d.ts.map +1 -1
- package/resources/vector-stores/file-batches.js +4 -61
- package/resources/vector-stores/file-batches.js.map +1 -1
- package/resources/vector-stores/file-batches.mjs +4 -61
- package/resources/vector-stores/file-batches.mjs.map +1 -1
- package/resources/vector-stores/files.d.mts +1 -1
- package/resources/vector-stores/files.d.mts.map +1 -1
- package/resources/vector-stores/files.d.ts +1 -1
- package/resources/vector-stores/files.d.ts.map +1 -1
- package/resources/vector-stores/files.js +2 -35
- package/resources/vector-stores/files.js.map +1 -1
- package/resources/vector-stores/files.mjs +2 -35
- package/resources/vector-stores/files.mjs.map +1 -1
- package/resources/webhooks/webhooks.d.mts.map +1 -1
- package/resources/webhooks/webhooks.d.ts.map +1 -1
- package/resources/webhooks/webhooks.js +5 -43
- package/resources/webhooks/webhooks.js.map +1 -1
- package/resources/webhooks/webhooks.mjs +5 -43
- package/resources/webhooks/webhooks.mjs.map +1 -1
- package/src/auth/index.ts +6 -1
- package/src/auth/subject-token-providers.ts +196 -4
- package/src/auth/types.ts +24 -0
- package/src/auth/workload-identity-auth.ts +104 -7
- package/src/auth/x509-transport.ts +49 -0
- package/src/azure.ts +22 -1
- package/src/bedrock.ts +49 -5
- package/src/beta/realtime/internal-base.ts +15 -0
- package/src/beta/realtime/websocket.ts +148 -40
- package/src/beta/realtime/ws.ts +31 -13
- package/src/client.ts +536 -92
- package/src/core/EventEmitter.ts +91 -7
- package/src/core/streaming.ts +71 -20
- package/src/helpers/audio.ts +93 -22
- package/src/helpers/standard-schema.ts +50 -16
- package/src/helpers/zod-v3-strict-schema.ts +514 -0
- package/src/helpers/zod.ts +17 -4
- package/src/index.ts +1 -1
- package/src/internal/assistant-stream-delta.ts +33 -10
- package/src/internal/auth/x509-token-exchange.ts +310 -0
- package/src/internal/auth/x509-transport-capability.ts +219 -0
- package/src/internal/auth/x509-transport-registry.ts +118 -0
- package/src/internal/auth/x509-transport-state-browser.ts +36 -0
- package/src/internal/auth/x509-transport-state.cts +36 -0
- package/src/internal/auth/x509-workload-identity-auth.ts +958 -0
- package/src/internal/bedrock.ts +182 -5
- package/src/internal/data-residency.ts +44 -0
- package/src/internal/multipart-encoding.ts +53 -0
- package/src/internal/qs/utils.ts +375 -13
- package/src/internal/request-options.ts +52 -1
- package/src/internal/responses/canonical-output-text.ts +3 -3
- package/src/internal/responses/response-accumulator.ts +411 -24
- package/src/internal/uploads.ts +81 -26
- package/src/internal/utils/env.ts +9 -5
- package/src/internal/ws.ts +24 -3
- package/src/lib/AbstractChatCompletionRunner.ts +33 -6
- package/src/lib/AssistantStream.ts +262 -22
- package/src/lib/ChatCompletionStream.ts +1467 -103
- package/src/lib/EventEmitter.ts +91 -7
- package/src/lib/EventStream.ts +1483 -10
- package/src/lib/ResponsesParser.ts +4 -1
- package/src/lib/Util.ts +7 -5
- package/src/lib/assistant-run-polling.ts +27 -0
- package/src/lib/embeddings.ts +65 -0
- package/src/lib/file-processing.ts +36 -0
- package/src/lib/parser.ts +19 -4
- package/src/lib/polling.ts +144 -0
- package/src/lib/responses/ResponseStream.ts +22 -10
- package/src/lib/vector-store-polling.ts +46 -0
- package/src/lib/vector-store-upload.ts +53 -0
- package/src/lib/webhook-signature.ts +164 -0
- package/src/realtime/internal-base.ts +15 -0
- package/src/realtime/websocket.ts +130 -27
- package/src/realtime/ws.ts +15 -2
- package/src/resources/admin/organization/index.ts +2 -0
- package/src/resources/admin/organization/organization.ts +4 -0
- package/src/resources/admin/organization/projects/index.ts +1 -0
- package/src/resources/admin/organization/projects/projects.ts +37 -4
- package/src/resources/admin/organization/usage.ts +83 -0
- package/src/resources/beta/responses/internal-base.ts +2 -0
- package/src/resources/beta/responses/responses.ts +9 -12
- package/src/resources/beta/threads/runs/index.ts +1 -1
- package/src/resources/beta/threads/runs/runs.ts +2 -45
- package/src/resources/chat/completions/completions.ts +7 -0
- package/src/resources/embeddings.ts +2 -42
- package/src/resources/files.ts +2 -19
- package/src/resources/images.ts +12 -22
- package/src/resources/realtime/api.md +1 -0
- package/src/resources/realtime/calls.ts +46 -0
- package/src/resources/realtime/index.ts +7 -1
- package/src/resources/realtime/realtime.ts +5 -3
- package/src/resources/responses/internal-base.ts +2 -0
- package/src/resources/responses/responses.ts +9 -12
- package/src/resources/vector-stores/file-batches.ts +8 -77
- package/src/resources/vector-stores/files.ts +3 -43
- package/src/resources/webhooks/webhooks.ts +5 -61
- 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
|
@@ -2,8 +2,8 @@ import type { AzureOpenAI } from '../../index';
|
|
|
2
2
|
import { assertBedrockWebSocketOrigin } from '../../internal/bedrock';
|
|
3
3
|
import { OpenAI } from '../../index';
|
|
4
4
|
import { OpenAIError } from '../../error';
|
|
5
|
-
import type { RealtimeClientEvent
|
|
6
|
-
import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure } from './internal-base';
|
|
5
|
+
import type { RealtimeClientEvent } from '../../resources/beta/realtime/realtime';
|
|
6
|
+
import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure, parseRealtimeEvent } from './internal-base';
|
|
7
7
|
import type { RealtimeConnectionConfig } from './internal-base';
|
|
8
8
|
import { isRunningInBrowser } from '../../internal/detect-platform';
|
|
9
9
|
|
|
@@ -20,10 +20,82 @@ type _WebSocket = typeof globalThis extends {
|
|
|
20
20
|
InstanceType<ws>
|
|
21
21
|
: any;
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
type RuntimeScope = typeof globalThis & {
|
|
24
|
+
process?: { versions?: { node?: string } };
|
|
25
|
+
WorkerGlobalScope?: typeof Object;
|
|
26
|
+
WorkerNavigator?: typeof Object;
|
|
27
|
+
Deno?: { version?: { deno?: string } };
|
|
28
|
+
Bun?: { version?: string };
|
|
29
|
+
EdgeRuntime?: unknown;
|
|
30
|
+
WebSocketPair?: unknown;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/** Identifies browser pages and workers without blocking trusted server runtimes. */
|
|
34
|
+
function isRunningInBrowserOrBrowserWorker(): boolean {
|
|
35
|
+
if (isRunningInBrowser()) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const scope = globalThis as RuntimeScope;
|
|
40
|
+
return (
|
|
41
|
+
typeof scope.WorkerGlobalScope === 'function' &&
|
|
42
|
+
scope instanceof scope.WorkerGlobalScope &&
|
|
43
|
+
typeof scope.WorkerNavigator === 'function' &&
|
|
44
|
+
scope.navigator instanceof scope.WorkerNavigator &&
|
|
45
|
+
typeof scope.navigator?.userAgent === 'string' &&
|
|
46
|
+
scope.navigator.userAgent !== 'Cloudflare-Workers' &&
|
|
47
|
+
scope.process?.versions?.node === undefined &&
|
|
48
|
+
scope.Deno === undefined &&
|
|
49
|
+
scope.Bun === undefined &&
|
|
50
|
+
scope.EdgeRuntime === undefined &&
|
|
51
|
+
scope.WebSocketPair === undefined
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Reports whether the runtime supports request headers in native WebSocket options. */
|
|
56
|
+
function supportsWebSocketRequestHeaders(): boolean {
|
|
57
|
+
const scope = globalThis as RuntimeScope;
|
|
58
|
+
if (
|
|
59
|
+
isRunningInBrowserOrBrowserWorker() ||
|
|
60
|
+
scope.EdgeRuntime !== undefined ||
|
|
61
|
+
scope.WebSocketPair !== undefined ||
|
|
62
|
+
scope.navigator?.userAgent === 'Cloudflare-Workers'
|
|
63
|
+
) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (scope.Deno !== undefined) {
|
|
68
|
+
const [major, minor] = (scope.Deno.version?.deno ?? '').split('.').map(Number);
|
|
69
|
+
return major !== undefined && minor !== undefined && (major > 2 || (major === 2 && minor >= 5));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (typeof scope.Bun?.version === 'string') {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return (
|
|
77
|
+
Object.prototype.toString.call(scope.process) === '[object process]' &&
|
|
78
|
+
typeof scope.process?.versions?.node === 'string'
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Removes Azure credentials while preserving the existing public URL redaction contract. */
|
|
83
|
+
function redactAzureCredentials(url: URL, isBearerToken: boolean): void {
|
|
84
|
+
let hasApiKey = !isBearerToken;
|
|
85
|
+
let hasAuthorization = isBearerToken;
|
|
86
|
+
const parameterNames = [...url.searchParams.keys()];
|
|
87
|
+
|
|
88
|
+
for (const name of parameterNames) {
|
|
89
|
+
if (name.toLowerCase() === 'api-key') {
|
|
90
|
+
hasApiKey = true;
|
|
91
|
+
url.searchParams.delete(name);
|
|
92
|
+
} else if (name.toLowerCase() === 'authorization') {
|
|
93
|
+
hasAuthorization = true;
|
|
94
|
+
url.searchParams.delete(name);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (hasApiKey) {
|
|
27
99
|
url.searchParams.set('api-key', '<REDACTED>');
|
|
28
100
|
}
|
|
29
101
|
if (hasAuthorization) {
|
|
@@ -31,6 +103,45 @@ function redactAzureCredentials(url: URL): void {
|
|
|
31
103
|
}
|
|
32
104
|
}
|
|
33
105
|
|
|
106
|
+
/** Opens an Azure native socket with header authentication and a credential-free URL. */
|
|
107
|
+
function createAzureWebSocket(
|
|
108
|
+
url: URL,
|
|
109
|
+
apiKey: string | null,
|
|
110
|
+
isBearerToken: boolean,
|
|
111
|
+
protocols: string[],
|
|
112
|
+
): _WebSocket {
|
|
113
|
+
if (!supportsWebSocketRequestHeaders()) {
|
|
114
|
+
throw new OpenAIError(
|
|
115
|
+
'Azure OpenAI Realtime credentials require a WebSocket transport that supports request headers; use openai/realtime/ws or a server-side authentication proxy.',
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
if (!apiKey) {
|
|
119
|
+
throw new Error('Azure OpenAI Realtime requires an API key');
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
redactAzureCredentials(url, isBearerToken);
|
|
123
|
+
const socketURL = new URL(url);
|
|
124
|
+
socketURL.searchParams.delete('api-key');
|
|
125
|
+
socketURL.searchParams.delete('Authorization');
|
|
126
|
+
const headers = isBearerToken ? { Authorization: `Bearer ${apiKey}` } : { 'api-key': apiKey };
|
|
127
|
+
|
|
128
|
+
// @ts-ignore
|
|
129
|
+
return new WebSocket(socketURL.toString(), { protocols, headers });
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** Prevents credentials from being attached outside the configured secure origin. */
|
|
133
|
+
function assertTrustedRealtimeURL(client: Pick<OpenAI, 'apiKey' | 'baseURL'>, url: URL): void {
|
|
134
|
+
if (url.protocol !== 'wss:') {
|
|
135
|
+
throw new OpenAIError('Realtime WebSocket URLs must use the wss: protocol.');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const configuredURL = new URL(client.baseURL);
|
|
139
|
+
configuredURL.protocol = 'wss:';
|
|
140
|
+
if (url.origin !== configuredURL.origin) {
|
|
141
|
+
throw new OpenAIError('Realtime WebSocket URL origin must match the configured client origin.');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
34
145
|
/**
|
|
35
146
|
* Connects to the beta Realtime API using the runtime's native `WebSocket` implementation.
|
|
36
147
|
*
|
|
@@ -39,13 +150,6 @@ function redactAzureCredentials(url: URL): void {
|
|
|
39
150
|
* listener before using the connection. Use the stable Realtime helper for
|
|
40
151
|
* Azure sideband calls.
|
|
41
152
|
*/
|
|
42
|
-
function resolveRealtimeURL(
|
|
43
|
-
client: Pick<OpenAI, 'apiKey' | 'baseURL'>,
|
|
44
|
-
props: RealtimeConnectionConfig & { __url?: URL | undefined },
|
|
45
|
-
): URL {
|
|
46
|
-
return props.__url ?? buildRealtimeURL(client, props);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
153
|
export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
|
|
50
154
|
/** Secure beta Realtime WebSocket URL; Azure authentication query parameters are redacted. */
|
|
51
155
|
url: URL;
|
|
@@ -77,9 +181,6 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
|
|
|
77
181
|
onURL?: (url: URL) => void;
|
|
78
182
|
/** Indicates the token was resolved by the factory just before connecting. @internal */
|
|
79
183
|
__resolvedApiKey?: boolean;
|
|
80
|
-
|
|
81
|
-
/** Final URL validated before an asynchronous credential provider ran. @internal */
|
|
82
|
-
__url?: URL;
|
|
83
184
|
},
|
|
84
185
|
client?: Pick<OpenAI, 'apiKey' | 'baseURL'>,
|
|
85
186
|
) {
|
|
@@ -89,7 +190,7 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
|
|
|
89
190
|
props.dangerouslyAllowBrowser ??
|
|
90
191
|
(client as any)?._options?.dangerouslyAllowBrowser ??
|
|
91
192
|
(client?.apiKey?.startsWith('ek_') ? true : null);
|
|
92
|
-
if (!dangerouslyAllowBrowser &&
|
|
193
|
+
if (!dangerouslyAllowBrowser && isRunningInBrowserOrBrowserWorker()) {
|
|
93
194
|
throw new OpenAIError(
|
|
94
195
|
"It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\n\nYou can avoid this error by creating an ephemeral session token:\nhttps://platform.openai.com/docs/api-reference/realtime-sessions\n",
|
|
95
196
|
);
|
|
@@ -106,21 +207,38 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
|
|
|
106
207
|
);
|
|
107
208
|
}
|
|
108
209
|
|
|
109
|
-
this.url =
|
|
210
|
+
this.url = buildRealtimeURL(client, props);
|
|
110
211
|
props.onURL?.(this.url);
|
|
212
|
+
assertTrustedRealtimeURL(client, this.url);
|
|
111
213
|
assertBedrockWebSocketOrigin(client, this.url);
|
|
112
214
|
|
|
113
|
-
|
|
114
|
-
|
|
215
|
+
const azure = isAzure(client);
|
|
216
|
+
const protocols = [
|
|
115
217
|
'realtime',
|
|
116
|
-
...(
|
|
218
|
+
...(azure ? [] : [`openai-insecure-api-key.${client.apiKey}`]),
|
|
117
219
|
'openai-beta.realtime-v1',
|
|
118
|
-
]
|
|
220
|
+
];
|
|
221
|
+
|
|
222
|
+
this.socket = azure
|
|
223
|
+
? createAzureWebSocket(this.url, client.apiKey, props.__resolvedApiKey === true, protocols)
|
|
224
|
+
: new WebSocket(this.url.toString(), protocols);
|
|
119
225
|
|
|
120
226
|
this.socket.addEventListener('message', (websocketEvent: MessageEvent) => {
|
|
121
227
|
const event = (() => {
|
|
122
228
|
try {
|
|
123
|
-
|
|
229
|
+
const parsedEvent = parseRealtimeEvent(websocketEvent.data.toString());
|
|
230
|
+
|
|
231
|
+
if (
|
|
232
|
+
typeof parsedEvent !== 'object' ||
|
|
233
|
+
parsedEvent === null ||
|
|
234
|
+
Array.isArray(parsedEvent) ||
|
|
235
|
+
!Object.getOwnPropertyDescriptor(parsedEvent, 'type') ||
|
|
236
|
+
typeof parsedEvent.type !== 'string'
|
|
237
|
+
) {
|
|
238
|
+
throw new TypeError('Realtime WebSocket event must be an object with a string type.');
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return parsedEvent;
|
|
124
242
|
} catch (err) {
|
|
125
243
|
this._onError(null, 'could not parse websocket event', err);
|
|
126
244
|
return null;
|
|
@@ -142,10 +260,6 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
|
|
|
142
260
|
this.socket.addEventListener('error', (event: any) => {
|
|
143
261
|
this._onError(null, event.message, null);
|
|
144
262
|
});
|
|
145
|
-
|
|
146
|
-
if (isAzure(client)) {
|
|
147
|
-
redactAzureCredentials(this.url);
|
|
148
|
-
}
|
|
149
263
|
}
|
|
150
264
|
|
|
151
265
|
/**
|
|
@@ -164,17 +278,20 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
|
|
|
164
278
|
},
|
|
165
279
|
): Promise<OpenAIRealtimeWebSocket> {
|
|
166
280
|
const url = buildRealtimeURL(client, props);
|
|
281
|
+
assertTrustedRealtimeURL(client, url);
|
|
167
282
|
assertBedrockWebSocketOrigin(client, url);
|
|
168
283
|
const resolvedApiKey = await client._callApiKey();
|
|
169
|
-
|
|
284
|
+
assertTrustedRealtimeURL(client, url);
|
|
285
|
+
assertBedrockWebSocketOrigin(client, url);
|
|
286
|
+
return new OpenAIRealtimeWebSocket({ ...props, __resolvedApiKey: resolvedApiKey }, client);
|
|
170
287
|
}
|
|
171
288
|
|
|
172
289
|
/**
|
|
173
290
|
* Opens a native beta Azure OpenAI Realtime session for a model deployment.
|
|
174
291
|
*
|
|
175
|
-
* Azure credentials are
|
|
176
|
-
*
|
|
177
|
-
*
|
|
292
|
+
* Azure credentials are sent in WebSocket handshake headers and never appear
|
|
293
|
+
* in the native socket URL. Browser WebSockets cannot set these headers;
|
|
294
|
+
* use a server-side authentication proxy or the Node.js `ws` transport.
|
|
178
295
|
*
|
|
179
296
|
* @param client Azure OpenAI client that supplies the endpoint and credential.
|
|
180
297
|
* @param options Optional deployment override and browser-safety settings.
|
|
@@ -195,14 +312,6 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
|
|
|
195
312
|
if (!apiKey) {
|
|
196
313
|
throw new Error('Azure OpenAI Realtime requires an API key');
|
|
197
314
|
}
|
|
198
|
-
const azureApiKey = apiKey;
|
|
199
|
-
function onURL(url: URL) {
|
|
200
|
-
if (isApiKeyProvider) {
|
|
201
|
-
url.searchParams.set('Authorization', `Bearer ${azureApiKey}`);
|
|
202
|
-
} else {
|
|
203
|
-
url.searchParams.set('api-key', azureApiKey);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
315
|
const deploymentName = options.deploymentName ?? client.deploymentName;
|
|
207
316
|
if (!deploymentName) {
|
|
208
317
|
throw new Error('No deployment name provided');
|
|
@@ -211,7 +320,6 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
|
|
|
211
320
|
return new OpenAIRealtimeWebSocket(
|
|
212
321
|
{
|
|
213
322
|
model: deploymentName,
|
|
214
|
-
onURL,
|
|
215
323
|
...(dangerouslyAllowBrowser === undefined ? {} : { dangerouslyAllowBrowser }),
|
|
216
324
|
__resolvedApiKey: isApiKeyProvider,
|
|
217
325
|
},
|
package/src/beta/realtime/ws.ts
CHANGED
|
@@ -3,8 +3,8 @@ import { assertBedrockWebSocketOrigin } from '../../internal/bedrock';
|
|
|
3
3
|
import { protectWebSocketOptionsFromCredentialRedirects } from '../../internal/ws';
|
|
4
4
|
import type { AzureOpenAI } from '../../index';
|
|
5
5
|
import { OpenAI } from '../../index';
|
|
6
|
-
import type { RealtimeClientEvent
|
|
7
|
-
import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure } from './internal-base';
|
|
6
|
+
import type { RealtimeClientEvent } from '../../resources/beta/realtime/realtime';
|
|
7
|
+
import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure, parseRealtimeEvent } from './internal-base';
|
|
8
8
|
import type { RealtimeConnectionConfig } from './internal-base';
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -14,11 +14,16 @@ import type { RealtimeConnectionConfig } from './internal-base';
|
|
|
14
14
|
* Register an SDK `error` listener and wait for `socket`'s `open` event before
|
|
15
15
|
* sending client events. Use the stable Realtime helper for Azure sideband calls.
|
|
16
16
|
*/
|
|
17
|
-
function
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
function assertTrustedRealtimeURL(client: Pick<OpenAI, 'apiKey' | 'baseURL'>, url: URL): void {
|
|
18
|
+
if (url.protocol !== 'wss:') {
|
|
19
|
+
throw new Error('Realtime WebSocket URLs must use the wss: protocol.');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const configuredURL = new URL(client.baseURL);
|
|
23
|
+
configuredURL.protocol = 'wss:';
|
|
24
|
+
if (url.origin !== configuredURL.origin) {
|
|
25
|
+
throw new Error('Realtime WebSocket URL origin must match the configured client origin.');
|
|
26
|
+
}
|
|
22
27
|
}
|
|
23
28
|
|
|
24
29
|
export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
|
|
@@ -45,9 +50,6 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
|
|
|
45
50
|
|
|
46
51
|
/** Indicates that a function-based credential was resolved by an async factory. @internal */
|
|
47
52
|
__resolvedApiKey?: boolean;
|
|
48
|
-
|
|
49
|
-
/** Final URL validated before an asynchronous credential provider ran. @internal */
|
|
50
|
-
__url?: URL;
|
|
51
53
|
},
|
|
52
54
|
client?: Pick<OpenAI, 'apiKey' | 'baseURL'>,
|
|
53
55
|
) {
|
|
@@ -62,7 +64,8 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
|
|
|
62
64
|
].join('\n'),
|
|
63
65
|
);
|
|
64
66
|
}
|
|
65
|
-
this.url =
|
|
67
|
+
this.url = buildRealtimeURL(client, props);
|
|
68
|
+
assertTrustedRealtimeURL(client, this.url);
|
|
66
69
|
assertBedrockWebSocketOrigin(client, this.url);
|
|
67
70
|
const headers = {
|
|
68
71
|
...props.options?.headers,
|
|
@@ -81,7 +84,19 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
|
|
|
81
84
|
this.socket.on('message', (wsEvent) => {
|
|
82
85
|
const event = (() => {
|
|
83
86
|
try {
|
|
84
|
-
|
|
87
|
+
const parsedEvent = parseRealtimeEvent(wsEvent.toString());
|
|
88
|
+
|
|
89
|
+
if (
|
|
90
|
+
typeof parsedEvent !== 'object' ||
|
|
91
|
+
parsedEvent === null ||
|
|
92
|
+
Array.isArray(parsedEvent) ||
|
|
93
|
+
!Object.getOwnPropertyDescriptor(parsedEvent, 'type') ||
|
|
94
|
+
typeof parsedEvent.type !== 'string'
|
|
95
|
+
) {
|
|
96
|
+
throw new TypeError('Realtime WebSocket event must be an object with a string type.');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return parsedEvent;
|
|
85
100
|
} catch (err) {
|
|
86
101
|
this._onError(null, 'could not parse websocket event', err);
|
|
87
102
|
return null;
|
|
@@ -121,9 +136,12 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
|
|
|
121
136
|
},
|
|
122
137
|
): Promise<OpenAIRealtimeWS> {
|
|
123
138
|
const url = buildRealtimeURL(client, props);
|
|
139
|
+
assertTrustedRealtimeURL(client, url);
|
|
124
140
|
assertBedrockWebSocketOrigin(client, url);
|
|
125
141
|
const resolvedApiKey = await client._callApiKey();
|
|
126
|
-
|
|
142
|
+
assertTrustedRealtimeURL(client, url);
|
|
143
|
+
assertBedrockWebSocketOrigin(client, url);
|
|
144
|
+
return new OpenAIRealtimeWS({ ...props, __resolvedApiKey: resolvedApiKey }, client);
|
|
127
145
|
}
|
|
128
146
|
|
|
129
147
|
/**
|