@openclaw/slack 2026.9.6 → 2026.9.8
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/assets/icon.png +0 -0
- package/dist/.setup/{account-inspect-DP1Bcwj4.mjs → account-inspect-DWBXpER6.mjs} +1 -1
- package/dist/.setup/{accounts-BBHvg0pY.mjs → accounts-D_N9IqNA.mjs} +23 -1
- package/dist/.setup/{action-runtime-B01d85zt.mjs → action-runtime-DfWvuiZd.mjs} +26 -41
- package/dist/.setup/action-runtime.runtime-Ck4bAWOX.mjs +2 -0
- package/dist/.setup/{actions-DKCtBgCI.mjs → actions-Df0CzcDl.mjs} +88 -175
- package/dist/.setup/{approval-handler.runtime-DMszKn_7.mjs → approval-handler.runtime-Ed6Sw5VK.mjs} +37 -47
- package/dist/.setup/{approval-message-updates-Tb_qRokK.mjs → approval-message-updates-BadvtA7R.mjs} +1 -2
- package/dist/.setup/{channel-CErYZ5zw.mjs → channel-C7bgPSTE.mjs} +181 -273
- package/dist/.setup/channel-meta-C443t-lI.mjs +27 -0
- package/dist/.setup/{channel-type-Dxk8VJUb.mjs → channel-type-ClOttrZ5.mjs} +13 -21
- package/dist/.setup/{channel.setup-BVoUtdPn.mjs → channel.setup-Dh2jzAjN.mjs} +35 -42
- package/dist/.setup/{config-schema-CyL279e7.mjs → config-schema-BZCxmHKG.mjs} +24 -21
- package/dist/.setup/{directory-config-CQTSH45W.mjs → directory-config-BOUWH3hR.mjs} +7 -10
- package/dist/.setup/{directory-live-BCcj89QV.mjs → directory-live-B2O4B_Ho.mjs} +9 -21
- package/dist/.setup/doctor-contract-CRN1Z_c7.mjs +342 -0
- package/dist/.setup/{message-tool-api-C0PTFaNV.mjs → message-tool-api-Cu4lwlGy.mjs} +34 -48
- package/dist/.setup/{provider-C-jPaGt2.mjs → monitor-BPVfkumU.mjs} +2181 -2693
- package/dist/.setup/{outbound-adapter-A7Wdn8ZT.mjs → outbound-adapter-Bv48XUjq.mjs} +10 -21
- package/dist/.setup/{pipeline.runtime-BlPOexmJ.mjs → pipeline.runtime-B1H63Frf.mjs} +311 -457
- package/dist/.setup/{plugin-routes-C3X0eVaK.mjs → plugin-routes-B8tooDLj.mjs} +1 -1
- package/dist/.setup/{policy-BApW53pI.mjs → policy-D-jfM174.mjs} +5 -5
- package/dist/.setup/{probe-DiYIMPJo.mjs → probe-B2Y9qc_z.mjs} +101 -39
- package/dist/.setup/{registry-bbjH7IHX.mjs → registry-CIbMfuf8.mjs} +6 -2
- package/dist/.setup/{relay-source-DfOnjJTE.mjs → relay-source-BpKdjsll.mjs} +10 -12
- package/dist/.setup/{replies-BBAJxUOQ.mjs → replies-BAnUtr2f.mjs} +16 -76
- package/dist/.setup/{reply-blocks-Bm8kf6mK.mjs → reply-blocks-SE1kTE3I.mjs} +27 -154
- package/dist/.setup/{resolve-channels-BXbMBbJD.mjs → resolve-channels-XXBn8UU_.mjs} +4 -5
- package/dist/.setup/{resolve-users-65WqvIqD.mjs → resolve-users-DW0ngD03.mjs} +20 -22
- package/dist/.setup/{scopes-h3YB-mMs.mjs → scopes-CasuDvaa.mjs} +6 -17
- package/dist/.setup/{secret-contract-DxmvbxBF.mjs → secret-contract-BaZcu6P_.mjs} +15 -20
- package/dist/.setup/{secret-contract-api-D9UfYujm.mjs → secret-contract-api-Dp6290Vg.mjs} +1 -1
- package/dist/.setup/{security-audit-BypHqcq5.mjs → security-audit-BqDc-6VL.mjs} +1 -1
- package/dist/.setup/{send-Cp6omkOg.mjs → send-BOVLQi3n.mjs} +84 -171
- package/dist/.setup/{session-status-Cf7AvWOt.mjs → session-status-DscajIsd.mjs} +315 -238
- package/dist/.setup/{setup-plugin-api-dLPkL06L.mjs → setup-plugin-api-DTtbTKNk.mjs} +1 -1
- package/dist/.setup/{setup-surface-D3DLcCxu.mjs → setup-surface-Dn7QgWRE.mjs} +24 -56
- package/dist/.setup/{shared-CJ3arAFL.mjs → shared-qau-uDGl.mjs} +30 -56
- package/dist/.setup/{slash-dispatch.runtime-HFy_XvyO.mjs → slash-dispatch.runtime--AEzLVBF.mjs} +1 -1
- package/dist/.setup/{streaming-compat-B-e0mqM0.mjs → streaming-compat-C5Wut626.mjs} +31 -8
- package/dist/.setup/{target-parsing-DEsPjngB.mjs → target-parsing-FFE26kOV.mjs} +1 -7
- package/dist/.setup/{targets-Cku2KCvg.mjs → targets-C6LZQL1Q.mjs} +1 -1
- package/dist/.setup/{thread-ts-CukseRVL.mjs → thread-ts-Cvt7WD6B.mjs} +0 -1
- package/dist/account-inspect-api.js +1 -1
- package/dist/api.js +18 -17
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/directory-contract-api.js +1 -1
- package/dist/doctor-contract-api.js +1 -1
- package/dist/http-routes-api.js +1 -1
- package/dist/index.js +1 -1
- package/dist/message-tool-api.js +1 -1
- package/dist/runtime-api.js +11 -12
- package/dist/secret-contract-api.js +1 -1
- package/dist/security-contract-api.js +1 -1
- package/dist/setup-entry.js +2 -2
- package/dist/setup-plugin-api.js +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/child_process.d.ts +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/crypto.d.ts +20 -8
- package/node_modules/@slack/bolt/node_modules/@types/node/ffi.d.ts +14 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/http2.d.ts +3 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/net.d.ts +16 -4
- package/node_modules/@slack/bolt/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/process.d.ts +1 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/quic.d.ts +39 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/stream/iter.d.ts +9 -12
- package/node_modules/@slack/bolt/node_modules/@types/node/test/reporters.d.ts +1 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/test.d.ts +72 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/tls.d.ts +14 -10
- package/node_modules/@slack/bolt/node_modules/@types/node/vm.d.ts +2 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/worker_threads.d.ts +4 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/child_process.d.ts +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/crypto.d.ts +20 -8
- package/node_modules/@slack/web-api/node_modules/@types/node/ffi.d.ts +14 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/http2.d.ts +3 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/net.d.ts +16 -4
- package/node_modules/@slack/web-api/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/process.d.ts +1 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/quic.d.ts +39 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/stream/iter.d.ts +9 -12
- package/node_modules/@slack/web-api/node_modules/@types/node/test/reporters.d.ts +1 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/test.d.ts +72 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/tls.d.ts +14 -10
- package/node_modules/@slack/web-api/node_modules/@types/node/vm.d.ts +2 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/worker_threads.d.ts +4 -1
- package/node_modules/get-east-asian-width/index.js +8 -3
- package/node_modules/get-east-asian-width/lookup-data.js +1 -1
- package/node_modules/get-east-asian-width/lookup.js +4 -4
- package/node_modules/get-east-asian-width/package.json +1 -1
- package/node_modules/typebox/build/compile/code.mjs +1 -2
- package/node_modules/typebox/build/compile/validator.mjs +5 -1
- package/node_modules/typebox/build/format/iri.mjs +16 -9
- package/node_modules/typebox/build/guard/emit.mjs +2 -2
- package/node_modules/typebox/build/guard/guard.d.mts +7 -5
- package/node_modules/typebox/build/guard/guard.mjs +14 -9
- package/node_modules/typebox/build/guard/index.mjs +6 -0
- package/node_modules/typebox/build/guard/unicode/unicode.d.mts +6 -0
- package/node_modules/typebox/build/guard/unicode/unicode.mjs +35 -0
- package/node_modules/typebox/build/guard/{string.mjs → unicode/unicode_segment.mjs} +16 -19
- package/node_modules/typebox/build/schema/build.mjs +2 -3
- package/node_modules/typebox/build/schema/engine/_pathing.d.mts +1 -0
- package/node_modules/typebox/build/schema/engine/_pathing.mjs +11 -0
- package/node_modules/typebox/build/schema/engine/_refine.mjs +13 -5
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dependencies.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dependentSchemas.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/format.mjs +9 -2
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/properties.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/ref.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/schema.mjs +24 -24
- package/node_modules/typebox/build/schema/parse.mjs +3 -0
- package/node_modules/typebox/build/schema/pointer/pointer.d.mts +1 -6
- package/node_modules/typebox/build/schema/pointer/pointer.mjs +47 -64
- package/node_modules/typebox/build/system/settings/internal.d.mts +2 -0
- package/node_modules/typebox/build/system/settings/internal.mjs +20 -0
- package/node_modules/typebox/build/system/settings/settings.d.mts +11 -0
- package/node_modules/typebox/build/system/settings/settings.mjs +14 -0
- package/node_modules/typebox/build/type/extends/inference.d.mts +1 -1
- package/node_modules/typebox/build/type/extends/inference.mjs +15 -2
- package/node_modules/typebox/build/type/extends/tuple.d.mts +2 -1
- package/node_modules/typebox/build/type/extends/tuple.mjs +21 -1
- package/node_modules/typebox/build/value/parse/parse.mjs +10 -4
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +3 -1
- package/node_modules/undici/README.md +81 -25
- package/node_modules/undici/docs/docs/api/Agent.md +249 -42
- package/node_modules/undici/docs/docs/api/BalancedPool.md +246 -48
- package/node_modules/undici/docs/docs/api/CacheStorage.md +171 -13
- package/node_modules/undici/docs/docs/api/CacheStore.md +294 -98
- package/node_modules/undici/docs/docs/api/Client.md +407 -162
- package/node_modules/undici/docs/docs/api/ClientStats.md +80 -14
- package/node_modules/undici/docs/docs/api/Connector.md +118 -35
- package/node_modules/undici/docs/docs/api/ContentType.md +65 -25
- package/node_modules/undici/docs/docs/api/Cookies.md +122 -71
- package/node_modules/undici/docs/docs/api/Debug.md +34 -18
- package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +364 -164
- package/node_modules/undici/docs/docs/api/Dispatcher.md +490 -1055
- package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +105 -93
- package/node_modules/undici/docs/docs/api/Errors.md +503 -28
- package/node_modules/undici/docs/docs/api/EventSource.md +326 -13
- package/node_modules/undici/docs/docs/api/Fetch.md +681 -30
- package/node_modules/undici/docs/docs/api/GlobalInstallation.md +78 -96
- package/node_modules/undici/docs/docs/api/H2CClient.md +298 -176
- package/node_modules/undici/docs/docs/api/Interceptors.md +418 -0
- package/node_modules/undici/docs/docs/api/MockAgent.md +333 -314
- package/node_modules/undici/docs/docs/api/MockCallHistory.md +272 -98
- package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +189 -26
- package/node_modules/undici/docs/docs/api/MockClient.md +151 -33
- package/node_modules/undici/docs/docs/api/MockErrors.md +56 -5
- package/node_modules/undici/docs/docs/api/MockPool.md +321 -258
- package/node_modules/undici/docs/docs/api/Pool.md +236 -41
- package/node_modules/undici/docs/docs/api/PoolStats.md +119 -13
- package/node_modules/undici/docs/docs/api/ProxyAgent.md +179 -160
- package/node_modules/undici/docs/docs/api/RedirectHandler.md +238 -55
- package/node_modules/undici/docs/docs/api/RetryAgent.md +113 -27
- package/node_modules/undici/docs/docs/api/RetryHandler.md +161 -79
- package/node_modules/undici/docs/docs/api/RoundRobinPool.md +166 -72
- package/node_modules/undici/docs/docs/api/SnapshotAgent.md +262 -517
- package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +177 -196
- package/node_modules/undici/docs/docs/api/Util.md +68 -11
- package/node_modules/undici/docs/docs/api/WebSocket.md +475 -80
- package/node_modules/undici/docs/docs/api/api-lifecycle.md +100 -32
- package/node_modules/undici/docs/docs/best-practices/client-certificate.md +2 -0
- package/node_modules/undici/docs/docs/best-practices/crawling.md +3 -1
- package/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +233 -0
- package/node_modules/undici/docs/docs/best-practices/mocking-request.md +9 -7
- package/node_modules/undici/docs/docs/best-practices/proxy.md +3 -1
- package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +10 -8
- package/node_modules/undici/docs/docs/best-practices/writing-tests.md +2 -0
- package/node_modules/undici/docs/docs/getting-started.md +281 -0
- package/node_modules/undici/docs/docs/index.md +784 -0
- package/node_modules/undici/docs/docs/site.json +125 -0
- package/node_modules/undici/docs/docs/type-map.json +79 -0
- package/node_modules/undici/index.js +4 -2
- package/node_modules/undici/lib/api/api-connect.js +13 -11
- package/node_modules/undici/lib/api/api-pipeline.js +26 -13
- package/node_modules/undici/lib/api/api-request.js +51 -21
- package/node_modules/undici/lib/api/api-stream.js +81 -20
- package/node_modules/undici/lib/api/api-upgrade.js +21 -11
- package/node_modules/undici/lib/api/readable.js +45 -9
- package/node_modules/undici/lib/cache/memory-cache-store.js +3 -3
- package/node_modules/undici/lib/cache/sqlite-cache-store.js +3 -1
- package/node_modules/undici/lib/core/connect.js +46 -7
- package/node_modules/undici/lib/core/constants.js +1 -24
- package/node_modules/undici/lib/core/errors.js +22 -2
- package/node_modules/undici/lib/core/request.js +100 -18
- package/node_modules/undici/lib/core/symbols.js +4 -0
- package/node_modules/undici/lib/core/util.js +105 -48
- package/node_modules/undici/lib/dispatcher/agent.js +51 -32
- package/node_modules/undici/lib/dispatcher/balanced-pool.js +23 -27
- package/node_modules/undici/lib/dispatcher/client-h1.js +86 -24
- package/node_modules/undici/lib/dispatcher/client-h2.js +1091 -361
- package/node_modules/undici/lib/dispatcher/client.js +109 -36
- package/node_modules/undici/lib/dispatcher/dispatcher-base.js +19 -6
- package/node_modules/undici/lib/dispatcher/dispatcher.js +15 -5
- package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +110 -0
- package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +37 -8
- package/node_modules/undici/lib/dispatcher/h2c-client.js +4 -4
- package/node_modules/undici/lib/dispatcher/pool-base.js +28 -10
- package/node_modules/undici/lib/dispatcher/pool.js +30 -5
- package/node_modules/undici/lib/dispatcher/proxy-agent.js +95 -19
- package/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
- package/node_modules/undici/lib/dispatcher/round-robin-pool.js +32 -10
- package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +153 -63
- package/node_modules/undici/lib/global.js +37 -14
- package/node_modules/undici/lib/handler/cache-handler.js +49 -7
- package/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
- package/node_modules/undici/lib/handler/decorator-handler.js +8 -3
- package/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
- package/node_modules/undici/lib/handler/redirect-handler.js +66 -66
- package/node_modules/undici/lib/handler/retry-handler.js +191 -50
- package/node_modules/undici/lib/interceptor/cache.js +75 -25
- package/node_modules/undici/lib/interceptor/decompress.js +5 -2
- package/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
- package/node_modules/undici/lib/interceptor/dns.js +12 -1
- package/node_modules/undici/lib/interceptor/redirect.js +3 -3
- package/node_modules/undici/lib/llhttp/llhttp-wasm.js +1 -1
- package/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +1 -1
- package/node_modules/undici/lib/mock/mock-agent.js +21 -9
- package/node_modules/undici/lib/mock/mock-call-history.js +1 -1
- package/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
- package/node_modules/undici/lib/mock/mock-utils.js +281 -47
- package/node_modules/undici/lib/mock/snapshot-agent.js +25 -7
- package/node_modules/undici/lib/mock/snapshot-recorder.js +38 -3
- package/node_modules/undici/lib/util/cache.js +92 -10
- package/node_modules/undici/lib/util/runtime-features.js +3 -34
- package/node_modules/undici/lib/web/cache/cache.js +6 -8
- package/node_modules/undici/lib/web/cookies/parse.js +150 -146
- package/node_modules/undici/lib/web/cookies/util.js +1 -1
- package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
- package/node_modules/undici/lib/web/eventsource/eventsource.js +20 -21
- package/node_modules/undici/lib/web/eventsource/util.js +32 -1
- package/node_modules/undici/lib/web/fetch/body.js +48 -10
- package/node_modules/undici/lib/web/fetch/constants.js +1 -1
- package/node_modules/undici/lib/web/fetch/formdata.js +21 -2
- package/node_modules/undici/lib/web/fetch/index.js +242 -223
- package/node_modules/undici/lib/web/fetch/request.js +35 -6
- package/node_modules/undici/lib/web/fetch/response.js +1 -3
- package/node_modules/undici/lib/web/fetch/util.js +10 -2
- package/node_modules/undici/lib/web/webidl/index.js +5 -7
- package/node_modules/undici/lib/web/websocket/frame.js +1 -7
- package/node_modules/undici/lib/web/websocket/receiver.js +1 -1
- package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +10 -10
- package/node_modules/undici/lib/web/websocket/websocket.js +25 -3
- package/node_modules/undici/package.json +10 -10
- package/node_modules/undici/types/agent.d.ts +0 -2
- package/node_modules/undici/types/client.d.ts +69 -24
- package/node_modules/undici/types/connector.d.ts +1 -0
- package/node_modules/undici/types/cookies.d.ts +1 -1
- package/node_modules/undici/types/dispatcher.d.ts +8 -30
- package/node_modules/undici/types/dispatcher1-wrapper.d.ts +7 -0
- package/node_modules/undici/types/errors.d.ts +10 -0
- package/node_modules/undici/types/fetch.d.ts +5 -1
- package/node_modules/undici/types/formdata.d.ts +0 -6
- package/node_modules/undici/types/h2c-client.d.ts +6 -6
- package/node_modules/undici/types/handlers.d.ts +2 -0
- package/node_modules/undici/types/header.d.ts +5 -0
- package/node_modules/undici/types/index.d.ts +3 -1
- package/node_modules/undici/types/interceptors.d.ts +1 -1
- package/node_modules/undici/types/mock-agent.d.ts +11 -10
- package/node_modules/undici/types/mock-interceptor.d.ts +5 -1
- package/node_modules/undici/types/pool.d.ts +0 -2
- package/node_modules/undici/types/proxy-agent.d.ts +9 -2
- package/node_modules/undici/types/round-robin-pool.d.ts +0 -2
- package/node_modules/undici/types/snapshot-agent.d.ts +4 -0
- package/node_modules/undici/types/socks5-proxy-agent.d.ts +4 -2
- package/node_modules/undici/types/webidl.d.ts +0 -1
- package/openclaw.plugin.json +31 -3
- package/package.json +7 -7
- package/dist/.setup/accounts.runtime-DN-PPocC.mjs +0 -2
- package/dist/.setup/action-runtime.runtime-C8R8CUan.mjs +0 -2
- package/dist/.setup/doctor-contract-CtMUqjvk.mjs +0 -186
- package/dist/.setup/monitor-_Sht7Dqy.mjs +0 -13
- package/dist/.setup/rolldown-runtime-D7D4PA-g.mjs +0 -13
- package/dist/.setup/send.runtime-B4caZU6T.mjs +0 -2
- package/dist/.setup/slash-commands.runtime-BpSH0b3q.mjs +0 -2
- package/dist/.setup/slash-skill-commands.runtime-Bi1JWZHY.mjs +0 -2
- package/node_modules/undici/lib/handler/unwrap-handler.js +0 -106
- package/node_modules/undici/lib/handler/wrap-handler.js +0 -105
- package/node_modules/undici/lib/llhttp/.gitkeep +0 -0
- package/node_modules/undici/lib/util/promise.js +0 -28
- /package/node_modules/typebox/build/guard/{string.d.mts → unicode/unicode_segment.d.mts} +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
+
const buffer = require('node:buffer')
|
|
2
3
|
const { Transform } = require('node:stream')
|
|
3
4
|
const { isASCIINumber, isValidLastEventId } = require('./util')
|
|
4
5
|
|
|
@@ -23,6 +24,8 @@ const COLON = 0x3A
|
|
|
23
24
|
*/
|
|
24
25
|
const SPACE = 0x20
|
|
25
26
|
|
|
27
|
+
const defaultMaxEventSize = buffer.kStringMaxLength
|
|
28
|
+
|
|
26
29
|
const DATA = Buffer.from('data')
|
|
27
30
|
const EVENT = Buffer.from('event')
|
|
28
31
|
const ID = Buffer.from('id')
|
|
@@ -66,6 +69,12 @@ function isFieldName (line, length, field) {
|
|
|
66
69
|
return true
|
|
67
70
|
}
|
|
68
71
|
|
|
72
|
+
function createMaxEventSizeExceededError () {
|
|
73
|
+
const error = new Error('EventSource message size exceeded')
|
|
74
|
+
error.aborted = false
|
|
75
|
+
return error
|
|
76
|
+
}
|
|
77
|
+
|
|
69
78
|
/**
|
|
70
79
|
* @typedef {object} EventSourceStreamEvent
|
|
71
80
|
* @type {object}
|
|
@@ -114,6 +123,8 @@ class EventSourceStream extends Transform {
|
|
|
114
123
|
pos = 0
|
|
115
124
|
lineChunkIndex = 0
|
|
116
125
|
linePos = 0
|
|
126
|
+
eventDataSize = 0
|
|
127
|
+
maxEventSize
|
|
117
128
|
|
|
118
129
|
event = {
|
|
119
130
|
data: undefined,
|
|
@@ -125,6 +136,7 @@ class EventSourceStream extends Transform {
|
|
|
125
136
|
/**
|
|
126
137
|
* @param {object} options
|
|
127
138
|
* @param {boolean} [options.readableObjectMode]
|
|
139
|
+
* @param {number} [options.maxEventSize]
|
|
128
140
|
* @param {eventSourceSettings} [options.eventSourceSettings]
|
|
129
141
|
* @param {(chunk: any, encoding?: BufferEncoding | undefined) => boolean} [options.push]
|
|
130
142
|
*/
|
|
@@ -136,6 +148,7 @@ class EventSourceStream extends Transform {
|
|
|
136
148
|
super(options)
|
|
137
149
|
|
|
138
150
|
this.state = options.eventSourceSettings || {}
|
|
151
|
+
this.maxEventSize = options.maxEventSize ?? defaultMaxEventSize
|
|
139
152
|
if (options.push) {
|
|
140
153
|
this.push = options.push
|
|
141
154
|
}
|
|
@@ -231,7 +244,12 @@ class EventSourceStream extends Transform {
|
|
|
231
244
|
|
|
232
245
|
// In any case, we can process the line as we reached an
|
|
233
246
|
// end-of-line character
|
|
234
|
-
|
|
247
|
+
try {
|
|
248
|
+
this.parseLine(this.readLine(), this.event)
|
|
249
|
+
} catch (error) {
|
|
250
|
+
callback(error)
|
|
251
|
+
return
|
|
252
|
+
}
|
|
235
253
|
this.consumeCurrentByte()
|
|
236
254
|
// A line was processed and this could be the end of the event. We need
|
|
237
255
|
// to check if the next line is empty to determine if the event is
|
|
@@ -282,6 +300,13 @@ class EventSourceStream extends Transform {
|
|
|
282
300
|
}
|
|
283
301
|
|
|
284
302
|
if (isFieldName(line, fieldLength, DATA)) {
|
|
303
|
+
const valueBytes = line.length - valueStart
|
|
304
|
+
const eventDataSize = this.eventDataSize + (event.data === undefined ? 0 : 1) + valueBytes
|
|
305
|
+
|
|
306
|
+
if (this.maxEventSize > 0 && eventDataSize > this.maxEventSize) {
|
|
307
|
+
throw createMaxEventSizeExceededError()
|
|
308
|
+
}
|
|
309
|
+
|
|
285
310
|
const value = line.toString('utf8', valueStart)
|
|
286
311
|
|
|
287
312
|
if (event.data === undefined) {
|
|
@@ -289,6 +314,7 @@ class EventSourceStream extends Transform {
|
|
|
289
314
|
} else {
|
|
290
315
|
event.data += `\n${value}`
|
|
291
316
|
}
|
|
317
|
+
this.eventDataSize = eventDataSize
|
|
292
318
|
return
|
|
293
319
|
}
|
|
294
320
|
|
|
@@ -345,6 +371,7 @@ class EventSourceStream extends Transform {
|
|
|
345
371
|
this.event.event = undefined
|
|
346
372
|
this.event.id = undefined
|
|
347
373
|
this.event.retry = undefined
|
|
374
|
+
this.eventDataSize = 0
|
|
348
375
|
}
|
|
349
376
|
|
|
350
377
|
hasPendingEvent () {
|
|
@@ -2,14 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
const { pipeline } = require('node:stream')
|
|
4
4
|
const { fetching } = require('../fetch')
|
|
5
|
-
const { makeRequest } = require('../fetch/request')
|
|
6
5
|
const { webidl } = require('../webidl')
|
|
7
6
|
const { EventSourceStream } = require('./eventsource-stream')
|
|
8
7
|
const { parseMIMEType } = require('../fetch/data-url')
|
|
9
8
|
const { createFastMessageEvent } = require('../websocket/events')
|
|
10
9
|
const { isNetworkError } = require('../fetch/response')
|
|
11
|
-
const { kEnumerableProperty } = require('../../core/util')
|
|
10
|
+
const { isValidHeaderValue, kEnumerableProperty } = require('../../core/util')
|
|
12
11
|
const { environmentSettingsObject } = require('../fetch/util')
|
|
12
|
+
const { createPotentialCORSRequest } = require('./util')
|
|
13
|
+
const { getGlobalDispatcher } = require('../../global')
|
|
14
|
+
const { isomorphicDecode } = require('../infra')
|
|
15
|
+
|
|
16
|
+
const textEncoder = new TextEncoder()
|
|
13
17
|
|
|
14
18
|
let experimentalWarned = false
|
|
15
19
|
|
|
@@ -160,33 +164,22 @@ class EventSource extends EventTarget {
|
|
|
160
164
|
|
|
161
165
|
// 8. Let request be the result of creating a potential-CORS request given
|
|
162
166
|
// urlRecord, the empty string, and corsAttributeState.
|
|
163
|
-
const
|
|
164
|
-
redirect: 'follow',
|
|
165
|
-
keepalive: true,
|
|
166
|
-
// @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes
|
|
167
|
-
mode: 'cors',
|
|
168
|
-
credentials: corsAttributeState === 'anonymous'
|
|
169
|
-
? 'same-origin'
|
|
170
|
-
: 'omit',
|
|
171
|
-
referrer: 'no-referrer'
|
|
172
|
-
}
|
|
167
|
+
const request = createPotentialCORSRequest(urlRecord, '', corsAttributeState)
|
|
173
168
|
|
|
174
169
|
// 9. Set request's client to settings.
|
|
175
|
-
|
|
170
|
+
request.client = environmentSettingsObject.settingsObject
|
|
176
171
|
|
|
177
172
|
// 10. User agents may set (`Accept`, `text/event-stream`) in request's header list.
|
|
178
|
-
|
|
173
|
+
request.headersList.set('Accept', 'text/event-stream')
|
|
179
174
|
|
|
180
175
|
// 11. Set request's cache mode to "no-store".
|
|
181
|
-
|
|
176
|
+
request.cache = 'no-store'
|
|
182
177
|
|
|
183
178
|
// 12. Set request's initiator type to "other".
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
initRequest.urlList = [new URL(this.#url)]
|
|
179
|
+
request.initiator = 'other'
|
|
187
180
|
|
|
188
181
|
// 13. Set ev's request to request.
|
|
189
|
-
this.#request =
|
|
182
|
+
this.#request = request
|
|
190
183
|
|
|
191
184
|
this.#connect()
|
|
192
185
|
}
|
|
@@ -292,6 +285,7 @@ class EventSource extends EventTarget {
|
|
|
292
285
|
|
|
293
286
|
const eventSourceStream = new EventSourceStream({
|
|
294
287
|
eventSourceSettings: this.#state,
|
|
288
|
+
maxEventSize: this.#dispatcher.eventSourceOptions?.maxEventSize,
|
|
295
289
|
push: (event) => {
|
|
296
290
|
this.dispatchEvent(createFastMessageEvent(
|
|
297
291
|
event.type,
|
|
@@ -351,8 +345,12 @@ class EventSource extends EventTarget {
|
|
|
351
345
|
// string, encoded as UTF-8.
|
|
352
346
|
// 2. Set (`Last-Event-ID`, lastEventIDValue) in request's header
|
|
353
347
|
// list.
|
|
348
|
+
this.#request.headersList.delete('last-event-id', true)
|
|
354
349
|
if (this.#state.lastEventId.length) {
|
|
355
|
-
|
|
350
|
+
const lastEventId = isomorphicDecode(textEncoder.encode(this.#state.lastEventId))
|
|
351
|
+
if (isValidHeaderValue(lastEventId)) {
|
|
352
|
+
this.#request.headersList.set('last-event-id', lastEventId, true)
|
|
353
|
+
}
|
|
356
354
|
}
|
|
357
355
|
|
|
358
356
|
// 4. Fetch request and process the response obtained in this fashion, if any, as described earlier in this section.
|
|
@@ -476,7 +474,8 @@ webidl.converters.EventSourceInitDict = webidl.dictionaryConverter([
|
|
|
476
474
|
},
|
|
477
475
|
{
|
|
478
476
|
key: 'dispatcher', // undici only
|
|
479
|
-
converter: webidl.converters.any
|
|
477
|
+
converter: webidl.converters.any,
|
|
478
|
+
defaultValue: () => getGlobalDispatcher()
|
|
480
479
|
},
|
|
481
480
|
{
|
|
482
481
|
key: 'node', // undici only
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { makeRequest } = require('../fetch/request')
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* Checks if the given value is a valid LastEventId.
|
|
5
7
|
* @param {string} value
|
|
@@ -23,7 +25,36 @@ function isASCIINumber (value) {
|
|
|
23
25
|
return true
|
|
24
26
|
}
|
|
25
27
|
|
|
28
|
+
function createPotentialCORSRequest (url, destination, corsAttributeState, sameOriginFallback) {
|
|
29
|
+
// 1. Let mode be "no-cors" if corsAttributeState is No CORS, and "cors" otherwise.
|
|
30
|
+
let mode = corsAttributeState === 'no cors' ? 'no-cors' : 'cors'
|
|
31
|
+
|
|
32
|
+
// 2. If same-origin fallback flag is set and mode is "no-cors", set mode to "same-origin".
|
|
33
|
+
if (sameOriginFallback && mode === 'no-cors') {
|
|
34
|
+
mode = 'same-origin'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// 3. Let credentialsMode be "include".
|
|
38
|
+
let credentialsMode = 'include'
|
|
39
|
+
|
|
40
|
+
// 4. If corsAttributeState is Anonymous, set credentialsMode to "same-origin".
|
|
41
|
+
if (corsAttributeState === 'anonymous') {
|
|
42
|
+
credentialsMode = 'same-origin'
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// 5. Return a new request whose URL is url, destination is destination, mode is mode,
|
|
46
|
+
// credentials mode is credentialsMode, and whose use-URL-credentials flag is set.
|
|
47
|
+
return makeRequest({
|
|
48
|
+
urlList: [url],
|
|
49
|
+
destination,
|
|
50
|
+
mode,
|
|
51
|
+
credentials: credentialsMode,
|
|
52
|
+
useURLCredentials: true
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
|
|
26
56
|
module.exports = {
|
|
27
57
|
isValidLastEventId,
|
|
28
|
-
isASCIINumber
|
|
58
|
+
isASCIINumber,
|
|
59
|
+
createPotentialCORSRequest
|
|
29
60
|
}
|
|
@@ -7,21 +7,16 @@ const {
|
|
|
7
7
|
fullyReadBody,
|
|
8
8
|
extractMimeType
|
|
9
9
|
} = require('./util')
|
|
10
|
-
const { FormData, setFormDataState } = require('./formdata')
|
|
10
|
+
const { FormData, setFormDataState, getFormDataBoundary } = require('./formdata')
|
|
11
11
|
const { webidl } = require('../webidl')
|
|
12
12
|
const assert = require('node:assert')
|
|
13
13
|
const { isErrored, isDisturbed } = require('node:stream')
|
|
14
14
|
const { isUint8Array } = require('node:util/types')
|
|
15
15
|
const { serializeAMimeType } = require('./data-url')
|
|
16
16
|
const { multipartFormDataParser } = require('./formdata-parser')
|
|
17
|
-
const { createDeferredPromise } = require('../../util/promise')
|
|
18
17
|
const { parseJSONFromBytes } = require('../infra')
|
|
19
18
|
const { utf8DecodeBytes } = require('../../encoding')
|
|
20
|
-
const {
|
|
21
|
-
|
|
22
|
-
const random = runtimeFeatures.has('crypto')
|
|
23
|
-
? require('node:crypto').randomInt
|
|
24
|
-
: (max) => Math.floor(Math.random() * max)
|
|
19
|
+
const { ReadableStreamTee } = require('node:stream/web')
|
|
25
20
|
|
|
26
21
|
const textEncoder = new TextEncoder()
|
|
27
22
|
function noop () {}
|
|
@@ -107,7 +102,7 @@ function extractBody (object, keepalive = false) {
|
|
|
107
102
|
// Set source to a copy of the bytes held by object.
|
|
108
103
|
source = webidl.util.getCopyOfBytesHeldByBufferSource(object)
|
|
109
104
|
} else if (webidl.is.FormData(object)) {
|
|
110
|
-
const boundary =
|
|
105
|
+
const boundary = getFormDataBoundary(object)
|
|
111
106
|
const prefix = `--${boundary}\r\nContent-Disposition: form-data`
|
|
112
107
|
|
|
113
108
|
/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
|
|
@@ -285,7 +280,7 @@ function cloneBody (body) {
|
|
|
285
280
|
// https://fetch.spec.whatwg.org/#concept-body-clone
|
|
286
281
|
|
|
287
282
|
// 1. Let « out1, out2 » be the result of teeing body’s stream.
|
|
288
|
-
const { 0: out1, 1: out2 } = body.stream.tee()
|
|
283
|
+
const { 0: out1, 1: out2 } = ReadableStreamTee?.(body.stream, true) ?? body.stream.tee()
|
|
289
284
|
|
|
290
285
|
// 2. Set body’s stream to out1.
|
|
291
286
|
body.stream = out1
|
|
@@ -398,6 +393,49 @@ function bodyMixinMethods (instance, getInternalState) {
|
|
|
398
393
|
return consumeBody(this, (bytes) => {
|
|
399
394
|
return new Uint8Array(bytes)
|
|
400
395
|
}, instance, getInternalState)
|
|
396
|
+
},
|
|
397
|
+
|
|
398
|
+
textStream () {
|
|
399
|
+
const this_ = getInternalState(this)
|
|
400
|
+
|
|
401
|
+
// 1. If this is unusable, then throw a TypeError.
|
|
402
|
+
if (bodyUnusable(this_)) {
|
|
403
|
+
throw new TypeError('Body is unusable: Body has already been read')
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// 2. If this’s body is null:
|
|
407
|
+
if (this_.body == null) {
|
|
408
|
+
// 2.1. Let emptyStream be a new ReadableStream in this’s relevant realm.
|
|
409
|
+
// 2.2. Set up emptyStream.
|
|
410
|
+
/** @type {ReadableStreamDefaultController<any>} */
|
|
411
|
+
let controller
|
|
412
|
+
const emptyStream = new ReadableStream({
|
|
413
|
+
start: (c) => {
|
|
414
|
+
controller = c
|
|
415
|
+
},
|
|
416
|
+
pull: () => Promise.resolve(),
|
|
417
|
+
cancel: () => Promise.resolve()
|
|
418
|
+
}, {
|
|
419
|
+
size: () => 1
|
|
420
|
+
})
|
|
421
|
+
|
|
422
|
+
// 2.3. Close emptyStream.
|
|
423
|
+
controller.close()
|
|
424
|
+
|
|
425
|
+
// 2.4. Return emptyStream.
|
|
426
|
+
return emptyStream
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// 3. Let stream be this’s body’s stream.
|
|
430
|
+
/** @type {ReadableStream} */
|
|
431
|
+
const stream = this_.body.stream
|
|
432
|
+
|
|
433
|
+
// 4. Let decoder be a new TextDecoderStream object in this’s relevant realm.
|
|
434
|
+
// 5. Set up decoder with UTF-8.
|
|
435
|
+
const decoder = new TextDecoderStream('UTF-8')
|
|
436
|
+
|
|
437
|
+
// 6. Return the result of stream, piped through decoder.
|
|
438
|
+
return stream.pipeThrough(decoder)
|
|
401
439
|
}
|
|
402
440
|
}
|
|
403
441
|
|
|
@@ -431,7 +469,7 @@ function consumeBody (object, convertBytesToJSValue, instance, getInternalState)
|
|
|
431
469
|
}
|
|
432
470
|
|
|
433
471
|
// 2. Let promise be a new promise.
|
|
434
|
-
const promise =
|
|
472
|
+
const promise = Promise.withResolvers()
|
|
435
473
|
|
|
436
474
|
// 3. Let errorSteps given error be to reject promise with error.
|
|
437
475
|
const errorSteps = promise.reject
|
|
@@ -46,7 +46,7 @@ const referrerPolicyTokensSet = new Set(referrerPolicyTokens)
|
|
|
46
46
|
|
|
47
47
|
const requestRedirect = /** @type {const} */ (['follow', 'manual', 'error'])
|
|
48
48
|
|
|
49
|
-
const safeMethods = /** @type {const} */ (['GET', 'HEAD', 'OPTIONS', 'TRACE'])
|
|
49
|
+
const safeMethods = /** @type {const} */ (['GET', 'HEAD', 'OPTIONS', 'TRACE', 'QUERY'])
|
|
50
50
|
const safeMethodsSet = new Set(safeMethods)
|
|
51
51
|
|
|
52
52
|
const requestMode = /** @type {const} */ (['navigate', 'same-origin', 'no-cors', 'cors'])
|
|
@@ -4,10 +4,16 @@ const { iteratorMixin } = require('./util')
|
|
|
4
4
|
const { kEnumerableProperty } = require('../../core/util')
|
|
5
5
|
const { webidl } = require('../webidl')
|
|
6
6
|
const nodeUtil = require('node:util')
|
|
7
|
+
const { runtimeFeatures } = require('../../util/runtime-features.js')
|
|
8
|
+
|
|
9
|
+
const random = runtimeFeatures.has('crypto')
|
|
10
|
+
? require('node:crypto').randomInt
|
|
11
|
+
: (max) => Math.floor(Math.random() * max)
|
|
7
12
|
|
|
8
13
|
// https://xhr.spec.whatwg.org/#formdata
|
|
9
14
|
class FormData {
|
|
10
15
|
#state = []
|
|
16
|
+
#boundary = null
|
|
11
17
|
|
|
12
18
|
constructor (form = undefined) {
|
|
13
19
|
webidl.util.markAsUncloneable(this)
|
|
@@ -192,11 +198,24 @@ class FormData {
|
|
|
192
198
|
static setFormDataState (formData, newState) {
|
|
193
199
|
formData.#state = newState
|
|
194
200
|
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* @param {FormData} formData
|
|
204
|
+
* @returns {string | null}
|
|
205
|
+
*/
|
|
206
|
+
static getFormDataBoundary (formData) {
|
|
207
|
+
const boundary = formData.#boundary
|
|
208
|
+
if (boundary != null) return boundary
|
|
209
|
+
|
|
210
|
+
// eslint-disable-next-line no-return-assign
|
|
211
|
+
return formData.#boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}`
|
|
212
|
+
}
|
|
195
213
|
}
|
|
196
214
|
|
|
197
|
-
const { getFormDataState, setFormDataState } = FormData
|
|
215
|
+
const { getFormDataState, setFormDataState, getFormDataBoundary } = FormData
|
|
198
216
|
Reflect.deleteProperty(FormData, 'getFormDataState')
|
|
199
217
|
Reflect.deleteProperty(FormData, 'setFormDataState')
|
|
218
|
+
Reflect.deleteProperty(FormData, 'getFormDataBoundary')
|
|
200
219
|
|
|
201
220
|
iteratorMixin('FormData', FormData, getFormDataState, 'name', 'value')
|
|
202
221
|
|
|
@@ -256,4 +275,4 @@ function makeEntry (name, value, filename) {
|
|
|
256
275
|
|
|
257
276
|
webidl.is.FormData = webidl.util.MakeTypeAssertion(FormData)
|
|
258
277
|
|
|
259
|
-
module.exports = { FormData, makeEntry, setFormDataState }
|
|
278
|
+
module.exports = { FormData, makeEntry, setFormDataState, getFormDataBoundary }
|