@openclaw/slack 2026.9.6 → 2026.9.7
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
|
@@ -6,6 +6,7 @@ const {
|
|
|
6
6
|
kNeedDrain,
|
|
7
7
|
kAddClient,
|
|
8
8
|
kGetDispatcher,
|
|
9
|
+
kHasDispatcher,
|
|
9
10
|
kRemoveClient
|
|
10
11
|
} = require('./pool-base')
|
|
11
12
|
const Client = require('./client')
|
|
@@ -36,6 +37,7 @@ class Pool extends PoolBase {
|
|
|
36
37
|
autoSelectFamily,
|
|
37
38
|
autoSelectFamilyAttemptTimeout,
|
|
38
39
|
allowH2,
|
|
40
|
+
useH2c,
|
|
39
41
|
clientTtl,
|
|
40
42
|
...options
|
|
41
43
|
} = {}) {
|
|
@@ -56,6 +58,7 @@ class Pool extends PoolBase {
|
|
|
56
58
|
...tls,
|
|
57
59
|
maxCachedSessions,
|
|
58
60
|
allowH2,
|
|
61
|
+
useH2c,
|
|
59
62
|
socketPath,
|
|
60
63
|
timeout: connectTimeout,
|
|
61
64
|
...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),
|
|
@@ -67,10 +70,7 @@ class Pool extends PoolBase {
|
|
|
67
70
|
|
|
68
71
|
this[kConnections] = connections || null
|
|
69
72
|
this[kUrl] = util.parseOrigin(origin)
|
|
70
|
-
this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath }
|
|
71
|
-
this[kOptions].interceptors = options.interceptors
|
|
72
|
-
? { ...options.interceptors }
|
|
73
|
-
: undefined
|
|
73
|
+
this[kOptions] = { ...util.deepClone(options), connect, allowH2, useH2c, clientTtl, socketPath }
|
|
74
74
|
this[kFactory] = factory
|
|
75
75
|
|
|
76
76
|
this.on('connect', (origin, targets) => {
|
|
@@ -98,10 +98,13 @@ class Pool extends PoolBase {
|
|
|
98
98
|
|
|
99
99
|
[kGetDispatcher] () {
|
|
100
100
|
const clientTtlOption = this[kOptions].clientTtl
|
|
101
|
-
for (
|
|
101
|
+
for (let i = 0; i < this[kClients].length; i++) {
|
|
102
|
+
const client = this[kClients][i]
|
|
103
|
+
|
|
102
104
|
// check ttl of client and if it's stale, remove it from the pool
|
|
103
105
|
if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {
|
|
104
106
|
this[kRemoveClient](client)
|
|
107
|
+
i--
|
|
105
108
|
} else if (!client[kNeedDrain]) {
|
|
106
109
|
return client
|
|
107
110
|
}
|
|
@@ -113,6 +116,28 @@ class Pool extends PoolBase {
|
|
|
113
116
|
return dispatcher
|
|
114
117
|
}
|
|
115
118
|
}
|
|
119
|
+
|
|
120
|
+
[kHasDispatcher] () {
|
|
121
|
+
const clientTtlOption = this[kOptions].clientTtl
|
|
122
|
+
for (let i = 0; i < this[kClients].length; i++) {
|
|
123
|
+
const client = this[kClients][i]
|
|
124
|
+
|
|
125
|
+
if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {
|
|
126
|
+
this[kRemoveClient](client)
|
|
127
|
+
i--
|
|
128
|
+
} else if (!client[kNeedDrain]) {
|
|
129
|
+
return true
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (!this[kConnections] || this[kClients].length < this[kConnections]) {
|
|
134
|
+
const dispatcher = this[kFactory](this[kUrl], this[kOptions])
|
|
135
|
+
this[kAddClient](dispatcher)
|
|
136
|
+
return true
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return false
|
|
140
|
+
}
|
|
116
141
|
}
|
|
117
142
|
|
|
118
143
|
module.exports = Pool
|
|
@@ -4,11 +4,12 @@ const { kProxy, kClose, kDestroy, kDispatch } = require('../core/symbols')
|
|
|
4
4
|
const Agent = require('./agent')
|
|
5
5
|
const Pool = require('./pool')
|
|
6
6
|
const DispatcherBase = require('./dispatcher-base')
|
|
7
|
-
const { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require('../core/errors')
|
|
7
|
+
const { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError, ProxyConnectionError } = require('../core/errors')
|
|
8
8
|
const buildConnector = require('../core/connect')
|
|
9
9
|
const Client = require('./client')
|
|
10
10
|
const { channels } = require('../core/diagnostics')
|
|
11
11
|
const Socks5ProxyAgent = require('./socks5-proxy-agent')
|
|
12
|
+
const { hasSafeIterator } = require('../core/util')
|
|
12
13
|
|
|
13
14
|
const kAgent = Symbol('proxy agent')
|
|
14
15
|
const kClient = Symbol('proxy client')
|
|
@@ -16,7 +17,9 @@ const kProxyHeaders = Symbol('proxy headers')
|
|
|
16
17
|
const kRequestTls = Symbol('request tls settings')
|
|
17
18
|
const kProxyTls = Symbol('proxy tls settings')
|
|
18
19
|
const kConnectEndpoint = Symbol('connect endpoint function')
|
|
20
|
+
const kConnectEndpointHTTP1 = Symbol('connect endpoint function (http/1.1 only)')
|
|
19
21
|
const kTunnelProxy = Symbol('tunnel proxy')
|
|
22
|
+
const proxyAuthorization = 'proxy-authorization'
|
|
20
23
|
|
|
21
24
|
function defaultProtocolPort (protocol) {
|
|
22
25
|
return protocol === 'https:' ? 443 : 80
|
|
@@ -35,10 +38,15 @@ function defaultAgentFactory (origin, opts) {
|
|
|
35
38
|
return new Pool(origin, opts)
|
|
36
39
|
}
|
|
37
40
|
|
|
41
|
+
function shouldProxyTunnel (requestProtocol, proxyTunnel) {
|
|
42
|
+
return proxyTunnel === true || requestProtocol !== 'http:'
|
|
43
|
+
}
|
|
44
|
+
|
|
38
45
|
class Http1ProxyWrapper extends DispatcherBase {
|
|
39
46
|
#client
|
|
47
|
+
#proxyServername
|
|
40
48
|
|
|
41
|
-
constructor (proxyUrl, { headers = {}, connect, factory }) {
|
|
49
|
+
constructor (proxyUrl, { headers = {}, connect, factory, proxyServername }) {
|
|
42
50
|
if (!proxyUrl) {
|
|
43
51
|
throw new InvalidArgumentError('Proxy URL is mandatory')
|
|
44
52
|
}
|
|
@@ -46,6 +54,7 @@ class Http1ProxyWrapper extends DispatcherBase {
|
|
|
46
54
|
super()
|
|
47
55
|
|
|
48
56
|
this[kProxyHeaders] = headers
|
|
57
|
+
this.#proxyServername = proxyServername
|
|
49
58
|
if (factory) {
|
|
50
59
|
this.#client = factory(proxyUrl, { connect })
|
|
51
60
|
} else {
|
|
@@ -54,15 +63,15 @@ class Http1ProxyWrapper extends DispatcherBase {
|
|
|
54
63
|
}
|
|
55
64
|
|
|
56
65
|
[kDispatch] (opts, handler) {
|
|
57
|
-
const
|
|
58
|
-
handler.
|
|
66
|
+
const onResponseStart = handler.onResponseStart
|
|
67
|
+
handler.onResponseStart = function (controller, statusCode, data, statusMessage) {
|
|
59
68
|
if (statusCode === 407) {
|
|
60
|
-
if (typeof handler.
|
|
61
|
-
handler.
|
|
69
|
+
if (typeof handler.onResponseError === 'function') {
|
|
70
|
+
handler.onResponseError(controller, new InvalidArgumentError('Proxy Authentication Required (407)'))
|
|
62
71
|
}
|
|
63
72
|
return
|
|
64
73
|
}
|
|
65
|
-
if (
|
|
74
|
+
if (onResponseStart) onResponseStart.call(this, controller, statusCode, data, statusMessage)
|
|
66
75
|
}
|
|
67
76
|
|
|
68
77
|
// Rewrite request as an HTTP1 Proxy request, without tunneling.
|
|
@@ -80,6 +89,13 @@ class Http1ProxyWrapper extends DispatcherBase {
|
|
|
80
89
|
}
|
|
81
90
|
opts.headers = { ...this[kProxyHeaders], ...headers }
|
|
82
91
|
|
|
92
|
+
// Pin the SNI/cert hostname to the proxy. Without this the underlying
|
|
93
|
+
// Client would derive it from the (rewritten) Host header, which points
|
|
94
|
+
// at the target — wrong for the TLS handshake to the proxy itself.
|
|
95
|
+
if (this.#proxyServername != null) {
|
|
96
|
+
opts.servername = this.#proxyServername
|
|
97
|
+
}
|
|
98
|
+
|
|
83
99
|
return this.#client[kDispatch](opts, handler)
|
|
84
100
|
}
|
|
85
101
|
|
|
@@ -103,9 +119,9 @@ class ProxyAgent extends DispatcherBase {
|
|
|
103
119
|
throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.')
|
|
104
120
|
}
|
|
105
121
|
|
|
106
|
-
const { proxyTunnel
|
|
122
|
+
const { proxyTunnel, connectTimeout } = opts
|
|
107
123
|
|
|
108
|
-
super()
|
|
124
|
+
super(opts)
|
|
109
125
|
|
|
110
126
|
const url = this.#getUrl(opts)
|
|
111
127
|
const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url
|
|
@@ -125,10 +141,14 @@ class ProxyAgent extends DispatcherBase {
|
|
|
125
141
|
this[kProxyHeaders]['proxy-authorization'] = opts.token
|
|
126
142
|
} else if (username && password) {
|
|
127
143
|
this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString('base64')}`
|
|
144
|
+
} else if (username) {
|
|
145
|
+
this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:`).toString('base64')}`
|
|
128
146
|
}
|
|
129
147
|
|
|
130
|
-
const connect = buildConnector({ ...opts.proxyTls })
|
|
131
|
-
|
|
148
|
+
const connect = buildConnector({ timeout: connectTimeout, ...opts.proxyTls })
|
|
149
|
+
const connectHTTP1 = buildConnector({ timeout: connectTimeout, ...opts.proxyTls, allowH2: false })
|
|
150
|
+
this[kConnectEndpoint] = buildConnector({ timeout: connectTimeout, ...opts.requestTls })
|
|
151
|
+
this[kConnectEndpointHTTP1] = buildConnector({ timeout: connectTimeout, ...opts.requestTls, allowH2: false })
|
|
132
152
|
|
|
133
153
|
const agentFactory = opts.factory || defaultAgentFactory
|
|
134
154
|
const factory = (origin, options) => {
|
|
@@ -142,16 +162,29 @@ class ProxyAgent extends DispatcherBase {
|
|
|
142
162
|
factory: agentFactory,
|
|
143
163
|
username: opts.username || username,
|
|
144
164
|
password: opts.password || password,
|
|
165
|
+
connectTimeout,
|
|
145
166
|
proxyTls: opts.proxyTls,
|
|
146
167
|
requestTls: opts.requestTls
|
|
147
168
|
})
|
|
148
169
|
}
|
|
149
170
|
|
|
150
|
-
if (!
|
|
171
|
+
if (!shouldProxyTunnel(protocol, this[kTunnelProxy])) {
|
|
172
|
+
const forwardConnect = this[kProxy].protocol === 'https:'
|
|
173
|
+
? (opts, cb) => connectHTTP1(opts, (err, socket) => {
|
|
174
|
+
if (err && err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {
|
|
175
|
+
cb(new SecureProxyConnectionError(err))
|
|
176
|
+
} else {
|
|
177
|
+
cb(err, socket)
|
|
178
|
+
}
|
|
179
|
+
})
|
|
180
|
+
: connectHTTP1
|
|
151
181
|
return new Http1ProxyWrapper(this[kProxy].uri, {
|
|
152
182
|
headers: this[kProxyHeaders],
|
|
153
|
-
connect,
|
|
154
|
-
factory: agentFactory
|
|
183
|
+
connect: forwardConnect,
|
|
184
|
+
factory: agentFactory,
|
|
185
|
+
proxyServername: this[kProxy].protocol === 'https:'
|
|
186
|
+
? (this[kProxyTls]?.servername || proxyHostname)
|
|
187
|
+
: undefined
|
|
155
188
|
})
|
|
156
189
|
}
|
|
157
190
|
return agentFactory(origin, options)
|
|
@@ -217,11 +250,23 @@ class ProxyAgent extends DispatcherBase {
|
|
|
217
250
|
} else {
|
|
218
251
|
servername = opts.servername
|
|
219
252
|
}
|
|
220
|
-
|
|
253
|
+
const connectEndpoint = opts.allowH2 === false
|
|
254
|
+
? this[kConnectEndpointHTTP1]
|
|
255
|
+
: this[kConnectEndpoint]
|
|
256
|
+
|
|
257
|
+
connectEndpoint({ ...opts, servername, httpSocket: socket }, callback)
|
|
221
258
|
} catch (err) {
|
|
222
259
|
if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {
|
|
223
260
|
// Throw a custom error to avoid loop in client.js#connect
|
|
224
261
|
callback(new SecureProxyConnectionError(err))
|
|
262
|
+
} else if (err.code === 'UND_ERR_SOCKET') {
|
|
263
|
+
// A socket failure while establishing the tunnel means the CONNECT
|
|
264
|
+
// never completed, so there is nothing to recover - the proxy just
|
|
265
|
+
// tore down the connection. client.js#onError treats UND_ERR_SOCKET
|
|
266
|
+
// as a recoverable error on an established connection and leaves the
|
|
267
|
+
// request queued, which makes connect() retry forever. Surface it as
|
|
268
|
+
// a non-recoverable proxy error so the request fails instead. (#3897)
|
|
269
|
+
callback(new ProxyConnectionError(err))
|
|
225
270
|
} else {
|
|
226
271
|
callback(err)
|
|
227
272
|
}
|
|
@@ -291,12 +336,31 @@ function buildHeaders (headers) {
|
|
|
291
336
|
const headersPair = {}
|
|
292
337
|
|
|
293
338
|
for (let i = 0; i < headers.length; i += 2) {
|
|
339
|
+
if (isProxyAuthorizationHeader(headers[i])) {
|
|
340
|
+
throwProxyAuthError()
|
|
341
|
+
}
|
|
342
|
+
|
|
294
343
|
headersPair[headers[i]] = headers[i + 1]
|
|
295
344
|
}
|
|
296
345
|
|
|
297
346
|
return headersPair
|
|
298
347
|
}
|
|
299
348
|
|
|
349
|
+
// Materialize iterable header containers (e.g. Map, Headers) into a record so
|
|
350
|
+
// that throwIfProxyAuthIsSent() can inspect their entries. Object.keys and
|
|
351
|
+
// for...in see nothing on a Map/Headers instance, so without this the
|
|
352
|
+
// Proxy-Authorization guard is bypassed and proxy credentials can reach the
|
|
353
|
+
// origin server (GHSA-6cv7-626c-qhqw).
|
|
354
|
+
if (headers && typeof headers === 'object' && hasSafeIterator(headers)) {
|
|
355
|
+
const headersPair = {}
|
|
356
|
+
|
|
357
|
+
for (const [key, value] of headers) {
|
|
358
|
+
headersPair[key] = value
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
return headersPair
|
|
362
|
+
}
|
|
363
|
+
|
|
300
364
|
return headers
|
|
301
365
|
}
|
|
302
366
|
|
|
@@ -309,11 +373,23 @@ function buildHeaders (headers) {
|
|
|
309
373
|
* It should be removed in the next major version for performance reasons
|
|
310
374
|
*/
|
|
311
375
|
function throwIfProxyAuthIsSent (headers) {
|
|
312
|
-
const
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
376
|
+
for (const key in headers) {
|
|
377
|
+
if (isProxyAuthorizationHeader(key)) {
|
|
378
|
+
throwProxyAuthError()
|
|
379
|
+
}
|
|
316
380
|
}
|
|
317
381
|
}
|
|
318
382
|
|
|
383
|
+
/**
|
|
384
|
+
* @param {string} key
|
|
385
|
+
* @returns {boolean}
|
|
386
|
+
*/
|
|
387
|
+
function isProxyAuthorizationHeader (key) {
|
|
388
|
+
return key.length === proxyAuthorization.length && key.toLowerCase() === proxyAuthorization
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
function throwProxyAuthError () {
|
|
392
|
+
throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor')
|
|
393
|
+
}
|
|
394
|
+
|
|
319
395
|
module.exports = ProxyAgent
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const Dispatcher = require('./dispatcher')
|
|
4
4
|
const RetryHandler = require('../handler/retry-handler')
|
|
5
|
+
const { kOriginless, kUrl } = require('../core/symbols')
|
|
5
6
|
|
|
6
7
|
class RetryAgent extends Dispatcher {
|
|
7
8
|
#agent = null
|
|
@@ -10,6 +11,8 @@ class RetryAgent extends Dispatcher {
|
|
|
10
11
|
super(options)
|
|
11
12
|
this.#agent = agent
|
|
12
13
|
this.#options = options
|
|
14
|
+
this[kUrl] = agent[kUrl]
|
|
15
|
+
this[kOriginless] = agent[kOriginless]
|
|
13
16
|
}
|
|
14
17
|
|
|
15
18
|
dispatch (opts, handler) {
|
|
@@ -6,6 +6,7 @@ const {
|
|
|
6
6
|
kNeedDrain,
|
|
7
7
|
kAddClient,
|
|
8
8
|
kGetDispatcher,
|
|
9
|
+
kHasDispatcher,
|
|
9
10
|
kRemoveClient
|
|
10
11
|
} = require('./pool-base')
|
|
11
12
|
const Client = require('./client')
|
|
@@ -64,14 +65,11 @@ class RoundRobinPool extends PoolBase {
|
|
|
64
65
|
})
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
super()
|
|
68
|
+
super(options)
|
|
68
69
|
|
|
69
70
|
this[kConnections] = connections || null
|
|
70
71
|
this[kUrl] = util.parseOrigin(origin)
|
|
71
72
|
this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath }
|
|
72
|
-
this[kOptions].interceptors = options.interceptors
|
|
73
|
-
? { ...options.interceptors }
|
|
74
|
-
: undefined
|
|
75
73
|
this[kFactory] = factory
|
|
76
74
|
this[kIndex] = -1
|
|
77
75
|
|
|
@@ -95,10 +93,9 @@ class RoundRobinPool extends PoolBase {
|
|
|
95
93
|
|
|
96
94
|
[kGetDispatcher] () {
|
|
97
95
|
const clientTtlOption = this[kOptions].clientTtl
|
|
98
|
-
const clientsLength = this[kClients].length
|
|
99
96
|
|
|
100
97
|
// If we have no clients yet, create one
|
|
101
|
-
if (
|
|
98
|
+
if (this[kClients].length === 0) {
|
|
102
99
|
const dispatcher = this[kFactory](this[kUrl], this[kOptions])
|
|
103
100
|
this[kAddClient](dispatcher)
|
|
104
101
|
return dispatcher
|
|
@@ -106,14 +103,14 @@ class RoundRobinPool extends PoolBase {
|
|
|
106
103
|
|
|
107
104
|
// Round-robin through existing clients
|
|
108
105
|
let checked = 0
|
|
109
|
-
while (checked <
|
|
110
|
-
this[kIndex] = (this[kIndex] + 1) %
|
|
106
|
+
while (checked < this[kClients].length) {
|
|
107
|
+
this[kIndex] = (this[kIndex] + 1) % this[kClients].length
|
|
111
108
|
const client = this[kClients][this[kIndex]]
|
|
112
109
|
|
|
113
110
|
// Check if client is stale (TTL expired)
|
|
114
111
|
if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {
|
|
115
112
|
this[kRemoveClient](client)
|
|
116
|
-
|
|
113
|
+
this[kIndex]--
|
|
117
114
|
continue
|
|
118
115
|
}
|
|
119
116
|
|
|
@@ -126,12 +123,37 @@ class RoundRobinPool extends PoolBase {
|
|
|
126
123
|
}
|
|
127
124
|
|
|
128
125
|
// All clients are busy, create a new one if we haven't reached the limit
|
|
129
|
-
if (!this[kConnections] ||
|
|
126
|
+
if (!this[kConnections] || this[kClients].length < this[kConnections]) {
|
|
130
127
|
const dispatcher = this[kFactory](this[kUrl], this[kOptions])
|
|
131
128
|
this[kAddClient](dispatcher)
|
|
132
129
|
return dispatcher
|
|
133
130
|
}
|
|
134
131
|
}
|
|
132
|
+
|
|
133
|
+
[kHasDispatcher] () {
|
|
134
|
+
const clientTtlOption = this[kOptions].clientTtl
|
|
135
|
+
for (let i = 0; i < this[kClients].length; i++) {
|
|
136
|
+
const client = this[kClients][i]
|
|
137
|
+
|
|
138
|
+
if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {
|
|
139
|
+
this[kRemoveClient](client)
|
|
140
|
+
if (i <= this[kIndex]) {
|
|
141
|
+
this[kIndex]--
|
|
142
|
+
}
|
|
143
|
+
i--
|
|
144
|
+
} else if (!client[kNeedDrain]) {
|
|
145
|
+
return true
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (!this[kConnections] || this[kClients].length < this[kConnections]) {
|
|
150
|
+
const dispatcher = this[kFactory](this[kUrl], this[kOptions])
|
|
151
|
+
this[kAddClient](dispatcher)
|
|
152
|
+
return true
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return false
|
|
156
|
+
}
|
|
135
157
|
}
|
|
136
158
|
|
|
137
159
|
module.exports = RoundRobinPool
|