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.
Files changed (367) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +51 -2
  3. package/cordis.patch.yml +4 -0
  4. package/lib/client.js +381 -0
  5. package/lib/index.js +267 -0
  6. package/package.json +67 -3
  7. package/skill/SKILL.md +48 -0
  8. package/skill/tools/node_modules/.package-lock.json +163 -0
  9. package/skill/tools/node_modules/pg/LICENSE +21 -0
  10. package/skill/tools/node_modules/pg/README.md +96 -0
  11. package/skill/tools/node_modules/pg/esm/index.mjs +20 -0
  12. package/skill/tools/node_modules/pg/lib/client.js +846 -0
  13. package/skill/tools/node_modules/pg/lib/connection-parameters.js +184 -0
  14. package/skill/tools/node_modules/pg/lib/connection.js +250 -0
  15. package/skill/tools/node_modules/pg/lib/crypto/cert-signatures.js +122 -0
  16. package/skill/tools/node_modules/pg/lib/crypto/sasl.js +262 -0
  17. package/skill/tools/node_modules/pg/lib/crypto/utils.js +89 -0
  18. package/skill/tools/node_modules/pg/lib/defaults.js +94 -0
  19. package/skill/tools/node_modules/pg/lib/index.js +73 -0
  20. package/skill/tools/node_modules/pg/lib/native/client.js +428 -0
  21. package/skill/tools/node_modules/pg/lib/native/index.js +2 -0
  22. package/skill/tools/node_modules/pg/lib/native/query.js +167 -0
  23. package/skill/tools/node_modules/pg/lib/query.js +263 -0
  24. package/skill/tools/node_modules/pg/lib/result.js +109 -0
  25. package/skill/tools/node_modules/pg/lib/stream.js +83 -0
  26. package/skill/tools/node_modules/pg/lib/type-overrides.js +35 -0
  27. package/skill/tools/node_modules/pg/lib/utils.js +225 -0
  28. package/skill/tools/node_modules/pg/package.json +76 -0
  29. package/skill/tools/node_modules/pg-cloudflare/LICENSE +21 -0
  30. package/skill/tools/node_modules/pg-cloudflare/README.md +112 -0
  31. package/skill/tools/node_modules/pg-cloudflare/dist/empty.d.ts +2 -0
  32. package/skill/tools/node_modules/pg-cloudflare/dist/empty.js +6 -0
  33. package/skill/tools/node_modules/pg-cloudflare/dist/empty.js.map +1 -0
  34. package/skill/tools/node_modules/pg-cloudflare/dist/index.d.ts +29 -0
  35. package/skill/tools/node_modules/pg-cloudflare/dist/index.js +171 -0
  36. package/skill/tools/node_modules/pg-cloudflare/dist/index.js.map +1 -0
  37. package/skill/tools/node_modules/pg-cloudflare/esm/index.mjs +3 -0
  38. package/skill/tools/node_modules/pg-cloudflare/package.json +39 -0
  39. package/skill/tools/node_modules/pg-cloudflare/src/empty.ts +3 -0
  40. package/skill/tools/node_modules/pg-cloudflare/src/index.ts +187 -0
  41. package/skill/tools/node_modules/pg-cloudflare/src/types.d.ts +25 -0
  42. package/skill/tools/node_modules/pg-connection-string/LICENSE +21 -0
  43. package/skill/tools/node_modules/pg-connection-string/README.md +105 -0
  44. package/skill/tools/node_modules/pg-connection-string/esm/index.mjs +8 -0
  45. package/skill/tools/node_modules/pg-connection-string/index.d.ts +37 -0
  46. package/skill/tools/node_modules/pg-connection-string/index.js +237 -0
  47. package/skill/tools/node_modules/pg-connection-string/package.json +51 -0
  48. package/skill/tools/node_modules/pg-int8/LICENSE +13 -0
  49. package/skill/tools/node_modules/pg-int8/README.md +16 -0
  50. package/skill/tools/node_modules/pg-int8/index.js +100 -0
  51. package/skill/tools/node_modules/pg-int8/package.json +24 -0
  52. package/skill/tools/node_modules/pg-pool/LICENSE +21 -0
  53. package/skill/tools/node_modules/pg-pool/README.md +357 -0
  54. package/skill/tools/node_modules/pg-pool/esm/index.mjs +5 -0
  55. package/skill/tools/node_modules/pg-pool/index.js +517 -0
  56. package/skill/tools/node_modules/pg-pool/package.json +51 -0
  57. package/skill/tools/node_modules/pg-protocol/LICENSE +21 -0
  58. package/skill/tools/node_modules/pg-protocol/README.md +3 -0
  59. package/skill/tools/node_modules/pg-protocol/dist/b.d.ts +1 -0
  60. package/skill/tools/node_modules/pg-protocol/dist/b.js +23 -0
  61. package/skill/tools/node_modules/pg-protocol/dist/b.js.map +1 -0
  62. package/skill/tools/node_modules/pg-protocol/dist/buffer-reader.d.ts +14 -0
  63. package/skill/tools/node_modules/pg-protocol/dist/buffer-reader.js +55 -0
  64. package/skill/tools/node_modules/pg-protocol/dist/buffer-reader.js.map +1 -0
  65. package/skill/tools/node_modules/pg-protocol/dist/buffer-writer.d.ts +21 -0
  66. package/skill/tools/node_modules/pg-protocol/dist/buffer-writer.js +113 -0
  67. package/skill/tools/node_modules/pg-protocol/dist/buffer-writer.js.map +1 -0
  68. package/skill/tools/node_modules/pg-protocol/dist/inbound-parser.test.d.ts +1 -0
  69. package/skill/tools/node_modules/pg-protocol/dist/inbound-parser.test.js +538 -0
  70. package/skill/tools/node_modules/pg-protocol/dist/inbound-parser.test.js.map +1 -0
  71. package/skill/tools/node_modules/pg-protocol/dist/index.d.ts +5 -0
  72. package/skill/tools/node_modules/pg-protocol/dist/index.js +15 -0
  73. package/skill/tools/node_modules/pg-protocol/dist/index.js.map +1 -0
  74. package/skill/tools/node_modules/pg-protocol/dist/messages.d.ts +161 -0
  75. package/skill/tools/node_modules/pg-protocol/dist/messages.js +160 -0
  76. package/skill/tools/node_modules/pg-protocol/dist/messages.js.map +1 -0
  77. package/skill/tools/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts +1 -0
  78. package/skill/tools/node_modules/pg-protocol/dist/outbound-serializer.test.js +325 -0
  79. package/skill/tools/node_modules/pg-protocol/dist/outbound-serializer.test.js.map +1 -0
  80. package/skill/tools/node_modules/pg-protocol/dist/parser.d.ts +22 -0
  81. package/skill/tools/node_modules/pg-protocol/dist/parser.js +325 -0
  82. package/skill/tools/node_modules/pg-protocol/dist/parser.js.map +1 -0
  83. package/skill/tools/node_modules/pg-protocol/dist/serializer.d.ts +42 -0
  84. package/skill/tools/node_modules/pg-protocol/dist/serializer.js +198 -0
  85. package/skill/tools/node_modules/pg-protocol/dist/serializer.js.map +1 -0
  86. package/skill/tools/node_modules/pg-protocol/esm/index.js +11 -0
  87. package/skill/tools/node_modules/pg-protocol/package.json +44 -0
  88. package/skill/tools/node_modules/pg-protocol/src/b.ts +25 -0
  89. package/skill/tools/node_modules/pg-protocol/src/buffer-reader.ts +58 -0
  90. package/skill/tools/node_modules/pg-protocol/src/buffer-writer.ts +120 -0
  91. package/skill/tools/node_modules/pg-protocol/src/inbound-parser.test.ts +585 -0
  92. package/skill/tools/node_modules/pg-protocol/src/index.ts +11 -0
  93. package/skill/tools/node_modules/pg-protocol/src/messages.ts +262 -0
  94. package/skill/tools/node_modules/pg-protocol/src/outbound-serializer.test.ts +356 -0
  95. package/skill/tools/node_modules/pg-protocol/src/parser.ts +414 -0
  96. package/skill/tools/node_modules/pg-protocol/src/serializer.ts +286 -0
  97. package/skill/tools/node_modules/pg-protocol/src/testing/buffer-list.ts +67 -0
  98. package/skill/tools/node_modules/pg-protocol/src/testing/test-buffers.ts +166 -0
  99. package/skill/tools/node_modules/pg-types/.travis.yml +7 -0
  100. package/skill/tools/node_modules/pg-types/Makefile +14 -0
  101. package/skill/tools/node_modules/pg-types/README.md +75 -0
  102. package/skill/tools/node_modules/pg-types/index.d.ts +137 -0
  103. package/skill/tools/node_modules/pg-types/index.js +47 -0
  104. package/skill/tools/node_modules/pg-types/index.test-d.ts +21 -0
  105. package/skill/tools/node_modules/pg-types/lib/arrayParser.js +11 -0
  106. package/skill/tools/node_modules/pg-types/lib/binaryParsers.js +257 -0
  107. package/skill/tools/node_modules/pg-types/lib/builtins.js +73 -0
  108. package/skill/tools/node_modules/pg-types/lib/textParsers.js +215 -0
  109. package/skill/tools/node_modules/pg-types/package.json +42 -0
  110. package/skill/tools/node_modules/pg-types/test/index.js +24 -0
  111. package/skill/tools/node_modules/pg-types/test/types.js +597 -0
  112. package/skill/tools/node_modules/pgpass/README.md +74 -0
  113. package/skill/tools/node_modules/pgpass/lib/helper.js +233 -0
  114. package/skill/tools/node_modules/pgpass/lib/index.js +23 -0
  115. package/skill/tools/node_modules/pgpass/package.json +41 -0
  116. package/skill/tools/node_modules/postgres-array/index.d.ts +4 -0
  117. package/skill/tools/node_modules/postgres-array/index.js +97 -0
  118. package/skill/tools/node_modules/postgres-array/license +21 -0
  119. package/skill/tools/node_modules/postgres-array/package.json +35 -0
  120. package/skill/tools/node_modules/postgres-array/readme.md +43 -0
  121. package/skill/tools/node_modules/postgres-bytea/index.js +33 -0
  122. package/skill/tools/node_modules/postgres-bytea/license +21 -0
  123. package/skill/tools/node_modules/postgres-bytea/package.json +34 -0
  124. package/skill/tools/node_modules/postgres-bytea/readme.md +34 -0
  125. package/skill/tools/node_modules/postgres-date/index.js +116 -0
  126. package/skill/tools/node_modules/postgres-date/license +21 -0
  127. package/skill/tools/node_modules/postgres-date/package.json +33 -0
  128. package/skill/tools/node_modules/postgres-date/readme.md +49 -0
  129. package/skill/tools/node_modules/postgres-interval/index.d.ts +20 -0
  130. package/skill/tools/node_modules/postgres-interval/index.js +125 -0
  131. package/skill/tools/node_modules/postgres-interval/license +21 -0
  132. package/skill/tools/node_modules/postgres-interval/package.json +36 -0
  133. package/skill/tools/node_modules/postgres-interval/readme.md +48 -0
  134. package/skill/tools/node_modules/split2/LICENSE +13 -0
  135. package/skill/tools/node_modules/split2/README.md +85 -0
  136. package/skill/tools/node_modules/split2/bench.js +27 -0
  137. package/skill/tools/node_modules/split2/index.js +141 -0
  138. package/skill/tools/node_modules/split2/package.json +39 -0
  139. package/skill/tools/node_modules/split2/test.js +409 -0
  140. package/skill/tools/node_modules/undici/LICENSE +21 -0
  141. package/skill/tools/node_modules/undici/README.md +828 -0
  142. package/skill/tools/node_modules/undici/docs/docs/api/Agent.md +291 -0
  143. package/skill/tools/node_modules/undici/docs/docs/api/BalancedPool.md +297 -0
  144. package/skill/tools/node_modules/undici/docs/docs/api/CacheStorage.md +188 -0
  145. package/skill/tools/node_modules/undici/docs/docs/api/CacheStore.md +375 -0
  146. package/skill/tools/node_modules/undici/docs/docs/api/Client.md +538 -0
  147. package/skill/tools/node_modules/undici/docs/docs/api/ClientStats.md +93 -0
  148. package/skill/tools/node_modules/undici/docs/docs/api/Connector.md +198 -0
  149. package/skill/tools/node_modules/undici/docs/docs/api/ContentType.md +97 -0
  150. package/skill/tools/node_modules/undici/docs/docs/api/Cookies.md +179 -0
  151. package/skill/tools/node_modules/undici/docs/docs/api/Debug.md +78 -0
  152. package/skill/tools/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +518 -0
  153. package/skill/tools/node_modules/undici/docs/docs/api/Dispatcher.md +842 -0
  154. package/skill/tools/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +171 -0
  155. package/skill/tools/node_modules/undici/docs/docs/api/Errors.md +624 -0
  156. package/skill/tools/node_modules/undici/docs/docs/api/EventSource.md +358 -0
  157. package/skill/tools/node_modules/undici/docs/docs/api/Fetch.md +721 -0
  158. package/skill/tools/node_modules/undici/docs/docs/api/GlobalInstallation.md +121 -0
  159. package/skill/tools/node_modules/undici/docs/docs/api/H2CClient.md +386 -0
  160. package/skill/tools/node_modules/undici/docs/docs/api/Interceptors.md +439 -0
  161. package/skill/tools/node_modules/undici/docs/docs/api/MockAgent.md +622 -0
  162. package/skill/tools/node_modules/undici/docs/docs/api/MockCallHistory.md +371 -0
  163. package/skill/tools/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +206 -0
  164. package/skill/tools/node_modules/undici/docs/docs/api/MockClient.md +199 -0
  165. package/skill/tools/node_modules/undici/docs/docs/api/MockErrors.md +63 -0
  166. package/skill/tools/node_modules/undici/docs/docs/api/MockPool.md +618 -0
  167. package/skill/tools/node_modules/undici/docs/docs/api/Pool.md +278 -0
  168. package/skill/tools/node_modules/undici/docs/docs/api/PoolStats.md +141 -0
  169. package/skill/tools/node_modules/undici/docs/docs/api/ProxyAgent.md +248 -0
  170. package/skill/tools/node_modules/undici/docs/docs/api/RedirectHandler.md +279 -0
  171. package/skill/tools/node_modules/undici/docs/docs/api/RetryAgent.md +136 -0
  172. package/skill/tools/node_modules/undici/docs/docs/api/RetryHandler.md +200 -0
  173. package/skill/tools/node_modules/undici/docs/docs/api/RoundRobinPool.md +239 -0
  174. package/skill/tools/node_modules/undici/docs/docs/api/SnapshotAgent.md +361 -0
  175. package/skill/tools/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +256 -0
  176. package/skill/tools/node_modules/undici/docs/docs/api/Util.md +82 -0
  177. package/skill/tools/node_modules/undici/docs/docs/api/WebSocket.md +536 -0
  178. package/skill/tools/node_modules/undici/docs/docs/api/api-lifecycle.md +159 -0
  179. package/skill/tools/node_modules/undici/docs/docs/best-practices/client-certificate.md +66 -0
  180. package/skill/tools/node_modules/undici/docs/docs/best-practices/crawling.md +60 -0
  181. package/skill/tools/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +233 -0
  182. package/skill/tools/node_modules/undici/docs/docs/best-practices/mocking-request.md +192 -0
  183. package/skill/tools/node_modules/undici/docs/docs/best-practices/proxy.md +129 -0
  184. package/skill/tools/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +226 -0
  185. package/skill/tools/node_modules/undici/docs/docs/best-practices/writing-tests.md +65 -0
  186. package/skill/tools/node_modules/undici/docs/docs/getting-started.md +281 -0
  187. package/skill/tools/node_modules/undici/docs/docs/index.md +793 -0
  188. package/skill/tools/node_modules/undici/docs/docs/site.json +125 -0
  189. package/skill/tools/node_modules/undici/docs/docs/type-map.json +79 -0
  190. package/skill/tools/node_modules/undici/index-fetch.js +65 -0
  191. package/skill/tools/node_modules/undici/index.d.ts +3 -0
  192. package/skill/tools/node_modules/undici/index.js +236 -0
  193. package/skill/tools/node_modules/undici/lib/api/abort-signal.js +59 -0
  194. package/skill/tools/node_modules/undici/lib/api/api-connect.js +112 -0
  195. package/skill/tools/node_modules/undici/lib/api/api-pipeline.js +265 -0
  196. package/skill/tools/node_modules/undici/lib/api/api-request.js +244 -0
  197. package/skill/tools/node_modules/undici/lib/api/api-stream.js +270 -0
  198. package/skill/tools/node_modules/undici/lib/api/api-upgrade.js +121 -0
  199. package/skill/tools/node_modules/undici/lib/api/index.js +7 -0
  200. package/skill/tools/node_modules/undici/lib/api/readable.js +615 -0
  201. package/skill/tools/node_modules/undici/lib/cache/memory-cache-store.js +314 -0
  202. package/skill/tools/node_modules/undici/lib/cache/sqlite-cache-store.js +593 -0
  203. package/skill/tools/node_modules/undici/lib/core/connect.js +198 -0
  204. package/skill/tools/node_modules/undici/lib/core/constants.js +131 -0
  205. package/skill/tools/node_modules/undici/lib/core/diagnostics.js +227 -0
  206. package/skill/tools/node_modules/undici/lib/core/errors.js +534 -0
  207. package/skill/tools/node_modules/undici/lib/core/request.js +582 -0
  208. package/skill/tools/node_modules/undici/lib/core/socks5-client.js +422 -0
  209. package/skill/tools/node_modules/undici/lib/core/socks5-utils.js +212 -0
  210. package/skill/tools/node_modules/undici/lib/core/symbols.js +81 -0
  211. package/skill/tools/node_modules/undici/lib/core/tree.js +160 -0
  212. package/skill/tools/node_modules/undici/lib/core/util.js +1035 -0
  213. package/skill/tools/node_modules/undici/lib/dispatcher/agent.js +181 -0
  214. package/skill/tools/node_modules/undici/lib/dispatcher/balanced-pool.js +217 -0
  215. package/skill/tools/node_modules/undici/lib/dispatcher/client-h1.js +1846 -0
  216. package/skill/tools/node_modules/undici/lib/dispatcher/client-h2.js +1989 -0
  217. package/skill/tools/node_modules/undici/lib/dispatcher/client.js +749 -0
  218. package/skill/tools/node_modules/undici/lib/dispatcher/dispatcher-base.js +198 -0
  219. package/skill/tools/node_modules/undici/lib/dispatcher/dispatcher.js +58 -0
  220. package/skill/tools/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +127 -0
  221. package/skill/tools/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +190 -0
  222. package/skill/tools/node_modules/undici/lib/dispatcher/fixed-queue.js +135 -0
  223. package/skill/tools/node_modules/undici/lib/dispatcher/h2c-client.js +51 -0
  224. package/skill/tools/node_modules/undici/lib/dispatcher/parser-h1.js +1065 -0
  225. package/skill/tools/node_modules/undici/lib/dispatcher/pool-base.js +347 -0
  226. package/skill/tools/node_modules/undici/lib/dispatcher/pool.js +229 -0
  227. package/skill/tools/node_modules/undici/lib/dispatcher/proxy-agent.js +418 -0
  228. package/skill/tools/node_modules/undici/lib/dispatcher/retry-agent.js +48 -0
  229. package/skill/tools/node_modules/undici/lib/dispatcher/round-robin-pool.js +169 -0
  230. package/skill/tools/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +350 -0
  231. package/skill/tools/node_modules/undici/lib/encoding/index.js +33 -0
  232. package/skill/tools/node_modules/undici/lib/global.js +82 -0
  233. package/skill/tools/node_modules/undici/lib/handler/cache-handler.js +1222 -0
  234. package/skill/tools/node_modules/undici/lib/handler/cache-revalidation-handler.js +134 -0
  235. package/skill/tools/node_modules/undici/lib/handler/decorator-handler.js +76 -0
  236. package/skill/tools/node_modules/undici/lib/handler/deduplication-handler.js +540 -0
  237. package/skill/tools/node_modules/undici/lib/handler/redirect-handler.js +284 -0
  238. package/skill/tools/node_modules/undici/lib/handler/retry-handler.js +686 -0
  239. package/skill/tools/node_modules/undici/lib/interceptor/cache.js +771 -0
  240. package/skill/tools/node_modules/undici/lib/interceptor/decompress.js +574 -0
  241. package/skill/tools/node_modules/undici/lib/interceptor/deduplicate.js +118 -0
  242. package/skill/tools/node_modules/undici/lib/interceptor/dns.js +593 -0
  243. package/skill/tools/node_modules/undici/lib/interceptor/dump.js +99 -0
  244. package/skill/tools/node_modules/undici/lib/interceptor/redirect.js +21 -0
  245. package/skill/tools/node_modules/undici/lib/interceptor/response-error.js +139 -0
  246. package/skill/tools/node_modules/undici/lib/interceptor/retry.js +19 -0
  247. package/skill/tools/node_modules/undici/lib/llhttp/constants.d.ts +195 -0
  248. package/skill/tools/node_modules/undici/lib/llhttp/constants.js +531 -0
  249. package/skill/tools/node_modules/undici/lib/llhttp/llhttp-wasm.js +15 -0
  250. package/skill/tools/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +15 -0
  251. package/skill/tools/node_modules/undici/lib/llhttp/utils.d.ts +2 -0
  252. package/skill/tools/node_modules/undici/lib/llhttp/utils.js +12 -0
  253. package/skill/tools/node_modules/undici/lib/milo/LICENSE.md +7 -0
  254. package/skill/tools/node_modules/undici/lib/milo/no-simd.js +1002 -0
  255. package/skill/tools/node_modules/undici/lib/milo/simd.js +1002 -0
  256. package/skill/tools/node_modules/undici/lib/mock/mock-agent.js +255 -0
  257. package/skill/tools/node_modules/undici/lib/mock/mock-call-history.js +248 -0
  258. package/skill/tools/node_modules/undici/lib/mock/mock-client.js +68 -0
  259. package/skill/tools/node_modules/undici/lib/mock/mock-errors.js +29 -0
  260. package/skill/tools/node_modules/undici/lib/mock/mock-interceptor.js +227 -0
  261. package/skill/tools/node_modules/undici/lib/mock/mock-pool.js +68 -0
  262. package/skill/tools/node_modules/undici/lib/mock/mock-symbols.js +32 -0
  263. package/skill/tools/node_modules/undici/lib/mock/mock-utils.js +730 -0
  264. package/skill/tools/node_modules/undici/lib/mock/pending-interceptors-formatter.js +43 -0
  265. package/skill/tools/node_modules/undici/lib/mock/snapshot-agent.js +371 -0
  266. package/skill/tools/node_modules/undici/lib/mock/snapshot-recorder.js +624 -0
  267. package/skill/tools/node_modules/undici/lib/mock/snapshot-utils.js +159 -0
  268. package/skill/tools/node_modules/undici/lib/util/cache.js +764 -0
  269. package/skill/tools/node_modules/undici/lib/util/date.js +670 -0
  270. package/skill/tools/node_modules/undici/lib/util/runtime-features.js +93 -0
  271. package/skill/tools/node_modules/undici/lib/util/stats.js +32 -0
  272. package/skill/tools/node_modules/undici/lib/util/timers.js +425 -0
  273. package/skill/tools/node_modules/undici/lib/web/cache/cache.js +871 -0
  274. package/skill/tools/node_modules/undici/lib/web/cache/cachestorage.js +158 -0
  275. package/skill/tools/node_modules/undici/lib/web/cache/util.js +45 -0
  276. package/skill/tools/node_modules/undici/lib/web/cookies/constants.js +12 -0
  277. package/skill/tools/node_modules/undici/lib/web/cookies/index.js +211 -0
  278. package/skill/tools/node_modules/undici/lib/web/cookies/parse.js +318 -0
  279. package/skill/tools/node_modules/undici/lib/web/cookies/util.js +371 -0
  280. package/skill/tools/node_modules/undici/lib/web/eventsource/eventsource-stream.js +575 -0
  281. package/skill/tools/node_modules/undici/lib/web/eventsource/eventsource.js +547 -0
  282. package/skill/tools/node_modules/undici/lib/web/eventsource/util.js +60 -0
  283. package/skill/tools/node_modules/undici/lib/web/fetch/LICENSE +21 -0
  284. package/skill/tools/node_modules/undici/lib/web/fetch/body.js +583 -0
  285. package/skill/tools/node_modules/undici/lib/web/fetch/constants.js +131 -0
  286. package/skill/tools/node_modules/undici/lib/web/fetch/data-url.js +596 -0
  287. package/skill/tools/node_modules/undici/lib/web/fetch/formdata-parser.js +594 -0
  288. package/skill/tools/node_modules/undici/lib/web/fetch/formdata.js +272 -0
  289. package/skill/tools/node_modules/undici/lib/web/fetch/global.js +40 -0
  290. package/skill/tools/node_modules/undici/lib/web/fetch/headers.js +722 -0
  291. package/skill/tools/node_modules/undici/lib/web/fetch/index.js +2451 -0
  292. package/skill/tools/node_modules/undici/lib/web/fetch/request.js +1117 -0
  293. package/skill/tools/node_modules/undici/lib/web/fetch/response.js +638 -0
  294. package/skill/tools/node_modules/undici/lib/web/fetch/util.js +1530 -0
  295. package/skill/tools/node_modules/undici/lib/web/infra/index.js +244 -0
  296. package/skill/tools/node_modules/undici/lib/web/subresource-integrity/Readme.md +9 -0
  297. package/skill/tools/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js +307 -0
  298. package/skill/tools/node_modules/undici/lib/web/webidl/index.js +992 -0
  299. package/skill/tools/node_modules/undici/lib/web/websocket/connection.js +350 -0
  300. package/skill/tools/node_modules/undici/lib/web/websocket/constants.js +126 -0
  301. package/skill/tools/node_modules/undici/lib/web/websocket/events.js +348 -0
  302. package/skill/tools/node_modules/undici/lib/web/websocket/frame.js +127 -0
  303. package/skill/tools/node_modules/undici/lib/web/websocket/permessage-deflate.js +105 -0
  304. package/skill/tools/node_modules/undici/lib/web/websocket/receiver.js +530 -0
  305. package/skill/tools/node_modules/undici/lib/web/websocket/sender.js +109 -0
  306. package/skill/tools/node_modules/undici/lib/web/websocket/stream/websocketerror.js +107 -0
  307. package/skill/tools/node_modules/undici/lib/web/websocket/stream/websocketstream.js +511 -0
  308. package/skill/tools/node_modules/undici/lib/web/websocket/util.js +347 -0
  309. package/skill/tools/node_modules/undici/lib/web/websocket/websocket.js +783 -0
  310. package/skill/tools/node_modules/undici/package.json +154 -0
  311. package/skill/tools/node_modules/undici/scripts/strip-comments.js +10 -0
  312. package/skill/tools/node_modules/undici/types/README.md +6 -0
  313. package/skill/tools/node_modules/undici/types/agent.d.ts +30 -0
  314. package/skill/tools/node_modules/undici/types/api.d.ts +43 -0
  315. package/skill/tools/node_modules/undici/types/balanced-pool.d.ts +30 -0
  316. package/skill/tools/node_modules/undici/types/cache-interceptor.d.ts +189 -0
  317. package/skill/tools/node_modules/undici/types/cache.d.ts +36 -0
  318. package/skill/tools/node_modules/undici/types/client-stats.d.ts +15 -0
  319. package/skill/tools/node_modules/undici/types/client.d.ts +190 -0
  320. package/skill/tools/node_modules/undici/types/connector.d.ts +37 -0
  321. package/skill/tools/node_modules/undici/types/content-type.d.ts +21 -0
  322. package/skill/tools/node_modules/undici/types/cookies.d.ts +30 -0
  323. package/skill/tools/node_modules/undici/types/diagnostics-channel.d.ts +75 -0
  324. package/skill/tools/node_modules/undici/types/dispatcher.d.ts +253 -0
  325. package/skill/tools/node_modules/undici/types/dispatcher1-wrapper.d.ts +7 -0
  326. package/skill/tools/node_modules/undici/types/env-http-proxy-agent.d.ts +22 -0
  327. package/skill/tools/node_modules/undici/types/errors.d.ts +202 -0
  328. package/skill/tools/node_modules/undici/types/eventsource.d.ts +66 -0
  329. package/skill/tools/node_modules/undici/types/fetch.d.ts +235 -0
  330. package/skill/tools/node_modules/undici/types/formdata.d.ts +108 -0
  331. package/skill/tools/node_modules/undici/types/global-dispatcher.d.ts +9 -0
  332. package/skill/tools/node_modules/undici/types/global-origin.d.ts +7 -0
  333. package/skill/tools/node_modules/undici/types/h2c-client.d.ts +73 -0
  334. package/skill/tools/node_modules/undici/types/handlers.d.ts +16 -0
  335. package/skill/tools/node_modules/undici/types/header.d.ts +165 -0
  336. package/skill/tools/node_modules/undici/types/index.d.ts +93 -0
  337. package/skill/tools/node_modules/undici/types/interceptors.d.ts +87 -0
  338. package/skill/tools/node_modules/undici/types/mock-agent.d.ts +69 -0
  339. package/skill/tools/node_modules/undici/types/mock-call-history.d.ts +111 -0
  340. package/skill/tools/node_modules/undici/types/mock-client.d.ts +27 -0
  341. package/skill/tools/node_modules/undici/types/mock-errors.d.ts +12 -0
  342. package/skill/tools/node_modules/undici/types/mock-interceptor.d.ts +98 -0
  343. package/skill/tools/node_modules/undici/types/mock-pool.d.ts +27 -0
  344. package/skill/tools/node_modules/undici/types/patch.d.ts +29 -0
  345. package/skill/tools/node_modules/undici/types/pool-stats.d.ts +19 -0
  346. package/skill/tools/node_modules/undici/types/pool.d.ts +39 -0
  347. package/skill/tools/node_modules/undici/types/proxy-agent.d.ts +36 -0
  348. package/skill/tools/node_modules/undici/types/readable.d.ts +68 -0
  349. package/skill/tools/node_modules/undici/types/retry-agent.d.ts +8 -0
  350. package/skill/tools/node_modules/undici/types/retry-handler.d.ts +125 -0
  351. package/skill/tools/node_modules/undici/types/round-robin-pool.d.ts +39 -0
  352. package/skill/tools/node_modules/undici/types/snapshot-agent.d.ts +113 -0
  353. package/skill/tools/node_modules/undici/types/socks5-proxy-agent.d.ts +27 -0
  354. package/skill/tools/node_modules/undici/types/util.d.ts +18 -0
  355. package/skill/tools/node_modules/undici/types/utility.d.ts +7 -0
  356. package/skill/tools/node_modules/undici/types/webidl.d.ts +352 -0
  357. package/skill/tools/node_modules/undici/types/websocket.d.ts +188 -0
  358. package/skill/tools/node_modules/xtend/.jshintrc +30 -0
  359. package/skill/tools/node_modules/xtend/LICENSE +20 -0
  360. package/skill/tools/node_modules/xtend/README.md +32 -0
  361. package/skill/tools/node_modules/xtend/immutable.js +19 -0
  362. package/skill/tools/node_modules/xtend/mutable.js +17 -0
  363. package/skill/tools/node_modules/xtend/package.json +55 -0
  364. package/skill/tools/node_modules/xtend/test.js +103 -0
  365. package/skill/tools/package-lock.json +172 -0
  366. package/skill/tools/package.json +9 -0
  367. package/skill/tools/transfer_core.js +414 -0
@@ -0,0 +1,418 @@
1
+ 'use strict'
2
+
3
+ const { kProxy, kClose, kDestroy, kDispatch } = require('../core/symbols')
4
+ const Agent = require('./agent')
5
+ const Pool = require('./pool')
6
+ const DispatcherBase = require('./dispatcher-base')
7
+ const { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError, ProxyConnectionError } = require('../core/errors')
8
+ const buildConnector = require('../core/connect')
9
+ const Client = require('./client')
10
+ const { channels } = require('../core/diagnostics')
11
+ const Socks5ProxyAgent = require('./socks5-proxy-agent')
12
+ const { hasSafeIterator } = require('../core/util')
13
+
14
+ const kAgent = Symbol('proxy agent')
15
+ const kClient = Symbol('proxy client')
16
+ const kProxyHeaders = Symbol('proxy headers')
17
+ const kRequestTls = Symbol('request tls settings')
18
+ const kProxyTls = Symbol('proxy tls settings')
19
+ const kConnectEndpoint = Symbol('connect endpoint function')
20
+ const kConnectEndpointHTTP1 = Symbol('connect endpoint function (http/1.1 only)')
21
+ const kTunnelProxy = Symbol('tunnel proxy')
22
+ const proxyAuthorization = 'proxy-authorization'
23
+
24
+ function defaultProtocolPort (protocol) {
25
+ return protocol === 'https:' ? 443 : 80
26
+ }
27
+
28
+ function defaultFactory (origin, opts) {
29
+ return new Pool(origin, opts)
30
+ }
31
+
32
+ const noop = () => {}
33
+
34
+ function defaultAgentFactory (origin, opts) {
35
+ if (opts.connections === 1) {
36
+ return new Client(origin, opts)
37
+ }
38
+ return new Pool(origin, opts)
39
+ }
40
+
41
+ function shouldProxyTunnel (requestProtocol, proxyTunnel) {
42
+ return proxyTunnel === true || requestProtocol !== 'http:'
43
+ }
44
+
45
+ class Http1ProxyWrapper extends DispatcherBase {
46
+ #client
47
+ #proxyServername
48
+
49
+ constructor (proxyUrl, { headers = {}, connect, factory, proxyServername }) {
50
+ if (!proxyUrl) {
51
+ throw new InvalidArgumentError('Proxy URL is mandatory')
52
+ }
53
+
54
+ super()
55
+
56
+ this[kProxyHeaders] = headers
57
+ this.#proxyServername = proxyServername
58
+ if (factory) {
59
+ this.#client = factory(proxyUrl, { connect })
60
+ } else {
61
+ this.#client = new Client(proxyUrl, { connect })
62
+ }
63
+ }
64
+
65
+ [kDispatch] (opts, handler) {
66
+ const onResponseStart = handler.onResponseStart
67
+ handler.onResponseStart = function (controller, statusCode, data, statusMessage) {
68
+ if (statusCode === 407) {
69
+ if (typeof handler.onResponseError === 'function') {
70
+ handler.onResponseError(controller, new InvalidArgumentError('Proxy Authentication Required (407)'))
71
+ }
72
+ return
73
+ }
74
+ if (onResponseStart) onResponseStart.call(this, controller, statusCode, data, statusMessage)
75
+ }
76
+
77
+ // Rewrite request as an HTTP1 Proxy request, without tunneling.
78
+ const {
79
+ origin,
80
+ path = '/',
81
+ headers = {}
82
+ } = opts
83
+
84
+ opts.path = origin + path
85
+
86
+ opts.headers = { ...this[kProxyHeaders], ...headers }
87
+ if (!hasHostHeader(headers)) {
88
+ opts.headers.host = new URL(origin).host
89
+ }
90
+
91
+ // Pin the SNI/cert hostname to the proxy. Without this the underlying
92
+ // Client would derive it from the (rewritten) Host header, which points
93
+ // at the target — wrong for the TLS handshake to the proxy itself.
94
+ if (this.#proxyServername != null) {
95
+ opts.servername = this.#proxyServername
96
+ }
97
+
98
+ return this.#client[kDispatch](opts, handler)
99
+ }
100
+
101
+ [kClose] () {
102
+ return this.#client.close()
103
+ }
104
+
105
+ [kDestroy] (err) {
106
+ return this.#client.destroy(err)
107
+ }
108
+ }
109
+
110
+ class ProxyAgent extends DispatcherBase {
111
+ constructor (opts) {
112
+ if (!opts || (typeof opts === 'object' && !(opts instanceof URL) && !opts.uri)) {
113
+ throw new InvalidArgumentError('Proxy uri is mandatory')
114
+ }
115
+
116
+ const { clientFactory = defaultFactory } = opts
117
+ if (typeof clientFactory !== 'function') {
118
+ throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.')
119
+ }
120
+
121
+ const { proxyTunnel, connectTimeout } = opts
122
+
123
+ super(opts)
124
+
125
+ const url = this.#getUrl(opts)
126
+ const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url
127
+
128
+ this[kProxy] = { uri: href, protocol }
129
+ this[kRequestTls] = opts.requestTls
130
+ this[kProxyTls] = opts.proxyTls
131
+ this[kProxyHeaders] = opts.headers || {}
132
+ this[kTunnelProxy] = proxyTunnel
133
+
134
+ if (opts.auth && opts.token) {
135
+ throw new InvalidArgumentError('opts.auth cannot be used in combination with opts.token')
136
+ } else if (opts.auth) {
137
+ /* @deprecated in favour of opts.token */
138
+ this[kProxyHeaders]['proxy-authorization'] = `Basic ${opts.auth}`
139
+ } else if (opts.token) {
140
+ this[kProxyHeaders]['proxy-authorization'] = opts.token
141
+ } else if (username && password) {
142
+ this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString('base64')}`
143
+ } else if (username) {
144
+ this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:`).toString('base64')}`
145
+ }
146
+
147
+ const connect = buildConnector({ timeout: connectTimeout, ...opts.proxyTls })
148
+ const connectHTTP1 = buildConnector({ timeout: connectTimeout, ...opts.proxyTls, allowH2: false })
149
+ this[kConnectEndpoint] = buildConnector({ timeout: connectTimeout, ...opts.requestTls })
150
+ this[kConnectEndpointHTTP1] = buildConnector({ timeout: connectTimeout, ...opts.requestTls, allowH2: false })
151
+
152
+ const agentFactory = opts.factory || defaultAgentFactory
153
+ const factory = (origin, options) => {
154
+ const { protocol } = new URL(origin)
155
+
156
+ // Handle SOCKS5 proxy
157
+ if (this[kProxy].protocol === 'socks5:' || this[kProxy].protocol === 'socks:') {
158
+ return new Socks5ProxyAgent(this[kProxy].uri, {
159
+ headers: this[kProxyHeaders],
160
+ connect,
161
+ factory: agentFactory,
162
+ username: opts.username || username,
163
+ password: opts.password || password,
164
+ connectTimeout,
165
+ proxyTls: opts.proxyTls,
166
+ requestTls: opts.requestTls
167
+ })
168
+ }
169
+
170
+ if (!shouldProxyTunnel(protocol, this[kTunnelProxy])) {
171
+ const forwardConnect = this[kProxy].protocol === 'https:'
172
+ ? (opts, cb) => connectHTTP1(opts, (err, socket) => {
173
+ if (err && err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {
174
+ cb(new SecureProxyConnectionError(err))
175
+ } else {
176
+ cb(err, socket)
177
+ }
178
+ })
179
+ : connectHTTP1
180
+ return new Http1ProxyWrapper(this[kProxy].uri, {
181
+ headers: this[kProxyHeaders],
182
+ connect: forwardConnect,
183
+ factory: agentFactory,
184
+ proxyServername: this[kProxy].protocol === 'https:'
185
+ ? (this[kProxyTls]?.servername || proxyHostname)
186
+ : undefined
187
+ })
188
+ }
189
+ return agentFactory(origin, options)
190
+ }
191
+
192
+ // For SOCKS5 proxies, we don't need a client to the proxy itself
193
+ // The SOCKS5 connection is handled within Socks5ProxyAgent
194
+ if (protocol === 'socks5:' || protocol === 'socks:') {
195
+ this[kClient] = null
196
+ } else {
197
+ this[kClient] = clientFactory(url, { connect })
198
+ }
199
+
200
+ this[kAgent] = new Agent({
201
+ ...opts,
202
+ factory,
203
+ connect: async (opts, callback) => {
204
+ // SOCKS5 proxies handle their own connections via Socks5ProxyAgent,
205
+ // so this connect function should never be called for them.
206
+ if (!this[kClient]) {
207
+ callback(new InvalidArgumentError('Cannot establish tunnel connection without a proxy client'))
208
+ return
209
+ }
210
+
211
+ let requestedPath = opts.host
212
+ if (!opts.port) {
213
+ requestedPath += `:${defaultProtocolPort(opts.protocol)}`
214
+ }
215
+ try {
216
+ const connectParams = {
217
+ origin,
218
+ port,
219
+ path: requestedPath,
220
+ signal: opts.signal,
221
+ headers: {
222
+ ...this[kProxyHeaders],
223
+ host: opts.host,
224
+ ...(opts.connections == null || opts.connections > 0 ? { 'proxy-connection': 'keep-alive' } : {})
225
+ },
226
+ servername: this[kProxyTls]?.servername || proxyHostname
227
+ }
228
+ const { socket, statusCode } = await this[kClient].connect(connectParams)
229
+ if (statusCode !== 200) {
230
+ socket.on('error', noop).destroy()
231
+ callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`))
232
+ return
233
+ }
234
+
235
+ if (channels.proxyConnected.hasSubscribers) {
236
+ channels.proxyConnected.publish({
237
+ socket,
238
+ connectParams
239
+ })
240
+ }
241
+
242
+ if (opts.protocol !== 'https:') {
243
+ callback(null, socket)
244
+ return
245
+ }
246
+ let servername
247
+ if (this[kRequestTls]) {
248
+ servername = this[kRequestTls].servername
249
+ } else {
250
+ servername = opts.servername
251
+ }
252
+ const connectEndpoint = opts.allowH2 === false
253
+ ? this[kConnectEndpointHTTP1]
254
+ : this[kConnectEndpoint]
255
+
256
+ connectEndpoint({ ...opts, servername, httpSocket: socket }, callback)
257
+ } catch (err) {
258
+ if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {
259
+ // Throw a custom error to avoid loop in client.js#connect
260
+ callback(new SecureProxyConnectionError(err))
261
+ } else if (err.code === 'UND_ERR_SOCKET') {
262
+ // A socket failure while establishing the tunnel means the CONNECT
263
+ // never completed, so there is nothing to recover - the proxy just
264
+ // tore down the connection. client.js#onError treats UND_ERR_SOCKET
265
+ // as a recoverable error on an established connection and leaves the
266
+ // request queued, which makes connect() retry forever. Surface it as
267
+ // a non-recoverable proxy error so the request fails instead. (#3897)
268
+ callback(new ProxyConnectionError(err))
269
+ } else {
270
+ callback(err)
271
+ }
272
+ }
273
+ }
274
+ })
275
+ }
276
+
277
+ dispatch (opts, handler) {
278
+ let headers = buildHeaders(opts.headers)
279
+ throwIfProxyAuthIsSent(headers)
280
+
281
+ if (headers && !hasHostHeader(headers)) {
282
+ if (headers === opts.headers) {
283
+ headers = { ...headers }
284
+ }
285
+ headers.host = new URL(opts.origin).host
286
+ }
287
+
288
+ return this[kAgent].dispatch(
289
+ {
290
+ ...opts,
291
+ headers
292
+ },
293
+ handler
294
+ )
295
+ }
296
+
297
+ /**
298
+ * @param {import('../../types/proxy-agent').ProxyAgent.Options | string | URL} opts
299
+ * @returns {URL}
300
+ */
301
+ #getUrl (opts) {
302
+ if (typeof opts === 'string') {
303
+ return new URL(opts)
304
+ } else if (opts instanceof URL) {
305
+ return opts
306
+ } else {
307
+ return new URL(opts.uri)
308
+ }
309
+ }
310
+
311
+ [kClose] () {
312
+ const promises = [this[kAgent].close()]
313
+ if (this[kClient]) {
314
+ promises.push(this[kClient].close())
315
+ }
316
+ return Promise.all(promises)
317
+ }
318
+
319
+ [kDestroy] () {
320
+ const promises = [this[kAgent].destroy()]
321
+ if (this[kClient]) {
322
+ promises.push(this[kClient].destroy())
323
+ }
324
+ return Promise.all(promises)
325
+ }
326
+ }
327
+
328
+ /**
329
+ * @param {string[] | Record<string, string> | Iterable<[string, string | string[] | undefined]>} headers
330
+ * @returns {Record<string, string | string[] | undefined>}
331
+ */
332
+ function buildHeaders (headers) {
333
+ // When using undici.fetch, the headers list is stored
334
+ // as an array.
335
+ if (Array.isArray(headers)) {
336
+ /** @type {Record<string, string>} */
337
+ const headersPair = {}
338
+
339
+ for (let i = 0; i < headers.length; i += 2) {
340
+ if (isProxyAuthorizationHeader(headers[i])) {
341
+ throwProxyAuthError()
342
+ }
343
+
344
+ headersPair[headers[i]] = headers[i + 1]
345
+ }
346
+
347
+ return headersPair
348
+ }
349
+
350
+ // Materialize iterable header containers (e.g. Map, Headers) into a record so
351
+ // that throwIfProxyAuthIsSent() can inspect their entries. Object.keys and
352
+ // for...in see nothing on a Map/Headers instance, so without this the
353
+ // Proxy-Authorization guard is bypassed and proxy credentials can reach the
354
+ // origin server (GHSA-6cv7-626c-qhqw).
355
+ if (headers && typeof headers === 'object' && hasSafeIterator(headers)) {
356
+ const headersPair = {}
357
+
358
+ for (const [key, value] of headers) {
359
+ if (!Object.hasOwn(headersPair, key)) {
360
+ headersPair[key] = value
361
+ continue
362
+ }
363
+
364
+ const previous = headersPair[key]
365
+ const values = []
366
+ if (previous !== undefined) {
367
+ values.push(...(Array.isArray(previous) ? previous : [previous]))
368
+ }
369
+ if (value !== undefined) {
370
+ values.push(...(Array.isArray(value) ? value : [value]))
371
+ }
372
+ headersPair[key] = values.length > 1 ? values : values[0]
373
+ }
374
+
375
+ return headersPair
376
+ }
377
+
378
+ return headers
379
+ }
380
+
381
+ /**
382
+ * @param {Record<string, string>} headers
383
+ *
384
+ * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers
385
+ * Nevertheless, it was changed and to avoid a security vulnerability by end users
386
+ * this check was created.
387
+ * It should be removed in the next major version for performance reasons
388
+ */
389
+ function throwIfProxyAuthIsSent (headers) {
390
+ for (const key in headers) {
391
+ if (isProxyAuthorizationHeader(key)) {
392
+ throwProxyAuthError()
393
+ }
394
+ }
395
+ }
396
+
397
+ /**
398
+ * @param {string} key
399
+ * @returns {boolean}
400
+ */
401
+ function isProxyAuthorizationHeader (key) {
402
+ return key.length === proxyAuthorization.length && key.toLowerCase() === proxyAuthorization
403
+ }
404
+
405
+ function hasHostHeader (headers) {
406
+ for (const key in headers) {
407
+ if (key.length === 4 && key.toLowerCase() === 'host') {
408
+ return true
409
+ }
410
+ }
411
+ return false
412
+ }
413
+
414
+ function throwProxyAuthError () {
415
+ throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor')
416
+ }
417
+
418
+ module.exports = ProxyAgent
@@ -0,0 +1,48 @@
1
+ 'use strict'
2
+
3
+ const Dispatcher = require('./dispatcher')
4
+ const RetryHandler = require('../handler/retry-handler')
5
+ const { kOriginless, kUrl } = require('../core/symbols')
6
+
7
+ class RetryAgent extends Dispatcher {
8
+ #agent = null
9
+ #options = null
10
+ constructor (agent, options = {}) {
11
+ super(options)
12
+ this.#agent = agent
13
+ this.#options = options
14
+ this[kUrl] = agent[kUrl]
15
+ this[kOriginless] = agent[kOriginless]
16
+ }
17
+
18
+ dispatch (opts, handler) {
19
+ const retry = new RetryHandler({
20
+ ...opts,
21
+ retryOptions: this.#options
22
+ }, {
23
+ dispatch: this.#agent.dispatch.bind(this.#agent),
24
+ handler
25
+ })
26
+ return this.#agent.dispatch(opts, retry)
27
+ }
28
+
29
+ // WebSocket and EventSource read their receive limits from the dispatcher
30
+ // they are given, so report the wrapped agent's settings rather than none.
31
+ get webSocketOptions () {
32
+ return this.#agent.webSocketOptions
33
+ }
34
+
35
+ get eventSourceOptions () {
36
+ return this.#agent.eventSourceOptions
37
+ }
38
+
39
+ close () {
40
+ return this.#agent.close()
41
+ }
42
+
43
+ destroy () {
44
+ return this.#agent.destroy()
45
+ }
46
+ }
47
+
48
+ module.exports = RetryAgent
@@ -0,0 +1,169 @@
1
+ 'use strict'
2
+
3
+ const {
4
+ PoolBase,
5
+ kClients,
6
+ kNeedDrain,
7
+ kAddClient,
8
+ kGetDispatcher,
9
+ kHasDispatcher,
10
+ kRemoveClient,
11
+ kRetireClient,
12
+ kDrainQueue
13
+ } = require('./pool-base')
14
+ const Client = require('./client')
15
+ const {
16
+ InvalidArgumentError
17
+ } = require('../core/errors')
18
+ const util = require('../core/util')
19
+ const { kUrl, kQueued } = require('../core/symbols')
20
+ const buildConnector = require('../core/connect')
21
+
22
+ const kOptions = Symbol('options')
23
+ const kConnections = Symbol('connections')
24
+ const kFactory = Symbol('factory')
25
+ const kIndex = Symbol('index')
26
+
27
+ function defaultFactory (origin, opts) {
28
+ return new Client(origin, opts)
29
+ }
30
+
31
+ class RoundRobinPool extends PoolBase {
32
+ constructor (origin, {
33
+ connections,
34
+ factory = defaultFactory,
35
+ connect,
36
+ connectTimeout,
37
+ tls,
38
+ maxCachedSessions,
39
+ socketPath,
40
+ autoSelectFamily,
41
+ autoSelectFamilyAttemptTimeout,
42
+ allowH2,
43
+ clientTtl,
44
+ ...options
45
+ } = {}) {
46
+ if (connections != null && (!Number.isFinite(connections) || connections < 0)) {
47
+ throw new InvalidArgumentError('invalid connections')
48
+ }
49
+
50
+ if (typeof factory !== 'function') {
51
+ throw new InvalidArgumentError('factory must be a function.')
52
+ }
53
+
54
+ if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {
55
+ throw new InvalidArgumentError('connect must be a function or an object')
56
+ }
57
+
58
+ if (typeof connect !== 'function') {
59
+ connect = buildConnector({
60
+ ...tls,
61
+ maxCachedSessions,
62
+ allowH2,
63
+ socketPath,
64
+ timeout: connectTimeout,
65
+ ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),
66
+ ...connect
67
+ })
68
+ }
69
+
70
+ super(options)
71
+
72
+ this[kConnections] = connections || null
73
+ this[kUrl] = util.parseOrigin(origin)
74
+ this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath }
75
+ this[kFactory] = factory
76
+ this[kIndex] = -1
77
+
78
+ this.on('connect', (origin, targets) => {
79
+ if (clientTtl != null && clientTtl > 0) {
80
+ for (const target of targets) {
81
+ Object.assign(target, { ttl: Date.now() })
82
+ }
83
+ }
84
+ })
85
+
86
+ this.on('connectionError', (origin, targets, error) => {
87
+ // Retire (close) the client rather than only dropping it from
88
+ // kClients: otherwise its drain listener keeps pulling requests from
89
+ // the pool queue onto a client that pool.destroy() can't reach.
90
+ for (const target of targets) {
91
+ if (this[kClients].includes(target)) {
92
+ this[kRetireClient](target)
93
+ }
94
+ }
95
+
96
+ // The retired client no longer drains the pool queue, so hand any
97
+ // queued requests to another (possibly new) client.
98
+ if (this[kQueued] > 0) {
99
+ this[kDrainQueue](origin, targets.slice(1))
100
+ }
101
+ })
102
+ }
103
+
104
+ [kGetDispatcher] () {
105
+ const clientTtlOption = this[kOptions].clientTtl
106
+
107
+ // If we have no clients yet, create one
108
+ if (this[kClients].length === 0) {
109
+ const dispatcher = this[kFactory](this[kUrl], this[kOptions])
110
+ this[kAddClient](dispatcher)
111
+ return dispatcher
112
+ }
113
+
114
+ // Round-robin through existing clients
115
+ let checked = 0
116
+ while (checked < this[kClients].length) {
117
+ this[kIndex] = (this[kIndex] + 1) % this[kClients].length
118
+ const client = this[kClients][this[kIndex]]
119
+
120
+ // Check if client is stale (TTL expired)
121
+ if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {
122
+ this[kRemoveClient](client)
123
+ this[kIndex]--
124
+ continue
125
+ }
126
+
127
+ // Return client if it's not draining
128
+ if (!client[kNeedDrain]) {
129
+ return client
130
+ }
131
+
132
+ checked++
133
+ }
134
+
135
+ // All clients are busy, create a new one if we haven't reached the limit
136
+ if (!this[kConnections] || this[kClients].length < this[kConnections]) {
137
+ const dispatcher = this[kFactory](this[kUrl], this[kOptions])
138
+ this[kAddClient](dispatcher)
139
+ return dispatcher
140
+ }
141
+ }
142
+
143
+ [kHasDispatcher] () {
144
+ const clientTtlOption = this[kOptions].clientTtl
145
+ for (let i = 0; i < this[kClients].length; i++) {
146
+ const client = this[kClients][i]
147
+
148
+ if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {
149
+ this[kRemoveClient](client)
150
+ if (i <= this[kIndex]) {
151
+ this[kIndex]--
152
+ }
153
+ i--
154
+ } else if (!client[kNeedDrain]) {
155
+ return true
156
+ }
157
+ }
158
+
159
+ if (!this[kConnections] || this[kClients].length < this[kConnections]) {
160
+ const dispatcher = this[kFactory](this[kUrl], this[kOptions])
161
+ this[kAddClient](dispatcher)
162
+ return true
163
+ }
164
+
165
+ return false
166
+ }
167
+ }
168
+
169
+ module.exports = RoundRobinPool