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,730 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { MockNotMatchedError } = require('./mock-errors')
|
|
4
|
+
const {
|
|
5
|
+
kDispatches,
|
|
6
|
+
kMockAgent,
|
|
7
|
+
kOriginalDispatch,
|
|
8
|
+
kOrigin,
|
|
9
|
+
kGetNetConnect,
|
|
10
|
+
kTotalDispatchCount
|
|
11
|
+
} = require('./mock-symbols')
|
|
12
|
+
const { serializePathWithQuery, parseHeaders } = require('../core/util')
|
|
13
|
+
const { STATUS_CODES } = require('node:http')
|
|
14
|
+
const {
|
|
15
|
+
types: {
|
|
16
|
+
isPromise
|
|
17
|
+
}
|
|
18
|
+
} = require('node:util')
|
|
19
|
+
const { InvalidArgumentError } = require('../core/errors')
|
|
20
|
+
const requestAborted = Symbol('request aborted')
|
|
21
|
+
|
|
22
|
+
function matchValue (match, value) {
|
|
23
|
+
if (typeof match === 'string') {
|
|
24
|
+
return match === value
|
|
25
|
+
}
|
|
26
|
+
if (match instanceof RegExp) {
|
|
27
|
+
return match.test(value)
|
|
28
|
+
}
|
|
29
|
+
if (typeof match === 'function') {
|
|
30
|
+
return match(value) === true
|
|
31
|
+
}
|
|
32
|
+
return false
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function lowerCaseEntries (headers) {
|
|
36
|
+
return Object.fromEntries(
|
|
37
|
+
Object.entries(headers).map(([headerName, headerValue]) => {
|
|
38
|
+
return [headerName.toLocaleLowerCase(), headerValue]
|
|
39
|
+
})
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @param {import('../../index').Headers|string[]|Record<string, string>} headers
|
|
45
|
+
* @param {string} key
|
|
46
|
+
*/
|
|
47
|
+
function getHeaderByName (headers, key) {
|
|
48
|
+
if (Array.isArray(headers)) {
|
|
49
|
+
for (let i = 0; i < headers.length; i += 2) {
|
|
50
|
+
if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) {
|
|
51
|
+
return headers[i + 1]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return undefined
|
|
56
|
+
} else if (typeof headers.get === 'function') {
|
|
57
|
+
return headers.get(key)
|
|
58
|
+
} else {
|
|
59
|
+
return lowerCaseEntries(headers)[key.toLocaleLowerCase()]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** @param {string[]} headers */
|
|
64
|
+
function buildHeadersFromArray (headers) { // fetch HeadersList
|
|
65
|
+
const clone = headers.slice()
|
|
66
|
+
const entries = []
|
|
67
|
+
for (let index = 0; index < clone.length; index += 2) {
|
|
68
|
+
entries.push([clone[index], clone[index + 1]])
|
|
69
|
+
}
|
|
70
|
+
return Object.fromEntries(entries)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function matchHeaders (mockDispatch, headers) {
|
|
74
|
+
if (typeof mockDispatch.headers === 'function') {
|
|
75
|
+
if (Array.isArray(headers)) { // fetch HeadersList
|
|
76
|
+
headers = buildHeadersFromArray(headers)
|
|
77
|
+
}
|
|
78
|
+
return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {})
|
|
79
|
+
}
|
|
80
|
+
if (typeof mockDispatch.headers === 'undefined') {
|
|
81
|
+
return true
|
|
82
|
+
}
|
|
83
|
+
if (typeof headers !== 'object' || typeof mockDispatch.headers !== 'object') {
|
|
84
|
+
return false
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) {
|
|
88
|
+
const headerValue = getHeaderByName(headers, matchHeaderName)
|
|
89
|
+
|
|
90
|
+
if (!matchValue(matchHeaderValue, headerValue)) {
|
|
91
|
+
return false
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return true
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function normalizeSearchParams (query) {
|
|
98
|
+
if (typeof query !== 'string') {
|
|
99
|
+
return query
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const originalQp = new URLSearchParams(query)
|
|
103
|
+
const normalizedQp = new URLSearchParams()
|
|
104
|
+
|
|
105
|
+
for (let [key, value] of originalQp.entries()) {
|
|
106
|
+
key = key.replace('[]', '')
|
|
107
|
+
|
|
108
|
+
const valueRepresentsString = /^(['"]).*\1$/.test(value)
|
|
109
|
+
if (valueRepresentsString) {
|
|
110
|
+
normalizedQp.append(key, value)
|
|
111
|
+
continue
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (value.includes(',')) {
|
|
115
|
+
const values = value.split(',')
|
|
116
|
+
for (const v of values) {
|
|
117
|
+
normalizedQp.append(key, v)
|
|
118
|
+
}
|
|
119
|
+
continue
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
normalizedQp.append(key, value)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return normalizedQp
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function safeUrl (path) {
|
|
129
|
+
if (typeof path !== 'string') {
|
|
130
|
+
return path
|
|
131
|
+
}
|
|
132
|
+
const pathSegments = path.split('?', 3)
|
|
133
|
+
if (pathSegments.length !== 2) {
|
|
134
|
+
return path
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const qp = new URLSearchParams(pathSegments.pop())
|
|
138
|
+
qp.sort()
|
|
139
|
+
return [...pathSegments, qp.toString()].join('?')
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function matchKey (mockDispatch, { path, method, body, headers }) {
|
|
143
|
+
const pathMatch = matchValue(mockDispatch.path, path)
|
|
144
|
+
const methodMatch = matchValue(mockDispatch.method, method)
|
|
145
|
+
const bodyMatch = typeof mockDispatch.body !== 'undefined' ? matchValue(mockDispatch.body, body) : true
|
|
146
|
+
const headersMatch = matchHeaders(mockDispatch, headers)
|
|
147
|
+
return pathMatch && methodMatch && bodyMatch && headersMatch
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function getResponseData (data) {
|
|
151
|
+
if (Buffer.isBuffer(data)) {
|
|
152
|
+
return data
|
|
153
|
+
} else if (data instanceof Uint8Array) {
|
|
154
|
+
return data
|
|
155
|
+
} else if (data instanceof ArrayBuffer) {
|
|
156
|
+
return data
|
|
157
|
+
} else if (ArrayBuffer.isView(data)) {
|
|
158
|
+
// A DataView, or any non-Uint8Array typed array, is a byte container
|
|
159
|
+
// rather than a plain object. Buffer.from() cannot read one directly, so
|
|
160
|
+
// expose the bytes it covers instead of letting it reach JSON.stringify.
|
|
161
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength)
|
|
162
|
+
} else if (typeof data === 'object') {
|
|
163
|
+
return JSON.stringify(data)
|
|
164
|
+
} else if (data) {
|
|
165
|
+
return data.toString()
|
|
166
|
+
} else {
|
|
167
|
+
return ''
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function getMockDispatch (mockDispatches, key) {
|
|
172
|
+
const basePath = key.query ? serializePathWithQuery(key.path, key.query) : key.path
|
|
173
|
+
const resolvedPath = typeof basePath === 'string' ? safeUrl(basePath) : basePath
|
|
174
|
+
|
|
175
|
+
const resolvedPathWithoutTrailingSlash = removeTrailingSlash(resolvedPath)
|
|
176
|
+
|
|
177
|
+
// Match path
|
|
178
|
+
let matchedMockDispatches = mockDispatches
|
|
179
|
+
.filter(({ consumed }) => !consumed)
|
|
180
|
+
.filter(({ path, ignoreTrailingSlash }) => {
|
|
181
|
+
return ignoreTrailingSlash
|
|
182
|
+
? matchValue(removeTrailingSlash(safeUrl(path)), resolvedPathWithoutTrailingSlash)
|
|
183
|
+
: matchValue(safeUrl(path), resolvedPath)
|
|
184
|
+
})
|
|
185
|
+
if (matchedMockDispatches.length === 0) {
|
|
186
|
+
throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`)
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Match method
|
|
190
|
+
matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method))
|
|
191
|
+
if (matchedMockDispatches.length === 0) {
|
|
192
|
+
throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Match body
|
|
196
|
+
matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== 'undefined' ? matchValue(body, key.body) : true)
|
|
197
|
+
if (matchedMockDispatches.length === 0) {
|
|
198
|
+
throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Match headers
|
|
202
|
+
matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers))
|
|
203
|
+
if (matchedMockDispatches.length === 0) {
|
|
204
|
+
const headers = typeof key.headers === 'object' ? JSON.stringify(key.headers) : key.headers
|
|
205
|
+
throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`)
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return matchedMockDispatches[0]
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function addMockDispatch (mockDispatches, key, data, opts) {
|
|
212
|
+
const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false, ...opts }
|
|
213
|
+
const replyData = typeof data === 'function' ? { callback: data } : { ...data }
|
|
214
|
+
const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }
|
|
215
|
+
mockDispatches.push(newMockDispatch)
|
|
216
|
+
// Track total number of intercepts ever registered for better error messages
|
|
217
|
+
mockDispatches[kTotalDispatchCount] = (mockDispatches[kTotalDispatchCount] || 0) + 1
|
|
218
|
+
return newMockDispatch
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function deleteMockDispatch (mockDispatches, key) {
|
|
222
|
+
const index = mockDispatches.findIndex(dispatch => {
|
|
223
|
+
if (!dispatch.consumed) {
|
|
224
|
+
return false
|
|
225
|
+
}
|
|
226
|
+
return matchKey(dispatch, key)
|
|
227
|
+
})
|
|
228
|
+
if (index !== -1) {
|
|
229
|
+
mockDispatches.splice(index, 1)
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* @param {string|RegExp|Function} path Path, or path matcher, to remove trailing slash from
|
|
235
|
+
*/
|
|
236
|
+
function removeTrailingSlash (path) {
|
|
237
|
+
// Registered path matchers may be a RegExp or a function, which have no
|
|
238
|
+
// trailing slash to strip; hand those back for matchValue to apply.
|
|
239
|
+
if (typeof path !== 'string') {
|
|
240
|
+
return path
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Only strip slashes from the pathname, not from a query string after it
|
|
244
|
+
const queryIndex = path.indexOf('?')
|
|
245
|
+
const search = queryIndex === -1 ? '' : path.slice(queryIndex)
|
|
246
|
+
if (queryIndex !== -1) {
|
|
247
|
+
path = path.slice(0, queryIndex)
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
while (path.endsWith('/')) {
|
|
251
|
+
path = path.slice(0, -1)
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
if (path.length === 0) {
|
|
255
|
+
path = '/'
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return path + search
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function buildKey (opts) {
|
|
262
|
+
const { path, method, body, headers, query } = opts
|
|
263
|
+
|
|
264
|
+
return {
|
|
265
|
+
path,
|
|
266
|
+
method,
|
|
267
|
+
body,
|
|
268
|
+
headers,
|
|
269
|
+
query
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
function generateKeyValues (data) {
|
|
274
|
+
const keys = Object.keys(data)
|
|
275
|
+
const result = []
|
|
276
|
+
for (let i = 0; i < keys.length; ++i) {
|
|
277
|
+
const key = keys[i]
|
|
278
|
+
const value = data[key]
|
|
279
|
+
const name = Buffer.from(`${key}`)
|
|
280
|
+
if (Array.isArray(value)) {
|
|
281
|
+
for (let j = 0; j < value.length; ++j) {
|
|
282
|
+
result.push(name, Buffer.from(`${value[j]}`))
|
|
283
|
+
}
|
|
284
|
+
} else {
|
|
285
|
+
result.push(name, Buffer.from(`${value}`))
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return result
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
|
|
293
|
+
* @param {number} statusCode
|
|
294
|
+
*/
|
|
295
|
+
function getStatusText (statusCode) {
|
|
296
|
+
return STATUS_CODES[statusCode] || 'unknown'
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
async function getResponse (body) {
|
|
300
|
+
const buffers = []
|
|
301
|
+
for await (const data of body) {
|
|
302
|
+
buffers.push(data)
|
|
303
|
+
}
|
|
304
|
+
return Buffer.concat(buffers).toString('utf8')
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Mock dispatch function used to simulate undici dispatches
|
|
309
|
+
*/
|
|
310
|
+
function mockDispatch (opts, handler) {
|
|
311
|
+
// Get mock dispatch from built key
|
|
312
|
+
const key = buildKey(opts)
|
|
313
|
+
const mockDispatch = getMockDispatch(this[kDispatches], key)
|
|
314
|
+
const mockDispatches = this[kDispatches]
|
|
315
|
+
|
|
316
|
+
mockDispatch.timesInvoked++
|
|
317
|
+
|
|
318
|
+
const { timesInvoked, times } = mockDispatch
|
|
319
|
+
|
|
320
|
+
// If it's used up and not persistent, mark as consumed
|
|
321
|
+
mockDispatch.consumed = !mockDispatch.persist && timesInvoked >= times
|
|
322
|
+
mockDispatch.pending = timesInvoked < times
|
|
323
|
+
|
|
324
|
+
const hasBodyHooks = typeof handler.onBodySent === 'function' ||
|
|
325
|
+
typeof handler.onRequestSent === 'function'
|
|
326
|
+
|
|
327
|
+
// Here's where we resolve a callback if a callback is present for the dispatch data.
|
|
328
|
+
if (mockDispatch.data.callback && (!hasBodyHooks || opts.body == null)) {
|
|
329
|
+
const { callback, ...responseDefaults } = mockDispatch.data
|
|
330
|
+
const callbackResult = callback(opts)
|
|
331
|
+
|
|
332
|
+
// An asynchronous reply options callback resolves to the reply data, so
|
|
333
|
+
// the dispatch can only continue once the returned promise settles.
|
|
334
|
+
// A rejection cannot be thrown synchronously from the dispatch at that
|
|
335
|
+
// point, so it is surfaced as a response error instead.
|
|
336
|
+
if (isPromise(callbackResult)) {
|
|
337
|
+
callbackResult.then(
|
|
338
|
+
(resolvedData) => {
|
|
339
|
+
if (resolvedData == null || typeof resolvedData !== 'object') {
|
|
340
|
+
handler.onResponseError(null, new InvalidArgumentError('reply options callback must return an object'))
|
|
341
|
+
return
|
|
342
|
+
}
|
|
343
|
+
dispatchMockReply(mockDispatches, mockDispatch, key, opts, handler, { ...responseDefaults, ...resolvedData })
|
|
344
|
+
},
|
|
345
|
+
(error) => {
|
|
346
|
+
handler.onResponseError(null, error)
|
|
347
|
+
}
|
|
348
|
+
)
|
|
349
|
+
return true
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (callbackResult == null || typeof callbackResult !== 'object') {
|
|
353
|
+
throw new InvalidArgumentError('reply options callback must return an object')
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return dispatchMockReply(mockDispatches, mockDispatch, key, opts, handler, { ...responseDefaults, ...callbackResult })
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return dispatchMockReply(mockDispatches, mockDispatch, key, opts, handler)
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Replies to a request once the mock dispatch data is fully resolved
|
|
364
|
+
*/
|
|
365
|
+
function dispatchMockReply (mockDispatches, mockDispatch, key, opts, handler, resolvedResponse) {
|
|
366
|
+
// Parse mockDispatch data. When a reply callback has already been resolved
|
|
367
|
+
// in mockDispatch() (i.e. no body lifecycle hooks are involved), the resolved
|
|
368
|
+
// response is passed in here, leaving mockDispatch.data untouched so the
|
|
369
|
+
// callback can be re-invoked for persistent / times() replies.
|
|
370
|
+
const { data: responseData, delay } = mockDispatch
|
|
371
|
+
const response = resolvedResponse ?? responseData
|
|
372
|
+
|
|
373
|
+
// If specified, trigger dispatch error
|
|
374
|
+
if (response.error !== null) {
|
|
375
|
+
deleteMockDispatch(mockDispatches, key)
|
|
376
|
+
handler.onResponseError(null, response.error)
|
|
377
|
+
return true
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// Track whether the request has been aborted
|
|
381
|
+
let aborted = false
|
|
382
|
+
let timer = null
|
|
383
|
+
|
|
384
|
+
// Create the controller early so abort can use it
|
|
385
|
+
const controller = {
|
|
386
|
+
paused: false,
|
|
387
|
+
rawHeaders: null,
|
|
388
|
+
rawTrailers: null,
|
|
389
|
+
get aborted () {
|
|
390
|
+
return aborted
|
|
391
|
+
},
|
|
392
|
+
pause () {
|
|
393
|
+
this.paused = true
|
|
394
|
+
},
|
|
395
|
+
resume () {
|
|
396
|
+
this.paused = false
|
|
397
|
+
},
|
|
398
|
+
abort: (reason) => {
|
|
399
|
+
if (aborted) {
|
|
400
|
+
return
|
|
401
|
+
}
|
|
402
|
+
aborted = true
|
|
403
|
+
|
|
404
|
+
// Clear the pending delayed response if any
|
|
405
|
+
if (timer !== null) {
|
|
406
|
+
clearTimeout(timer)
|
|
407
|
+
timer = null
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
handler.onResponseError?.(controller, reason)
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
let replyOpts = opts
|
|
415
|
+
const dispatches = mockDispatches
|
|
416
|
+
|
|
417
|
+
// Call onRequestStart to allow the handler to receive the controller
|
|
418
|
+
handler.onRequestStart?.(controller, null)
|
|
419
|
+
|
|
420
|
+
if (aborted) {
|
|
421
|
+
return true
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
const requestBody = dispatchRequestBody(opts.body, handler, controller, () => aborted)
|
|
425
|
+
|
|
426
|
+
if (isPromise(requestBody)) {
|
|
427
|
+
requestBody.then((body) => {
|
|
428
|
+
if (body === requestAborted) {
|
|
429
|
+
return
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
if (body !== opts.body) {
|
|
433
|
+
replyOpts = { ...opts, body }
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
sendReply()
|
|
437
|
+
}, (error) => controller.abort(error))
|
|
438
|
+
return true
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
if (requestBody === requestAborted) {
|
|
442
|
+
return true
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
if (requestBody !== opts.body) {
|
|
446
|
+
replyOpts = { ...opts, body: requestBody }
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
sendReply()
|
|
450
|
+
|
|
451
|
+
function sendReply () {
|
|
452
|
+
if (response.callback) {
|
|
453
|
+
const { callback, ...responseDefaults } = response
|
|
454
|
+
let callbackResult
|
|
455
|
+
try {
|
|
456
|
+
callbackResult = callback(replyOpts)
|
|
457
|
+
} catch (err) {
|
|
458
|
+
deleteMockDispatch(mockDispatches, key)
|
|
459
|
+
handler.onResponseError(null, err)
|
|
460
|
+
return
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
if (isPromise(callbackResult)) {
|
|
464
|
+
callbackResult.then(
|
|
465
|
+
(resolvedData) => {
|
|
466
|
+
if (resolvedData == null || typeof resolvedData !== 'object') {
|
|
467
|
+
handler.onResponseError(null, new InvalidArgumentError('reply options callback must return an object'))
|
|
468
|
+
return
|
|
469
|
+
}
|
|
470
|
+
handleReply(dispatches, { ...responseDefaults, ...resolvedData })
|
|
471
|
+
},
|
|
472
|
+
(err) => {
|
|
473
|
+
handler.onResponseError(null, err)
|
|
474
|
+
}
|
|
475
|
+
)
|
|
476
|
+
return
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
if (callbackResult == null || typeof callbackResult !== 'object') {
|
|
480
|
+
throw new InvalidArgumentError('reply options callback must return an object')
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
handleReply(dispatches, { ...responseDefaults, ...callbackResult })
|
|
484
|
+
return
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// Handle the request with a delay if necessary
|
|
488
|
+
if (typeof delay === 'number' && delay > 0) {
|
|
489
|
+
timer = setTimeout(() => {
|
|
490
|
+
timer = null
|
|
491
|
+
handleReply(dispatches)
|
|
492
|
+
}, delay)
|
|
493
|
+
} else {
|
|
494
|
+
handleReply(dispatches)
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
function handleReply (mockDispatches, _response = response) {
|
|
499
|
+
// Don't send response if the request was aborted
|
|
500
|
+
if (aborted) {
|
|
501
|
+
return
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
const { statusCode, data, headers, trailers } = _response
|
|
505
|
+
|
|
506
|
+
// fetch's HeadersList is a 1D string array
|
|
507
|
+
const optsHeaders = Array.isArray(opts.headers)
|
|
508
|
+
? buildHeadersFromArray(opts.headers)
|
|
509
|
+
: opts.headers
|
|
510
|
+
const body = typeof data === 'function'
|
|
511
|
+
? data({ ...replyOpts, headers: optsHeaders })
|
|
512
|
+
: data
|
|
513
|
+
|
|
514
|
+
// util.types.isPromise is likely needed for jest.
|
|
515
|
+
if (isPromise(body)) {
|
|
516
|
+
// If handleReply is asynchronous, throwing an error
|
|
517
|
+
// in the callback will reject the promise, rather than
|
|
518
|
+
// synchronously throw the error, which breaks some tests.
|
|
519
|
+
// Rather, we wait for the callback to resolve if it is a
|
|
520
|
+
// promise, and then re-run handleReply with the new body.
|
|
521
|
+
return body.then((newData) => handleReply(mockDispatches, { ..._response, data: newData }))
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
// Check again if aborted after async body resolution
|
|
525
|
+
if (aborted) {
|
|
526
|
+
return
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
const responseData = getResponseData(body)
|
|
530
|
+
const responseHeaders = generateKeyValues(headers ?? {})
|
|
531
|
+
const responseTrailers = generateKeyValues(trailers ?? {})
|
|
532
|
+
|
|
533
|
+
// Update the controller with response data
|
|
534
|
+
controller.rawHeaders = responseHeaders
|
|
535
|
+
controller.rawTrailers = responseTrailers
|
|
536
|
+
|
|
537
|
+
handler.onResponseStart?.(controller, statusCode, parseHeaders(responseHeaders), getStatusText(statusCode))
|
|
538
|
+
handler.onResponseData?.(controller, Buffer.from(responseData))
|
|
539
|
+
handler.onResponseEnd?.(controller, parseHeaders(responseTrailers))
|
|
540
|
+
deleteMockDispatch(mockDispatches, key)
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
return true
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
function dispatchRequestBody (body, handler, controller, isAborted) {
|
|
547
|
+
if (typeof handler.onBodySent !== 'function' && typeof handler.onRequestSent !== 'function') {
|
|
548
|
+
return body
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
if (body == null) {
|
|
552
|
+
return callOnRequestSent(handler, controller, isAborted) ? body : requestAborted
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
if (body && typeof body[Symbol.asyncIterator] === 'function') {
|
|
556
|
+
return dispatchAsyncIterableBody(body, handler, controller, isAborted)
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
if (isIterableBody(body)) {
|
|
560
|
+
const chunks = []
|
|
561
|
+
|
|
562
|
+
for (const chunk of body) {
|
|
563
|
+
if (isAborted()) {
|
|
564
|
+
return requestAborted
|
|
565
|
+
}
|
|
566
|
+
chunks.push(chunk)
|
|
567
|
+
if (!callOnBodySent(handler, controller, chunk) || isAborted()) {
|
|
568
|
+
return requestAborted
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
return callOnRequestSent(handler, controller, isAborted) ? chunks : requestAborted
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
if (isAborted()) {
|
|
576
|
+
return requestAborted
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
if (!callOnBodySent(handler, controller, body)) {
|
|
580
|
+
return requestAborted
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
return callOnRequestSent(handler, controller, isAborted) ? body : requestAborted
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
async function dispatchAsyncIterableBody (body, handler, controller, isAborted) {
|
|
587
|
+
const chunks = []
|
|
588
|
+
|
|
589
|
+
for await (const chunk of body) {
|
|
590
|
+
if (isAborted()) {
|
|
591
|
+
return requestAborted
|
|
592
|
+
}
|
|
593
|
+
chunks.push(chunk)
|
|
594
|
+
if (!callOnBodySent(handler, controller, chunk) || isAborted()) {
|
|
595
|
+
return requestAborted
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
if (!callOnRequestSent(handler, controller, isAborted)) {
|
|
600
|
+
return requestAborted
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
return {
|
|
604
|
+
async * [Symbol.asyncIterator] () {
|
|
605
|
+
yield * chunks
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
function callOnBodySent (handler, controller, chunk) {
|
|
611
|
+
try {
|
|
612
|
+
handler.onBodySent?.(chunk)
|
|
613
|
+
return true
|
|
614
|
+
} catch (error) {
|
|
615
|
+
controller.abort(error)
|
|
616
|
+
return false
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
function callOnRequestSent (handler, controller, isAborted) {
|
|
621
|
+
try {
|
|
622
|
+
handler.onRequestSent?.()
|
|
623
|
+
return !isAborted()
|
|
624
|
+
} catch (error) {
|
|
625
|
+
controller.abort(error)
|
|
626
|
+
return false
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
function isIterableBody (body) {
|
|
631
|
+
return typeof body !== 'string' &&
|
|
632
|
+
!Buffer.isBuffer(body) &&
|
|
633
|
+
!ArrayBuffer.isView(body) &&
|
|
634
|
+
typeof body[Symbol.iterator] === 'function'
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
function buildMockDispatch () {
|
|
638
|
+
const agent = this[kMockAgent]
|
|
639
|
+
const origin = this[kOrigin]
|
|
640
|
+
const originalDispatch = this[kOriginalDispatch]
|
|
641
|
+
|
|
642
|
+
return function dispatch (opts, handler) {
|
|
643
|
+
if (agent.isMockActive) {
|
|
644
|
+
try {
|
|
645
|
+
mockDispatch.call(this, opts, handler)
|
|
646
|
+
} catch (error) {
|
|
647
|
+
if (error.code === 'UND_MOCK_ERR_MOCK_NOT_MATCHED') {
|
|
648
|
+
const netConnect = agent[kGetNetConnect]()
|
|
649
|
+
const totalInterceptsCount = this[kDispatches][kTotalDispatchCount] || this[kDispatches].length
|
|
650
|
+
const pendingInterceptsCount = this[kDispatches].filter(({ consumed }) => !consumed).length
|
|
651
|
+
const interceptsMessage = `, ${pendingInterceptsCount} interceptor(s) remaining out of ${totalInterceptsCount} defined`
|
|
652
|
+
if (netConnect === false) {
|
|
653
|
+
throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)${interceptsMessage}`)
|
|
654
|
+
}
|
|
655
|
+
if (checkNetConnect(netConnect, origin)) {
|
|
656
|
+
originalDispatch.call(this, '__mockAgentBodyForDispatch' in opts
|
|
657
|
+
? { ...opts, body: opts.__mockAgentBodyForDispatch }
|
|
658
|
+
: opts, handler)
|
|
659
|
+
} else {
|
|
660
|
+
throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)${interceptsMessage}`)
|
|
661
|
+
}
|
|
662
|
+
} else {
|
|
663
|
+
throw error
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
} else {
|
|
667
|
+
originalDispatch.call(this, opts, handler)
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
function checkNetConnect (netConnect, origin) {
|
|
673
|
+
const url = new URL(origin)
|
|
674
|
+
if (netConnect === true) {
|
|
675
|
+
return true
|
|
676
|
+
} else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) {
|
|
677
|
+
return true
|
|
678
|
+
}
|
|
679
|
+
return false
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
function normalizeOrigin (origin) {
|
|
683
|
+
if (typeof origin !== 'string' && !(origin instanceof URL)) {
|
|
684
|
+
return origin
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
if (origin instanceof URL) {
|
|
688
|
+
return origin.origin
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
return origin.toLowerCase()
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
function buildAndValidateMockOptions (opts) {
|
|
695
|
+
const { agent, ...mockOptions } = opts
|
|
696
|
+
|
|
697
|
+
if ('enableCallHistory' in mockOptions && typeof mockOptions.enableCallHistory !== 'boolean') {
|
|
698
|
+
throw new InvalidArgumentError('options.enableCallHistory must to be a boolean')
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
if ('acceptNonStandardSearchParameters' in mockOptions && typeof mockOptions.acceptNonStandardSearchParameters !== 'boolean') {
|
|
702
|
+
throw new InvalidArgumentError('options.acceptNonStandardSearchParameters must to be a boolean')
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
if ('ignoreTrailingSlash' in mockOptions && typeof mockOptions.ignoreTrailingSlash !== 'boolean') {
|
|
706
|
+
throw new InvalidArgumentError('options.ignoreTrailingSlash must to be a boolean')
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
return mockOptions
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
module.exports = {
|
|
713
|
+
getResponseData,
|
|
714
|
+
getMockDispatch,
|
|
715
|
+
addMockDispatch,
|
|
716
|
+
deleteMockDispatch,
|
|
717
|
+
buildKey,
|
|
718
|
+
generateKeyValues,
|
|
719
|
+
matchValue,
|
|
720
|
+
getResponse,
|
|
721
|
+
getStatusText,
|
|
722
|
+
mockDispatch,
|
|
723
|
+
buildMockDispatch,
|
|
724
|
+
checkNetConnect,
|
|
725
|
+
buildAndValidateMockOptions,
|
|
726
|
+
getHeaderByName,
|
|
727
|
+
buildHeadersFromArray,
|
|
728
|
+
normalizeSearchParams,
|
|
729
|
+
normalizeOrigin
|
|
730
|
+
}
|