monitor-transfer-dsh 0.0.0-stage → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +51 -2
- package/cordis.patch.yml +4 -0
- package/lib/client.js +381 -0
- package/lib/index.js +267 -0
- package/package.json +67 -3
- package/skill/SKILL.md +48 -0
- package/skill/tools/node_modules/.package-lock.json +163 -0
- package/skill/tools/node_modules/pg/LICENSE +21 -0
- package/skill/tools/node_modules/pg/README.md +96 -0
- package/skill/tools/node_modules/pg/esm/index.mjs +20 -0
- package/skill/tools/node_modules/pg/lib/client.js +846 -0
- package/skill/tools/node_modules/pg/lib/connection-parameters.js +184 -0
- package/skill/tools/node_modules/pg/lib/connection.js +250 -0
- package/skill/tools/node_modules/pg/lib/crypto/cert-signatures.js +122 -0
- package/skill/tools/node_modules/pg/lib/crypto/sasl.js +262 -0
- package/skill/tools/node_modules/pg/lib/crypto/utils.js +89 -0
- package/skill/tools/node_modules/pg/lib/defaults.js +94 -0
- package/skill/tools/node_modules/pg/lib/index.js +73 -0
- package/skill/tools/node_modules/pg/lib/native/client.js +428 -0
- package/skill/tools/node_modules/pg/lib/native/index.js +2 -0
- package/skill/tools/node_modules/pg/lib/native/query.js +167 -0
- package/skill/tools/node_modules/pg/lib/query.js +263 -0
- package/skill/tools/node_modules/pg/lib/result.js +109 -0
- package/skill/tools/node_modules/pg/lib/stream.js +83 -0
- package/skill/tools/node_modules/pg/lib/type-overrides.js +35 -0
- package/skill/tools/node_modules/pg/lib/utils.js +225 -0
- package/skill/tools/node_modules/pg/package.json +76 -0
- package/skill/tools/node_modules/pg-cloudflare/LICENSE +21 -0
- package/skill/tools/node_modules/pg-cloudflare/README.md +112 -0
- package/skill/tools/node_modules/pg-cloudflare/dist/empty.d.ts +2 -0
- package/skill/tools/node_modules/pg-cloudflare/dist/empty.js +6 -0
- package/skill/tools/node_modules/pg-cloudflare/dist/empty.js.map +1 -0
- package/skill/tools/node_modules/pg-cloudflare/dist/index.d.ts +29 -0
- package/skill/tools/node_modules/pg-cloudflare/dist/index.js +171 -0
- package/skill/tools/node_modules/pg-cloudflare/dist/index.js.map +1 -0
- package/skill/tools/node_modules/pg-cloudflare/esm/index.mjs +3 -0
- package/skill/tools/node_modules/pg-cloudflare/package.json +39 -0
- package/skill/tools/node_modules/pg-cloudflare/src/empty.ts +3 -0
- package/skill/tools/node_modules/pg-cloudflare/src/index.ts +187 -0
- package/skill/tools/node_modules/pg-cloudflare/src/types.d.ts +25 -0
- package/skill/tools/node_modules/pg-connection-string/LICENSE +21 -0
- package/skill/tools/node_modules/pg-connection-string/README.md +105 -0
- package/skill/tools/node_modules/pg-connection-string/esm/index.mjs +8 -0
- package/skill/tools/node_modules/pg-connection-string/index.d.ts +37 -0
- package/skill/tools/node_modules/pg-connection-string/index.js +237 -0
- package/skill/tools/node_modules/pg-connection-string/package.json +51 -0
- package/skill/tools/node_modules/pg-int8/LICENSE +13 -0
- package/skill/tools/node_modules/pg-int8/README.md +16 -0
- package/skill/tools/node_modules/pg-int8/index.js +100 -0
- package/skill/tools/node_modules/pg-int8/package.json +24 -0
- package/skill/tools/node_modules/pg-pool/LICENSE +21 -0
- package/skill/tools/node_modules/pg-pool/README.md +357 -0
- package/skill/tools/node_modules/pg-pool/esm/index.mjs +5 -0
- package/skill/tools/node_modules/pg-pool/index.js +517 -0
- package/skill/tools/node_modules/pg-pool/package.json +51 -0
- package/skill/tools/node_modules/pg-protocol/LICENSE +21 -0
- package/skill/tools/node_modules/pg-protocol/README.md +3 -0
- package/skill/tools/node_modules/pg-protocol/dist/b.d.ts +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/b.js +23 -0
- package/skill/tools/node_modules/pg-protocol/dist/b.js.map +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/buffer-reader.d.ts +14 -0
- package/skill/tools/node_modules/pg-protocol/dist/buffer-reader.js +55 -0
- package/skill/tools/node_modules/pg-protocol/dist/buffer-reader.js.map +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/buffer-writer.d.ts +21 -0
- package/skill/tools/node_modules/pg-protocol/dist/buffer-writer.js +113 -0
- package/skill/tools/node_modules/pg-protocol/dist/buffer-writer.js.map +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/inbound-parser.test.d.ts +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/inbound-parser.test.js +538 -0
- package/skill/tools/node_modules/pg-protocol/dist/inbound-parser.test.js.map +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/index.d.ts +5 -0
- package/skill/tools/node_modules/pg-protocol/dist/index.js +15 -0
- package/skill/tools/node_modules/pg-protocol/dist/index.js.map +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/messages.d.ts +161 -0
- package/skill/tools/node_modules/pg-protocol/dist/messages.js +160 -0
- package/skill/tools/node_modules/pg-protocol/dist/messages.js.map +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/outbound-serializer.test.js +325 -0
- package/skill/tools/node_modules/pg-protocol/dist/outbound-serializer.test.js.map +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/parser.d.ts +22 -0
- package/skill/tools/node_modules/pg-protocol/dist/parser.js +325 -0
- package/skill/tools/node_modules/pg-protocol/dist/parser.js.map +1 -0
- package/skill/tools/node_modules/pg-protocol/dist/serializer.d.ts +42 -0
- package/skill/tools/node_modules/pg-protocol/dist/serializer.js +198 -0
- package/skill/tools/node_modules/pg-protocol/dist/serializer.js.map +1 -0
- package/skill/tools/node_modules/pg-protocol/esm/index.js +11 -0
- package/skill/tools/node_modules/pg-protocol/package.json +44 -0
- package/skill/tools/node_modules/pg-protocol/src/b.ts +25 -0
- package/skill/tools/node_modules/pg-protocol/src/buffer-reader.ts +58 -0
- package/skill/tools/node_modules/pg-protocol/src/buffer-writer.ts +120 -0
- package/skill/tools/node_modules/pg-protocol/src/inbound-parser.test.ts +585 -0
- package/skill/tools/node_modules/pg-protocol/src/index.ts +11 -0
- package/skill/tools/node_modules/pg-protocol/src/messages.ts +262 -0
- package/skill/tools/node_modules/pg-protocol/src/outbound-serializer.test.ts +356 -0
- package/skill/tools/node_modules/pg-protocol/src/parser.ts +414 -0
- package/skill/tools/node_modules/pg-protocol/src/serializer.ts +286 -0
- package/skill/tools/node_modules/pg-protocol/src/testing/buffer-list.ts +67 -0
- package/skill/tools/node_modules/pg-protocol/src/testing/test-buffers.ts +166 -0
- package/skill/tools/node_modules/pg-types/.travis.yml +7 -0
- package/skill/tools/node_modules/pg-types/Makefile +14 -0
- package/skill/tools/node_modules/pg-types/README.md +75 -0
- package/skill/tools/node_modules/pg-types/index.d.ts +137 -0
- package/skill/tools/node_modules/pg-types/index.js +47 -0
- package/skill/tools/node_modules/pg-types/index.test-d.ts +21 -0
- package/skill/tools/node_modules/pg-types/lib/arrayParser.js +11 -0
- package/skill/tools/node_modules/pg-types/lib/binaryParsers.js +257 -0
- package/skill/tools/node_modules/pg-types/lib/builtins.js +73 -0
- package/skill/tools/node_modules/pg-types/lib/textParsers.js +215 -0
- package/skill/tools/node_modules/pg-types/package.json +42 -0
- package/skill/tools/node_modules/pg-types/test/index.js +24 -0
- package/skill/tools/node_modules/pg-types/test/types.js +597 -0
- package/skill/tools/node_modules/pgpass/README.md +74 -0
- package/skill/tools/node_modules/pgpass/lib/helper.js +233 -0
- package/skill/tools/node_modules/pgpass/lib/index.js +23 -0
- package/skill/tools/node_modules/pgpass/package.json +41 -0
- package/skill/tools/node_modules/postgres-array/index.d.ts +4 -0
- package/skill/tools/node_modules/postgres-array/index.js +97 -0
- package/skill/tools/node_modules/postgres-array/license +21 -0
- package/skill/tools/node_modules/postgres-array/package.json +35 -0
- package/skill/tools/node_modules/postgres-array/readme.md +43 -0
- package/skill/tools/node_modules/postgres-bytea/index.js +33 -0
- package/skill/tools/node_modules/postgres-bytea/license +21 -0
- package/skill/tools/node_modules/postgres-bytea/package.json +34 -0
- package/skill/tools/node_modules/postgres-bytea/readme.md +34 -0
- package/skill/tools/node_modules/postgres-date/index.js +116 -0
- package/skill/tools/node_modules/postgres-date/license +21 -0
- package/skill/tools/node_modules/postgres-date/package.json +33 -0
- package/skill/tools/node_modules/postgres-date/readme.md +49 -0
- package/skill/tools/node_modules/postgres-interval/index.d.ts +20 -0
- package/skill/tools/node_modules/postgres-interval/index.js +125 -0
- package/skill/tools/node_modules/postgres-interval/license +21 -0
- package/skill/tools/node_modules/postgres-interval/package.json +36 -0
- package/skill/tools/node_modules/postgres-interval/readme.md +48 -0
- package/skill/tools/node_modules/split2/LICENSE +13 -0
- package/skill/tools/node_modules/split2/README.md +85 -0
- package/skill/tools/node_modules/split2/bench.js +27 -0
- package/skill/tools/node_modules/split2/index.js +141 -0
- package/skill/tools/node_modules/split2/package.json +39 -0
- package/skill/tools/node_modules/split2/test.js +409 -0
- package/skill/tools/node_modules/undici/LICENSE +21 -0
- package/skill/tools/node_modules/undici/README.md +828 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Agent.md +291 -0
- package/skill/tools/node_modules/undici/docs/docs/api/BalancedPool.md +297 -0
- package/skill/tools/node_modules/undici/docs/docs/api/CacheStorage.md +188 -0
- package/skill/tools/node_modules/undici/docs/docs/api/CacheStore.md +375 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Client.md +538 -0
- package/skill/tools/node_modules/undici/docs/docs/api/ClientStats.md +93 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Connector.md +198 -0
- package/skill/tools/node_modules/undici/docs/docs/api/ContentType.md +97 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Cookies.md +179 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Debug.md +78 -0
- package/skill/tools/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +518 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Dispatcher.md +842 -0
- package/skill/tools/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +171 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Errors.md +624 -0
- package/skill/tools/node_modules/undici/docs/docs/api/EventSource.md +358 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Fetch.md +721 -0
- package/skill/tools/node_modules/undici/docs/docs/api/GlobalInstallation.md +121 -0
- package/skill/tools/node_modules/undici/docs/docs/api/H2CClient.md +386 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Interceptors.md +439 -0
- package/skill/tools/node_modules/undici/docs/docs/api/MockAgent.md +622 -0
- package/skill/tools/node_modules/undici/docs/docs/api/MockCallHistory.md +371 -0
- package/skill/tools/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +206 -0
- package/skill/tools/node_modules/undici/docs/docs/api/MockClient.md +199 -0
- package/skill/tools/node_modules/undici/docs/docs/api/MockErrors.md +63 -0
- package/skill/tools/node_modules/undici/docs/docs/api/MockPool.md +618 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Pool.md +278 -0
- package/skill/tools/node_modules/undici/docs/docs/api/PoolStats.md +141 -0
- package/skill/tools/node_modules/undici/docs/docs/api/ProxyAgent.md +248 -0
- package/skill/tools/node_modules/undici/docs/docs/api/RedirectHandler.md +279 -0
- package/skill/tools/node_modules/undici/docs/docs/api/RetryAgent.md +136 -0
- package/skill/tools/node_modules/undici/docs/docs/api/RetryHandler.md +200 -0
- package/skill/tools/node_modules/undici/docs/docs/api/RoundRobinPool.md +239 -0
- package/skill/tools/node_modules/undici/docs/docs/api/SnapshotAgent.md +361 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +256 -0
- package/skill/tools/node_modules/undici/docs/docs/api/Util.md +82 -0
- package/skill/tools/node_modules/undici/docs/docs/api/WebSocket.md +536 -0
- package/skill/tools/node_modules/undici/docs/docs/api/api-lifecycle.md +159 -0
- package/skill/tools/node_modules/undici/docs/docs/best-practices/client-certificate.md +66 -0
- package/skill/tools/node_modules/undici/docs/docs/best-practices/crawling.md +60 -0
- package/skill/tools/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +233 -0
- package/skill/tools/node_modules/undici/docs/docs/best-practices/mocking-request.md +192 -0
- package/skill/tools/node_modules/undici/docs/docs/best-practices/proxy.md +129 -0
- package/skill/tools/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +226 -0
- package/skill/tools/node_modules/undici/docs/docs/best-practices/writing-tests.md +65 -0
- package/skill/tools/node_modules/undici/docs/docs/getting-started.md +281 -0
- package/skill/tools/node_modules/undici/docs/docs/index.md +793 -0
- package/skill/tools/node_modules/undici/docs/docs/site.json +125 -0
- package/skill/tools/node_modules/undici/docs/docs/type-map.json +79 -0
- package/skill/tools/node_modules/undici/index-fetch.js +65 -0
- package/skill/tools/node_modules/undici/index.d.ts +3 -0
- package/skill/tools/node_modules/undici/index.js +236 -0
- package/skill/tools/node_modules/undici/lib/api/abort-signal.js +59 -0
- package/skill/tools/node_modules/undici/lib/api/api-connect.js +112 -0
- package/skill/tools/node_modules/undici/lib/api/api-pipeline.js +265 -0
- package/skill/tools/node_modules/undici/lib/api/api-request.js +244 -0
- package/skill/tools/node_modules/undici/lib/api/api-stream.js +270 -0
- package/skill/tools/node_modules/undici/lib/api/api-upgrade.js +121 -0
- package/skill/tools/node_modules/undici/lib/api/index.js +7 -0
- package/skill/tools/node_modules/undici/lib/api/readable.js +615 -0
- package/skill/tools/node_modules/undici/lib/cache/memory-cache-store.js +314 -0
- package/skill/tools/node_modules/undici/lib/cache/sqlite-cache-store.js +593 -0
- package/skill/tools/node_modules/undici/lib/core/connect.js +198 -0
- package/skill/tools/node_modules/undici/lib/core/constants.js +131 -0
- package/skill/tools/node_modules/undici/lib/core/diagnostics.js +227 -0
- package/skill/tools/node_modules/undici/lib/core/errors.js +534 -0
- package/skill/tools/node_modules/undici/lib/core/request.js +582 -0
- package/skill/tools/node_modules/undici/lib/core/socks5-client.js +422 -0
- package/skill/tools/node_modules/undici/lib/core/socks5-utils.js +212 -0
- package/skill/tools/node_modules/undici/lib/core/symbols.js +81 -0
- package/skill/tools/node_modules/undici/lib/core/tree.js +160 -0
- package/skill/tools/node_modules/undici/lib/core/util.js +1035 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/agent.js +181 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/balanced-pool.js +217 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/client-h1.js +1846 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/client-h2.js +1989 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/client.js +749 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/dispatcher-base.js +198 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/dispatcher.js +58 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +127 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +190 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/fixed-queue.js +135 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/h2c-client.js +51 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/parser-h1.js +1065 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/pool-base.js +347 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/pool.js +229 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/proxy-agent.js +418 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/retry-agent.js +48 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/round-robin-pool.js +169 -0
- package/skill/tools/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +350 -0
- package/skill/tools/node_modules/undici/lib/encoding/index.js +33 -0
- package/skill/tools/node_modules/undici/lib/global.js +82 -0
- package/skill/tools/node_modules/undici/lib/handler/cache-handler.js +1222 -0
- package/skill/tools/node_modules/undici/lib/handler/cache-revalidation-handler.js +134 -0
- package/skill/tools/node_modules/undici/lib/handler/decorator-handler.js +76 -0
- package/skill/tools/node_modules/undici/lib/handler/deduplication-handler.js +540 -0
- package/skill/tools/node_modules/undici/lib/handler/redirect-handler.js +284 -0
- package/skill/tools/node_modules/undici/lib/handler/retry-handler.js +686 -0
- package/skill/tools/node_modules/undici/lib/interceptor/cache.js +771 -0
- package/skill/tools/node_modules/undici/lib/interceptor/decompress.js +574 -0
- package/skill/tools/node_modules/undici/lib/interceptor/deduplicate.js +118 -0
- package/skill/tools/node_modules/undici/lib/interceptor/dns.js +593 -0
- package/skill/tools/node_modules/undici/lib/interceptor/dump.js +99 -0
- package/skill/tools/node_modules/undici/lib/interceptor/redirect.js +21 -0
- package/skill/tools/node_modules/undici/lib/interceptor/response-error.js +139 -0
- package/skill/tools/node_modules/undici/lib/interceptor/retry.js +19 -0
- package/skill/tools/node_modules/undici/lib/llhttp/constants.d.ts +195 -0
- package/skill/tools/node_modules/undici/lib/llhttp/constants.js +531 -0
- package/skill/tools/node_modules/undici/lib/llhttp/llhttp-wasm.js +15 -0
- package/skill/tools/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +15 -0
- package/skill/tools/node_modules/undici/lib/llhttp/utils.d.ts +2 -0
- package/skill/tools/node_modules/undici/lib/llhttp/utils.js +12 -0
- package/skill/tools/node_modules/undici/lib/milo/LICENSE.md +7 -0
- package/skill/tools/node_modules/undici/lib/milo/no-simd.js +1002 -0
- package/skill/tools/node_modules/undici/lib/milo/simd.js +1002 -0
- package/skill/tools/node_modules/undici/lib/mock/mock-agent.js +255 -0
- package/skill/tools/node_modules/undici/lib/mock/mock-call-history.js +248 -0
- package/skill/tools/node_modules/undici/lib/mock/mock-client.js +68 -0
- package/skill/tools/node_modules/undici/lib/mock/mock-errors.js +29 -0
- package/skill/tools/node_modules/undici/lib/mock/mock-interceptor.js +227 -0
- package/skill/tools/node_modules/undici/lib/mock/mock-pool.js +68 -0
- package/skill/tools/node_modules/undici/lib/mock/mock-symbols.js +32 -0
- package/skill/tools/node_modules/undici/lib/mock/mock-utils.js +730 -0
- package/skill/tools/node_modules/undici/lib/mock/pending-interceptors-formatter.js +43 -0
- package/skill/tools/node_modules/undici/lib/mock/snapshot-agent.js +371 -0
- package/skill/tools/node_modules/undici/lib/mock/snapshot-recorder.js +624 -0
- package/skill/tools/node_modules/undici/lib/mock/snapshot-utils.js +159 -0
- package/skill/tools/node_modules/undici/lib/util/cache.js +764 -0
- package/skill/tools/node_modules/undici/lib/util/date.js +670 -0
- package/skill/tools/node_modules/undici/lib/util/runtime-features.js +93 -0
- package/skill/tools/node_modules/undici/lib/util/stats.js +32 -0
- package/skill/tools/node_modules/undici/lib/util/timers.js +425 -0
- package/skill/tools/node_modules/undici/lib/web/cache/cache.js +871 -0
- package/skill/tools/node_modules/undici/lib/web/cache/cachestorage.js +158 -0
- package/skill/tools/node_modules/undici/lib/web/cache/util.js +45 -0
- package/skill/tools/node_modules/undici/lib/web/cookies/constants.js +12 -0
- package/skill/tools/node_modules/undici/lib/web/cookies/index.js +211 -0
- package/skill/tools/node_modules/undici/lib/web/cookies/parse.js +318 -0
- package/skill/tools/node_modules/undici/lib/web/cookies/util.js +371 -0
- package/skill/tools/node_modules/undici/lib/web/eventsource/eventsource-stream.js +575 -0
- package/skill/tools/node_modules/undici/lib/web/eventsource/eventsource.js +547 -0
- package/skill/tools/node_modules/undici/lib/web/eventsource/util.js +60 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/LICENSE +21 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/body.js +583 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/constants.js +131 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/data-url.js +596 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/formdata-parser.js +594 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/formdata.js +272 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/global.js +40 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/headers.js +722 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/index.js +2451 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/request.js +1117 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/response.js +638 -0
- package/skill/tools/node_modules/undici/lib/web/fetch/util.js +1530 -0
- package/skill/tools/node_modules/undici/lib/web/infra/index.js +244 -0
- package/skill/tools/node_modules/undici/lib/web/subresource-integrity/Readme.md +9 -0
- package/skill/tools/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js +307 -0
- package/skill/tools/node_modules/undici/lib/web/webidl/index.js +992 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/connection.js +350 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/constants.js +126 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/events.js +348 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/frame.js +127 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/permessage-deflate.js +105 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/receiver.js +530 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/sender.js +109 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/stream/websocketerror.js +107 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/stream/websocketstream.js +511 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/util.js +347 -0
- package/skill/tools/node_modules/undici/lib/web/websocket/websocket.js +783 -0
- package/skill/tools/node_modules/undici/package.json +154 -0
- package/skill/tools/node_modules/undici/scripts/strip-comments.js +10 -0
- package/skill/tools/node_modules/undici/types/README.md +6 -0
- package/skill/tools/node_modules/undici/types/agent.d.ts +30 -0
- package/skill/tools/node_modules/undici/types/api.d.ts +43 -0
- package/skill/tools/node_modules/undici/types/balanced-pool.d.ts +30 -0
- package/skill/tools/node_modules/undici/types/cache-interceptor.d.ts +189 -0
- package/skill/tools/node_modules/undici/types/cache.d.ts +36 -0
- package/skill/tools/node_modules/undici/types/client-stats.d.ts +15 -0
- package/skill/tools/node_modules/undici/types/client.d.ts +190 -0
- package/skill/tools/node_modules/undici/types/connector.d.ts +37 -0
- package/skill/tools/node_modules/undici/types/content-type.d.ts +21 -0
- package/skill/tools/node_modules/undici/types/cookies.d.ts +30 -0
- package/skill/tools/node_modules/undici/types/diagnostics-channel.d.ts +75 -0
- package/skill/tools/node_modules/undici/types/dispatcher.d.ts +253 -0
- package/skill/tools/node_modules/undici/types/dispatcher1-wrapper.d.ts +7 -0
- package/skill/tools/node_modules/undici/types/env-http-proxy-agent.d.ts +22 -0
- package/skill/tools/node_modules/undici/types/errors.d.ts +202 -0
- package/skill/tools/node_modules/undici/types/eventsource.d.ts +66 -0
- package/skill/tools/node_modules/undici/types/fetch.d.ts +235 -0
- package/skill/tools/node_modules/undici/types/formdata.d.ts +108 -0
- package/skill/tools/node_modules/undici/types/global-dispatcher.d.ts +9 -0
- package/skill/tools/node_modules/undici/types/global-origin.d.ts +7 -0
- package/skill/tools/node_modules/undici/types/h2c-client.d.ts +73 -0
- package/skill/tools/node_modules/undici/types/handlers.d.ts +16 -0
- package/skill/tools/node_modules/undici/types/header.d.ts +165 -0
- package/skill/tools/node_modules/undici/types/index.d.ts +93 -0
- package/skill/tools/node_modules/undici/types/interceptors.d.ts +87 -0
- package/skill/tools/node_modules/undici/types/mock-agent.d.ts +69 -0
- package/skill/tools/node_modules/undici/types/mock-call-history.d.ts +111 -0
- package/skill/tools/node_modules/undici/types/mock-client.d.ts +27 -0
- package/skill/tools/node_modules/undici/types/mock-errors.d.ts +12 -0
- package/skill/tools/node_modules/undici/types/mock-interceptor.d.ts +98 -0
- package/skill/tools/node_modules/undici/types/mock-pool.d.ts +27 -0
- package/skill/tools/node_modules/undici/types/patch.d.ts +29 -0
- package/skill/tools/node_modules/undici/types/pool-stats.d.ts +19 -0
- package/skill/tools/node_modules/undici/types/pool.d.ts +39 -0
- package/skill/tools/node_modules/undici/types/proxy-agent.d.ts +36 -0
- package/skill/tools/node_modules/undici/types/readable.d.ts +68 -0
- package/skill/tools/node_modules/undici/types/retry-agent.d.ts +8 -0
- package/skill/tools/node_modules/undici/types/retry-handler.d.ts +125 -0
- package/skill/tools/node_modules/undici/types/round-robin-pool.d.ts +39 -0
- package/skill/tools/node_modules/undici/types/snapshot-agent.d.ts +113 -0
- package/skill/tools/node_modules/undici/types/socks5-proxy-agent.d.ts +27 -0
- package/skill/tools/node_modules/undici/types/util.d.ts +18 -0
- package/skill/tools/node_modules/undici/types/utility.d.ts +7 -0
- package/skill/tools/node_modules/undici/types/webidl.d.ts +352 -0
- package/skill/tools/node_modules/undici/types/websocket.d.ts +188 -0
- package/skill/tools/node_modules/xtend/.jshintrc +30 -0
- package/skill/tools/node_modules/xtend/LICENSE +20 -0
- package/skill/tools/node_modules/xtend/README.md +32 -0
- package/skill/tools/node_modules/xtend/immutable.js +19 -0
- package/skill/tools/node_modules/xtend/mutable.js +17 -0
- package/skill/tools/node_modules/xtend/package.json +55 -0
- package/skill/tools/node_modules/xtend/test.js +103 -0
- package/skill/tools/package-lock.json +172 -0
- package/skill/tools/package.json +9 -0
- package/skill/tools/transfer_core.js +414 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# RoundRobinPool
|
|
2
|
+
|
|
3
|
+
<!--introduced_in=v7.17.0-->
|
|
4
|
+
<!--type=module-->
|
|
5
|
+
<!-- source_link=lib/dispatcher/round-robin-pool.js -->
|
|
6
|
+
|
|
7
|
+
> Stability: 2 - Stable
|
|
8
|
+
|
|
9
|
+
A pool of [`Client`][] instances connected to the same upstream target that
|
|
10
|
+
selects clients in a round-robin fashion.
|
|
11
|
+
|
|
12
|
+
Unlike [`Pool`][], which always reuses the first available client,
|
|
13
|
+
`RoundRobinPool` cycles through its clients so that requests are distributed
|
|
14
|
+
evenly across every open connection. This is useful when the upstream target is
|
|
15
|
+
fronted by a load balancer that distributes TCP connections across multiple
|
|
16
|
+
backend servers (for example, a Kubernetes Service): each connection is pinned
|
|
17
|
+
to a backend by the load balancer, and `RoundRobinPool` spreads requests across
|
|
18
|
+
those connections so every backend receives a comparable share of traffic.
|
|
19
|
+
|
|
20
|
+
Requests are not guaranteed to be dispatched in the order they were invoked.
|
|
21
|
+
|
|
22
|
+
```mjs
|
|
23
|
+
import { RoundRobinPool } from 'undici'
|
|
24
|
+
|
|
25
|
+
const pool = new RoundRobinPool('http://localhost:3000', { connections: 10 })
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`RoundRobinPool` distributes HTTP requests evenly across TCP connections, not
|
|
29
|
+
across backend servers directly. Even backend distribution therefore depends on
|
|
30
|
+
the load balancer assigning different connections to different backends (for
|
|
31
|
+
example, round-robin, random, or least-connections without client affinity). If
|
|
32
|
+
the load balancer pins all connections from one source to the same backend (for
|
|
33
|
+
example, source-IP affinity or sticky sessions), consider [`BalancedPool`][]
|
|
34
|
+
with the individual backend addresses instead.
|
|
35
|
+
|
|
36
|
+
## Class: `RoundRobinPool`
|
|
37
|
+
|
|
38
|
+
<!-- YAML
|
|
39
|
+
added: v7.17.0
|
|
40
|
+
-->
|
|
41
|
+
|
|
42
|
+
* Extends: {Dispatcher}
|
|
43
|
+
|
|
44
|
+
### `new RoundRobinPool(url[, options])`
|
|
45
|
+
|
|
46
|
+
<!-- YAML
|
|
47
|
+
added: v7.17.0
|
|
48
|
+
-->
|
|
49
|
+
|
|
50
|
+
* `url` {URL|string} The upstream target. It should only include the
|
|
51
|
+
**protocol, hostname, and port**.
|
|
52
|
+
* `options` {RoundRobinPoolOptions} (optional)
|
|
53
|
+
|
|
54
|
+
#### Parameter: `RoundRobinPoolOptions`
|
|
55
|
+
|
|
56
|
+
Extends: {ClientOptions}
|
|
57
|
+
|
|
58
|
+
* `factory` {Function} A function used to create the underlying {Client}
|
|
59
|
+
instances. **Default:** `(origin, opts) => new Client(origin, opts)`.
|
|
60
|
+
* `origin` {URL}
|
|
61
|
+
* `opts` {Object}
|
|
62
|
+
* Returns: {Dispatcher}
|
|
63
|
+
* `connections` {number|null} (optional) The maximum number of {Client}
|
|
64
|
+
instances to create. When set to `null`, the `RoundRobinPool` instance creates
|
|
65
|
+
an unlimited number of {Client} instances. **Default:** `null`.
|
|
66
|
+
* `clientTtl` {number|null} (optional) The amount of time, in milliseconds,
|
|
67
|
+
before a {Client} instance is removed from the `RoundRobinPool` and closed.
|
|
68
|
+
When set to `null`, {Client} instances are not removed or closed based on age.
|
|
69
|
+
**Default:** `null`.
|
|
70
|
+
|
|
71
|
+
`RoundRobinPool` inherits all [`Client`][] options. A [`Client`][] instance is
|
|
72
|
+
created lazily on the first dispatch and additional instances are created on
|
|
73
|
+
demand, up to `connections`, when every existing client is busy.
|
|
74
|
+
|
|
75
|
+
### `roundRobinPool.closed`
|
|
76
|
+
|
|
77
|
+
<!-- YAML
|
|
78
|
+
added: v7.17.0
|
|
79
|
+
-->
|
|
80
|
+
|
|
81
|
+
* Type: {boolean}
|
|
82
|
+
|
|
83
|
+
`true` after `roundRobinPool.close()` has been called.
|
|
84
|
+
|
|
85
|
+
### `roundRobinPool.destroyed`
|
|
86
|
+
|
|
87
|
+
<!-- YAML
|
|
88
|
+
added: v7.17.0
|
|
89
|
+
-->
|
|
90
|
+
|
|
91
|
+
* Type: {boolean}
|
|
92
|
+
|
|
93
|
+
`true` after `roundRobinPool.destroy()` has been called, or after
|
|
94
|
+
`roundRobinPool.close()` has been called and the pool shutdown has completed.
|
|
95
|
+
|
|
96
|
+
### `roundRobinPool.stats`
|
|
97
|
+
|
|
98
|
+
<!-- YAML
|
|
99
|
+
added: v7.17.0
|
|
100
|
+
-->
|
|
101
|
+
|
|
102
|
+
* Type: {PoolStats}
|
|
103
|
+
|
|
104
|
+
Aggregate connection statistics for the pool. See [`PoolStats`][].
|
|
105
|
+
|
|
106
|
+
### `roundRobinPool.close([callback])`
|
|
107
|
+
|
|
108
|
+
<!-- YAML
|
|
109
|
+
added: v7.17.0
|
|
110
|
+
-->
|
|
111
|
+
|
|
112
|
+
Closes the pool and gracefully waits for enqueued requests to complete before
|
|
113
|
+
resolving. Implements [`dispatcher.close([callback])`][].
|
|
114
|
+
|
|
115
|
+
### `roundRobinPool.destroy([error[, callback]])`
|
|
116
|
+
|
|
117
|
+
<!-- YAML
|
|
118
|
+
added: v7.17.0
|
|
119
|
+
-->
|
|
120
|
+
|
|
121
|
+
Destroys the pool abruptly. All pending and running requests are aborted with
|
|
122
|
+
the given `error`. Implements [`dispatcher.destroy([error[, callback]])`][].
|
|
123
|
+
|
|
124
|
+
### `roundRobinPool.connect(options[, callback])`
|
|
125
|
+
|
|
126
|
+
<!-- YAML
|
|
127
|
+
added: v7.17.0
|
|
128
|
+
-->
|
|
129
|
+
|
|
130
|
+
Starts two-way communications with the requested resource using
|
|
131
|
+
[HTTP CONNECT][]. See [`dispatcher.connect(options[, callback])`][].
|
|
132
|
+
|
|
133
|
+
### `roundRobinPool.dispatch(options, handler)`
|
|
134
|
+
|
|
135
|
+
<!-- YAML
|
|
136
|
+
added: v7.17.0
|
|
137
|
+
-->
|
|
138
|
+
|
|
139
|
+
Dispatches a request through the next client selected in round-robin order.
|
|
140
|
+
Implements [`dispatcher.dispatch(options, handler)`][].
|
|
141
|
+
|
|
142
|
+
### `roundRobinPool.pipeline(options, handler)`
|
|
143
|
+
|
|
144
|
+
<!-- YAML
|
|
145
|
+
added: v7.17.0
|
|
146
|
+
-->
|
|
147
|
+
|
|
148
|
+
For easy use with [`stream.pipeline`][]. See
|
|
149
|
+
[`dispatcher.pipeline(options, handler)`][].
|
|
150
|
+
|
|
151
|
+
### `roundRobinPool.request(options[, callback])`
|
|
152
|
+
|
|
153
|
+
<!-- YAML
|
|
154
|
+
added: v7.17.0
|
|
155
|
+
-->
|
|
156
|
+
|
|
157
|
+
Performs an HTTP request. See [`dispatcher.request(options[, callback])`][].
|
|
158
|
+
|
|
159
|
+
### `roundRobinPool.stream(options, factory[, callback])`
|
|
160
|
+
|
|
161
|
+
<!-- YAML
|
|
162
|
+
added: v7.17.0
|
|
163
|
+
-->
|
|
164
|
+
|
|
165
|
+
A faster version of [`roundRobinPool.request()`][]. See
|
|
166
|
+
[`dispatcher.stream(options, factory[, callback])`][].
|
|
167
|
+
|
|
168
|
+
### `roundRobinPool.upgrade(options[, callback])`
|
|
169
|
+
|
|
170
|
+
<!-- YAML
|
|
171
|
+
added: v7.17.0
|
|
172
|
+
-->
|
|
173
|
+
|
|
174
|
+
Upgrades a connection to a different protocol. See
|
|
175
|
+
[`dispatcher.upgrade(options[, callback])`][].
|
|
176
|
+
|
|
177
|
+
### Event: `'connect'`
|
|
178
|
+
|
|
179
|
+
<!-- YAML
|
|
180
|
+
added: v7.17.0
|
|
181
|
+
-->
|
|
182
|
+
|
|
183
|
+
See [Dispatcher Event: `'connect'`][].
|
|
184
|
+
|
|
185
|
+
### Event: `'disconnect'`
|
|
186
|
+
|
|
187
|
+
<!-- YAML
|
|
188
|
+
added: v7.17.0
|
|
189
|
+
-->
|
|
190
|
+
|
|
191
|
+
See [Dispatcher Event: `'disconnect'`][].
|
|
192
|
+
|
|
193
|
+
### Event: `'drain'`
|
|
194
|
+
|
|
195
|
+
<!-- YAML
|
|
196
|
+
added: v7.17.0
|
|
197
|
+
-->
|
|
198
|
+
|
|
199
|
+
See [Dispatcher Event: `'drain'`][].
|
|
200
|
+
|
|
201
|
+
## Example
|
|
202
|
+
|
|
203
|
+
```mjs
|
|
204
|
+
import { RoundRobinPool } from 'undici'
|
|
205
|
+
|
|
206
|
+
const pool = new RoundRobinPool('http://localhost:3000', {
|
|
207
|
+
connections: 10
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
// Requests are distributed evenly across all 10 connections.
|
|
211
|
+
for (let i = 0; i < 100; i++) {
|
|
212
|
+
const { body } = await pool.request({
|
|
213
|
+
path: '/api/data',
|
|
214
|
+
method: 'GET'
|
|
215
|
+
})
|
|
216
|
+
console.log(await body.json())
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
await pool.close()
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
[HTTP CONNECT]: https://developer.mozilla.org/docs/Web/HTTP/Methods/CONNECT
|
|
223
|
+
[`BalancedPool`]: BalancedPool.md#class-balancedpool
|
|
224
|
+
[`Client`]: Client.md#class-client
|
|
225
|
+
[`Pool`]: Pool.md#class-pool
|
|
226
|
+
[`PoolStats`]: PoolStats.md#class-poolstats
|
|
227
|
+
[`dispatcher.close([callback])`]: Dispatcher.md#dispatcherclosecallback-promise
|
|
228
|
+
[`dispatcher.connect(options[, callback])`]: Dispatcher.md#dispatcherconnectoptions-callback
|
|
229
|
+
[`dispatcher.destroy([error[, callback]])`]: Dispatcher.md#dispatcherdestroyerror-callback-promise
|
|
230
|
+
[`dispatcher.dispatch(options, handler)`]: Dispatcher.md#dispatcherdispatchoptions-handler
|
|
231
|
+
[`dispatcher.pipeline(options, handler)`]: Dispatcher.md#dispatcherpipelineoptions-handler
|
|
232
|
+
[`dispatcher.request(options[, callback])`]: Dispatcher.md#dispatcherrequestoptions-callback
|
|
233
|
+
[`dispatcher.stream(options, factory[, callback])`]: Dispatcher.md#dispatcherstreamoptions-factory-callback
|
|
234
|
+
[`dispatcher.upgrade(options[, callback])`]: Dispatcher.md#dispatcherupgradeoptions-callback
|
|
235
|
+
[`roundRobinPool.request()`]: #roundrobinpoolrequestoptions-callback
|
|
236
|
+
[`stream.pipeline`]: https://nodejs.org/api/stream.html#streampipelinesource-transforms-destination-callback
|
|
237
|
+
[Dispatcher Event: `'connect'`]: Dispatcher.md#event-connect
|
|
238
|
+
[Dispatcher Event: `'disconnect'`]: Dispatcher.md#event-disconnect
|
|
239
|
+
[Dispatcher Event: `'drain'`]: Dispatcher.md#event-drain
|
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
# SnapshotAgent
|
|
2
|
+
|
|
3
|
+
<!--introduced_in=v7.13.0-->
|
|
4
|
+
<!--type=module-->
|
|
5
|
+
<!-- source_link=lib/mock/snapshot-agent.js -->
|
|
6
|
+
|
|
7
|
+
> Stability: 1 - Experimental
|
|
8
|
+
|
|
9
|
+
`SnapshotAgent` records real HTTP responses and replays them on later requests,
|
|
10
|
+
allowing tests to run against deterministic, captured data instead of a live
|
|
11
|
+
network. It extends [`MockAgent`][], so it can be installed with
|
|
12
|
+
[`setGlobalDispatcher()`][] or passed explicitly through the `dispatcher`
|
|
13
|
+
option, and it works with every undici API (`fetch`, `request`, `stream`,
|
|
14
|
+
`pipeline`, and so on).
|
|
15
|
+
|
|
16
|
+
A `SnapshotAgent` operates in one of three modes. In `'record'` mode it performs
|
|
17
|
+
real requests and writes the responses to a snapshot file. In `'playback'` mode
|
|
18
|
+
it serves responses from the snapshot file without touching the network. In
|
|
19
|
+
`'update'` mode it replays existing snapshots and records any request that has no
|
|
20
|
+
matching snapshot.
|
|
21
|
+
|
|
22
|
+
```mjs
|
|
23
|
+
import { SnapshotAgent, setGlobalDispatcher, fetch } from 'undici'
|
|
24
|
+
|
|
25
|
+
const agent = new SnapshotAgent({
|
|
26
|
+
mode: 'record',
|
|
27
|
+
snapshotPath: './snapshots/api.json'
|
|
28
|
+
})
|
|
29
|
+
setGlobalDispatcher(agent)
|
|
30
|
+
|
|
31
|
+
const response = await fetch('https://api.example.com/users')
|
|
32
|
+
const users = await response.json()
|
|
33
|
+
|
|
34
|
+
await agent.close()
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Constructing a `SnapshotAgent` emits an `ExperimentalWarning` once per process.
|
|
38
|
+
|
|
39
|
+
## Class: `SnapshotAgent`
|
|
40
|
+
|
|
41
|
+
<!-- YAML
|
|
42
|
+
added: v7.13.0
|
|
43
|
+
-->
|
|
44
|
+
|
|
45
|
+
* Extends: {MockAgent}
|
|
46
|
+
|
|
47
|
+
The captured interactions are managed by an internal `SnapshotRecorder`, which
|
|
48
|
+
is accessible through [`agent.getRecorder()`][]. Because `SnapshotAgent` extends
|
|
49
|
+
[`MockAgent`][], all `MockAgent` and [`Dispatcher`][] methods and events are also
|
|
50
|
+
available.
|
|
51
|
+
|
|
52
|
+
### `new SnapshotAgent([options])`
|
|
53
|
+
|
|
54
|
+
<!-- YAML
|
|
55
|
+
added: v7.13.0
|
|
56
|
+
-->
|
|
57
|
+
|
|
58
|
+
* `options` {Object} (optional) Accepts all [`MockAgent`][] options plus the
|
|
59
|
+
following snapshot-specific options.
|
|
60
|
+
* `mode` {string} The snapshot mode. One of `'record'`, `'playback'`, or
|
|
61
|
+
`'update'`. **Default:** `'record'`.
|
|
62
|
+
* `snapshotPath` {string} Path to the snapshot file used for loading and
|
|
63
|
+
saving. Required when `mode` is `'playback'` or `'update'`. **Default:**
|
|
64
|
+
`null`.
|
|
65
|
+
* `maxSnapshots` {number} Maximum number of snapshots to keep in memory.
|
|
66
|
+
**Default:** `Infinity`.
|
|
67
|
+
* `autoFlush` {boolean} When `true`, snapshots are written to `snapshotPath`
|
|
68
|
+
automatically as they are recorded. **Default:** `false`.
|
|
69
|
+
* `flushInterval` {number} Interval, in milliseconds, between automatic flushes
|
|
70
|
+
when `autoFlush` is enabled. **Default:** `30000`.
|
|
71
|
+
* `matchHeaders` {string[]} Names of the only headers to include when matching
|
|
72
|
+
a request against a snapshot. When omitted, all headers are matched.
|
|
73
|
+
* `ignoreHeaders` {string[]} Header names to ignore when matching a request.
|
|
74
|
+
* `excludeHeaders` {string[]} Header names to strip from snapshots entirely,
|
|
75
|
+
so that sensitive values are never written to disk.
|
|
76
|
+
* `matchBody` {boolean} When `true`, the request body is included in request
|
|
77
|
+
matching. **Default:** `true`.
|
|
78
|
+
* `normalizeBody` {Function} Normalizes the request body before it is matched
|
|
79
|
+
or stored, for example to strip volatile fields such as timestamps. Only
|
|
80
|
+
applied when `matchBody` is `true`.
|
|
81
|
+
* `body` {string|Buffer|null|undefined} The raw request body.
|
|
82
|
+
* Returns: {string} The normalized body used for matching.
|
|
83
|
+
* `matchQuery` {boolean} When `true`, query parameters are included in request
|
|
84
|
+
matching. **Default:** `true`.
|
|
85
|
+
* `normalizeQuery` {Function} Normalizes the query string before it is matched,
|
|
86
|
+
for example to strip cache-busting parameters. Only applied when `matchQuery`
|
|
87
|
+
is `true`.
|
|
88
|
+
* `query` {URLSearchParams} The parsed query parameters.
|
|
89
|
+
* Returns: {string} The normalized query string used for matching.
|
|
90
|
+
* `caseSensitive` {boolean} When `true`, header matching is case-sensitive.
|
|
91
|
+
**Default:** `false`.
|
|
92
|
+
* `shouldRecord` {Function} Decides whether a given request is recorded. Only
|
|
93
|
+
used in `'record'` and `'update'` modes.
|
|
94
|
+
* `requestOpts` {Object} The dispatch options of the request.
|
|
95
|
+
* Returns: {boolean} `true` to record the request.
|
|
96
|
+
* `shouldPlayback` {Function} Decides whether a given request is served from a
|
|
97
|
+
snapshot. Only used in `'playback'` and `'update'` modes.
|
|
98
|
+
* `requestOpts` {Object} The dispatch options of the request.
|
|
99
|
+
* Returns: {boolean} `true` to play the request back from a snapshot.
|
|
100
|
+
* `excludeUrls` {Array<string|RegExp>} URL patterns that are excluded from
|
|
101
|
+
recording and playback. String patterns match case-insensitively as
|
|
102
|
+
substrings of the URL; `RegExp` patterns are tested against the URL. Matching
|
|
103
|
+
requests are passed through to a real [`Agent`][] instead.
|
|
104
|
+
|
|
105
|
+
Creates a new `SnapshotAgent`. Throws an [`InvalidArgumentError`][] when `mode`
|
|
106
|
+
is `'playback'` or `'update'` and `snapshotPath` is not provided, and throws an
|
|
107
|
+
`InvalidArgumentError` when `mode` is not one of the supported values.
|
|
108
|
+
|
|
109
|
+
When `mode` is `'playback'` or `'update'` and `snapshotPath` is set, snapshots
|
|
110
|
+
are loaded from the file automatically; a missing file is ignored until the first
|
|
111
|
+
request requires it.
|
|
112
|
+
|
|
113
|
+
```mjs
|
|
114
|
+
import { SnapshotAgent, setGlobalDispatcher } from 'undici'
|
|
115
|
+
|
|
116
|
+
const agent = new SnapshotAgent({
|
|
117
|
+
mode: 'playback',
|
|
118
|
+
snapshotPath: './snapshots/api.json'
|
|
119
|
+
})
|
|
120
|
+
setGlobalDispatcher(agent)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The mode controls how requests are handled:
|
|
124
|
+
|
|
125
|
+
* `'record'` performs the real request and stores the response.
|
|
126
|
+
|
|
127
|
+
```mjs
|
|
128
|
+
import { SnapshotAgent, setGlobalDispatcher, fetch } from 'undici'
|
|
129
|
+
|
|
130
|
+
const agent = new SnapshotAgent({
|
|
131
|
+
mode: 'record',
|
|
132
|
+
snapshotPath: './snapshots/api.json'
|
|
133
|
+
})
|
|
134
|
+
setGlobalDispatcher(agent)
|
|
135
|
+
|
|
136
|
+
await fetch('https://api.example.com/users')
|
|
137
|
+
await agent.saveSnapshots()
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
* `'playback'` serves the recorded response without any network access. A
|
|
141
|
+
request with no matching snapshot rejects with an [`UndiciError`][] whose
|
|
142
|
+
message begins with `No snapshot found`.
|
|
143
|
+
|
|
144
|
+
```mjs
|
|
145
|
+
import { SnapshotAgent, setGlobalDispatcher, fetch } from 'undici'
|
|
146
|
+
|
|
147
|
+
const agent = new SnapshotAgent({
|
|
148
|
+
mode: 'playback',
|
|
149
|
+
snapshotPath: './snapshots/api.json'
|
|
150
|
+
})
|
|
151
|
+
setGlobalDispatcher(agent)
|
|
152
|
+
|
|
153
|
+
const response = await fetch('https://api.example.com/users')
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
* `'update'` replays an existing snapshot when one is found and otherwise records
|
|
157
|
+
the request like `'record'` mode.
|
|
158
|
+
|
|
159
|
+
```mjs
|
|
160
|
+
import { SnapshotAgent, setGlobalDispatcher, fetch } from 'undici'
|
|
161
|
+
|
|
162
|
+
const agent = new SnapshotAgent({
|
|
163
|
+
mode: 'update',
|
|
164
|
+
snapshotPath: './snapshots/api.json'
|
|
165
|
+
})
|
|
166
|
+
setGlobalDispatcher(agent)
|
|
167
|
+
|
|
168
|
+
await fetch('https://api.example.com/new-endpoint')
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### `agent.loadSnapshots([filePath])`
|
|
172
|
+
|
|
173
|
+
<!-- YAML
|
|
174
|
+
added: v7.13.0
|
|
175
|
+
-->
|
|
176
|
+
|
|
177
|
+
* `filePath` {string} (optional) Path to read snapshots from. **Default:** the
|
|
178
|
+
`snapshotPath` given to the constructor.
|
|
179
|
+
* Returns: {Promise<void>} Resolves when the snapshots have been loaded.
|
|
180
|
+
|
|
181
|
+
Loads snapshots from disk into memory. In `'playback'` mode this also installs
|
|
182
|
+
the corresponding [`MockAgent`][] interceptors so that subsequent requests are
|
|
183
|
+
matched against the loaded snapshots.
|
|
184
|
+
|
|
185
|
+
```mjs
|
|
186
|
+
await agent.loadSnapshots('./snapshots/api.json')
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### `agent.saveSnapshots([filePath])`
|
|
190
|
+
|
|
191
|
+
<!-- YAML
|
|
192
|
+
added: v7.13.0
|
|
193
|
+
-->
|
|
194
|
+
|
|
195
|
+
* `filePath` {string} (optional) Path to write snapshots to. **Default:** the
|
|
196
|
+
`snapshotPath` given to the constructor.
|
|
197
|
+
* Returns: {Promise<void>} Resolves when the snapshots have been written.
|
|
198
|
+
|
|
199
|
+
Writes all recorded snapshots to disk.
|
|
200
|
+
|
|
201
|
+
```mjs
|
|
202
|
+
await agent.saveSnapshots('./snapshots/api.json')
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### `agent.getRecorder()`
|
|
206
|
+
|
|
207
|
+
<!-- YAML
|
|
208
|
+
added: v7.13.0
|
|
209
|
+
-->
|
|
210
|
+
|
|
211
|
+
* Returns: {SnapshotRecorder} The internal recorder that stores the captured
|
|
212
|
+
interactions.
|
|
213
|
+
|
|
214
|
+
Returns the underlying `SnapshotRecorder`. The recorder exposes lower-level
|
|
215
|
+
operations over the captured data, including `record()`, `findSnapshot()`,
|
|
216
|
+
`getSnapshots()`, `size()`, and `clear()`. The recorder is an internal type
|
|
217
|
+
returned for inspection; it is not exported from the package root.
|
|
218
|
+
|
|
219
|
+
```mjs
|
|
220
|
+
const recorder = agent.getRecorder()
|
|
221
|
+
console.log(`Recorded ${recorder.size()} interactions`)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### `agent.getMode()`
|
|
225
|
+
|
|
226
|
+
<!-- YAML
|
|
227
|
+
added: v7.13.0
|
|
228
|
+
-->
|
|
229
|
+
|
|
230
|
+
* Returns: {string} The current mode: `'record'`, `'playback'`, or `'update'`.
|
|
231
|
+
|
|
232
|
+
Returns the mode the agent was constructed with.
|
|
233
|
+
|
|
234
|
+
### `agent.clearSnapshots()`
|
|
235
|
+
|
|
236
|
+
<!-- YAML
|
|
237
|
+
added: v7.13.0
|
|
238
|
+
-->
|
|
239
|
+
|
|
240
|
+
* Returns: {undefined}
|
|
241
|
+
|
|
242
|
+
Removes all snapshots from memory.
|
|
243
|
+
|
|
244
|
+
```mjs
|
|
245
|
+
agent.clearSnapshots()
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### `agent.resetCallCounts()`
|
|
249
|
+
|
|
250
|
+
<!-- YAML
|
|
251
|
+
added: v7.13.0
|
|
252
|
+
-->
|
|
253
|
+
|
|
254
|
+
* Returns: {undefined}
|
|
255
|
+
|
|
256
|
+
Resets the call count of every snapshot to zero. Useful between tests when the
|
|
257
|
+
same agent is reused, since matching a snapshot in `'playback'` mode increments
|
|
258
|
+
its call count.
|
|
259
|
+
|
|
260
|
+
```mjs
|
|
261
|
+
agent.resetCallCounts()
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### `agent.deleteSnapshot(requestOpts)`
|
|
265
|
+
|
|
266
|
+
<!-- YAML
|
|
267
|
+
added: v7.13.0
|
|
268
|
+
-->
|
|
269
|
+
|
|
270
|
+
* `requestOpts` {Object} Dispatch options identifying the snapshot to remove.
|
|
271
|
+
* Returns: {boolean} `true` if a matching snapshot was deleted, `false` if none
|
|
272
|
+
was found.
|
|
273
|
+
|
|
274
|
+
Deletes a single snapshot that matches the given request options.
|
|
275
|
+
|
|
276
|
+
```mjs
|
|
277
|
+
const deleted = agent.deleteSnapshot({
|
|
278
|
+
method: 'GET',
|
|
279
|
+
origin: 'https://api.example.com',
|
|
280
|
+
path: '/users'
|
|
281
|
+
})
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### `agent.getSnapshotInfo(requestOpts)`
|
|
285
|
+
|
|
286
|
+
<!-- YAML
|
|
287
|
+
added: v7.13.0
|
|
288
|
+
-->
|
|
289
|
+
|
|
290
|
+
* `requestOpts` {Object} Dispatch options identifying the snapshot to inspect.
|
|
291
|
+
* Returns: {Object|null} Information about the matching snapshot, or `null` when
|
|
292
|
+
none is found.
|
|
293
|
+
* `hash` {string} The hash used to key the snapshot.
|
|
294
|
+
* `request` {Object} The recorded request.
|
|
295
|
+
* `method` {string} The request method.
|
|
296
|
+
* `url` {string} The request URL.
|
|
297
|
+
* `headers` {Record<string, string>} The recorded request headers.
|
|
298
|
+
* `body` {string} The recorded request body, when present.
|
|
299
|
+
* `responseCount` {number} The number of recorded responses for the request.
|
|
300
|
+
* `callCount` {number} The number of times the snapshot has been matched.
|
|
301
|
+
* `timestamp` {string} The ISO timestamp at which the snapshot was recorded.
|
|
302
|
+
|
|
303
|
+
Returns metadata about a snapshot without returning the response payload.
|
|
304
|
+
|
|
305
|
+
```mjs
|
|
306
|
+
const info = agent.getSnapshotInfo({
|
|
307
|
+
method: 'GET',
|
|
308
|
+
origin: 'https://api.example.com',
|
|
309
|
+
path: '/users'
|
|
310
|
+
})
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### `agent.replaceSnapshots(snapshotData)`
|
|
314
|
+
|
|
315
|
+
<!-- YAML
|
|
316
|
+
added: v7.13.0
|
|
317
|
+
-->
|
|
318
|
+
|
|
319
|
+
* `snapshotData` {Array} The snapshot data to load, replacing any existing
|
|
320
|
+
snapshots.
|
|
321
|
+
* `hash` {string} The hash used to key the snapshot.
|
|
322
|
+
* `snapshot` {Object} The snapshot entry.
|
|
323
|
+
* Returns: {undefined}
|
|
324
|
+
|
|
325
|
+
Replaces all in-memory snapshots with the provided data.
|
|
326
|
+
|
|
327
|
+
```mjs
|
|
328
|
+
const recorder = agent.getRecorder()
|
|
329
|
+
const snapshots = recorder.getSnapshots()
|
|
330
|
+
|
|
331
|
+
agent.replaceSnapshots(snapshots.map((snapshot, index) => ({
|
|
332
|
+
hash: `snapshot-${index}`,
|
|
333
|
+
snapshot
|
|
334
|
+
})))
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### `agent.close()`
|
|
338
|
+
|
|
339
|
+
<!-- YAML
|
|
340
|
+
added: v7.13.0
|
|
341
|
+
-->
|
|
342
|
+
|
|
343
|
+
* Returns: {Promise<void>} Resolves once the agent and its resources are closed.
|
|
344
|
+
|
|
345
|
+
Closes the agent and releases its resources. In `'record'` and `'update'` modes
|
|
346
|
+
the recorder is flushed to disk first. In `'playback'` mode nothing is written,
|
|
347
|
+
because matching a snapshot mutates its call count and saving would needlessly
|
|
348
|
+
rewrite the snapshot file. The real [`Agent`][], when one was created, and the
|
|
349
|
+
underlying [`MockAgent`][] are closed as well.
|
|
350
|
+
|
|
351
|
+
```mjs
|
|
352
|
+
await agent.close()
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
[`Agent`]: Agent.md#class-agent
|
|
356
|
+
[`Dispatcher`]: Dispatcher.md#class-dispatcher
|
|
357
|
+
[`InvalidArgumentError`]: Errors.md#undicierrorsundiciinvalidargumenterror
|
|
358
|
+
[`MockAgent`]: MockAgent.md#class-mockagent
|
|
359
|
+
[`UndiciError`]: Errors.md#undicierrorsundicierror
|
|
360
|
+
[`agent.getRecorder()`]: #agentgetrecorder
|
|
361
|
+
[`setGlobalDispatcher()`]: Dispatcher.md#setglobaldispatcherdispatcher
|