@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
|
@@ -1,27 +1,49 @@
|
|
|
1
1
|
# Client Lifecycle
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*
|
|
20
|
-
|
|
21
|
-
*
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
<!--type=misc-->
|
|
4
|
+
|
|
5
|
+
A {Client} can be understood as a state machine. As requests are dispatched,
|
|
6
|
+
processed, and drained, the client moves through a well-defined set of states
|
|
7
|
+
until it is eventually destroyed. This document describes those states and the
|
|
8
|
+
transitions between them.
|
|
9
|
+
|
|
10
|
+
The {Client} class is not literally implemented as a state machine, so the
|
|
11
|
+
actual execution may deviate slightly from what is described here. Treat this
|
|
12
|
+
guide as a conceptual model for reasoning about a client's behavior rather than
|
|
13
|
+
as a formal specification.
|
|
14
|
+
|
|
15
|
+
## State transition overview
|
|
16
|
+
|
|
17
|
+
* A {Client} begins in the **idle** state with no socket connection and no
|
|
18
|
+
queued requests.
|
|
19
|
+
* The *connect* transition moves the {Client} to the **pending** state, where
|
|
20
|
+
requests can be queued before they are processed.
|
|
21
|
+
* Calling [`client.close()`][] or [`client.destroy()`][] moves the {Client}
|
|
22
|
+
to the **destroyed** state. Because there are no queued requests in this
|
|
23
|
+
state, *close* transitions straight to **destroyed**.
|
|
24
|
+
* The **pending** state indicates that the underlying socket connection has been
|
|
25
|
+
established and that requests are queueing.
|
|
26
|
+
* The *process* transition moves the {Client} to the **processing** state,
|
|
27
|
+
where requests are processed.
|
|
28
|
+
* If requests are queued, *close* transitions to **processing**; otherwise it
|
|
29
|
+
transitions to **destroyed**.
|
|
30
|
+
* The *destroy* transition moves the {Client} to **destroyed**.
|
|
31
|
+
* The **processing** state initializes to the **processing.running** sub-state.
|
|
32
|
+
* If the current request body requires draining, *needDrain* moves the
|
|
33
|
+
{Client} into the **processing.busy** sub-state, which returns to
|
|
34
|
+
**processing.running** once *drainComplete* fires.
|
|
35
|
+
* After all queued requests complete, *keepalive* moves the {Client} back to
|
|
36
|
+
the **pending** state. If no requests are queued before the socket times
|
|
37
|
+
out, the {Client} transitions to **idle**.
|
|
38
|
+
* If *close* is fired while the {Client} still has queued requests, the
|
|
39
|
+
{Client} transitions to **processing.closing**, where it completes all
|
|
40
|
+
outstanding requests before firing *done*.
|
|
41
|
+
* The *done* transition moves the {Client} gracefully to **destroyed**.
|
|
42
|
+
* At any time, *destroy* moves the {Client} from **processing** to
|
|
43
|
+
**destroyed**, aborting any queued requests.
|
|
44
|
+
* The **destroyed** state is final; the {Client} is no longer functional.
|
|
45
|
+
|
|
46
|
+
A state diagram representing a {Client} instance:
|
|
25
47
|
|
|
26
48
|
```mermaid
|
|
27
49
|
stateDiagram-v2
|
|
@@ -54,38 +76,84 @@ stateDiagram-v2
|
|
|
54
76
|
closing --> [*] : done
|
|
55
77
|
}
|
|
56
78
|
```
|
|
79
|
+
|
|
57
80
|
## State details
|
|
58
81
|
|
|
59
82
|
### idle
|
|
60
83
|
|
|
61
|
-
|
|
84
|
+
**idle** is the initial state of a {Client} instance. Although an `origin` is
|
|
85
|
+
required to construct a {Client}, the underlying socket connection is not
|
|
86
|
+
established until a request is queued through [`client.dispatch()`][]. Calling
|
|
87
|
+
`client.dispatch()` directly, or through one of its higher-level wrappers
|
|
88
|
+
([`client.connect()`][], [`client.pipeline()`][], [`client.request()`][],
|
|
89
|
+
[`client.stream()`][], or [`client.upgrade()`][]), moves the {Client} from
|
|
90
|
+
**idle** to **pending**, and then usually directly on to **processing**.
|
|
62
91
|
|
|
63
|
-
Calling [`
|
|
92
|
+
Calling [`client.close()`][] or [`client.destroy()`][] in this state moves the
|
|
93
|
+
{Client} straight to **destroyed**, since there are no queued requests.
|
|
64
94
|
|
|
65
95
|
### pending
|
|
66
96
|
|
|
67
|
-
|
|
97
|
+
**pending** signifies a connected but non-processing {Client}. On entering this
|
|
98
|
+
state, the {Client} establishes a socket connection and emits the
|
|
99
|
+
[`'connect'`][] event, signalling that a connection to the `origin` supplied at
|
|
100
|
+
construction time has been established. The internal queue starts empty, and
|
|
101
|
+
requests can begin queueing.
|
|
68
102
|
|
|
69
|
-
Calling [`
|
|
103
|
+
Calling [`client.close()`][] with queued requests moves the {Client} to the
|
|
104
|
+
**processing** state; without queued requests it moves to **destroyed**.
|
|
70
105
|
|
|
71
|
-
Calling [`
|
|
106
|
+
Calling [`client.destroy()`][] moves the {Client} directly to **destroyed**,
|
|
107
|
+
regardless of any queued requests.
|
|
72
108
|
|
|
73
109
|
### processing
|
|
74
110
|
|
|
75
|
-
|
|
111
|
+
**processing** is itself a sub-state machine that initializes to the
|
|
112
|
+
**processing.running** sub-state. [`client.dispatch()`][], [`client.close()`][],
|
|
113
|
+
and [`client.destroy()`][] can all be called while the {Client} is in this
|
|
114
|
+
state. `client.dispatch()` queues additional requests while existing ones
|
|
115
|
+
continue to be processed, `client.close()` moves the {Client} to the
|
|
116
|
+
**processing.closing** sub-state, and `client.destroy()` moves it to
|
|
117
|
+
**destroyed**.
|
|
76
118
|
|
|
77
119
|
#### running
|
|
78
120
|
|
|
79
|
-
In
|
|
121
|
+
In **processing.running**, queued requests are processed in FIFO order. If a
|
|
122
|
+
request body requires draining, *needDrain* moves the {Client} to the
|
|
123
|
+
**processing.busy** sub-state. The *close* transition moves the {Client} to the
|
|
124
|
+
**processing.closing** sub-state. When all queued requests have completed and
|
|
125
|
+
neither [`client.close()`][] nor [`client.destroy()`][] has been called, the
|
|
126
|
+
*keepalive* transition moves the {Client} back to the **pending** state. There
|
|
127
|
+
the {Client} waits for the socket connection to time out; once it does, the
|
|
128
|
+
{Client} returns to the **idle** state.
|
|
80
129
|
|
|
81
130
|
#### busy
|
|
82
131
|
|
|
83
|
-
This sub-state is only
|
|
132
|
+
This sub-state is entered only when a request body is a {stream.Readable} that
|
|
133
|
+
requires draining. The {Client} cannot process additional requests while in
|
|
134
|
+
this state and waits until the current request body has been fully drained
|
|
135
|
+
before returning to **processing.running**.
|
|
84
136
|
|
|
85
137
|
#### closing
|
|
86
138
|
|
|
87
|
-
This sub-state is only
|
|
139
|
+
This sub-state is entered only when a {Client} has queued requests and
|
|
140
|
+
[`client.close()`][] is called. The {Client} continues to process requests as
|
|
141
|
+
usual, except that no additional requests may be queued. Once all queued
|
|
142
|
+
requests have been processed, *done* fires and the {Client} moves gracefully to
|
|
143
|
+
**destroyed** without an error.
|
|
88
144
|
|
|
89
145
|
### destroyed
|
|
90
146
|
|
|
91
|
-
|
|
147
|
+
**destroyed** is the final state of a {Client} instance. Once in this state, the
|
|
148
|
+
{Client} is no longer functional, and calling any further {Client} method
|
|
149
|
+
rejects or fails with a {ClientDestroyedError}.
|
|
150
|
+
|
|
151
|
+
[`'connect'`]: Client.md#event-connect
|
|
152
|
+
[`client.close()`]: Client.md#clientclosecallback
|
|
153
|
+
[`client.connect()`]: Client.md#clientconnectoptions-callback
|
|
154
|
+
[`client.destroy()`]: Client.md#clientdestroyerror-callback
|
|
155
|
+
[`client.dispatch()`]: Client.md#clientdispatchoptions-handlers
|
|
156
|
+
[`client.pipeline()`]: Client.md#clientpipelineoptions-handler
|
|
157
|
+
[`client.request()`]: Client.md#clientrequestoptions-callback
|
|
158
|
+
[`client.stream()`]: Client.md#clientstreamoptions-factory-callback
|
|
159
|
+
[`client.upgrade()`]: Client.md#clientupgradeoptions-callback
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Client certificate
|
|
2
2
|
|
|
3
|
+
<!--type=misc-->
|
|
4
|
+
|
|
3
5
|
Client certificate authentication can be configured with the `Client`, the required options are passed along through the `connect` option.
|
|
4
6
|
|
|
5
7
|
The client certificates must be signed by a trusted CA. The Node.js default is to trust the well-known CAs curated by Mozilla.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Crawling
|
|
2
2
|
|
|
3
|
+
<!--type=misc-->
|
|
4
|
+
|
|
3
5
|
[RFC 9309](https://datatracker.ietf.org/doc/html/rfc9309) defines crawlers as automated clients.
|
|
4
6
|
|
|
5
7
|
Some web servers may reject requests that omit the `User-Agent` header or that use common defaults such as `'curl/7.79.1'`.
|
|
@@ -10,7 +12,7 @@ It is recommended to specify a **custom `User-Agent` header** when implementing
|
|
|
10
12
|
|
|
11
13
|
A user agent string should include sufficient detail to identify the crawler and provide contact information. For example:
|
|
12
14
|
|
|
13
|
-
```
|
|
15
|
+
```text
|
|
14
16
|
AcmeCo Crawler - acme.co - contact@acme.co
|
|
15
17
|
```
|
|
16
18
|
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# Migrating from Undici 7 to 8
|
|
2
|
+
|
|
3
|
+
<!--type=misc-->
|
|
4
|
+
|
|
5
|
+
This guide covers the changes you are most likely to hit when upgrading an
|
|
6
|
+
application or library from Undici v7 to v8.
|
|
7
|
+
|
|
8
|
+
## Before you upgrade
|
|
9
|
+
|
|
10
|
+
- Make sure your runtime is Node.js `>= 22.19.0`.
|
|
11
|
+
- If you have custom dispatchers, interceptors, or handlers, review the
|
|
12
|
+
handler API changes before updating.
|
|
13
|
+
- If you rely on HTTP/1.1-only behavior, plan to set `allowH2: false`
|
|
14
|
+
explicitly.
|
|
15
|
+
|
|
16
|
+
## 1. Update your Node.js version
|
|
17
|
+
|
|
18
|
+
Undici v8 requires Node.js `>= 22.19.0`.
|
|
19
|
+
|
|
20
|
+
If you are still on Node.js 20 or an older Node.js 22 release, upgrade Node.js
|
|
21
|
+
first:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
node -v
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If that command prints a version lower than `v22.19.0`, upgrade Node.js before
|
|
28
|
+
installing Undici v8.
|
|
29
|
+
|
|
30
|
+
## 2. Migrate custom dispatcher handlers to the v2 API
|
|
31
|
+
|
|
32
|
+
Undici v8 uses the newer dispatcher handler API consistently.
|
|
33
|
+
|
|
34
|
+
If you implemented custom dispatchers, interceptors, or wrappers around
|
|
35
|
+
`dispatch()`, update legacy callbacks such as `onConnect`, `onHeaders`, and
|
|
36
|
+
`onComplete` to the newer callback names.
|
|
37
|
+
|
|
38
|
+
### Old handler callbacks vs. v8 callbacks
|
|
39
|
+
|
|
40
|
+
| Undici 7 style | Undici 8 style |
|
|
41
|
+
|---|---|
|
|
42
|
+
| `onConnect(abort, context)` | `onRequestStart(controller, context)` |
|
|
43
|
+
| `onHeaders(statusCode, rawHeaders, resume, statusText)` | `onResponseStart(controller, statusCode, headers, statusText)` |
|
|
44
|
+
| `onData(chunk)` | `onResponseData(controller, chunk)` |
|
|
45
|
+
| `onComplete(trailers)` | `onResponseEnd(controller, trailers)` |
|
|
46
|
+
| `onError(err)` | `onResponseError(controller, err)` |
|
|
47
|
+
| `onUpgrade(statusCode, rawHeaders, socket)` | `onRequestUpgrade(controller, statusCode, headers, socket)` |
|
|
48
|
+
|
|
49
|
+
### Example
|
|
50
|
+
|
|
51
|
+
Before:
|
|
52
|
+
|
|
53
|
+
```js
|
|
54
|
+
client.dispatch(options, {
|
|
55
|
+
onConnect (abort) {
|
|
56
|
+
this.abort = abort
|
|
57
|
+
},
|
|
58
|
+
onHeaders (statusCode, headers, resume) {
|
|
59
|
+
this.resume = resume
|
|
60
|
+
return true
|
|
61
|
+
},
|
|
62
|
+
onData (chunk) {
|
|
63
|
+
chunks.push(chunk)
|
|
64
|
+
return true
|
|
65
|
+
},
|
|
66
|
+
onComplete (trailers) {
|
|
67
|
+
console.log(trailers)
|
|
68
|
+
},
|
|
69
|
+
onError (err) {
|
|
70
|
+
console.error(err)
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
After:
|
|
76
|
+
|
|
77
|
+
```js
|
|
78
|
+
client.dispatch(options, {
|
|
79
|
+
onRequestStart (controller) {
|
|
80
|
+
this.controller = controller
|
|
81
|
+
},
|
|
82
|
+
onResponseStart (controller, statusCode, headers, statusText) {
|
|
83
|
+
console.log(statusCode, statusText, headers)
|
|
84
|
+
},
|
|
85
|
+
onResponseData (controller, chunk) {
|
|
86
|
+
chunks.push(chunk)
|
|
87
|
+
},
|
|
88
|
+
onResponseEnd (controller, trailers) {
|
|
89
|
+
console.log(trailers)
|
|
90
|
+
},
|
|
91
|
+
onResponseError (controller, err) {
|
|
92
|
+
console.error(err)
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Pause, resume, and abort now go through the controller
|
|
98
|
+
|
|
99
|
+
In Undici v7, legacy handlers could return `false` or keep references to
|
|
100
|
+
`abort()` and `resume()` callbacks. In Undici v8, use the controller instead:
|
|
101
|
+
|
|
102
|
+
```js
|
|
103
|
+
onRequestStart (controller) {
|
|
104
|
+
this.controller = controller
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
onResponseData (controller, chunk) {
|
|
108
|
+
controller.pause()
|
|
109
|
+
setImmediate(() => controller.resume())
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
onResponseError (controller, err) {
|
|
113
|
+
controller.abort(err)
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Raw headers and trailers moved to the controller
|
|
118
|
+
|
|
119
|
+
If you need the raw header arrays, read them from the controller:
|
|
120
|
+
|
|
121
|
+
- `controller.rawHeaders`
|
|
122
|
+
- `controller.rawTrailers`
|
|
123
|
+
|
|
124
|
+
## 3. Update `onBodySent()` handlers
|
|
125
|
+
|
|
126
|
+
If you implemented `onBodySent()`, note that its signature changed.
|
|
127
|
+
|
|
128
|
+
Before, handlers received counters:
|
|
129
|
+
|
|
130
|
+
```js
|
|
131
|
+
onBodySent (chunkSize, totalBytesSent) {}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
In Undici v8, handlers receive the actual chunk:
|
|
135
|
+
|
|
136
|
+
```js
|
|
137
|
+
onBodySent (chunk) {}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
If you need a notification that the whole body has been sent, use
|
|
141
|
+
`onRequestSent()`:
|
|
142
|
+
|
|
143
|
+
```js
|
|
144
|
+
onRequestSent () {
|
|
145
|
+
console.log('request body fully sent')
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 4. If you need HTTP/1.1 only, disable HTTP/2 explicitly
|
|
150
|
+
|
|
151
|
+
Undici v8 enables HTTP/2 by default when a TLS server negotiates it via ALPN.
|
|
152
|
+
|
|
153
|
+
If your application depends on HTTP/1.1-specific behavior, set `allowH2: false`
|
|
154
|
+
explicitly.
|
|
155
|
+
|
|
156
|
+
Before:
|
|
157
|
+
|
|
158
|
+
```js
|
|
159
|
+
const client = new Client('https://example.com')
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
After, to keep HTTP/1.1 only:
|
|
163
|
+
|
|
164
|
+
```js
|
|
165
|
+
const client = new Client('https://example.com', {
|
|
166
|
+
allowH2: false
|
|
167
|
+
})
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
The same applies when you configure an `Agent`:
|
|
171
|
+
|
|
172
|
+
```js
|
|
173
|
+
const agent = new Agent({
|
|
174
|
+
allowH2: false
|
|
175
|
+
})
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 5. Use real `Blob` and `File` instances
|
|
179
|
+
|
|
180
|
+
Undici v8 no longer accepts fake Blob-like values that only imitate `Blob` or
|
|
181
|
+
`File` via properties such as `Symbol.toStringTag`.
|
|
182
|
+
|
|
183
|
+
If you were passing custom objects that looked like `Blob`s, replace them with
|
|
184
|
+
actual `Blob` or `File` instances:
|
|
185
|
+
|
|
186
|
+
```js
|
|
187
|
+
const body = new Blob(['hello'])
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## 6. Avoid depending on the internal global dispatcher symbol
|
|
191
|
+
|
|
192
|
+
`setGlobalDispatcher()` and `getGlobalDispatcher()` remain the public APIs and
|
|
193
|
+
should continue to be used.
|
|
194
|
+
|
|
195
|
+
Internally, Undici v8 stores its dispatcher under
|
|
196
|
+
`Symbol.for('undici.globalDispatcher.2')` and mirrors a v1-compatible wrapper
|
|
197
|
+
for legacy consumers such as Node.js built-in `fetch`.
|
|
198
|
+
|
|
199
|
+
If your code was reading or writing `Symbol.for('undici.globalDispatcher.1')`
|
|
200
|
+
directly, migrate to the public APIs instead:
|
|
201
|
+
|
|
202
|
+
```js
|
|
203
|
+
import { setGlobalDispatcher, getGlobalDispatcher, Agent } from 'undici'
|
|
204
|
+
|
|
205
|
+
setGlobalDispatcher(new Agent())
|
|
206
|
+
const dispatcher = getGlobalDispatcher()
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
If you must expose a dispatcher to legacy v1 handler consumers, wrap it with
|
|
210
|
+
`Dispatcher1Wrapper`:
|
|
211
|
+
|
|
212
|
+
```js
|
|
213
|
+
import { Agent, Dispatcher1Wrapper } from 'undici'
|
|
214
|
+
|
|
215
|
+
const legacyCompatibleDispatcher = new Dispatcher1Wrapper(new Agent())
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## 7. Verify the upgrade
|
|
219
|
+
|
|
220
|
+
After moving to Undici v8, it is worth checking these paths in your test suite:
|
|
221
|
+
|
|
222
|
+
- requests that use a custom `dispatcher`
|
|
223
|
+
- `setGlobalDispatcher()` behavior
|
|
224
|
+
- any custom interceptor or retry handler
|
|
225
|
+
- uploads that use `Blob`, `File`, or `FormData`
|
|
226
|
+
- integrations that depend on HTTP/1.1-only behavior
|
|
227
|
+
|
|
228
|
+
## Related documentation
|
|
229
|
+
|
|
230
|
+
- [Dispatcher](../api/Dispatcher.md)
|
|
231
|
+
- [Client](../api/Client.md)
|
|
232
|
+
- [Global Installation](../api/GlobalInstallation.md)
|
|
233
|
+
- [Undici Module vs. Node.js Built-in Fetch](./undici-vs-builtin-fetch.md)
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Mocking Request
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<!--type=misc-->
|
|
4
|
+
|
|
5
|
+
Undici has its own mocking [utility](../api/MockAgent.md). It allow us to intercept undici HTTP requests and return mocked values instead. It can be useful for testing purposes.
|
|
4
6
|
|
|
5
7
|
Example:
|
|
6
8
|
|
|
@@ -73,7 +75,7 @@ const badRequest = await bankTransfer('1234567890', '100')
|
|
|
73
75
|
assert.deepEqual(badRequest, { message: 'bank account not found' })
|
|
74
76
|
```
|
|
75
77
|
|
|
76
|
-
Explore other MockAgent functionality [here](
|
|
78
|
+
Explore other MockAgent functionality [here](../api/MockAgent.md)
|
|
77
79
|
|
|
78
80
|
## Access agent call history
|
|
79
81
|
|
|
@@ -100,7 +102,7 @@ setGlobalDispatcher(mockAgent)
|
|
|
100
102
|
// this call is made (not intercepted)
|
|
101
103
|
await fetch(`http://localhost:3000/endpoint?query='hello'`, {
|
|
102
104
|
method: 'POST',
|
|
103
|
-
headers: { 'content-type': 'application/json' }
|
|
105
|
+
headers: { 'content-type': 'application/json' },
|
|
104
106
|
body: JSON.stringify({ data: '' })
|
|
105
107
|
})
|
|
106
108
|
|
|
@@ -123,11 +125,11 @@ assert.ok(mockAgent.getCallHistory()?.calls().length === 0)
|
|
|
123
125
|
|
|
124
126
|
Calling `mockAgent.close()` will automatically clear and delete every call history for you.
|
|
125
127
|
|
|
126
|
-
Explore other MockAgent functionality [here](
|
|
128
|
+
Explore other MockAgent functionality [here](../api/MockAgent.md)
|
|
127
129
|
|
|
128
|
-
Explore other MockCallHistory functionality [here](
|
|
130
|
+
Explore other MockCallHistory functionality [here](../api/MockCallHistory.md)
|
|
129
131
|
|
|
130
|
-
Explore other MockCallHistoryLog functionality [here](
|
|
132
|
+
Explore other MockCallHistoryLog functionality [here](../api/MockCallHistoryLog.md)
|
|
131
133
|
|
|
132
134
|
## Debug Mock Value
|
|
133
135
|
|
|
@@ -179,7 +181,7 @@ mockPool.intercept({
|
|
|
179
181
|
|
|
180
182
|
in this case opts will be
|
|
181
183
|
|
|
182
|
-
```
|
|
184
|
+
```js
|
|
183
185
|
{
|
|
184
186
|
method: 'POST',
|
|
185
187
|
headers: { 'X-TOKEN-SECRET': 'SuperSecretToken' },
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# Connecting through a proxy
|
|
2
2
|
|
|
3
|
+
<!--type=misc-->
|
|
4
|
+
|
|
3
5
|
Connecting through a proxy is possible by:
|
|
4
6
|
|
|
5
|
-
- Using
|
|
7
|
+
- Using {ProxyAgent}.
|
|
6
8
|
- Configuring `Client` or `Pool` constructor.
|
|
7
9
|
|
|
8
10
|
The proxy url should be passed to the `Client` or `Pool` constructor, while the upstream server url
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Undici Module vs. Node.js Built-in Fetch
|
|
2
2
|
|
|
3
|
+
<!--type=misc-->
|
|
4
|
+
|
|
3
5
|
Node.js has shipped a built-in `fetch()` implementation powered by undici since
|
|
4
6
|
Node.js v18. This guide explains the relationship between the `undici` npm
|
|
5
7
|
package and the built-in `fetch`, and when you should install one versus relying
|
|
@@ -57,7 +59,7 @@ await fetch('https://example.com', {
|
|
|
57
59
|
### `undici.install()` globals
|
|
58
60
|
|
|
59
61
|
If you want the installed `undici` package to provide the globals, call
|
|
60
|
-
[`install()`](
|
|
62
|
+
[`install()`](../api/GlobalInstallation.md):
|
|
61
63
|
|
|
62
64
|
```js
|
|
63
65
|
import { install } from 'undici'
|
|
@@ -207,7 +209,7 @@ You can always check the exact bundled version at runtime with
|
|
|
207
209
|
|
|
208
210
|
Installing undici from npm does not replace the built-in globals. If you want
|
|
209
211
|
your installed version to replace the global `fetch` and related classes, use
|
|
210
|
-
[`install()`](
|
|
212
|
+
[`install()`](../api/GlobalInstallation.md). Otherwise, import `fetch`
|
|
211
213
|
directly from `'undici'`:
|
|
212
214
|
|
|
213
215
|
```js
|
|
@@ -216,9 +218,9 @@ import { fetch } from 'undici' // uses your installed version, not the built-in
|
|
|
216
218
|
|
|
217
219
|
## Further reading
|
|
218
220
|
|
|
219
|
-
- [API Reference: Fetch](
|
|
220
|
-
- [API Reference: Client](
|
|
221
|
-
- [API Reference: Pool](
|
|
222
|
-
- [API Reference: ProxyAgent](
|
|
223
|
-
- [API Reference: MockAgent](
|
|
224
|
-
- [API Reference: Global Installation](
|
|
221
|
+
- [API Reference: Fetch](../api/Fetch.md)
|
|
222
|
+
- [API Reference: Client](../api/Client.md)
|
|
223
|
+
- [API Reference: Pool](../api/Pool.md)
|
|
224
|
+
- [API Reference: ProxyAgent](../api/ProxyAgent.md)
|
|
225
|
+
- [API Reference: MockAgent](../api/MockAgent.md)
|
|
226
|
+
- [API Reference: Global Installation](../api/GlobalInstallation.md)
|