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
package/lib/EventStream.mjs
CHANGED
|
@@ -1,6 +1,340 @@
|
|
|
1
|
-
var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_abortListeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_removeAbortListeners, _EventStream_handleError;
|
|
1
|
+
var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_abortListeners, _EventStream_emittedListenerRegistrations, _EventStream_pendingListenerCleanup, _EventStream_pendingBufferedEventChecks, _EventStream_listenerDispatchDepth, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_removeAbortListeners, _EventStream_onceForEmitted, _EventStream_removeEmittedListener, _EventStream_cleanupEmittedListeners, _EventStream_handleError;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "../internal/tslib.mjs";
|
|
3
|
-
import { APIUserAbortError, OpenAIError } from "../error.mjs";
|
|
3
|
+
import { APIConnectionError, APIConnectionTimeoutError, APIError, APIUserAbortError, AuthenticationError, BadRequestError, ConflictError, ContentFilterFinishReasonError, InternalServerError, InvalidWebhookSignatureError, LengthFinishReasonError, NotFoundError, OAuthError, OpenAIError, PermissionDeniedError, RateLimitError, SubjectTokenProviderError, UnprocessableEntityError, } from "../error.mjs";
|
|
4
|
+
const MAX_BUFFERED_ITERATOR_EVENTS = 4096;
|
|
5
|
+
const MAX_BUFFERED_ITERATOR_BYTES = 8 * 1024 * 1024;
|
|
6
|
+
// Typed-array own-key enumeration materializes every dense index before custom keys.
|
|
7
|
+
const MAX_INSPECTABLE_TYPED_ARRAY_ELEMENTS = 4096;
|
|
8
|
+
// Structured JSON may nest 128 levels before stream-event wrappers are added.
|
|
9
|
+
const MAX_BUFFERED_EVENT_DEPTH = 256;
|
|
10
|
+
const bufferedJSONStringify = JSON.stringify;
|
|
11
|
+
const bufferedJSONParse = JSON.parse;
|
|
12
|
+
const sdkOwnedBufferedEventArguments = new WeakSet();
|
|
13
|
+
const typedArrayBufferGetter = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype), 'buffer')?.get;
|
|
14
|
+
const typedArrayLengthGetter = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype), 'length')?.get;
|
|
15
|
+
const dataViewBufferGetter = Object.getOwnPropertyDescriptor(DataView.prototype, 'buffer')?.get;
|
|
16
|
+
const symbolDescriptionGetter = Object.getOwnPropertyDescriptor(Symbol.prototype, 'description')?.get;
|
|
17
|
+
const dateTimestampGetter = Date.prototype.getTime;
|
|
18
|
+
const arrayBufferByteLengthGetter = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'byteLength')?.get;
|
|
19
|
+
const sharedArrayBufferByteLengthGetter = typeof SharedArrayBuffer === 'function'
|
|
20
|
+
? Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype, 'byteLength')?.get
|
|
21
|
+
: undefined;
|
|
22
|
+
// V8 uses the same trusted lazy-stack accessor pair for native Error instances.
|
|
23
|
+
const errorStackDescriptor = Object.getOwnPropertyDescriptor(new Error('native stack descriptor'), 'stack');
|
|
24
|
+
const functionToString = Function.prototype.toString;
|
|
25
|
+
const objectToString = Object.prototype.toString;
|
|
26
|
+
const errorBrandDescriptor = Object.getOwnPropertyDescriptor(Error, 'isError');
|
|
27
|
+
const nativeErrorBrand = errorBrandDescriptor && 'value' in errorBrandDescriptor && typeof errorBrandDescriptor.value === 'function'
|
|
28
|
+
? errorBrandDescriptor.value
|
|
29
|
+
: undefined;
|
|
30
|
+
const nativeErrorConstructorSource = functionToString.call(Error);
|
|
31
|
+
const nativeDateConstructorSource = functionToString.call(Date);
|
|
32
|
+
const nativeFunctionConstructorSource = functionToString.call(Function);
|
|
33
|
+
const trustedIntrinsicPrototypes = new Set([
|
|
34
|
+
APIConnectionError.prototype,
|
|
35
|
+
APIConnectionTimeoutError.prototype,
|
|
36
|
+
APIError.prototype,
|
|
37
|
+
OpenAIError.prototype,
|
|
38
|
+
APIUserAbortError.prototype,
|
|
39
|
+
AuthenticationError.prototype,
|
|
40
|
+
BadRequestError.prototype,
|
|
41
|
+
ConflictError.prototype,
|
|
42
|
+
ContentFilterFinishReasonError.prototype,
|
|
43
|
+
InternalServerError.prototype,
|
|
44
|
+
InvalidWebhookSignatureError.prototype,
|
|
45
|
+
LengthFinishReasonError.prototype,
|
|
46
|
+
NotFoundError.prototype,
|
|
47
|
+
OAuthError.prototype,
|
|
48
|
+
PermissionDeniedError.prototype,
|
|
49
|
+
RateLimitError.prototype,
|
|
50
|
+
SubjectTokenProviderError.prototype,
|
|
51
|
+
UnprocessableEntityError.prototype,
|
|
52
|
+
]);
|
|
53
|
+
const trustedNativeConstructorSources = new Set();
|
|
54
|
+
const canonicalIntrinsicDescriptors = new Map();
|
|
55
|
+
const foreignErrorStackDescriptors = new WeakMap();
|
|
56
|
+
function captureNativeProxyDetector() {
|
|
57
|
+
if (typeof process === 'undefined') {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const loader = Object.getOwnPropertyDescriptor(process, 'getBuiltinModule');
|
|
62
|
+
if (!loader || !('value' in loader) || typeof loader.value !== 'function') {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
const util = Reflect.apply(loader.value, process, ['node:util']);
|
|
66
|
+
if (typeof util !== 'object' || util === null) {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
const types = Object.getOwnPropertyDescriptor(util, 'types');
|
|
70
|
+
if (!types || !('value' in types) || typeof types.value !== 'object' || types.value === null) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const detector = Object.getOwnPropertyDescriptor(types.value, 'isProxy');
|
|
74
|
+
if (!detector || !('value' in detector) || typeof detector.value !== 'function') {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
return detector.value;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Transparent proxies have no portable ECMAScript brand. Newer Node runtimes
|
|
84
|
+
// expose one without adding a Node-only import to browser-compatible bundles.
|
|
85
|
+
const nativeProxyDetector = captureNativeProxyDetector();
|
|
86
|
+
function rememberTrustedIntrinsic(constructor) {
|
|
87
|
+
if (typeof constructor !== 'function') {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const prototypeDescriptor = Object.getOwnPropertyDescriptor(constructor, 'prototype');
|
|
91
|
+
if (!prototypeDescriptor ||
|
|
92
|
+
!('value' in prototypeDescriptor) ||
|
|
93
|
+
(typeof prototypeDescriptor.value !== 'object' && typeof prototypeDescriptor.value !== 'function')) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
trustedIntrinsicPrototypes.add(prototypeDescriptor.value);
|
|
97
|
+
const source = functionToString.call(constructor);
|
|
98
|
+
if (/^function [A-Za-z_$][\w$]*\(\) \{ \[native code\] \}$/u.test(source) &&
|
|
99
|
+
prototypeDescriptor.configurable === false &&
|
|
100
|
+
prototypeDescriptor.writable === false) {
|
|
101
|
+
trustedNativeConstructorSources.add(source);
|
|
102
|
+
const descriptors = new Map();
|
|
103
|
+
for (const key of Reflect.ownKeys(prototypeDescriptor.value)) {
|
|
104
|
+
const descriptor = Object.getOwnPropertyDescriptor(prototypeDescriptor.value, key);
|
|
105
|
+
if (descriptor) {
|
|
106
|
+
descriptors.set(key, descriptor);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
canonicalIntrinsicDescriptors.set(source, descriptors);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
for (const constructor of [
|
|
113
|
+
Object,
|
|
114
|
+
Function,
|
|
115
|
+
Array,
|
|
116
|
+
Date,
|
|
117
|
+
Map,
|
|
118
|
+
Set,
|
|
119
|
+
ArrayBuffer,
|
|
120
|
+
DataView,
|
|
121
|
+
Error,
|
|
122
|
+
EvalError,
|
|
123
|
+
RangeError,
|
|
124
|
+
ReferenceError,
|
|
125
|
+
SyntaxError,
|
|
126
|
+
TypeError,
|
|
127
|
+
URIError,
|
|
128
|
+
Uint8Array,
|
|
129
|
+
Uint8ClampedArray,
|
|
130
|
+
Uint16Array,
|
|
131
|
+
Uint32Array,
|
|
132
|
+
Int8Array,
|
|
133
|
+
Int16Array,
|
|
134
|
+
Int32Array,
|
|
135
|
+
Float32Array,
|
|
136
|
+
Float64Array,
|
|
137
|
+
]) {
|
|
138
|
+
rememberTrustedIntrinsic(constructor);
|
|
139
|
+
}
|
|
140
|
+
for (const name of [
|
|
141
|
+
'SharedArrayBuffer',
|
|
142
|
+
'AggregateError',
|
|
143
|
+
'Float16Array',
|
|
144
|
+
'BigInt64Array',
|
|
145
|
+
'BigUint64Array',
|
|
146
|
+
'Blob',
|
|
147
|
+
'File',
|
|
148
|
+
'Headers',
|
|
149
|
+
]) {
|
|
150
|
+
const descriptor = Object.getOwnPropertyDescriptor(globalThis, name);
|
|
151
|
+
if (descriptor && 'value' in descriptor) {
|
|
152
|
+
rememberTrustedIntrinsic(descriptor.value);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const typedArrayConstructorDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype), 'constructor');
|
|
156
|
+
if (typedArrayConstructorDescriptor && 'value' in typedArrayConstructorDescriptor) {
|
|
157
|
+
rememberTrustedIntrinsic(typedArrayConstructorDescriptor.value);
|
|
158
|
+
}
|
|
159
|
+
if (typeof Buffer === 'function') {
|
|
160
|
+
rememberTrustedIntrinsic(Buffer);
|
|
161
|
+
}
|
|
162
|
+
const blobInternalHandlePrototype = (() => {
|
|
163
|
+
if (typeof Blob !== 'function') {
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
const blob = new Blob([]);
|
|
168
|
+
for (const key of Object.getOwnPropertySymbols(blob)) {
|
|
169
|
+
const descriptor = Object.getOwnPropertyDescriptor(blob, key);
|
|
170
|
+
if (descriptor && 'value' in descriptor && typeof descriptor.value === 'object' && descriptor.value) {
|
|
171
|
+
return Object.getPrototypeOf(descriptor.value);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
return undefined;
|
|
179
|
+
})();
|
|
180
|
+
const mapEntries = Map.prototype.entries;
|
|
181
|
+
const setValues = Set.prototype.values;
|
|
182
|
+
const headersEntriesDescriptor = typeof Headers === 'function' ? Object.getOwnPropertyDescriptor(Headers.prototype, 'entries') : undefined;
|
|
183
|
+
const headersEntries = headersEntriesDescriptor &&
|
|
184
|
+
'value' in headersEntriesDescriptor &&
|
|
185
|
+
typeof headersEntriesDescriptor.value === 'function'
|
|
186
|
+
? headersEntriesDescriptor.value
|
|
187
|
+
: undefined;
|
|
188
|
+
const retainedStorageBrands = new Set([
|
|
189
|
+
'ArrayBuffer',
|
|
190
|
+
'SharedArrayBuffer',
|
|
191
|
+
'Blob',
|
|
192
|
+
'File',
|
|
193
|
+
'Map',
|
|
194
|
+
'Date',
|
|
195
|
+
'Set',
|
|
196
|
+
'Headers',
|
|
197
|
+
]);
|
|
198
|
+
function getTrustedForeignIntrinsic(prototype) {
|
|
199
|
+
const descriptor = Object.getOwnPropertyDescriptor(prototype, 'constructor');
|
|
200
|
+
if (!descriptor || !('value' in descriptor) || typeof descriptor.value !== 'function') {
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
const constructor = descriptor.value;
|
|
204
|
+
const source = functionToString.call(constructor);
|
|
205
|
+
const descriptors = canonicalIntrinsicDescriptors.get(source);
|
|
206
|
+
if (!trustedNativeConstructorSources.has(source) || !descriptors) {
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
const constructorPrototype = Object.getOwnPropertyDescriptor(constructor, 'prototype');
|
|
210
|
+
if (!constructorPrototype ||
|
|
211
|
+
!('value' in constructorPrototype) ||
|
|
212
|
+
constructorPrototype.value !== prototype ||
|
|
213
|
+
constructorPrototype.configurable !== false ||
|
|
214
|
+
constructorPrototype.writable !== false) {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
return { constructor, descriptors, functionPrototype: Object.getPrototypeOf(constructor) };
|
|
218
|
+
}
|
|
219
|
+
function isTrustedIntrinsicPrototype(prototype) {
|
|
220
|
+
return trustedIntrinsicPrototypes.has(prototype) || getTrustedForeignIntrinsic(prototype) !== undefined;
|
|
221
|
+
}
|
|
222
|
+
function isCanonicalIntrinsicFunction(value, canonical, functionPrototype) {
|
|
223
|
+
if (canonical === undefined) {
|
|
224
|
+
return value === undefined;
|
|
225
|
+
}
|
|
226
|
+
if (typeof value !== 'function' || typeof canonical !== 'function') {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
const source = functionToString.call(canonical);
|
|
230
|
+
if (functionToString.call(value) !== source) {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
const actualFunctionPrototype = Object.getPrototypeOf(value);
|
|
234
|
+
if (actualFunctionPrototype === functionPrototype) {
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
if (!/^function [A-Za-z_$][\w$]*\(\) \{ \[native code\] \}$/u.test(source)) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
const intrinsic = getTrustedForeignIntrinsic(actualFunctionPrototype);
|
|
241
|
+
return (intrinsic !== undefined &&
|
|
242
|
+
functionToString.call(intrinsic.constructor) === nativeFunctionConstructorSource);
|
|
243
|
+
}
|
|
244
|
+
function isCanonicalIntrinsicDescriptor(descriptor, canonical, functionPrototype) {
|
|
245
|
+
if (!canonical ||
|
|
246
|
+
descriptor.configurable !== canonical.configurable ||
|
|
247
|
+
descriptor.enumerable !== canonical.enumerable ||
|
|
248
|
+
'value' in descriptor !== 'value' in canonical) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
if ('value' in descriptor && 'value' in canonical) {
|
|
252
|
+
if (descriptor.writable !== canonical.writable) {
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
if (typeof canonical.value === 'function') {
|
|
256
|
+
return isCanonicalIntrinsicFunction(descriptor.value, canonical.value, functionPrototype);
|
|
257
|
+
}
|
|
258
|
+
if (canonical.value !== null && typeof canonical.value === 'object') {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
return Object.is(descriptor.value, canonical.value);
|
|
262
|
+
}
|
|
263
|
+
return (isCanonicalIntrinsicFunction(descriptor.get, canonical.get, functionPrototype) &&
|
|
264
|
+
isCanonicalIntrinsicFunction(descriptor.set, canonical.set, functionPrototype));
|
|
265
|
+
}
|
|
266
|
+
function hasNativeErrorBrand(current) {
|
|
267
|
+
if (nativeErrorBrand) {
|
|
268
|
+
return nativeErrorBrand.call(Error, current);
|
|
269
|
+
}
|
|
270
|
+
let prototype = current;
|
|
271
|
+
for (let depth = 0; prototype !== null && depth < MAX_BUFFERED_EVENT_DEPTH; depth += 1) {
|
|
272
|
+
if (Object.getOwnPropertyDescriptor(prototype, Symbol.toStringTag)) {
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
prototype = Object.getPrototypeOf(prototype);
|
|
276
|
+
}
|
|
277
|
+
return prototype === null && objectToString.call(current) === '[object Error]';
|
|
278
|
+
}
|
|
279
|
+
function getVerifiedForeignErrorConstructor(current, stackDescriptor) {
|
|
280
|
+
if (typeof stackDescriptor.get !== 'function' || typeof stackDescriptor.set !== 'function') {
|
|
281
|
+
return undefined;
|
|
282
|
+
}
|
|
283
|
+
let prototype = Object.getPrototypeOf(current);
|
|
284
|
+
for (let depth = 0; prototype !== null && depth < MAX_BUFFERED_EVENT_DEPTH; depth += 1) {
|
|
285
|
+
const descriptor = Object.getOwnPropertyDescriptor(prototype, 'constructor');
|
|
286
|
+
if (descriptor && 'value' in descriptor && typeof descriptor.value === 'function') {
|
|
287
|
+
const constructor = descriptor.value;
|
|
288
|
+
if (functionToString.call(constructor) === nativeErrorConstructorSource &&
|
|
289
|
+
isTrustedIntrinsicPrototype(prototype)) {
|
|
290
|
+
const functionPrototype = Object.getPrototypeOf(constructor);
|
|
291
|
+
if (Object.getPrototypeOf(stackDescriptor.get) === functionPrototype &&
|
|
292
|
+
Object.getPrototypeOf(stackDescriptor.set) === functionPrototype) {
|
|
293
|
+
return { constructor, prototype };
|
|
294
|
+
}
|
|
295
|
+
return undefined;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
prototype = Object.getPrototypeOf(prototype);
|
|
299
|
+
}
|
|
300
|
+
return undefined;
|
|
301
|
+
}
|
|
302
|
+
function isTrustedNativeErrorStack(current, descriptor) {
|
|
303
|
+
if (!hasNativeErrorBrand(current)) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
if (errorStackDescriptor &&
|
|
307
|
+
!('value' in errorStackDescriptor) &&
|
|
308
|
+
typeof errorStackDescriptor.get === 'function' &&
|
|
309
|
+
Object.prototype.isPrototypeOf.call(Error.prototype, current) &&
|
|
310
|
+
descriptor.get === errorStackDescriptor.get &&
|
|
311
|
+
descriptor.set === errorStackDescriptor.set) {
|
|
312
|
+
return true;
|
|
313
|
+
}
|
|
314
|
+
const verified = getVerifiedForeignErrorConstructor(current, descriptor);
|
|
315
|
+
if (!verified) {
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
let canonicalDescriptor = foreignErrorStackDescriptors.get(verified.prototype);
|
|
319
|
+
if (!canonicalDescriptor) {
|
|
320
|
+
const canonical = Reflect.construct(verified.constructor, []);
|
|
321
|
+
if (typeof canonical !== 'object' ||
|
|
322
|
+
canonical === null ||
|
|
323
|
+
!hasNativeErrorBrand(canonical) ||
|
|
324
|
+
Object.getPrototypeOf(canonical) !== verified.prototype) {
|
|
325
|
+
return false;
|
|
326
|
+
}
|
|
327
|
+
canonicalDescriptor = Object.getOwnPropertyDescriptor(canonical, 'stack');
|
|
328
|
+
if (!canonicalDescriptor ||
|
|
329
|
+
'value' in canonicalDescriptor ||
|
|
330
|
+
typeof canonicalDescriptor.get !== 'function' ||
|
|
331
|
+
typeof canonicalDescriptor.set !== 'function') {
|
|
332
|
+
return false;
|
|
333
|
+
}
|
|
334
|
+
foreignErrorStackDescriptors.set(verified.prototype, canonicalDescriptor);
|
|
335
|
+
}
|
|
336
|
+
return descriptor.get === canonicalDescriptor.get && descriptor.set === canonicalDescriptor.set;
|
|
337
|
+
}
|
|
4
338
|
function createEventQueue() {
|
|
5
339
|
let entries = [];
|
|
6
340
|
let head = 0;
|
|
@@ -34,6 +368,605 @@ function createEventQueue() {
|
|
|
34
368
|
},
|
|
35
369
|
};
|
|
36
370
|
}
|
|
371
|
+
function getRetainedStorageBrand(current) {
|
|
372
|
+
let prototype = Object.getPrototypeOf(current);
|
|
373
|
+
for (let depth = 0; prototype !== null && depth < MAX_BUFFERED_EVENT_DEPTH; depth += 1) {
|
|
374
|
+
if (prototype === Date.prototype) {
|
|
375
|
+
return 'Date';
|
|
376
|
+
}
|
|
377
|
+
if (!trustedIntrinsicPrototypes.has(prototype)) {
|
|
378
|
+
const constructor = Object.getOwnPropertyDescriptor(prototype, 'constructor');
|
|
379
|
+
if (constructor &&
|
|
380
|
+
'value' in constructor &&
|
|
381
|
+
typeof constructor.value === 'function' &&
|
|
382
|
+
functionToString.call(constructor.value) === nativeDateConstructorSource &&
|
|
383
|
+
getTrustedForeignIntrinsic(prototype)) {
|
|
384
|
+
return 'Date';
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
const descriptor = Object.getOwnPropertyDescriptor(prototype, Symbol.toStringTag);
|
|
388
|
+
if (descriptor &&
|
|
389
|
+
'value' in descriptor &&
|
|
390
|
+
typeof descriptor.value === 'string' &&
|
|
391
|
+
retainedStorageBrands.has(descriptor.value)) {
|
|
392
|
+
return descriptor.value;
|
|
393
|
+
}
|
|
394
|
+
prototype = Object.getPrototypeOf(prototype);
|
|
395
|
+
}
|
|
396
|
+
return undefined;
|
|
397
|
+
}
|
|
398
|
+
function estimateRetainedBufferBytes(current, visit, depth) {
|
|
399
|
+
if (ArrayBuffer.isView(current)) {
|
|
400
|
+
let buffer;
|
|
401
|
+
let kind = 'typed-array';
|
|
402
|
+
try {
|
|
403
|
+
buffer = typedArrayBufferGetter?.call(current);
|
|
404
|
+
}
|
|
405
|
+
catch {
|
|
406
|
+
kind = 'data-view';
|
|
407
|
+
buffer = dataViewBufferGetter?.call(current);
|
|
408
|
+
}
|
|
409
|
+
if (typeof buffer !== 'object' || buffer === null) {
|
|
410
|
+
return { bytes: Number.POSITIVE_INFINITY, kind };
|
|
411
|
+
}
|
|
412
|
+
// Even a one-byte cross-realm view retains its complete backing allocation.
|
|
413
|
+
visit(buffer, depth + 1);
|
|
414
|
+
return { bytes: 0, kind };
|
|
415
|
+
}
|
|
416
|
+
const brand = getRetainedStorageBrand(current);
|
|
417
|
+
if (!brand) {
|
|
418
|
+
return undefined;
|
|
419
|
+
}
|
|
420
|
+
let getter;
|
|
421
|
+
const kind = 'buffer';
|
|
422
|
+
switch (brand) {
|
|
423
|
+
case 'ArrayBuffer': {
|
|
424
|
+
getter = arrayBufferByteLengthGetter;
|
|
425
|
+
break;
|
|
426
|
+
}
|
|
427
|
+
case 'SharedArrayBuffer': {
|
|
428
|
+
getter = sharedArrayBufferByteLengthGetter;
|
|
429
|
+
break;
|
|
430
|
+
}
|
|
431
|
+
case 'Blob':
|
|
432
|
+
case 'File': {
|
|
433
|
+
// Blob slices can retain an arbitrarily larger native backing allocation,
|
|
434
|
+
// and neither browser nor Node exposes its extent or ownership. Detached
|
|
435
|
+
// queues must fail closed; waiting readers bypass retained-size inspection.
|
|
436
|
+
return { bytes: Number.POSITIVE_INFINITY, kind: 'blob' };
|
|
437
|
+
}
|
|
438
|
+
case 'Map': {
|
|
439
|
+
return { bytes: 0, kind: 'map' };
|
|
440
|
+
}
|
|
441
|
+
case 'Date': {
|
|
442
|
+
Reflect.apply(dateTimestampGetter, current, []);
|
|
443
|
+
return { bytes: 8, kind: 'date' };
|
|
444
|
+
}
|
|
445
|
+
case 'Set': {
|
|
446
|
+
return { bytes: 0, kind: 'set' };
|
|
447
|
+
}
|
|
448
|
+
case 'Headers': {
|
|
449
|
+
return { bytes: 0, kind: 'headers' };
|
|
450
|
+
}
|
|
451
|
+
default: {
|
|
452
|
+
return undefined;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
const bytes = getter?.call(current);
|
|
456
|
+
return {
|
|
457
|
+
bytes: typeof bytes === 'number' && Number.isSafeInteger(bytes) && bytes >= 0
|
|
458
|
+
? bytes
|
|
459
|
+
: Number.POSITIVE_INFINITY,
|
|
460
|
+
kind,
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
function visitHiddenEventValues(current, kind, visit) {
|
|
464
|
+
if (kind === 'map') {
|
|
465
|
+
for (const [key, entry] of mapEntries.call(current)) {
|
|
466
|
+
if (!visit(key, 8) || !visit(entry, 8)) {
|
|
467
|
+
return false;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
if (kind === 'set') {
|
|
472
|
+
for (const entry of setValues.call(current)) {
|
|
473
|
+
if (!visit(entry, 8)) {
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
if (kind === 'headers') {
|
|
479
|
+
if (!headersEntries) {
|
|
480
|
+
return false;
|
|
481
|
+
}
|
|
482
|
+
for (const [name, value] of headersEntries.call(current)) {
|
|
483
|
+
if (!visit(name, 8) || !visit(value, 8)) {
|
|
484
|
+
return false;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
return true;
|
|
489
|
+
}
|
|
490
|
+
function getInspectableEventKeys(current, kind, availableBytes) {
|
|
491
|
+
if (Array.isArray(current)) {
|
|
492
|
+
const descriptor = Object.getOwnPropertyDescriptor(current, 'length');
|
|
493
|
+
const length = descriptor && 'value' in descriptor ? descriptor.value : undefined;
|
|
494
|
+
if (typeof length !== 'number' ||
|
|
495
|
+
!Number.isSafeInteger(length) ||
|
|
496
|
+
length < 0 ||
|
|
497
|
+
length > Math.floor(availableBytes / 16)) {
|
|
498
|
+
return undefined;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
if (kind !== 'typed-array') {
|
|
502
|
+
return Reflect.ownKeys(current);
|
|
503
|
+
}
|
|
504
|
+
const length = typedArrayLengthGetter?.call(current);
|
|
505
|
+
if (typeof length !== 'number' ||
|
|
506
|
+
!Number.isSafeInteger(length) ||
|
|
507
|
+
length < 0 ||
|
|
508
|
+
length > MAX_INSPECTABLE_TYPED_ARRAY_ELEMENTS) {
|
|
509
|
+
return undefined;
|
|
510
|
+
}
|
|
511
|
+
return Reflect.ownKeys(current).filter((key) => {
|
|
512
|
+
if (typeof key !== 'string') {
|
|
513
|
+
return true;
|
|
514
|
+
}
|
|
515
|
+
const index = Number(key);
|
|
516
|
+
return !Number.isInteger(index) || index < 0 || index >= length || String(index) !== key;
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
function visitInspectableEventProperties(current, kind, depth, availableBytes, charge, visit) {
|
|
520
|
+
const keys = getInspectableEventKeys(current, kind, availableBytes());
|
|
521
|
+
if (keys === undefined) {
|
|
522
|
+
return false;
|
|
523
|
+
}
|
|
524
|
+
for (const key of keys) {
|
|
525
|
+
if (!charge(typeof key === 'string' ? key.length * 2 + 8 : 8)) {
|
|
526
|
+
return false;
|
|
527
|
+
}
|
|
528
|
+
if (typeof key === 'symbol') {
|
|
529
|
+
visit(key, depth + 1);
|
|
530
|
+
}
|
|
531
|
+
const descriptor = Object.getOwnPropertyDescriptor(current, key);
|
|
532
|
+
if (!descriptor) {
|
|
533
|
+
return false;
|
|
534
|
+
}
|
|
535
|
+
if (!('value' in descriptor)) {
|
|
536
|
+
if (key === 'stack' && isTrustedNativeErrorStack(current, descriptor)) {
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
return false;
|
|
540
|
+
}
|
|
541
|
+
visit(descriptor.value, depth + 1, kind === 'blob');
|
|
542
|
+
}
|
|
543
|
+
return true;
|
|
544
|
+
}
|
|
545
|
+
function visitRetainedEventPrototypes(current, depth, isBlobInternalHandle, visited, availableBytes, charge, visit, retainPrototype) {
|
|
546
|
+
let prototype = Object.getPrototypeOf(current);
|
|
547
|
+
for (let prototypeDepth = depth + 1; prototype !== null; prototypeDepth += 1) {
|
|
548
|
+
if (prototypeDepth >= MAX_BUFFERED_EVENT_DEPTH) {
|
|
549
|
+
return false;
|
|
550
|
+
}
|
|
551
|
+
if (trustedIntrinsicPrototypes.has(prototype) ||
|
|
552
|
+
(isBlobInternalHandle && prototype === blobInternalHandlePrototype)) {
|
|
553
|
+
return true;
|
|
554
|
+
}
|
|
555
|
+
if (visited.has(prototype)) {
|
|
556
|
+
visit(prototype, prototypeDepth);
|
|
557
|
+
return availableBytes() >= 0;
|
|
558
|
+
}
|
|
559
|
+
visited.add(prototype);
|
|
560
|
+
const retainedPrototype = prototype;
|
|
561
|
+
const retained = retainPrototype(retainedPrototype, () => {
|
|
562
|
+
if (!charge(16)) {
|
|
563
|
+
return false;
|
|
564
|
+
}
|
|
565
|
+
const intrinsic = getTrustedForeignIntrinsic(retainedPrototype);
|
|
566
|
+
if (!intrinsic) {
|
|
567
|
+
return visitInspectableEventProperties(retainedPrototype, undefined, prototypeDepth, availableBytes, charge, visit);
|
|
568
|
+
}
|
|
569
|
+
for (const key of Reflect.ownKeys(retainedPrototype)) {
|
|
570
|
+
const descriptor = Object.getOwnPropertyDescriptor(retainedPrototype, key);
|
|
571
|
+
if (!descriptor) {
|
|
572
|
+
return false;
|
|
573
|
+
}
|
|
574
|
+
if (isCanonicalIntrinsicDescriptor(descriptor, intrinsic.descriptors.get(key), intrinsic.functionPrototype)) {
|
|
575
|
+
continue;
|
|
576
|
+
}
|
|
577
|
+
if (!charge(typeof key === 'string' ? key.length * 2 + 8 : 8) || !('value' in descriptor)) {
|
|
578
|
+
return false;
|
|
579
|
+
}
|
|
580
|
+
if (typeof key === 'symbol') {
|
|
581
|
+
visit(key, prototypeDepth + 1);
|
|
582
|
+
}
|
|
583
|
+
visit(descriptor.value, prototypeDepth + 1);
|
|
584
|
+
}
|
|
585
|
+
return availableBytes() >= 0;
|
|
586
|
+
});
|
|
587
|
+
if (!retained) {
|
|
588
|
+
return false;
|
|
589
|
+
}
|
|
590
|
+
prototype = Object.getPrototypeOf(retainedPrototype);
|
|
591
|
+
}
|
|
592
|
+
return true;
|
|
593
|
+
}
|
|
594
|
+
const BUFFERED_LEDGER_ENTRY_BYTES = 32;
|
|
595
|
+
const BUFFERED_LEDGER_NODE_BYTES = 32;
|
|
596
|
+
const BUFFERED_LEDGER_EDGE_BYTES = 8;
|
|
597
|
+
const BUFFERED_LEDGER_OWNER_BYTES = 16;
|
|
598
|
+
const MAX_BUFFERED_LEDGER_RECONCILIATION_WORK = 128 * 1024;
|
|
599
|
+
function inspectBufferedEventGraph(value, remainingBytes) {
|
|
600
|
+
let bytes = 0;
|
|
601
|
+
let scalarBytes = 0;
|
|
602
|
+
const visited = new WeakSet();
|
|
603
|
+
const visitedSymbols = new Set();
|
|
604
|
+
const roots = new Set();
|
|
605
|
+
const nodes = new Map();
|
|
606
|
+
let activeNode;
|
|
607
|
+
const availableBytes = () => remainingBytes - bytes;
|
|
608
|
+
const charge = (amount) => {
|
|
609
|
+
if (!Number.isSafeInteger(amount) || amount < 0) {
|
|
610
|
+
bytes = remainingBytes + 1;
|
|
611
|
+
return false;
|
|
612
|
+
}
|
|
613
|
+
bytes += amount;
|
|
614
|
+
if (activeNode) {
|
|
615
|
+
activeNode.bytes += amount;
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
scalarBytes += amount;
|
|
619
|
+
}
|
|
620
|
+
return bytes <= remainingBytes;
|
|
621
|
+
};
|
|
622
|
+
const addIdentity = (identity) => {
|
|
623
|
+
if (activeNode) {
|
|
624
|
+
activeNode.edges.add(identity);
|
|
625
|
+
}
|
|
626
|
+
else {
|
|
627
|
+
roots.add(identity);
|
|
628
|
+
}
|
|
629
|
+
};
|
|
630
|
+
const retainIdentity = (identity, inspect) => {
|
|
631
|
+
addIdentity(identity);
|
|
632
|
+
const node = { bytes: 0, edges: new Set() };
|
|
633
|
+
nodes.set(identity, node);
|
|
634
|
+
const previous = activeNode;
|
|
635
|
+
activeNode = node;
|
|
636
|
+
try {
|
|
637
|
+
return inspect();
|
|
638
|
+
}
|
|
639
|
+
finally {
|
|
640
|
+
activeNode = previous;
|
|
641
|
+
}
|
|
642
|
+
};
|
|
643
|
+
const visitSymbol = (current) => {
|
|
644
|
+
if (visitedSymbols.has(current)) {
|
|
645
|
+
addIdentity(current);
|
|
646
|
+
charge(8);
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
649
|
+
visitedSymbols.add(current);
|
|
650
|
+
if (!retainIdentity(current, () => {
|
|
651
|
+
if (!symbolDescriptionGetter) {
|
|
652
|
+
return false;
|
|
653
|
+
}
|
|
654
|
+
const description = Reflect.apply(symbolDescriptionGetter, current, []);
|
|
655
|
+
return charge(8 + (description?.length ?? 0) * 2);
|
|
656
|
+
})) {
|
|
657
|
+
bytes = remainingBytes + 1;
|
|
658
|
+
}
|
|
659
|
+
};
|
|
660
|
+
const visit = (current, depth, isBlobInternalHandle = false) => {
|
|
661
|
+
if (bytes > remainingBytes) {
|
|
662
|
+
return;
|
|
663
|
+
}
|
|
664
|
+
if (typeof current === 'string') {
|
|
665
|
+
charge(current.length * 2);
|
|
666
|
+
return;
|
|
667
|
+
}
|
|
668
|
+
if (typeof current === 'symbol') {
|
|
669
|
+
visitSymbol(current);
|
|
670
|
+
return;
|
|
671
|
+
}
|
|
672
|
+
if (typeof current === 'function') {
|
|
673
|
+
bytes = remainingBytes + 1;
|
|
674
|
+
return;
|
|
675
|
+
}
|
|
676
|
+
if (current === null || typeof current !== 'object') {
|
|
677
|
+
charge(8);
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
if (nativeProxyDetector?.(current)) {
|
|
681
|
+
bytes = remainingBytes + 1;
|
|
682
|
+
return;
|
|
683
|
+
}
|
|
684
|
+
if (depth >= MAX_BUFFERED_EVENT_DEPTH) {
|
|
685
|
+
bytes = remainingBytes + 1;
|
|
686
|
+
return;
|
|
687
|
+
}
|
|
688
|
+
if (visited.has(current)) {
|
|
689
|
+
addIdentity(current);
|
|
690
|
+
charge(8);
|
|
691
|
+
return;
|
|
692
|
+
}
|
|
693
|
+
visited.add(current);
|
|
694
|
+
if (!retainIdentity(current, () => {
|
|
695
|
+
if (!charge(16)) {
|
|
696
|
+
return false;
|
|
697
|
+
}
|
|
698
|
+
const retainedStorage = estimateRetainedBufferBytes(current, visit, depth);
|
|
699
|
+
if (!visitRetainedEventPrototypes(current, depth, isBlobInternalHandle, visited, availableBytes, charge, visit, retainIdentity)) {
|
|
700
|
+
return false;
|
|
701
|
+
}
|
|
702
|
+
if (retainedStorage !== undefined && !charge(retainedStorage.bytes)) {
|
|
703
|
+
return false;
|
|
704
|
+
}
|
|
705
|
+
if (!visitHiddenEventValues(current, retainedStorage?.kind, (hiddenValue, overhead) => {
|
|
706
|
+
if (!charge(overhead)) {
|
|
707
|
+
return false;
|
|
708
|
+
}
|
|
709
|
+
visit(hiddenValue, depth + 1);
|
|
710
|
+
return bytes <= remainingBytes;
|
|
711
|
+
})) {
|
|
712
|
+
return false;
|
|
713
|
+
}
|
|
714
|
+
return visitInspectableEventProperties(current, retainedStorage?.kind, depth, availableBytes, charge, visit);
|
|
715
|
+
})) {
|
|
716
|
+
bytes = remainingBytes + 1;
|
|
717
|
+
}
|
|
718
|
+
};
|
|
719
|
+
try {
|
|
720
|
+
visit(value, 0);
|
|
721
|
+
}
|
|
722
|
+
catch {
|
|
723
|
+
return undefined;
|
|
724
|
+
}
|
|
725
|
+
return bytes <= remainingBytes ? { scalarBytes, roots, nodes } : undefined;
|
|
726
|
+
}
|
|
727
|
+
function areBufferedRetainedEdgesEqual(first, second) {
|
|
728
|
+
if (first.size !== second.size) {
|
|
729
|
+
return false;
|
|
730
|
+
}
|
|
731
|
+
for (const identity of first) {
|
|
732
|
+
if (!second.has(identity)) {
|
|
733
|
+
return false;
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
return true;
|
|
737
|
+
}
|
|
738
|
+
function getBufferedLedgerNodeBytes(node, owners) {
|
|
739
|
+
return (node.bytes +
|
|
740
|
+
BUFFERED_LEDGER_NODE_BYTES +
|
|
741
|
+
node.edges.size * BUFFERED_LEDGER_EDGE_BYTES +
|
|
742
|
+
owners * BUFFERED_LEDGER_OWNER_BYTES);
|
|
743
|
+
}
|
|
744
|
+
function getBufferedLedgerEntryBytes(entry) {
|
|
745
|
+
return BUFFERED_LEDGER_ENTRY_BYTES + entry.scalarBytes + entry.roots.size * BUFFERED_LEDGER_EDGE_BYTES;
|
|
746
|
+
}
|
|
747
|
+
function collectBufferedLedgerIdentities(roots, candidate, records, work) {
|
|
748
|
+
const identities = new Set();
|
|
749
|
+
const pending = [...roots];
|
|
750
|
+
while (pending.length) {
|
|
751
|
+
work.remaining -= 1;
|
|
752
|
+
if (work.remaining < 0) {
|
|
753
|
+
return undefined;
|
|
754
|
+
}
|
|
755
|
+
const identity = pending.pop();
|
|
756
|
+
if (identities.has(identity)) {
|
|
757
|
+
continue;
|
|
758
|
+
}
|
|
759
|
+
const node = candidate.get(identity) ?? records.get(identity);
|
|
760
|
+
if (!node) {
|
|
761
|
+
return undefined;
|
|
762
|
+
}
|
|
763
|
+
identities.add(identity);
|
|
764
|
+
for (const edge of node.edges) {
|
|
765
|
+
pending.push(edge);
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
return identities;
|
|
769
|
+
}
|
|
770
|
+
function getBufferedLedgerChange(identity, graph, records, changes, node) {
|
|
771
|
+
const existing = changes.get(identity);
|
|
772
|
+
if (existing) {
|
|
773
|
+
if (node) {
|
|
774
|
+
existing.node = node;
|
|
775
|
+
}
|
|
776
|
+
return existing;
|
|
777
|
+
}
|
|
778
|
+
const current = node ?? graph.nodes.get(identity) ?? records.get(identity);
|
|
779
|
+
if (!current) {
|
|
780
|
+
return undefined;
|
|
781
|
+
}
|
|
782
|
+
const update = { node: current, ownerDelta: 0 };
|
|
783
|
+
changes.set(identity, update);
|
|
784
|
+
return update;
|
|
785
|
+
}
|
|
786
|
+
function findBufferedLedgerAffectedOwners(entry, graph, records, changes, work) {
|
|
787
|
+
const affected = new Set([entry]);
|
|
788
|
+
for (const [identity, node] of graph.nodes) {
|
|
789
|
+
work.remaining -= 1;
|
|
790
|
+
if (work.remaining < 0) {
|
|
791
|
+
return undefined;
|
|
792
|
+
}
|
|
793
|
+
const previous = records.get(identity);
|
|
794
|
+
if (!previous) {
|
|
795
|
+
continue;
|
|
796
|
+
}
|
|
797
|
+
const changedEdges = !areBufferedRetainedEdgesEqual(previous.edges, node.edges);
|
|
798
|
+
if (previous.bytes !== node.bytes || changedEdges) {
|
|
799
|
+
getBufferedLedgerChange(identity, graph, records, changes, node);
|
|
800
|
+
}
|
|
801
|
+
if (!changedEdges) {
|
|
802
|
+
continue;
|
|
803
|
+
}
|
|
804
|
+
for (const owner of previous.owners) {
|
|
805
|
+
work.remaining -= 1;
|
|
806
|
+
if (work.remaining < 0) {
|
|
807
|
+
return undefined;
|
|
808
|
+
}
|
|
809
|
+
affected.add(owner);
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
return affected;
|
|
813
|
+
}
|
|
814
|
+
function updateBufferedLedgerMembershipChanges(owner, next, graph, records, changes, work) {
|
|
815
|
+
for (const identity of owner.identities) {
|
|
816
|
+
work.remaining -= 1;
|
|
817
|
+
if (work.remaining < 0) {
|
|
818
|
+
return false;
|
|
819
|
+
}
|
|
820
|
+
if (!next.has(identity)) {
|
|
821
|
+
const update = getBufferedLedgerChange(identity, graph, records, changes);
|
|
822
|
+
if (!update) {
|
|
823
|
+
return false;
|
|
824
|
+
}
|
|
825
|
+
update.ownerDelta -= 1;
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
for (const identity of next) {
|
|
829
|
+
work.remaining -= 1;
|
|
830
|
+
if (work.remaining < 0) {
|
|
831
|
+
return false;
|
|
832
|
+
}
|
|
833
|
+
if (!owner.identities.has(identity)) {
|
|
834
|
+
const update = getBufferedLedgerChange(identity, graph, records, changes);
|
|
835
|
+
if (!update) {
|
|
836
|
+
return false;
|
|
837
|
+
}
|
|
838
|
+
update.ownerDelta += 1;
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
return true;
|
|
842
|
+
}
|
|
843
|
+
function collectBufferedLedgerMemberships(entry, graph, affected, records, changes, work) {
|
|
844
|
+
const memberships = new Map();
|
|
845
|
+
for (const owner of affected) {
|
|
846
|
+
const roots = owner === entry ? graph.roots : owner.roots;
|
|
847
|
+
const next = collectBufferedLedgerIdentities(roots, graph.nodes, records, work);
|
|
848
|
+
if (!next || !updateBufferedLedgerMembershipChanges(owner, next, graph, records, changes, work)) {
|
|
849
|
+
return undefined;
|
|
850
|
+
}
|
|
851
|
+
memberships.set(owner, next);
|
|
852
|
+
}
|
|
853
|
+
return memberships;
|
|
854
|
+
}
|
|
855
|
+
function projectBufferedLedgerBytes(currentBytes, entry, graph, isNew, changes, records) {
|
|
856
|
+
let projected = currentBytes - (isNew ? 0 : getBufferedLedgerEntryBytes(entry)) + getBufferedLedgerEntryBytes(graph);
|
|
857
|
+
for (const [identity, update] of changes) {
|
|
858
|
+
const previous = records.get(identity);
|
|
859
|
+
const owners = (previous?.owners.size ?? 0) + update.ownerDelta;
|
|
860
|
+
if (owners < 0) {
|
|
861
|
+
return undefined;
|
|
862
|
+
}
|
|
863
|
+
if (previous) {
|
|
864
|
+
projected -= getBufferedLedgerNodeBytes(previous, previous.owners.size);
|
|
865
|
+
}
|
|
866
|
+
if (owners) {
|
|
867
|
+
projected += getBufferedLedgerNodeBytes(update.node, owners);
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
return Number.isSafeInteger(projected) && projected >= 0 && projected <= MAX_BUFFERED_ITERATOR_BYTES
|
|
871
|
+
? projected
|
|
872
|
+
: undefined;
|
|
873
|
+
}
|
|
874
|
+
function applyBufferedLedgerChanges(records, changes, memberships) {
|
|
875
|
+
for (const [identity, update] of changes) {
|
|
876
|
+
const previous = records.get(identity);
|
|
877
|
+
const owners = (previous?.owners.size ?? 0) + update.ownerDelta;
|
|
878
|
+
if (!owners) {
|
|
879
|
+
continue;
|
|
880
|
+
}
|
|
881
|
+
if (previous) {
|
|
882
|
+
previous.bytes = update.node.bytes;
|
|
883
|
+
previous.edges = update.node.edges;
|
|
884
|
+
}
|
|
885
|
+
else {
|
|
886
|
+
records.set(identity, {
|
|
887
|
+
bytes: update.node.bytes,
|
|
888
|
+
edges: update.node.edges,
|
|
889
|
+
owners: new Set(),
|
|
890
|
+
});
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
for (const [owner, next] of memberships) {
|
|
894
|
+
for (const identity of owner.identities) {
|
|
895
|
+
if (!next.has(identity)) {
|
|
896
|
+
records.get(identity)?.owners.delete(owner);
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
for (const identity of next) {
|
|
900
|
+
if (!owner.identities.has(identity)) {
|
|
901
|
+
records.get(identity).owners.add(owner);
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
owner.identities = next;
|
|
905
|
+
}
|
|
906
|
+
for (const identity of changes.keys()) {
|
|
907
|
+
if (records.get(identity)?.owners.size === 0) {
|
|
908
|
+
records.delete(identity);
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
/**
|
|
913
|
+
* Account for queue-owned identities once while charging bounded ownership and
|
|
914
|
+
* edge metadata. Shared topology changes are reconciled for every queued owner.
|
|
915
|
+
*/
|
|
916
|
+
function createBufferedEventLedger() {
|
|
917
|
+
const records = new Map();
|
|
918
|
+
let bytes = 0;
|
|
919
|
+
const reconcile = (entry, graph, isNew) => {
|
|
920
|
+
const work = { remaining: MAX_BUFFERED_LEDGER_RECONCILIATION_WORK };
|
|
921
|
+
const changes = new Map();
|
|
922
|
+
const affected = findBufferedLedgerAffectedOwners(entry, graph, records, changes, work);
|
|
923
|
+
if (!affected) {
|
|
924
|
+
return false;
|
|
925
|
+
}
|
|
926
|
+
const memberships = collectBufferedLedgerMemberships(entry, graph, affected, records, changes, work);
|
|
927
|
+
if (!memberships) {
|
|
928
|
+
return false;
|
|
929
|
+
}
|
|
930
|
+
const projectedBytes = projectBufferedLedgerBytes(bytes, entry, graph, isNew, changes, records);
|
|
931
|
+
if (projectedBytes === undefined) {
|
|
932
|
+
return false;
|
|
933
|
+
}
|
|
934
|
+
applyBufferedLedgerChanges(records, changes, memberships);
|
|
935
|
+
entry.scalarBytes = graph.scalarBytes;
|
|
936
|
+
entry.roots = graph.roots;
|
|
937
|
+
bytes = projectedBytes;
|
|
938
|
+
return true;
|
|
939
|
+
};
|
|
940
|
+
const release = (entry) => {
|
|
941
|
+
bytes -= getBufferedLedgerEntryBytes(entry);
|
|
942
|
+
for (const identity of entry.identities) {
|
|
943
|
+
const record = records.get(identity);
|
|
944
|
+
if (!record?.owners.delete(entry)) {
|
|
945
|
+
continue;
|
|
946
|
+
}
|
|
947
|
+
bytes -= BUFFERED_LEDGER_OWNER_BYTES;
|
|
948
|
+
if (record.owners.size === 0) {
|
|
949
|
+
bytes -= getBufferedLedgerNodeBytes(record, 0);
|
|
950
|
+
records.delete(identity);
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
entry.identities.clear();
|
|
954
|
+
};
|
|
955
|
+
return {
|
|
956
|
+
retain(graph) {
|
|
957
|
+
const entry = { scalarBytes: 0, roots: new Set(), identities: new Set() };
|
|
958
|
+
return reconcile(entry, graph, true) ? entry : undefined;
|
|
959
|
+
},
|
|
960
|
+
refresh(entry, graph) {
|
|
961
|
+
return reconcile(entry, graph, false);
|
|
962
|
+
},
|
|
963
|
+
release,
|
|
964
|
+
clear() {
|
|
965
|
+
records.clear();
|
|
966
|
+
bytes = 0;
|
|
967
|
+
},
|
|
968
|
+
};
|
|
969
|
+
}
|
|
37
970
|
/** An abortable event stream with typed listeners, asynchronous iteration, and lifecycle state. */
|
|
38
971
|
export class EventStream {
|
|
39
972
|
/** Creates an unstarted stream with independent connection and completion lifecycle promises. */
|
|
@@ -51,6 +984,10 @@ export class EventStream {
|
|
|
51
984
|
// oxlint-enable class-methods-use-this
|
|
52
985
|
_EventStream_listeners.set(this, Object.create(null));
|
|
53
986
|
_EventStream_abortListeners.set(this, []);
|
|
987
|
+
_EventStream_emittedListenerRegistrations.set(this, new WeakMap());
|
|
988
|
+
_EventStream_pendingListenerCleanup.set(this, new Set());
|
|
989
|
+
_EventStream_pendingBufferedEventChecks.set(this, new Set());
|
|
990
|
+
_EventStream_listenerDispatchDepth.set(this, 0);
|
|
54
991
|
_EventStream_ended.set(this, false);
|
|
55
992
|
_EventStream_errored.set(this, false);
|
|
56
993
|
_EventStream_aborted.set(this, false);
|
|
@@ -159,7 +1096,14 @@ export class EventStream {
|
|
|
159
1096
|
if (!listeners) {
|
|
160
1097
|
return this;
|
|
161
1098
|
}
|
|
162
|
-
const
|
|
1099
|
+
const emittedRegistration = __classPrivateFieldGet(this, _EventStream_emittedListenerRegistrations, "f").get(listener);
|
|
1100
|
+
if (emittedRegistration?.event === event &&
|
|
1101
|
+
!emittedRegistration.registration.removed &&
|
|
1102
|
+
!emittedRegistration.registration.detached) {
|
|
1103
|
+
__classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_removeEmittedListener).call(this, event, emittedRegistration.registration);
|
|
1104
|
+
return this;
|
|
1105
|
+
}
|
|
1106
|
+
const index = listeners.findIndex((l) => !l.removed && l.listener === listener);
|
|
163
1107
|
if (index !== -1) {
|
|
164
1108
|
listeners.splice(index, 1);
|
|
165
1109
|
}
|
|
@@ -203,9 +1147,9 @@ export class EventStream {
|
|
|
203
1147
|
resolve((values.length > 1 ? values : values[0]));
|
|
204
1148
|
};
|
|
205
1149
|
if (event !== 'error') {
|
|
206
|
-
this.
|
|
1150
|
+
__classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_onceForEmitted).call(this, 'error', onError);
|
|
207
1151
|
}
|
|
208
|
-
this.
|
|
1152
|
+
__classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_onceForEmitted).call(this, event, onEvent);
|
|
209
1153
|
});
|
|
210
1154
|
}
|
|
211
1155
|
/**
|
|
@@ -222,7 +1166,15 @@ export class EventStream {
|
|
|
222
1166
|
*/
|
|
223
1167
|
events(event) {
|
|
224
1168
|
return this._createIterator((push) => {
|
|
225
|
-
const onEvent = (...args) =>
|
|
1169
|
+
const onEvent = (...args) => {
|
|
1170
|
+
sdkOwnedBufferedEventArguments.add(args);
|
|
1171
|
+
try {
|
|
1172
|
+
push(args);
|
|
1173
|
+
}
|
|
1174
|
+
finally {
|
|
1175
|
+
sdkOwnedBufferedEventArguments.delete(args);
|
|
1176
|
+
}
|
|
1177
|
+
};
|
|
226
1178
|
this.on(event, onEvent);
|
|
227
1179
|
return () => this.off(event, onEvent);
|
|
228
1180
|
}, {
|
|
@@ -240,10 +1192,16 @@ export class EventStream {
|
|
|
240
1192
|
* here: the iterator ends when the stream ends, listeners are removed on
|
|
241
1193
|
* end/return, and a terminal error is retained until buffered values have
|
|
242
1194
|
* drained so it is surfaced even when no reader was waiting when it fired.
|
|
1195
|
+
* Detached consumers have bounded event and byte queues; exceeding either
|
|
1196
|
+
* limit fails the stream and aborts its underlying request. Detached queues
|
|
1197
|
+
* also reject accessor-backed payloads because getter closures cannot be
|
|
1198
|
+
* safely sized without executing untrusted code.
|
|
243
1199
|
*/
|
|
244
1200
|
_createIterator(attach, { rejectOnError = true, rejectOnAbort = true, onReturn, } = {}) {
|
|
245
1201
|
const pushQueue = createEventQueue();
|
|
1202
|
+
const bufferedEventSizes = createEventQueue();
|
|
246
1203
|
const readQueue = createEventQueue();
|
|
1204
|
+
const bufferedLedger = createBufferedEventLedger();
|
|
247
1205
|
let ended = this.ended;
|
|
248
1206
|
let failure;
|
|
249
1207
|
let failureDelivered = false;
|
|
@@ -271,6 +1229,39 @@ export class EventStream {
|
|
|
271
1229
|
this.off('abort', onFailure);
|
|
272
1230
|
}
|
|
273
1231
|
};
|
|
1232
|
+
const deactivateBufferedEvent = (entry) => {
|
|
1233
|
+
entry.active = false;
|
|
1234
|
+
if (entry.check) {
|
|
1235
|
+
__classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f").delete(entry.check);
|
|
1236
|
+
entry.check = undefined;
|
|
1237
|
+
}
|
|
1238
|
+
};
|
|
1239
|
+
const failBufferedEvents = (discardRetained = false) => {
|
|
1240
|
+
if (discardRetained) {
|
|
1241
|
+
while (bufferedEventSizes.length) {
|
|
1242
|
+
deactivateBufferedEvent(bufferedEventSizes.dequeue());
|
|
1243
|
+
}
|
|
1244
|
+
pushQueue.clear();
|
|
1245
|
+
bufferedLedger.clear();
|
|
1246
|
+
}
|
|
1247
|
+
const error = new OpenAIError(`Event stream iterator buffer limit exceeded (${MAX_BUFFERED_ITERATOR_EVENTS} events or ${MAX_BUFFERED_ITERATOR_BYTES} bytes); consume events as they arrive.`);
|
|
1248
|
+
try {
|
|
1249
|
+
__classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error);
|
|
1250
|
+
}
|
|
1251
|
+
finally {
|
|
1252
|
+
this.controller.abort();
|
|
1253
|
+
}
|
|
1254
|
+
return error;
|
|
1255
|
+
};
|
|
1256
|
+
const revalidateBufferedEvent = (value, entry) => {
|
|
1257
|
+
if (!entry.active || __classPrivateFieldGet(this, _EventStream_ended, "f")) {
|
|
1258
|
+
return;
|
|
1259
|
+
}
|
|
1260
|
+
const graph = inspectBufferedEventGraph(value, MAX_BUFFERED_ITERATOR_BYTES);
|
|
1261
|
+
if (!graph || !bufferedLedger.refresh(entry.retention, graph)) {
|
|
1262
|
+
failBufferedEvents(true);
|
|
1263
|
+
}
|
|
1264
|
+
};
|
|
274
1265
|
const push = (value) => {
|
|
275
1266
|
if (ended) {
|
|
276
1267
|
return;
|
|
@@ -280,7 +1271,34 @@ export class EventStream {
|
|
|
280
1271
|
reader.resolve({ value, done: false });
|
|
281
1272
|
}
|
|
282
1273
|
else {
|
|
1274
|
+
if (pushQueue.length >= MAX_BUFFERED_ITERATOR_EVENTS) {
|
|
1275
|
+
failBufferedEvents();
|
|
1276
|
+
return;
|
|
1277
|
+
}
|
|
1278
|
+
const graph = inspectBufferedEventGraph(value, MAX_BUFFERED_ITERATOR_BYTES);
|
|
1279
|
+
const retention = graph && bufferedLedger.retain(graph);
|
|
1280
|
+
if (!retention) {
|
|
1281
|
+
failBufferedEvents();
|
|
1282
|
+
return;
|
|
1283
|
+
}
|
|
1284
|
+
if (typeof value === 'object' && value !== null && sdkOwnedBufferedEventArguments.has(value)) {
|
|
1285
|
+
const argumentsTuple = value;
|
|
1286
|
+
for (let index = 0; index < argumentsTuple.length; index += 1) {
|
|
1287
|
+
const argument = argumentsTuple[index];
|
|
1288
|
+
if (typeof argument === 'string') {
|
|
1289
|
+
argumentsTuple[index] = bufferedJSONParse(bufferedJSONStringify(argument));
|
|
1290
|
+
}
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
const entry = { retention, active: true, check: undefined };
|
|
283
1294
|
pushQueue.enqueue(value);
|
|
1295
|
+
bufferedEventSizes.enqueue(entry);
|
|
1296
|
+
const check = () => {
|
|
1297
|
+
entry.check = undefined;
|
|
1298
|
+
revalidateBufferedEvent(value, entry);
|
|
1299
|
+
};
|
|
1300
|
+
entry.check = check;
|
|
1301
|
+
__classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f").add(check);
|
|
284
1302
|
}
|
|
285
1303
|
};
|
|
286
1304
|
const onFailure = (error) => {
|
|
@@ -310,7 +1328,17 @@ export class EventStream {
|
|
|
310
1328
|
return {
|
|
311
1329
|
next: () => {
|
|
312
1330
|
if (pushQueue.length) {
|
|
313
|
-
|
|
1331
|
+
const value = pushQueue.dequeue();
|
|
1332
|
+
const entry = bufferedEventSizes.dequeue();
|
|
1333
|
+
deactivateBufferedEvent(entry);
|
|
1334
|
+
const graph = inspectBufferedEventGraph(value, MAX_BUFFERED_ITERATOR_BYTES);
|
|
1335
|
+
if (!graph || !bufferedLedger.refresh(entry.retention, graph)) {
|
|
1336
|
+
const error = failBufferedEvents(true);
|
|
1337
|
+
failureDelivered = true;
|
|
1338
|
+
return Promise.reject(error);
|
|
1339
|
+
}
|
|
1340
|
+
bufferedLedger.release(entry.retention);
|
|
1341
|
+
return Promise.resolve({ value, done: false });
|
|
314
1342
|
}
|
|
315
1343
|
if (failure && !failureDelivered) {
|
|
316
1344
|
failureDelivered = true;
|
|
@@ -325,7 +1353,11 @@ export class EventStream {
|
|
|
325
1353
|
},
|
|
326
1354
|
return: () => {
|
|
327
1355
|
ended = true;
|
|
1356
|
+
while (bufferedEventSizes.length) {
|
|
1357
|
+
deactivateBufferedEvent(bufferedEventSizes.dequeue());
|
|
1358
|
+
}
|
|
328
1359
|
pushQueue.clear();
|
|
1360
|
+
bufferedLedger.clear();
|
|
329
1361
|
cleanup();
|
|
330
1362
|
finishReaders();
|
|
331
1363
|
if (onReturn) {
|
|
@@ -350,7 +1382,7 @@ export class EventStream {
|
|
|
350
1382
|
}
|
|
351
1383
|
/** Returns whether an event currently has one or more registered listeners. */
|
|
352
1384
|
_hasListeners(event) {
|
|
353
|
-
return Boolean(__classPrivateFieldGet(this, _EventStream_listeners, "f")[event]?.
|
|
1385
|
+
return Boolean(__classPrivateFieldGet(this, _EventStream_listeners, "f")[event]?.some((listener) => !listener.removed));
|
|
354
1386
|
}
|
|
355
1387
|
/** Dispatches a stream event and performs the associated lifecycle transitions. */
|
|
356
1388
|
_emit(event, ...args) {
|
|
@@ -365,9 +1397,31 @@ export class EventStream {
|
|
|
365
1397
|
}
|
|
366
1398
|
const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event];
|
|
367
1399
|
if (listeners) {
|
|
368
|
-
__classPrivateFieldGet(this, _EventStream_listeners, "f")[event] = listeners.filter((
|
|
369
|
-
|
|
370
|
-
|
|
1400
|
+
__classPrivateFieldGet(this, _EventStream_listeners, "f")[event] = listeners.filter((listener) => {
|
|
1401
|
+
if (listener.once) {
|
|
1402
|
+
listener.detached = true;
|
|
1403
|
+
}
|
|
1404
|
+
return !listener.once && !listener.removed;
|
|
1405
|
+
});
|
|
1406
|
+
__classPrivateFieldSet(this, _EventStream_listenerDispatchDepth, __classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") + 1, "f");
|
|
1407
|
+
try {
|
|
1408
|
+
for (const registration of listeners) {
|
|
1409
|
+
if (!registration.removed) {
|
|
1410
|
+
registration.listener(...args);
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
finally {
|
|
1415
|
+
__classPrivateFieldSet(this, _EventStream_listenerDispatchDepth, __classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") - 1, "f");
|
|
1416
|
+
if (__classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") === 0) {
|
|
1417
|
+
__classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_cleanupEmittedListeners).call(this);
|
|
1418
|
+
for (const check of __classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f")) {
|
|
1419
|
+
__classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f").delete(check);
|
|
1420
|
+
if (!__classPrivateFieldGet(this, _EventStream_ended, "f")) {
|
|
1421
|
+
check();
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
371
1425
|
}
|
|
372
1426
|
}
|
|
373
1427
|
if (event === 'abort') {
|
|
@@ -402,10 +1456,41 @@ export class EventStream {
|
|
|
402
1456
|
// Hook for subclasses.
|
|
403
1457
|
}
|
|
404
1458
|
}
|
|
405
|
-
_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_abortListeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_removeAbortListeners = function _EventStream_removeAbortListeners() {
|
|
1459
|
+
_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_abortListeners = new WeakMap(), _EventStream_emittedListenerRegistrations = new WeakMap(), _EventStream_pendingListenerCleanup = new WeakMap(), _EventStream_pendingBufferedEventChecks = new WeakMap(), _EventStream_listenerDispatchDepth = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_removeAbortListeners = function _EventStream_removeAbortListeners() {
|
|
406
1460
|
for (const { signal, listener } of __classPrivateFieldGet(this, _EventStream_abortListeners, "f").splice(0)) {
|
|
407
1461
|
signal.removeEventListener('abort', listener);
|
|
408
1462
|
}
|
|
1463
|
+
}, _EventStream_onceForEmitted = function _EventStream_onceForEmitted(event, listener) {
|
|
1464
|
+
const previousListeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event];
|
|
1465
|
+
const previousLength = previousListeners?.length ?? 0;
|
|
1466
|
+
this.once(event, listener);
|
|
1467
|
+
const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event];
|
|
1468
|
+
const [registration] = listeners?.slice(-1) ?? [];
|
|
1469
|
+
if ((previousListeners === undefined || listeners === previousListeners) &&
|
|
1470
|
+
listeners?.length === previousLength + 1 &&
|
|
1471
|
+
registration?.listener === listener &&
|
|
1472
|
+
registration.once) {
|
|
1473
|
+
__classPrivateFieldGet(this, _EventStream_emittedListenerRegistrations, "f").set(listener, { event, registration });
|
|
1474
|
+
}
|
|
1475
|
+
}, _EventStream_removeEmittedListener = function _EventStream_removeEmittedListener(event, registration) {
|
|
1476
|
+
if (registration.removed) {
|
|
1477
|
+
return;
|
|
1478
|
+
}
|
|
1479
|
+
registration.removed = true;
|
|
1480
|
+
__classPrivateFieldGet(this, _EventStream_emittedListenerRegistrations, "f").delete(registration.listener);
|
|
1481
|
+
__classPrivateFieldGet(this, _EventStream_pendingListenerCleanup, "f").add(event);
|
|
1482
|
+
if (__classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") === 0) {
|
|
1483
|
+
__classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_cleanupEmittedListeners).call(this);
|
|
1484
|
+
}
|
|
1485
|
+
}, _EventStream_cleanupEmittedListeners = function _EventStream_cleanupEmittedListeners() {
|
|
1486
|
+
for (const event of __classPrivateFieldGet(this, _EventStream_pendingListenerCleanup, "f")) {
|
|
1487
|
+
const eventType = event;
|
|
1488
|
+
const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[eventType];
|
|
1489
|
+
if (listeners) {
|
|
1490
|
+
__classPrivateFieldGet(this, _EventStream_listeners, "f")[eventType] = listeners.filter((listener) => !listener.removed);
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
__classPrivateFieldGet(this, _EventStream_pendingListenerCleanup, "f").clear();
|
|
409
1494
|
}, _EventStream_handleError = function _EventStream_handleError(error) {
|
|
410
1495
|
__classPrivateFieldSet(this, _EventStream_errored, true, "f");
|
|
411
1496
|
if (error instanceof Error && error.name === 'AbortError') {
|