@yanglaofish/fishtools 0.5.2 → 0.5.3

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 (826) hide show
  1. package/README.md +23 -11
  2. package/manual/README.md +23 -11
  3. package/manual/docs/deployment.md +3 -3
  4. package/manual/docs/examples/action-plugin/package.json +1 -1
  5. package/manual/docs/plugin-development.md +15 -4
  6. package/manual/docs/releases.md +24 -0
  7. package/manual/docs/superpowers/plans/2026-10-13-command-shortcuts.md +3 -2
  8. package/manual/docs/superpowers/plans/2026-10-13-global-plugins.md +56 -0
  9. package/manual/docs/superpowers/plans/2026-10-13-tui-readable-sessions.md +21 -0
  10. package/manual/docs/superpowers/reviews/2026-10-13-0.5.3-review.md +28 -0
  11. package/manual/docs/superpowers/reviews/2026-10-13-command-shortcuts-review.md +7 -0
  12. package/manual/docs/superpowers/reviews/2026-10-13-tui-sessions-review.md +55 -0
  13. package/manual/docs/superpowers/specs/2026-10-13-issue-4-workflow-menu.md +23 -0
  14. package/manual/docs/superpowers/specs/2026-10-13-issue-5-results-and-history.md +20 -0
  15. package/manual/docs/terminal-commands.md +8 -0
  16. package/manual/docs/verification.md +30 -0
  17. package/manual/packages/core/README.md +2 -0
  18. package/manual/packages/core/package.json +1 -1
  19. package/manual/packages/core/src/application.js +100 -51
  20. package/manual/packages/core/src/development-watch-worker.js +10 -1
  21. package/manual/packages/core/src/development.js +1 -1
  22. package/manual/packages/core/src/plugin-catalog.js +42 -0
  23. package/manual/packages/core/src/version.js +1 -1
  24. package/manual/packages/fst-cli/README.md +4 -0
  25. package/manual/packages/fst-cli/bin/fst.js +7 -6
  26. package/manual/packages/fst-cli/package.json +1 -1
  27. package/manual/packages/fst-cli/src/development.js +6 -1
  28. package/manual/packages/fst-cli/src/terminal/command-menu.js +8 -3
  29. package/manual/packages/fst-cli/src/terminal/navigation.js +2 -0
  30. package/manual/packages/fst-cli/src/terminal/presentation.js +4 -3
  31. package/manual/packages/fst-cli/src/terminal/run-feed.js +69 -13
  32. package/manual/packages/fst-cli/src/terminal/run-presentation.js +55 -12
  33. package/manual/packages/fst-cli/src/terminal/run-viewer.js +26 -10
  34. package/manual/packages/fst-cli/src/terminal/session-history.js +82 -0
  35. package/manual/packages/fst-cli/src/terminal/session.js +119 -40
  36. package/manual/packages/fst-cli/src/terminal/view.js +31 -8
  37. package/manual/packages/fst-cli/src/terminal/workflow-menu.js +14 -9
  38. package/manual/packages/fst-devtools/package.json +2 -2
  39. package/manual/packages/fst-devtools/src/plugin-tools.js +1 -1
  40. package/manual/packages/fst-logs/README.md +23 -2
  41. package/manual/packages/fst-logs/package.json +2 -1
  42. package/manual/packages/fst-logs/src/file-identity.js +23 -0
  43. package/manual/packages/fst-logs/src/markdown-log.js +4 -3
  44. package/manual/packages/fst-logs/src/run-logs.js +3 -2
  45. package/manual/packages/fst-logs/src/session-history.js +180 -0
  46. package/manual/packages/fst-platform/README.md +4 -0
  47. package/manual/packages/fst-platform/package.json +3 -3
  48. package/manual/packages/fst-platform/src/process.js +4 -1
  49. package/manual/packages/fst-platform/src/shell.js +46 -1
  50. package/manual/packages/fst-plugin/package.json +1 -1
  51. package/manual/packages/fst-plugin/src/host.js +31 -23
  52. package/manual/packages/fst-workflow/package.json +1 -1
  53. package/manual/packages/fst-workflow/src/engine.js +1 -1
  54. package/manual/packages/fst-workspace/README.md +2 -0
  55. package/manual/packages/fst-workspace/package.json +2 -1
  56. package/manual/packages/fst-workspace/src/plugin-registry.js +58 -0
  57. package/manual/packages/fst-workspace/src/plugins.js +7 -4
  58. package/manual/packages/fst-workspace/src/workflows.js +5 -3
  59. package/manual/packages/pack/package.json +3 -3
  60. package/manual/packages/pack/runtime-cache.js +26 -0
  61. package/manual/packages/pack/runtime.js +6 -10
  62. package/manual/plugins/commands/package.json +1 -1
  63. package/node_modules/@mytools/commands/package.json +1 -1
  64. package/node_modules/@mytools/core/README.md +2 -0
  65. package/node_modules/@mytools/core/package.json +1 -1
  66. package/node_modules/@mytools/core/src/application.js +100 -51
  67. package/node_modules/@mytools/core/src/development-watch-worker.js +10 -1
  68. package/node_modules/@mytools/core/src/development.js +1 -1
  69. package/node_modules/@mytools/core/src/plugin-catalog.js +42 -0
  70. package/node_modules/@mytools/core/src/version.js +1 -1
  71. package/node_modules/@mytools/fst-cli/README.md +4 -0
  72. package/node_modules/@mytools/fst-cli/bin/fst.js +7 -6
  73. package/node_modules/@mytools/fst-cli/package.json +1 -1
  74. package/node_modules/@mytools/fst-cli/src/development.js +6 -1
  75. package/node_modules/@mytools/fst-cli/src/terminal/command-menu.js +8 -3
  76. package/node_modules/@mytools/fst-cli/src/terminal/navigation.js +2 -0
  77. package/node_modules/@mytools/fst-cli/src/terminal/presentation.js +4 -3
  78. package/node_modules/@mytools/fst-cli/src/terminal/run-feed.js +69 -13
  79. package/node_modules/@mytools/fst-cli/src/terminal/run-presentation.js +55 -12
  80. package/node_modules/@mytools/fst-cli/src/terminal/run-viewer.js +26 -10
  81. package/node_modules/@mytools/fst-cli/src/terminal/session-history.js +82 -0
  82. package/node_modules/@mytools/fst-cli/src/terminal/session.js +119 -40
  83. package/node_modules/@mytools/fst-cli/src/terminal/view.js +31 -8
  84. package/node_modules/@mytools/fst-cli/src/terminal/workflow-menu.js +14 -9
  85. package/node_modules/@mytools/fst-devtools/package.json +2 -2
  86. package/node_modules/@mytools/fst-devtools/src/plugin-tools.js +1 -1
  87. package/node_modules/@mytools/fst-logs/README.md +23 -2
  88. package/node_modules/@mytools/fst-logs/package.json +2 -1
  89. package/node_modules/@mytools/fst-logs/src/file-identity.js +23 -0
  90. package/node_modules/@mytools/fst-logs/src/markdown-log.js +4 -3
  91. package/node_modules/@mytools/fst-logs/src/run-logs.js +3 -2
  92. package/node_modules/@mytools/fst-logs/src/session-history.js +180 -0
  93. package/node_modules/@mytools/fst-platform/README.md +4 -0
  94. package/node_modules/@mytools/fst-platform/node_modules/undici/LICENSE +21 -0
  95. package/node_modules/{undici/docs/docs/index.md → @mytools/fst-platform/node_modules/undici/README.md} +85 -137
  96. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Agent.md +84 -0
  97. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/BalancedPool.md +99 -0
  98. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/CacheStorage.md +30 -0
  99. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/CacheStore.md +164 -0
  100. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Client.md +288 -0
  101. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/ClientStats.md +27 -0
  102. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Connector.md +115 -0
  103. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/ContentType.md +57 -0
  104. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Cookies.md +128 -0
  105. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Debug.md +62 -0
  106. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +317 -0
  107. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Dispatcher.md +1393 -0
  108. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +159 -0
  109. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Errors.md +49 -0
  110. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/EventSource.md +45 -0
  111. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Fetch.md +60 -0
  112. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/GlobalInstallation.md +139 -0
  113. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/H2CClient.md +263 -0
  114. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockAgent.md +603 -0
  115. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockCallHistory.md +197 -0
  116. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +43 -0
  117. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockClient.md +81 -0
  118. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockErrors.md +12 -0
  119. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/MockPool.md +555 -0
  120. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Pool.md +84 -0
  121. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/PoolStats.md +35 -0
  122. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/ProxyAgent.md +229 -0
  123. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/RedirectHandler.md +93 -0
  124. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/RetryAgent.md +50 -0
  125. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/RetryHandler.md +118 -0
  126. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/RoundRobinPool.md +145 -0
  127. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/SnapshotAgent.md +616 -0
  128. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +275 -0
  129. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/Util.md +25 -0
  130. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/WebSocket.md +141 -0
  131. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/api/api-lifecycle.md +91 -0
  132. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/best-practices/client-certificate.md +64 -0
  133. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/docs/docs/best-practices/crawling.md +1 -3
  134. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/best-practices/mocking-request.md +190 -0
  135. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/best-practices/proxy.md +127 -0
  136. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/docs/docs/best-practices/undici-vs-builtin-fetch.md +8 -10
  137. package/node_modules/@mytools/fst-platform/node_modules/undici/docs/docs/best-practices/writing-tests.md +63 -0
  138. package/node_modules/@mytools/fst-platform/node_modules/undici/index-fetch.js +65 -0
  139. package/node_modules/@mytools/fst-platform/node_modules/undici/index.d.ts +3 -0
  140. package/node_modules/@mytools/fst-platform/node_modules/undici/index.js +234 -0
  141. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/abort-signal.js +59 -0
  142. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/api-connect.js +110 -0
  143. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/api-pipeline.js +252 -0
  144. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/api-request.js +214 -0
  145. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/api-stream.js +209 -0
  146. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/api-upgrade.js +111 -0
  147. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/index.js +7 -0
  148. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/api/readable.js +580 -0
  149. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/cache/memory-cache-store.js +3 -3
  150. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/cache/sqlite-cache-store.js +1 -3
  151. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/connect.js +153 -0
  152. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/constants.js +143 -0
  153. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/diagnostics.js +227 -0
  154. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/errors.js +477 -0
  155. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/request.js +485 -0
  156. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/symbols.js +75 -0
  157. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/tree.js +160 -0
  158. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/core/util.js +992 -0
  159. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/agent.js +158 -0
  160. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/balanced-pool.js +221 -0
  161. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/client-h1.js +1746 -0
  162. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/client-h2.js +1060 -0
  163. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/client.js +668 -0
  164. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/dispatcher-base.js +184 -0
  165. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/dispatcher.js +48 -0
  166. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +146 -0
  167. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/fixed-queue.js +135 -0
  168. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/dispatcher/h2c-client.js +4 -4
  169. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/pool-base.js +214 -0
  170. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/pool.js +118 -0
  171. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/proxy-agent.js +319 -0
  172. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/dispatcher/retry-agent.js +35 -0
  173. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/dispatcher/round-robin-pool.js +10 -32
  174. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/dispatcher/socks5-proxy-agent.js +63 -153
  175. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/global.js +59 -0
  176. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/handler/cache-handler.js +7 -49
  177. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/handler/cache-revalidation-handler.js +0 -10
  178. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/handler/decorator-handler.js +67 -0
  179. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/handler/deduplication-handler.js +10 -29
  180. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/handler/redirect-handler.js +238 -0
  181. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/handler/retry-handler.js +504 -0
  182. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/handler/unwrap-handler.js +106 -0
  183. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/handler/wrap-handler.js +105 -0
  184. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/interceptor/cache.js +26 -79
  185. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/interceptor/decompress.js +3 -13
  186. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/interceptor/deduplicate.js +4 -5
  187. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/interceptor/dns.js +571 -0
  188. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/interceptor/dump.js +99 -0
  189. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/interceptor/redirect.js +21 -0
  190. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/interceptor/response-error.js +95 -0
  191. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/interceptor/retry.js +19 -0
  192. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  193. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/llhttp/constants.js +531 -0
  194. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/llhttp/llhttp-wasm.js +15 -0
  195. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +15 -0
  196. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/llhttp/utils.js +12 -0
  197. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-agent.js +232 -0
  198. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/mock/mock-call-history.js +1 -1
  199. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-client.js +68 -0
  200. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-errors.js +29 -0
  201. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-interceptor.js +209 -0
  202. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-pool.js +68 -0
  203. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-symbols.js +32 -0
  204. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/mock-utils.js +486 -0
  205. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/mock/pending-interceptors-formatter.js +43 -0
  206. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/mock/snapshot-agent.js +7 -25
  207. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/mock/snapshot-recorder.js +3 -38
  208. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/util/cache.js +10 -92
  209. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/util/promise.js +28 -0
  210. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/util/runtime-features.js +34 -3
  211. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/util/timers.js +425 -0
  212. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cache/cache.js +864 -0
  213. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cache/cachestorage.js +152 -0
  214. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cache/util.js +45 -0
  215. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cookies/constants.js +12 -0
  216. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cookies/index.js +199 -0
  217. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cookies/parse.js +314 -0
  218. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/cookies/util.js +352 -0
  219. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/eventsource/eventsource-stream.js +494 -0
  220. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/eventsource/eventsource.js +501 -0
  221. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/eventsource/util.js +29 -0
  222. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/LICENSE +21 -0
  223. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/body.js +509 -0
  224. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/constants.js +131 -0
  225. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/data-url.js +596 -0
  226. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/formdata-parser.js +586 -0
  227. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/formdata.js +259 -0
  228. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/global.js +40 -0
  229. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/headers.js +719 -0
  230. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/index.js +2413 -0
  231. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/request.js +1115 -0
  232. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/response.js +641 -0
  233. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/fetch/util.js +1522 -0
  234. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/infra/index.js +1 -16
  235. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/webidl/index.js +21 -7
  236. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/connection.js +339 -0
  237. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/constants.js +126 -0
  238. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/events.js +331 -0
  239. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/frame.js +133 -0
  240. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/permessage-deflate.js +105 -0
  241. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/receiver.js +507 -0
  242. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/sender.js +109 -0
  243. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/websocket/stream/websocketerror.js +10 -13
  244. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/websocket/stream/websocketstream.js +14 -29
  245. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/util.js +347 -0
  246. package/node_modules/@mytools/fst-platform/node_modules/undici/lib/web/websocket/websocket.js +758 -0
  247. package/node_modules/@mytools/fst-platform/node_modules/undici/package.json +152 -0
  248. package/node_modules/@mytools/fst-platform/node_modules/undici/scripts/strip-comments.js +10 -0
  249. package/node_modules/@mytools/fst-platform/node_modules/undici/types/README.md +6 -0
  250. package/node_modules/@mytools/fst-platform/node_modules/undici/types/agent.d.ts +32 -0
  251. package/node_modules/@mytools/fst-platform/node_modules/undici/types/api.d.ts +43 -0
  252. package/node_modules/@mytools/fst-platform/node_modules/undici/types/balanced-pool.d.ts +30 -0
  253. package/node_modules/@mytools/fst-platform/node_modules/undici/types/cache.d.ts +36 -0
  254. package/node_modules/@mytools/fst-platform/node_modules/undici/types/client.d.ts +139 -0
  255. package/node_modules/@mytools/fst-platform/node_modules/undici/types/connector.d.ts +36 -0
  256. package/node_modules/@mytools/fst-platform/node_modules/undici/types/content-type.d.ts +21 -0
  257. package/node_modules/@mytools/fst-platform/node_modules/undici/types/cookies.d.ts +30 -0
  258. package/node_modules/@mytools/fst-platform/node_modules/undici/types/diagnostics-channel.d.ts +74 -0
  259. package/node_modules/@mytools/fst-platform/node_modules/undici/types/dispatcher.d.ts +275 -0
  260. package/node_modules/@mytools/fst-platform/node_modules/undici/types/env-http-proxy-agent.d.ts +22 -0
  261. package/node_modules/@mytools/fst-platform/node_modules/undici/types/errors.d.ts +177 -0
  262. package/node_modules/@mytools/fst-platform/node_modules/undici/types/eventsource.d.ts +66 -0
  263. package/node_modules/@mytools/fst-platform/node_modules/undici/types/fetch.d.ts +231 -0
  264. package/node_modules/@mytools/fst-platform/node_modules/undici/types/formdata.d.ts +114 -0
  265. package/node_modules/@mytools/fst-platform/node_modules/undici/types/global-dispatcher.d.ts +9 -0
  266. package/node_modules/@mytools/fst-platform/node_modules/undici/types/global-origin.d.ts +7 -0
  267. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/h2c-client.d.ts +6 -6
  268. package/node_modules/@mytools/fst-platform/node_modules/undici/types/handlers.d.ts +14 -0
  269. package/node_modules/@mytools/fst-platform/node_modules/undici/types/header.d.ts +160 -0
  270. package/node_modules/@mytools/fst-platform/node_modules/undici/types/index.d.ts +91 -0
  271. package/node_modules/@mytools/fst-platform/node_modules/undici/types/interceptors.d.ts +82 -0
  272. package/node_modules/@mytools/fst-platform/node_modules/undici/types/mock-agent.d.ts +68 -0
  273. package/node_modules/@mytools/fst-platform/node_modules/undici/types/mock-client.d.ts +27 -0
  274. package/node_modules/@mytools/fst-platform/node_modules/undici/types/mock-errors.d.ts +12 -0
  275. package/node_modules/@mytools/fst-platform/node_modules/undici/types/mock-interceptor.d.ts +94 -0
  276. package/node_modules/@mytools/fst-platform/node_modules/undici/types/mock-pool.d.ts +27 -0
  277. package/node_modules/@mytools/fst-platform/node_modules/undici/types/patch.d.ts +29 -0
  278. package/node_modules/@mytools/fst-platform/node_modules/undici/types/pool-stats.d.ts +19 -0
  279. package/node_modules/@mytools/fst-platform/node_modules/undici/types/pool.d.ts +41 -0
  280. package/node_modules/@mytools/fst-platform/node_modules/undici/types/proxy-agent.d.ts +29 -0
  281. package/node_modules/@mytools/fst-platform/node_modules/undici/types/readable.d.ts +68 -0
  282. package/node_modules/@mytools/fst-platform/node_modules/undici/types/retry-agent.d.ts +8 -0
  283. package/node_modules/@mytools/fst-platform/node_modules/undici/types/retry-handler.d.ts +125 -0
  284. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/round-robin-pool.d.ts +2 -0
  285. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/snapshot-agent.d.ts +0 -4
  286. package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/socks5-proxy-agent.d.ts +2 -4
  287. package/node_modules/@mytools/fst-platform/node_modules/undici/types/util.d.ts +18 -0
  288. package/node_modules/@mytools/fst-platform/node_modules/undici/types/webidl.d.ts +347 -0
  289. package/node_modules/@mytools/fst-platform/node_modules/undici/types/websocket.d.ts +188 -0
  290. package/node_modules/@mytools/fst-platform/package.json +3 -3
  291. package/node_modules/@mytools/fst-platform/src/process.js +4 -1
  292. package/node_modules/@mytools/fst-platform/src/shell.js +46 -1
  293. package/node_modules/@mytools/fst-plugin/package.json +1 -1
  294. package/node_modules/@mytools/fst-plugin/src/host.js +31 -23
  295. package/node_modules/@mytools/fst-workflow/package.json +1 -1
  296. package/node_modules/@mytools/fst-workflow/src/engine.js +1 -1
  297. package/node_modules/@mytools/fst-workspace/README.md +2 -0
  298. package/node_modules/@mytools/fst-workspace/package.json +2 -1
  299. package/node_modules/@mytools/fst-workspace/src/plugin-registry.js +58 -0
  300. package/node_modules/@mytools/fst-workspace/src/plugins.js +7 -4
  301. package/node_modules/@mytools/fst-workspace/src/workflows.js +5 -3
  302. package/node_modules/@mytools/pack/package.json +3 -3
  303. package/node_modules/@mytools/pack/runtime-cache.js +26 -0
  304. package/node_modules/@mytools/pack/runtime.js +6 -10
  305. package/node_modules/@mytools/web/public/THIRD_PARTY_NOTICES.txt +953 -963
  306. package/node_modules/@npmcli/agent/lib/agents.js +0 -10
  307. package/node_modules/@npmcli/agent/package.json +12 -11
  308. package/node_modules/@npmcli/arborist/README.md +2 -2
  309. package/node_modules/@npmcli/arborist/bin/index.js +2 -1
  310. package/node_modules/@npmcli/arborist/bin/shrinkwrap.js +7 -0
  311. package/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js +25 -159
  312. package/node_modules/@npmcli/arborist/lib/arborist/isolated-reifier.js +49 -11
  313. package/node_modules/@npmcli/arborist/lib/arborist/load-actual.js +0 -67
  314. package/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js +37 -5
  315. package/node_modules/@npmcli/arborist/lib/arborist/rebuild.js +8 -15
  316. package/node_modules/@npmcli/arborist/lib/arborist/reify.js +42 -59
  317. package/node_modules/@npmcli/arborist/lib/consistent-resolve.js +1 -1
  318. package/node_modules/@npmcli/arborist/lib/diff.js +22 -17
  319. package/node_modules/@npmcli/arborist/lib/edge.js +2 -22
  320. package/node_modules/@npmcli/arborist/lib/index.js +0 -2
  321. package/node_modules/@npmcli/arborist/lib/isolated-classes.js +1 -4
  322. package/node_modules/@npmcli/arborist/lib/node.js +9 -13
  323. package/node_modules/@npmcli/arborist/lib/place-dep.js +0 -6
  324. package/node_modules/@npmcli/arborist/lib/printable.js +5 -0
  325. package/node_modules/@npmcli/arborist/lib/shrinkwrap.js +32 -55
  326. package/node_modules/@npmcli/arborist/package.json +26 -32
  327. package/node_modules/@npmcli/fs/lib/move-file.js +5 -5
  328. package/node_modules/@npmcli/fs/package.json +5 -5
  329. package/node_modules/@npmcli/git/package.json +12 -13
  330. package/node_modules/@npmcli/installed-package-contents/package.json +7 -7
  331. package/node_modules/@npmcli/map-workspaces/package.json +7 -7
  332. package/node_modules/@npmcli/metavuln-calculator/package.json +16 -10
  333. package/node_modules/@npmcli/name-from-folder/package.json +16 -13
  334. package/node_modules/@npmcli/node-gyp/package.json +5 -5
  335. package/node_modules/@npmcli/package-json/lib/index.js +1 -2
  336. package/node_modules/@npmcli/package-json/lib/normalize.js +22 -23
  337. package/node_modules/@npmcli/package-json/package.json +10 -11
  338. package/node_modules/@npmcli/promise-spawn/README.md +2 -1
  339. package/node_modules/@npmcli/promise-spawn/package.json +5 -5
  340. package/node_modules/@npmcli/redact/package.json +4 -4
  341. package/node_modules/@npmcli/run-script/lib/is-server-package.js +11 -0
  342. package/node_modules/@npmcli/run-script/lib/make-spawn-args.js +6 -5
  343. package/node_modules/@npmcli/run-script/lib/run-script-pkg.js +13 -4
  344. package/node_modules/@npmcli/run-script/lib/run-script.js +2 -1
  345. package/node_modules/@npmcli/run-script/package.json +11 -12
  346. package/node_modules/@sigstore/bundle/README.md +1 -1
  347. package/node_modules/@sigstore/bundle/dist/error.js +0 -1
  348. package/node_modules/@sigstore/bundle/package.json +2 -2
  349. package/node_modules/@sigstore/core/README.md +1 -1
  350. package/node_modules/@sigstore/core/dist/asn1/length.js +1 -12
  351. package/node_modules/@sigstore/core/dist/asn1/obj.js +7 -25
  352. package/node_modules/@sigstore/core/dist/asn1/parse.js +5 -24
  353. package/node_modules/@sigstore/core/package.json +2 -2
  354. package/node_modules/@sigstore/sign/README.md +1 -1
  355. package/node_modules/@sigstore/sign/dist/signer/fulcio/ephemeral.js +1 -1
  356. package/node_modules/@sigstore/sign/package.json +9 -9
  357. package/node_modules/@sigstore/tuf/README.md +1 -1
  358. package/node_modules/@sigstore/tuf/package.json +4 -4
  359. package/node_modules/@sigstore/tuf/seeds.json +1 -1
  360. package/node_modules/@sigstore/verify/README.md +1 -1
  361. package/node_modules/@sigstore/verify/dist/bundle/dsse.d.ts +0 -1
  362. package/node_modules/@sigstore/verify/dist/bundle/dsse.js +0 -6
  363. package/node_modules/@sigstore/verify/dist/bundle/message.d.ts +0 -1
  364. package/node_modules/@sigstore/verify/dist/bundle/message.js +0 -5
  365. package/node_modules/@sigstore/verify/dist/policy.d.ts +1 -1
  366. package/node_modules/@sigstore/verify/dist/policy.js +2 -0
  367. package/node_modules/@sigstore/verify/dist/shared.types.d.ts +1 -6
  368. package/node_modules/@sigstore/verify/dist/tlog/checkpoint.js +3 -17
  369. package/node_modules/@sigstore/verify/dist/tlog/hashedrekord.js +4 -4
  370. package/node_modules/@sigstore/verify/dist/tlog/index.js +1 -13
  371. package/node_modules/@sigstore/verify/dist/tlog/merkle.js +1 -12
  372. package/node_modules/@sigstore/verify/dist/verifier.js +5 -13
  373. package/node_modules/@sigstore/verify/package.json +5 -5
  374. package/node_modules/@tufjs/models/package.json +3 -3
  375. package/node_modules/abbrev/package.json +8 -9
  376. package/node_modules/agent-base/dist/helpers.d.ts +5 -0
  377. package/node_modules/agent-base/dist/helpers.d.ts.map +1 -1
  378. package/node_modules/agent-base/dist/helpers.js +34 -5
  379. package/node_modules/agent-base/dist/helpers.js.map +1 -1
  380. package/node_modules/agent-base/dist/index.d.ts +5 -1
  381. package/node_modules/agent-base/dist/index.d.ts.map +1 -1
  382. package/node_modules/agent-base/dist/index.js +40 -8
  383. package/node_modules/agent-base/dist/index.js.map +1 -1
  384. package/node_modules/agent-base/package.json +12 -12
  385. package/node_modules/bin-links/README.md +4 -5
  386. package/node_modules/bin-links/lib/fix-bin.js +1 -3
  387. package/node_modules/bin-links/lib/index.js +16 -8
  388. package/node_modules/bin-links/lib/link-mans.js +53 -0
  389. package/node_modules/bin-links/package.json +12 -11
  390. package/node_modules/cacache/lib/content/write.js +0 -2
  391. package/node_modules/cacache/lib/entry-index.js +0 -3
  392. package/node_modules/cacache/lib/rm.js +0 -1
  393. package/node_modules/cacache/lib/util/tmp.js +1 -5
  394. package/node_modules/cacache/lib/verify.js +2 -2
  395. package/node_modules/cacache/package.json +7 -7
  396. package/node_modules/cmd-shim/lib/index.js +32 -67
  397. package/node_modules/cmd-shim/package.json +5 -5
  398. package/node_modules/hosted-git-info/README.md +1 -1
  399. package/node_modules/hosted-git-info/lib/parse-url.js +3 -1
  400. package/node_modules/hosted-git-info/package.json +4 -4
  401. package/node_modules/http-proxy-agent/dist/index.d.ts +5 -8
  402. package/node_modules/http-proxy-agent/dist/index.d.ts.map +1 -1
  403. package/node_modules/http-proxy-agent/dist/index.js +42 -26
  404. package/node_modules/http-proxy-agent/dist/index.js.map +1 -1
  405. package/node_modules/http-proxy-agent/package.json +14 -15
  406. package/node_modules/https-proxy-agent/dist/index.d.ts +5 -9
  407. package/node_modules/https-proxy-agent/dist/index.d.ts.map +1 -1
  408. package/node_modules/https-proxy-agent/dist/index.js +44 -98
  409. package/node_modules/https-proxy-agent/dist/index.js.map +1 -1
  410. package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +3 -0
  411. package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts.map +1 -1
  412. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js +10 -3
  413. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map +1 -1
  414. package/node_modules/https-proxy-agent/package.json +15 -16
  415. package/node_modules/ignore-walk/package.json +4 -4
  416. package/node_modules/ini/package.json +5 -5
  417. package/node_modules/ip-address/README.md +70 -70
  418. package/node_modules/ip-address/dist/ipv6.js +7 -4
  419. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  420. package/node_modules/ip-address/dist/v6/constants.d.ts +3 -0
  421. package/node_modules/ip-address/dist/v6/constants.js +3 -0
  422. package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  423. package/node_modules/ip-address/package.json +2 -1
  424. package/node_modules/json-parse-even-better-errors/lib/index.js +1 -3
  425. package/node_modules/json-parse-even-better-errors/package.json +17 -13
  426. package/node_modules/make-fetch-happen/package.json +11 -11
  427. package/node_modules/minipass-fetch/package.json +4 -4
  428. package/node_modules/node-gyp/.release-please-manifest.json +1 -1
  429. package/node_modules/node-gyp/CHANGELOG.md +0 -102
  430. package/node_modules/node-gyp/README.md +2 -3
  431. package/node_modules/node-gyp/eslint.config.js +1 -4
  432. package/node_modules/node-gyp/gyp/.release-please-manifest.json +1 -1
  433. package/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +19 -14
  434. package/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +2 -7
  435. package/node_modules/node-gyp/gyp/pyproject.toml +1 -1
  436. package/node_modules/node-gyp/lib/build.js +6 -18
  437. package/node_modules/node-gyp/lib/create-config-gypi.js +0 -5
  438. package/node_modules/node-gyp/lib/node-gyp.js +2 -9
  439. package/node_modules/node-gyp/lib/rebuild.js +3 -3
  440. package/node_modules/node-gyp/package.json +9 -11
  441. package/node_modules/nopt/README.md +4 -2
  442. package/node_modules/nopt/lib/debug.js +5 -0
  443. package/node_modules/nopt/lib/nopt-lib.js +43 -7
  444. package/node_modules/nopt/lib/nopt.js +4 -2
  445. package/node_modules/nopt/lib/type-defs.js +13 -8
  446. package/node_modules/nopt/package.json +17 -15
  447. package/node_modules/npm-bundled/package.json +6 -6
  448. package/node_modules/npm-install-checks/package.json +5 -5
  449. package/node_modules/npm-normalize-package-bin/package.json +16 -13
  450. package/node_modules/npm-package-arg/package.json +7 -7
  451. package/node_modules/npm-packlist/README.md +30 -45
  452. package/node_modules/npm-packlist/lib/index.js +47 -115
  453. package/node_modules/npm-packlist/package.json +8 -10
  454. package/node_modules/npm-pick-manifest/package.json +19 -15
  455. package/node_modules/npm-registry-fetch/lib/errors.js +3 -8
  456. package/node_modules/npm-registry-fetch/package.json +12 -12
  457. package/node_modules/pacote/lib/dir.js +5 -60
  458. package/node_modules/pacote/lib/fetcher.js +0 -4
  459. package/node_modules/pacote/lib/git.js +3 -11
  460. package/node_modules/pacote/lib/util/add-git-sha.js +1 -1
  461. package/node_modules/pacote/package.json +18 -19
  462. package/node_modules/parse-conflict-json/package.json +6 -6
  463. package/node_modules/proc-log/package.json +4 -4
  464. package/node_modules/read-cmd-shim/lib/index.js +1 -1
  465. package/node_modules/read-cmd-shim/package.json +18 -14
  466. package/node_modules/sigstore/README.md +1 -1
  467. package/node_modules/sigstore/package.json +10 -10
  468. package/node_modules/socks-proxy-agent/dist/index.d.ts +3 -1
  469. package/node_modules/socks-proxy-agent/dist/index.d.ts.map +1 -1
  470. package/node_modules/socks-proxy-agent/dist/index.js +43 -17
  471. package/node_modules/socks-proxy-agent/dist/index.js.map +1 -1
  472. package/node_modules/socks-proxy-agent/package.json +15 -15
  473. package/node_modules/ssri/package.json +4 -4
  474. package/node_modules/tuf-js/dist/config.d.ts +2 -2
  475. package/node_modules/tuf-js/dist/fetcher.d.ts +4 -4
  476. package/node_modules/tuf-js/dist/fetcher.js +16 -55
  477. package/node_modules/tuf-js/dist/updater.js +2 -2
  478. package/node_modules/tuf-js/package.json +8 -8
  479. package/node_modules/undici/README.md +72 -405
  480. package/node_modules/undici/docs/docs/api/Agent.md +41 -252
  481. package/node_modules/undici/docs/docs/api/BalancedPool.md +48 -246
  482. package/node_modules/undici/docs/docs/api/CacheStorage.md +13 -171
  483. package/node_modules/undici/docs/docs/api/Client.md +139 -395
  484. package/node_modules/undici/docs/docs/api/Connector.md +35 -118
  485. package/node_modules/undici/docs/docs/api/ContentType.md +25 -65
  486. package/node_modules/undici/docs/docs/api/Cookies.md +47 -125
  487. package/node_modules/undici/docs/docs/api/Debug.md +31 -47
  488. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +97 -409
  489. package/node_modules/undici/docs/docs/api/DispatchInterceptor.md +60 -0
  490. package/node_modules/undici/docs/docs/api/Dispatcher.md +1011 -500
  491. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +96 -105
  492. package/node_modules/undici/docs/docs/api/Errors.md +28 -528
  493. package/node_modules/undici/docs/docs/api/EventSource.md +13 -326
  494. package/node_modules/undici/docs/docs/api/Fetch.md +24 -693
  495. package/node_modules/undici/docs/docs/api/MockAgent.md +264 -346
  496. package/node_modules/undici/docs/docs/api/MockClient.md +31 -153
  497. package/node_modules/undici/docs/docs/api/MockErrors.md +5 -56
  498. package/node_modules/undici/docs/docs/api/MockPool.md +253 -324
  499. package/node_modules/undici/docs/docs/api/Pool.md +41 -235
  500. package/node_modules/undici/docs/docs/api/PoolStats.md +13 -119
  501. package/node_modules/undici/docs/docs/api/ProxyAgent.md +81 -198
  502. package/node_modules/undici/docs/docs/api/RedirectHandler.md +58 -238
  503. package/node_modules/undici/docs/docs/api/RetryAgent.md +28 -119
  504. package/node_modules/undici/docs/docs/api/RetryHandler.md +78 -161
  505. package/node_modules/undici/docs/docs/api/Util.md +11 -68
  506. package/node_modules/undici/docs/docs/api/WebSocket.md +24 -509
  507. package/node_modules/undici/docs/docs/api/api-lifecycle.md +33 -101
  508. package/node_modules/undici/docs/docs/best-practices/client-certificate.md +0 -2
  509. package/node_modules/undici/docs/docs/best-practices/mocking-request.md +2 -58
  510. package/node_modules/undici/docs/docs/best-practices/proxy.md +1 -3
  511. package/node_modules/undici/docs/docs/best-practices/writing-tests.md +0 -45
  512. package/node_modules/undici/index-fetch.js +4 -34
  513. package/node_modules/undici/index.d.ts +1 -1
  514. package/node_modules/undici/index.js +20 -87
  515. package/node_modules/undici/lib/api/abort-signal.js +0 -2
  516. package/node_modules/undici/lib/api/api-connect.js +11 -15
  517. package/node_modules/undici/lib/api/api-pipeline.js +19 -33
  518. package/node_modules/undici/lib/api/api-request.js +59 -89
  519. package/node_modules/undici/lib/api/api-stream.js +64 -114
  520. package/node_modules/undici/lib/api/api-upgrade.js +13 -26
  521. package/node_modules/undici/lib/api/readable.js +87 -317
  522. package/node_modules/undici/lib/api/util.js +93 -0
  523. package/node_modules/undici/lib/core/connect.js +125 -77
  524. package/node_modules/undici/lib/core/constants.js +9 -11
  525. package/node_modules/undici/lib/core/diagnostics.js +129 -154
  526. package/node_modules/undici/lib/core/errors.js +50 -122
  527. package/node_modules/undici/lib/core/request.js +87 -172
  528. package/node_modules/undici/lib/core/symbols.js +2 -14
  529. package/node_modules/undici/lib/core/tree.js +2 -10
  530. package/node_modules/undici/lib/core/util.js +190 -481
  531. package/node_modules/undici/lib/dispatcher/agent.js +35 -83
  532. package/node_modules/undici/lib/dispatcher/balanced-pool.js +38 -46
  533. package/node_modules/undici/lib/dispatcher/client-h1.js +199 -492
  534. package/node_modules/undici/lib/dispatcher/client-h2.js +380 -1409
  535. package/node_modules/undici/lib/dispatcher/client.js +130 -253
  536. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +52 -50
  537. package/node_modules/undici/lib/dispatcher/dispatcher.js +24 -17
  538. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +45 -75
  539. package/node_modules/undici/lib/dispatcher/fixed-queue.js +50 -68
  540. package/node_modules/undici/lib/dispatcher/pool-base.js +54 -153
  541. package/node_modules/undici/lib/dispatcher/pool-stats.js +34 -0
  542. package/node_modules/undici/lib/dispatcher/pool.js +16 -135
  543. package/node_modules/undici/lib/dispatcher/proxy-agent.js +41 -175
  544. package/node_modules/undici/lib/dispatcher/retry-agent.js +0 -3
  545. package/node_modules/undici/lib/global.js +9 -59
  546. package/node_modules/undici/lib/handler/decorator-handler.js +15 -43
  547. package/node_modules/undici/lib/handler/redirect-handler.js +116 -127
  548. package/node_modules/undici/lib/handler/retry-handler.js +182 -398
  549. package/node_modules/undici/lib/interceptor/dns.js +47 -254
  550. package/node_modules/undici/lib/interceptor/dump.js +56 -32
  551. package/node_modules/undici/lib/interceptor/redirect-interceptor.js +21 -0
  552. package/node_modules/undici/lib/interceptor/redirect.js +14 -11
  553. package/node_modules/undici/lib/interceptor/response-error.js +22 -31
  554. package/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  555. package/node_modules/undici/lib/llhttp/constants.js +193 -446
  556. package/node_modules/undici/lib/llhttp/llhttp-wasm.js +1 -11
  557. package/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +1 -11
  558. package/node_modules/undici/lib/llhttp/utils.js +12 -9
  559. package/node_modules/undici/lib/mock/mock-agent.js +22 -106
  560. package/node_modules/undici/lib/mock/mock-client.js +4 -13
  561. package/node_modules/undici/lib/mock/mock-errors.js +2 -3
  562. package/node_modules/undici/lib/mock/mock-interceptor.js +13 -33
  563. package/node_modules/undici/lib/mock/mock-pool.js +4 -13
  564. package/node_modules/undici/lib/mock/mock-symbols.js +1 -10
  565. package/node_modules/undici/lib/mock/mock-utils.js +51 -404
  566. package/node_modules/undici/lib/mock/pluralizer.js +29 -0
  567. package/node_modules/undici/lib/util/timers.js +9 -11
  568. package/node_modules/undici/lib/web/cache/cache.js +51 -63
  569. package/node_modules/undici/lib/web/cache/cachestorage.js +7 -13
  570. package/node_modules/undici/lib/web/cache/symbols.js +5 -0
  571. package/node_modules/undici/lib/web/cookies/index.js +18 -45
  572. package/node_modules/undici/lib/web/cookies/parse.js +149 -157
  573. package/node_modules/undici/lib/web/cookies/util.js +2 -4
  574. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +9 -37
  575. package/node_modules/undici/lib/web/eventsource/eventsource.js +64 -108
  576. package/node_modules/undici/lib/web/eventsource/util.js +5 -28
  577. package/node_modules/undici/lib/web/fetch/body.js +148 -173
  578. package/node_modules/undici/lib/web/fetch/constants.js +6 -13
  579. package/node_modules/undici/lib/web/fetch/data-url.js +167 -19
  580. package/node_modules/undici/lib/web/fetch/dispatcher-weakref.js +46 -0
  581. package/node_modules/undici/lib/web/fetch/file.js +126 -0
  582. package/node_modules/undici/lib/web/fetch/formdata-parser.js +117 -229
  583. package/node_modules/undici/lib/web/fetch/formdata.js +65 -85
  584. package/node_modules/undici/lib/web/fetch/headers.js +108 -143
  585. package/node_modules/undici/lib/web/fetch/index.js +446 -627
  586. package/node_modules/undici/lib/web/fetch/request.js +115 -217
  587. package/node_modules/undici/lib/web/fetch/response.js +82 -110
  588. package/node_modules/undici/lib/web/fetch/symbols.js +9 -0
  589. package/node_modules/undici/lib/web/fetch/util.js +393 -291
  590. package/node_modules/undici/lib/web/fetch/webidl.js +695 -0
  591. package/node_modules/undici/lib/web/fileapi/encoding.js +290 -0
  592. package/node_modules/undici/lib/web/fileapi/filereader.js +344 -0
  593. package/node_modules/undici/lib/web/fileapi/progressevent.js +78 -0
  594. package/node_modules/undici/lib/web/fileapi/symbols.js +10 -0
  595. package/node_modules/undici/lib/web/fileapi/util.js +391 -0
  596. package/node_modules/undici/lib/web/websocket/connection.js +160 -139
  597. package/node_modules/undici/lib/web/websocket/constants.js +10 -70
  598. package/node_modules/undici/lib/web/websocket/events.js +30 -49
  599. package/node_modules/undici/lib/web/websocket/frame.js +20 -51
  600. package/node_modules/undici/lib/web/websocket/receiver.js +87 -83
  601. package/node_modules/undici/lib/web/websocket/sender.js +13 -18
  602. package/node_modules/undici/lib/web/websocket/symbols.js +12 -0
  603. package/node_modules/undici/lib/web/websocket/util.js +90 -115
  604. package/node_modules/undici/lib/web/websocket/websocket.js +171 -359
  605. package/node_modules/undici/package.json +57 -49
  606. package/node_modules/undici/scripts/strip-comments.js +1 -3
  607. package/node_modules/undici/types/agent.d.ts +13 -12
  608. package/node_modules/undici/types/api.d.ts +26 -26
  609. package/node_modules/undici/types/balanced-pool.d.ts +12 -13
  610. package/node_modules/undici/types/client.d.ts +39 -98
  611. package/node_modules/undici/types/connector.d.ts +2 -5
  612. package/node_modules/undici/types/cookies.d.ts +1 -3
  613. package/node_modules/undici/types/diagnostics-channel.d.ts +11 -20
  614. package/node_modules/undici/types/dispatcher.d.ts +139 -136
  615. package/node_modules/undici/types/env-http-proxy-agent.d.ts +3 -4
  616. package/node_modules/undici/types/errors.d.ts +54 -86
  617. package/node_modules/undici/types/eventsource.d.ts +4 -9
  618. package/node_modules/undici/types/fetch.d.ts +25 -51
  619. package/node_modules/undici/types/file.d.ts +39 -0
  620. package/node_modules/undici/types/filereader.d.ts +54 -0
  621. package/node_modules/undici/types/formdata.d.ts +7 -7
  622. package/node_modules/undici/types/global-dispatcher.d.ts +4 -4
  623. package/node_modules/undici/types/global-origin.d.ts +5 -5
  624. package/node_modules/undici/types/handlers.d.ts +9 -10
  625. package/node_modules/undici/types/header.d.ts +1 -162
  626. package/node_modules/undici/types/index.d.ts +47 -69
  627. package/node_modules/undici/types/interceptors.d.ts +12 -62
  628. package/node_modules/undici/types/mock-agent.d.ts +27 -46
  629. package/node_modules/undici/types/mock-client.d.ts +4 -6
  630. package/node_modules/undici/types/mock-errors.d.ts +3 -3
  631. package/node_modules/undici/types/mock-interceptor.d.ts +21 -26
  632. package/node_modules/undici/types/mock-pool.d.ts +4 -6
  633. package/node_modules/undici/types/patch.d.ts +4 -0
  634. package/node_modules/undici/types/pool-stats.d.ts +8 -8
  635. package/node_modules/undici/types/pool.d.ts +14 -14
  636. package/node_modules/undici/types/proxy-agent.d.ts +6 -13
  637. package/node_modules/undici/types/readable.d.ts +16 -19
  638. package/node_modules/undici/types/retry-agent.d.ts +1 -1
  639. package/node_modules/undici/types/retry-handler.d.ts +9 -18
  640. package/node_modules/undici/types/util.d.ts +3 -3
  641. package/node_modules/undici/types/webidl.d.ts +32 -156
  642. package/node_modules/undici/types/websocket.d.ts +10 -48
  643. package/node_modules/validate-npm-package-name/package.json +4 -4
  644. package/node_modules/which/package.json +4 -4
  645. package/node_modules/write-file-atomic/package.json +4 -4
  646. package/package.json +56 -60
  647. package/node_modules/@npmcli/arborist/lib/npm-extension.js +0 -237
  648. package/node_modules/@npmcli/arborist/lib/package-extensions.js +0 -236
  649. package/node_modules/@npmcli/arborist/lib/patch.js +0 -111
  650. package/node_modules/@npmcli/arborist/lib/patched-dependencies.js +0 -168
  651. package/node_modules/cacache/lib/util/cache-dir.js +0 -29
  652. package/node_modules/diff/CONTRIBUTING.md +0 -28
  653. package/node_modules/diff/LICENSE +0 -29
  654. package/node_modules/diff/README.md +0 -388
  655. package/node_modules/diff/dist/diff.js +0 -1782
  656. package/node_modules/diff/dist/diff.min.js +0 -1
  657. package/node_modules/diff/eslint.config.mjs +0 -182
  658. package/node_modules/diff/libcjs/convert/dmp.d.ts +0 -8
  659. package/node_modules/diff/libcjs/convert/dmp.d.ts.map +0 -1
  660. package/node_modules/diff/libcjs/convert/dmp.js +0 -24
  661. package/node_modules/diff/libcjs/convert/xml.d.ts +0 -6
  662. package/node_modules/diff/libcjs/convert/xml.d.ts.map +0 -1
  663. package/node_modules/diff/libcjs/convert/xml.js +0 -34
  664. package/node_modules/diff/libcjs/diff/array.d.ts +0 -19
  665. package/node_modules/diff/libcjs/diff/array.d.ts.map +0 -1
  666. package/node_modules/diff/libcjs/diff/array.js +0 -40
  667. package/node_modules/diff/libcjs/diff/base.d.ts +0 -20
  668. package/node_modules/diff/libcjs/diff/base.d.ts.map +0 -1
  669. package/node_modules/diff/libcjs/diff/base.js +0 -265
  670. package/node_modules/diff/libcjs/diff/character.d.ts +0 -19
  671. package/node_modules/diff/libcjs/diff/character.d.ts.map +0 -1
  672. package/node_modules/diff/libcjs/diff/character.js +0 -31
  673. package/node_modules/diff/libcjs/diff/css.d.ts +0 -18
  674. package/node_modules/diff/libcjs/diff/css.d.ts.map +0 -1
  675. package/node_modules/diff/libcjs/diff/css.js +0 -34
  676. package/node_modules/diff/libcjs/diff/json.d.ts +0 -24
  677. package/node_modules/diff/libcjs/diff/json.d.ts.map +0 -1
  678. package/node_modules/diff/libcjs/diff/json.js +0 -105
  679. package/node_modules/diff/libcjs/diff/line.d.ts +0 -24
  680. package/node_modules/diff/libcjs/diff/line.d.ts.map +0 -1
  681. package/node_modules/diff/libcjs/diff/line.js +0 -89
  682. package/node_modules/diff/libcjs/diff/sentence.d.ts +0 -21
  683. package/node_modules/diff/libcjs/diff/sentence.d.ts.map +0 -1
  684. package/node_modules/diff/libcjs/diff/sentence.js +0 -67
  685. package/node_modules/diff/libcjs/diff/word.d.ts +0 -35
  686. package/node_modules/diff/libcjs/diff/word.d.ts.map +0 -1
  687. package/node_modules/diff/libcjs/diff/word.js +0 -312
  688. package/node_modules/diff/libcjs/index.d.ts +0 -20
  689. package/node_modules/diff/libcjs/index.d.ts.map +0 -1
  690. package/node_modules/diff/libcjs/index.js +0 -64
  691. package/node_modules/diff/libcjs/package.json +0 -1
  692. package/node_modules/diff/libcjs/patch/apply.d.ts +0 -62
  693. package/node_modules/diff/libcjs/patch/apply.d.ts.map +0 -1
  694. package/node_modules/diff/libcjs/patch/apply.js +0 -267
  695. package/node_modules/diff/libcjs/patch/create.d.ts +0 -122
  696. package/node_modules/diff/libcjs/patch/create.d.ts.map +0 -1
  697. package/node_modules/diff/libcjs/patch/create.js +0 -251
  698. package/node_modules/diff/libcjs/patch/line-endings.d.ts +0 -17
  699. package/node_modules/diff/libcjs/patch/line-endings.d.ts.map +0 -1
  700. package/node_modules/diff/libcjs/patch/line-endings.js +0 -61
  701. package/node_modules/diff/libcjs/patch/parse.d.ts +0 -8
  702. package/node_modules/diff/libcjs/patch/parse.d.ts.map +0 -1
  703. package/node_modules/diff/libcjs/patch/parse.js +0 -150
  704. package/node_modules/diff/libcjs/patch/reverse.d.ts +0 -9
  705. package/node_modules/diff/libcjs/patch/reverse.d.ts.map +0 -1
  706. package/node_modules/diff/libcjs/patch/reverse.js +0 -37
  707. package/node_modules/diff/libcjs/types.d.ts +0 -213
  708. package/node_modules/diff/libcjs/types.d.ts.map +0 -1
  709. package/node_modules/diff/libcjs/types.js +0 -2
  710. package/node_modules/diff/libcjs/util/array.d.ts +0 -3
  711. package/node_modules/diff/libcjs/util/array.d.ts.map +0 -1
  712. package/node_modules/diff/libcjs/util/array.js +0 -21
  713. package/node_modules/diff/libcjs/util/distance-iterator.d.ts +0 -2
  714. package/node_modules/diff/libcjs/util/distance-iterator.d.ts.map +0 -1
  715. package/node_modules/diff/libcjs/util/distance-iterator.js +0 -40
  716. package/node_modules/diff/libcjs/util/params.d.ts +0 -4
  717. package/node_modules/diff/libcjs/util/params.d.ts.map +0 -1
  718. package/node_modules/diff/libcjs/util/params.js +0 -17
  719. package/node_modules/diff/libcjs/util/string.d.ts +0 -30
  720. package/node_modules/diff/libcjs/util/string.d.ts.map +0 -1
  721. package/node_modules/diff/libcjs/util/string.js +0 -200
  722. package/node_modules/diff/libesm/convert/dmp.d.ts +0 -8
  723. package/node_modules/diff/libesm/convert/dmp.d.ts.map +0 -1
  724. package/node_modules/diff/libesm/convert/dmp.js +0 -21
  725. package/node_modules/diff/libesm/convert/xml.d.ts +0 -6
  726. package/node_modules/diff/libesm/convert/xml.d.ts.map +0 -1
  727. package/node_modules/diff/libesm/convert/xml.js +0 -31
  728. package/node_modules/diff/libesm/diff/array.d.ts +0 -19
  729. package/node_modules/diff/libesm/diff/array.d.ts.map +0 -1
  730. package/node_modules/diff/libesm/diff/array.js +0 -16
  731. package/node_modules/diff/libesm/diff/base.d.ts +0 -20
  732. package/node_modules/diff/libesm/diff/base.d.ts.map +0 -1
  733. package/node_modules/diff/libesm/diff/base.js +0 -253
  734. package/node_modules/diff/libesm/diff/character.d.ts +0 -19
  735. package/node_modules/diff/libesm/diff/character.d.ts.map +0 -1
  736. package/node_modules/diff/libesm/diff/character.js +0 -7
  737. package/node_modules/diff/libesm/diff/css.d.ts +0 -18
  738. package/node_modules/diff/libesm/diff/css.d.ts.map +0 -1
  739. package/node_modules/diff/libesm/diff/css.js +0 -10
  740. package/node_modules/diff/libesm/diff/json.d.ts +0 -24
  741. package/node_modules/diff/libesm/diff/json.d.ts.map +0 -1
  742. package/node_modules/diff/libesm/diff/json.js +0 -78
  743. package/node_modules/diff/libesm/diff/line.d.ts +0 -24
  744. package/node_modules/diff/libesm/diff/line.d.ts.map +0 -1
  745. package/node_modules/diff/libesm/diff/line.js +0 -65
  746. package/node_modules/diff/libesm/diff/sentence.d.ts +0 -21
  747. package/node_modules/diff/libesm/diff/sentence.d.ts.map +0 -1
  748. package/node_modules/diff/libesm/diff/sentence.js +0 -43
  749. package/node_modules/diff/libesm/diff/word.d.ts +0 -35
  750. package/node_modules/diff/libesm/diff/word.d.ts.map +0 -1
  751. package/node_modules/diff/libesm/diff/word.js +0 -281
  752. package/node_modules/diff/libesm/index.d.ts +0 -20
  753. package/node_modules/diff/libesm/index.d.ts.map +0 -1
  754. package/node_modules/diff/libesm/index.js +0 -30
  755. package/node_modules/diff/libesm/package.json +0 -1
  756. package/node_modules/diff/libesm/patch/apply.d.ts +0 -62
  757. package/node_modules/diff/libesm/patch/apply.d.ts.map +0 -1
  758. package/node_modules/diff/libesm/patch/apply.js +0 -257
  759. package/node_modules/diff/libesm/patch/create.d.ts +0 -122
  760. package/node_modules/diff/libesm/patch/create.d.ts.map +0 -1
  761. package/node_modules/diff/libesm/patch/create.js +0 -228
  762. package/node_modules/diff/libesm/patch/line-endings.d.ts +0 -17
  763. package/node_modules/diff/libesm/patch/line-endings.d.ts.map +0 -1
  764. package/node_modules/diff/libesm/patch/line-endings.js +0 -44
  765. package/node_modules/diff/libesm/patch/parse.d.ts +0 -8
  766. package/node_modules/diff/libesm/patch/parse.d.ts.map +0 -1
  767. package/node_modules/diff/libesm/patch/parse.js +0 -147
  768. package/node_modules/diff/libesm/patch/reverse.d.ts +0 -9
  769. package/node_modules/diff/libesm/patch/reverse.d.ts.map +0 -1
  770. package/node_modules/diff/libesm/patch/reverse.js +0 -23
  771. package/node_modules/diff/libesm/types.d.ts +0 -213
  772. package/node_modules/diff/libesm/types.d.ts.map +0 -1
  773. package/node_modules/diff/libesm/types.js +0 -1
  774. package/node_modules/diff/libesm/util/array.d.ts +0 -3
  775. package/node_modules/diff/libesm/util/array.d.ts.map +0 -1
  776. package/node_modules/diff/libesm/util/array.js +0 -17
  777. package/node_modules/diff/libesm/util/distance-iterator.d.ts +0 -2
  778. package/node_modules/diff/libesm/util/distance-iterator.d.ts.map +0 -1
  779. package/node_modules/diff/libesm/util/distance-iterator.js +0 -37
  780. package/node_modules/diff/libesm/util/params.d.ts +0 -4
  781. package/node_modules/diff/libesm/util/params.d.ts.map +0 -1
  782. package/node_modules/diff/libesm/util/params.js +0 -14
  783. package/node_modules/diff/libesm/util/string.d.ts +0 -30
  784. package/node_modules/diff/libesm/util/string.d.ts.map +0 -1
  785. package/node_modules/diff/libesm/util/string.js +0 -184
  786. package/node_modules/diff/package.json +0 -130
  787. package/node_modules/diff/release-notes.md +0 -432
  788. package/node_modules/node-gyp/commitlint.config.mjs +0 -3
  789. package/node_modules/node-gyp/gyp/commitlint.config.js +0 -6
  790. package/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake_test.py +0 -105
  791. package/node_modules/node-gyp/zizmor.yml +0 -5
  792. package/node_modules/proxy-agent-negotiate/dist/index.d.ts +0 -14
  793. package/node_modules/proxy-agent-negotiate/dist/index.d.ts.map +0 -1
  794. package/node_modules/proxy-agent-negotiate/dist/index.js +0 -35
  795. package/node_modules/proxy-agent-negotiate/dist/index.js.map +0 -1
  796. package/node_modules/proxy-agent-negotiate/package.json +0 -47
  797. package/node_modules/undici/docs/docs/api/CacheStore.md +0 -360
  798. package/node_modules/undici/docs/docs/api/ClientStats.md +0 -93
  799. package/node_modules/undici/docs/docs/api/GlobalInstallation.md +0 -121
  800. package/node_modules/undici/docs/docs/api/H2CClient.md +0 -385
  801. package/node_modules/undici/docs/docs/api/Interceptors.md +0 -419
  802. package/node_modules/undici/docs/docs/api/MockCallHistory.md +0 -371
  803. package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +0 -206
  804. package/node_modules/undici/docs/docs/api/RoundRobinPool.md +0 -239
  805. package/node_modules/undici/docs/docs/api/SnapshotAgent.md +0 -361
  806. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +0 -256
  807. package/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +0 -233
  808. package/node_modules/undici/docs/docs/getting-started.md +0 -281
  809. package/node_modules/undici/docs/docs/site.json +0 -125
  810. package/node_modules/undici/docs/docs/type-map.json +0 -79
  811. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +0 -110
  812. package/node_modules/undici/types/dispatcher1-wrapper.d.ts +0 -7
  813. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/core/socks5-client.js +0 -0
  814. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/core/socks5-utils.js +0 -0
  815. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/encoding/index.js +0 -0
  816. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/llhttp/constants.d.ts +0 -0
  817. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/llhttp/utils.d.ts +0 -0
  818. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/mock/snapshot-utils.js +0 -0
  819. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/util/date.js +0 -0
  820. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/util/stats.js +0 -0
  821. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/subresource-integrity/Readme.md +0 -0
  822. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/lib/web/subresource-integrity/subresource-integrity.js +0 -0
  823. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/cache-interceptor.d.ts +0 -0
  824. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/client-stats.d.ts +0 -0
  825. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/mock-call-history.d.ts +0 -0
  826. /package/node_modules/{undici → @mytools/fst-platform/node_modules/undici}/types/utility.d.ts +0 -0
@@ -0,0 +1,1060 @@
1
+ 'use strict'
2
+
3
+ const assert = require('node:assert')
4
+ const { pipeline } = require('node:stream')
5
+ const util = require('../core/util.js')
6
+ const {
7
+ RequestContentLengthMismatchError,
8
+ RequestAbortedError,
9
+ SocketError,
10
+ InformationalError,
11
+ InvalidArgumentError,
12
+ HeadersTimeoutError,
13
+ BodyTimeoutError
14
+ } = require('../core/errors.js')
15
+ const {
16
+ kUrl,
17
+ kReset,
18
+ kClient,
19
+ kRunning,
20
+ kPending,
21
+ kQueue,
22
+ kPendingIdx,
23
+ kRunningIdx,
24
+ kError,
25
+ kSocket,
26
+ kStrictContentLength,
27
+ kOnError,
28
+ kMaxConcurrentStreams,
29
+ kPingInterval,
30
+ kHTTP2Session,
31
+ kHTTP2InitialWindowSize,
32
+ kHTTP2ConnectionWindowSize,
33
+ kResume,
34
+ kSize,
35
+ kHTTPContext,
36
+ kClosed,
37
+ kBodyTimeout,
38
+ kHeadersTimeout,
39
+ kEnableConnectProtocol,
40
+ kRemoteSettings,
41
+ kHTTP2Stream,
42
+ kHTTP2SessionState
43
+ } = require('../core/symbols.js')
44
+ const { channels } = require('../core/diagnostics.js')
45
+
46
+ const kOpenStreams = Symbol('open streams')
47
+
48
+ let extractBody
49
+
50
+ /** @type {import('http2')} */
51
+ let http2
52
+ try {
53
+ http2 = require('node:http2')
54
+ } catch {
55
+ // @ts-ignore
56
+ http2 = { constants: {} }
57
+ }
58
+
59
+ const {
60
+ constants: {
61
+ HTTP2_HEADER_AUTHORITY,
62
+ HTTP2_HEADER_METHOD,
63
+ HTTP2_HEADER_PATH,
64
+ HTTP2_HEADER_SCHEME,
65
+ HTTP2_HEADER_CONTENT_LENGTH,
66
+ HTTP2_HEADER_EXPECT,
67
+ HTTP2_HEADER_STATUS,
68
+ HTTP2_HEADER_PROTOCOL,
69
+ NGHTTP2_REFUSED_STREAM,
70
+ NGHTTP2_CANCEL
71
+ }
72
+ } = http2
73
+
74
+ function parseH2Headers (headers) {
75
+ const result = []
76
+
77
+ for (const [name, value] of Object.entries(headers)) {
78
+ // h2 may concat the header value by array
79
+ // e.g. Set-Cookie
80
+ if (Array.isArray(value)) {
81
+ for (const subvalue of value) {
82
+ // we need to provide each header value of header name
83
+ // because the headers handler expect name-value pair
84
+ result.push(Buffer.from(name), Buffer.from(subvalue))
85
+ }
86
+ } else {
87
+ result.push(Buffer.from(name), Buffer.from(value))
88
+ }
89
+ }
90
+
91
+ return result
92
+ }
93
+
94
+ function connectH2 (client, socket) {
95
+ client[kSocket] = socket
96
+
97
+ const http2InitialWindowSize = client[kHTTP2InitialWindowSize]
98
+ const http2ConnectionWindowSize = client[kHTTP2ConnectionWindowSize]
99
+
100
+ const session = http2.connect(client[kUrl], {
101
+ createConnection: () => socket,
102
+ peerMaxConcurrentStreams: client[kMaxConcurrentStreams],
103
+ settings: {
104
+ // TODO(metcoder95): add support for PUSH
105
+ enablePush: false,
106
+ ...(http2InitialWindowSize != null ? { initialWindowSize: http2InitialWindowSize } : null)
107
+ }
108
+ })
109
+
110
+ client[kSocket] = socket
111
+ session[kOpenStreams] = 0
112
+ session[kClient] = client
113
+ session[kSocket] = socket
114
+ session[kHTTP2SessionState] = {
115
+ ping: {
116
+ interval: client[kPingInterval] === 0 ? null : setInterval(onHttp2SendPing, client[kPingInterval], session).unref()
117
+ }
118
+ }
119
+ // We set it to true by default in a best-effort; however once connected to an H2 server
120
+ // we will check if extended CONNECT protocol is supported or not
121
+ // and set this value accordingly.
122
+ session[kEnableConnectProtocol] = false
123
+ // States whether or not we have received the remote settings from the server
124
+ session[kRemoteSettings] = false
125
+
126
+ // Apply connection-level flow control once connected (if supported).
127
+ if (http2ConnectionWindowSize) {
128
+ util.addListener(session, 'connect', applyConnectionWindowSize.bind(session, http2ConnectionWindowSize))
129
+ }
130
+
131
+ util.addListener(session, 'error', onHttp2SessionError)
132
+ util.addListener(session, 'frameError', onHttp2FrameError)
133
+ util.addListener(session, 'end', onHttp2SessionEnd)
134
+ util.addListener(session, 'goaway', onHttp2SessionGoAway)
135
+ util.addListener(session, 'close', onHttp2SessionClose)
136
+ util.addListener(session, 'remoteSettings', onHttp2RemoteSettings)
137
+ // TODO (@metcoder95): implement SETTINGS support
138
+ // util.addListener(session, 'localSettings', onHttp2RemoteSettings)
139
+
140
+ session.unref()
141
+
142
+ client[kHTTP2Session] = session
143
+ socket[kHTTP2Session] = session
144
+
145
+ util.addListener(socket, 'error', onHttp2SocketError)
146
+ util.addListener(socket, 'end', onHttp2SocketEnd)
147
+ util.addListener(socket, 'close', onHttp2SocketClose)
148
+
149
+ socket[kClosed] = false
150
+ socket.on('close', onSocketClose)
151
+
152
+ return {
153
+ version: 'h2',
154
+ defaultPipelining: Infinity,
155
+ /**
156
+ * @param {import('../core/request.js')} request
157
+ * @returns {boolean}
158
+ */
159
+ write (request) {
160
+ return writeH2(client, request)
161
+ },
162
+ /**
163
+ * @returns {void}
164
+ */
165
+ resume () {
166
+ resumeH2(client)
167
+ },
168
+ /**
169
+ * @param {Error | null} err
170
+ * @param {() => void} callback
171
+ */
172
+ destroy (err, callback) {
173
+ if (socket[kClosed]) {
174
+ queueMicrotask(callback)
175
+ } else {
176
+ socket.destroy(err).on('close', callback)
177
+ }
178
+ },
179
+ /**
180
+ * @type {boolean}
181
+ */
182
+ get destroyed () {
183
+ return socket.destroyed
184
+ },
185
+ /**
186
+ * @param {import('../core/request.js')} request
187
+ * @returns {boolean}
188
+ */
189
+ busy (request) {
190
+ if (request != null) {
191
+ if (client[kRunning] > 0) {
192
+ // We are already processing requests
193
+
194
+ // Non-idempotent request cannot be retried.
195
+ // Ensure that no other requests are inflight and
196
+ // could cause failure.
197
+ if (request.idempotent === false) return true
198
+ // Don't dispatch an upgrade until all preceding requests have completed.
199
+ // Possibly, we do not have remote settings confirmed yet.
200
+ if ((request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false) return true
201
+ // Request with stream or iterator body can error while other requests
202
+ // are inflight and indirectly error those as well.
203
+ // Ensure this doesn't happen by waiting for inflight
204
+ // to complete before dispatching.
205
+
206
+ // Request with stream or iterator body cannot be retried.
207
+ // Ensure that no other requests are inflight and
208
+ // could cause failure.
209
+ if (util.bodyLength(request.body) !== 0 &&
210
+ (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) return true
211
+ } else {
212
+ return (request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false
213
+ }
214
+ }
215
+
216
+ return false
217
+ }
218
+ }
219
+ }
220
+
221
+ function resumeH2 (client) {
222
+ const socket = client[kSocket]
223
+
224
+ if (socket?.destroyed === false) {
225
+ // Only let the process exit when there is genuinely nothing outstanding.
226
+ // Unreffing because the peer advertised MAX_CONCURRENT_STREAMS = 0 left
227
+ // queued requests with nothing holding the event loop open, so the process
228
+ // could exit with status 0 while an awaited request never settled.
229
+ if (client[kSize] === 0) {
230
+ socket.unref()
231
+ client[kHTTP2Session].unref()
232
+ } else {
233
+ socket.ref()
234
+ client[kHTTP2Session].ref()
235
+ }
236
+ }
237
+ }
238
+
239
+ function applyConnectionWindowSize (connectionWindowSize) {
240
+ try {
241
+ if (typeof this.setLocalWindowSize === 'function') {
242
+ this.setLocalWindowSize(connectionWindowSize)
243
+ }
244
+ } catch {
245
+ // Best-effort only.
246
+ }
247
+ }
248
+
249
+ function onHttp2RemoteSettings (settings) {
250
+ // Fallbacks are a safe bet, remote setting will always override
251
+ this[kClient][kMaxConcurrentStreams] = settings.maxConcurrentStreams ?? this[kClient][kMaxConcurrentStreams]
252
+ /**
253
+ * From RFC-8441
254
+ * A sender MUST NOT send a SETTINGS_ENABLE_CONNECT_PROTOCOL parameter
255
+ * with the value of 0 after previously sending a value of 1.
256
+ */
257
+ // Note: Cannot be tested in Node, it does not supports disabling the extended CONNECT protocol once enabled
258
+ if (this[kRemoteSettings] === true && this[kEnableConnectProtocol] === true && settings.enableConnectProtocol === false) {
259
+ const err = new InformationalError('HTTP/2: Server disabled extended CONNECT protocol against RFC-8441')
260
+ this[kSocket][kError] = err
261
+ this[kClient][kOnError](err)
262
+ return
263
+ }
264
+
265
+ this[kEnableConnectProtocol] = settings.enableConnectProtocol ?? this[kEnableConnectProtocol]
266
+ this[kRemoteSettings] = true
267
+ this[kClient][kResume]()
268
+ }
269
+
270
+ function onHttp2SendPing (session) {
271
+ const state = session[kHTTP2SessionState]
272
+ if ((session.closed || session.destroyed) && state.ping.interval != null) {
273
+ clearInterval(state.ping.interval)
274
+ state.ping.interval = null
275
+ return
276
+ }
277
+
278
+ // If no ping sent, do nothing
279
+ session.ping(onPing.bind(session))
280
+
281
+ function onPing (err, duration) {
282
+ const client = this[kClient]
283
+ const socket = this[kClient]
284
+
285
+ if (err != null) {
286
+ const error = new InformationalError(`HTTP/2: "PING" errored - type ${err.message}`)
287
+ socket[kError] = error
288
+ client[kOnError](error)
289
+ } else {
290
+ client.emit('ping', duration)
291
+ }
292
+ }
293
+ }
294
+
295
+ function onHttp2SessionError (err) {
296
+ assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')
297
+
298
+ this[kSocket][kError] = err
299
+ this[kClient][kOnError](err)
300
+ }
301
+
302
+ function onHttp2FrameError (type, code, id) {
303
+ if (id === 0) {
304
+ const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)
305
+ this[kSocket][kError] = err
306
+ this[kClient][kOnError](err)
307
+ }
308
+ }
309
+
310
+ function onHttp2SessionEnd () {
311
+ const err = new SocketError('other side closed', util.getSocketInfo(this[kSocket]))
312
+ this.destroy(err)
313
+ util.destroy(this[kSocket], err)
314
+ }
315
+
316
+ /**
317
+ * This is the root cause of #3011
318
+ * We need to handle GOAWAY frames properly, and trigger the session close
319
+ * along with the socket right away
320
+ *
321
+ * @this {import('http2').ClientHttp2Session}
322
+ * @param {number} errorCode
323
+ */
324
+ // Backport of #5410 and #5569. HTTP/2 multiplexes, so requests complete out of
325
+ // order; advancing kRunningIdx blindly retired whichever request happened to
326
+ // sit at the head instead of the one that actually finished, which both lost
327
+ // requests and left phantom running slots behind.
328
+ function completeRequest (client, request, resetPendingIdx = false) {
329
+ const queue = client[kQueue]
330
+ const runningIdx = client[kRunningIdx]
331
+
332
+ // In-order completion: clear the request and advance without splicing.
333
+ // The client's resume loop compacts cleared slots once the index grows.
334
+ if (runningIdx < client[kPendingIdx] && queue[runningIdx] === request) {
335
+ queue[runningIdx] = null
336
+ client[kRunningIdx] = runningIdx + 1
337
+ return
338
+ }
339
+
340
+ const index = queue.indexOf(request, runningIdx)
341
+
342
+ if (index === -1 || index >= client[kPendingIdx]) {
343
+ return
344
+ }
345
+
346
+ queue.splice(index, 1)
347
+ client[kPendingIdx]--
348
+
349
+ if (resetPendingIdx && client[kPendingIdx] < client[kRunningIdx]) {
350
+ client[kPendingIdx] = client[kRunningIdx]
351
+ }
352
+ }
353
+
354
+ function onHttp2SessionGoAway (errorCode) {
355
+ // TODO(mcollina): Verify if GOAWAY implements the spec correctly:
356
+ // https://datatracker.ietf.org/doc/html/rfc7540#section-6.8
357
+ // Specifically, we do not verify the "valid" stream id.
358
+
359
+ const err = this[kError] || new SocketError(`HTTP/2: "GOAWAY" frame received with code ${errorCode}`, util.getSocketInfo(this[kSocket]))
360
+ const client = this[kClient]
361
+
362
+ client[kSocket] = null
363
+ client[kHTTPContext] = null
364
+
365
+ // this is an HTTP2 session
366
+ this.close()
367
+ this[kHTTP2Session] = null
368
+
369
+ util.destroy(this[kSocket], err)
370
+
371
+ // Fail head of pipeline.
372
+ if (client[kRunningIdx] < client[kQueue].length) {
373
+ const request = client[kQueue][client[kRunningIdx]]
374
+ client[kQueue][client[kRunningIdx]++] = null
375
+ if (request != null) {
376
+ util.errorRequest(client, request, err)
377
+ }
378
+ client[kPendingIdx] = client[kRunningIdx]
379
+ }
380
+
381
+ assert(client[kRunning] === 0)
382
+
383
+ client.emit('disconnect', client[kUrl], [client], err)
384
+ client.emit('connectionError', client[kUrl], [client], err)
385
+
386
+ client[kResume]()
387
+ }
388
+
389
+ function onHttp2SessionClose () {
390
+ const { [kClient]: client, [kHTTP2SessionState]: state } = this
391
+ const { [kSocket]: socket } = client
392
+
393
+ const err = this[kSocket][kError] || this[kError] || new SocketError('closed', util.getSocketInfo(socket))
394
+
395
+ client[kSocket] = null
396
+ client[kHTTPContext] = null
397
+
398
+ if (state.ping.interval != null) {
399
+ clearInterval(state.ping.interval)
400
+ state.ping.interval = null
401
+ }
402
+
403
+ if (client.destroyed) {
404
+ assert(client[kPending] === 0)
405
+
406
+ // Fail entire queue.
407
+ const requests = client[kQueue].splice(client[kRunningIdx])
408
+ for (let i = 0; i < requests.length; i++) {
409
+ const request = requests[i]
410
+ if (request != null) {
411
+ util.errorRequest(client, request, err)
412
+ }
413
+ }
414
+ }
415
+ }
416
+
417
+ function onHttp2SocketClose () {
418
+ const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))
419
+
420
+ const client = this[kHTTP2Session][kClient]
421
+
422
+ client[kSocket] = null
423
+ client[kHTTPContext] = null
424
+
425
+ if (this[kHTTP2Session] !== null) {
426
+ this[kHTTP2Session].destroy(err)
427
+ }
428
+
429
+ client[kPendingIdx] = client[kRunningIdx]
430
+
431
+ assert(client[kRunning] === 0)
432
+
433
+ client.emit('disconnect', client[kUrl], [client], err)
434
+
435
+ client[kResume]()
436
+ }
437
+
438
+ function onHttp2SocketError (err) {
439
+ assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')
440
+
441
+ this[kError] = err
442
+
443
+ this[kClient][kOnError](err)
444
+ }
445
+
446
+ function onHttp2SocketEnd () {
447
+ util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))
448
+ }
449
+
450
+ function onSocketClose () {
451
+ this[kClosed] = true
452
+ }
453
+
454
+ // https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2
455
+ function shouldSendContentLength (method) {
456
+ return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'
457
+ }
458
+
459
+ function writeH2 (client, request) {
460
+ // Time to the response headers, then time between body chunks. Using
461
+ // bodyTimeout for both made headersTimeout a no-op over HTTP/2.
462
+ const headersTimeout = request.headersTimeout ?? client[kHeadersTimeout]
463
+ const bodyTimeout = request.bodyTimeout ?? client[kBodyTimeout]
464
+ const session = client[kHTTP2Session]
465
+ const { method, path, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request
466
+ let { body } = request
467
+
468
+ if (upgrade != null && upgrade !== 'websocket') {
469
+ util.errorRequest(client, request, new InvalidArgumentError(`Custom upgrade "${upgrade}" not supported over HTTP/2`))
470
+ return false
471
+ }
472
+
473
+ const headers = {}
474
+ for (let n = 0; n < reqHeaders.length; n += 2) {
475
+ const key = reqHeaders[n + 0]
476
+ const val = reqHeaders[n + 1]
477
+
478
+ if (key === 'cookie') {
479
+ if (headers[key] != null) {
480
+ headers[key] = Array.isArray(headers[key]) ? (headers[key].push(val), headers[key]) : [headers[key], val]
481
+ } else {
482
+ headers[key] = val
483
+ }
484
+
485
+ continue
486
+ }
487
+
488
+ if (Array.isArray(val)) {
489
+ for (let i = 0; i < val.length; i++) {
490
+ if (headers[key]) {
491
+ headers[key] += `, ${val[i]}`
492
+ } else {
493
+ headers[key] = val[i]
494
+ }
495
+ }
496
+ } else if (headers[key]) {
497
+ headers[key] += `, ${val}`
498
+ } else {
499
+ headers[key] = val
500
+ }
501
+ }
502
+
503
+ /** @type {import('node:http2').ClientHttp2Stream} */
504
+ let stream = null
505
+
506
+ const { hostname, port } = client[kUrl]
507
+
508
+ headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ''}`
509
+ headers[HTTP2_HEADER_METHOD] = method
510
+
511
+ const abort = (err) => {
512
+ if (request.aborted || request.completed) {
513
+ return
514
+ }
515
+
516
+ err = err || new RequestAbortedError()
517
+
518
+ util.errorRequest(client, request, err)
519
+
520
+ if (stream != null) {
521
+ // Some chunks might still come after abort,
522
+ // let's ignore them
523
+ stream.removeAllListeners('data')
524
+
525
+ // On Abort, we close the stream to send RST_STREAM frame
526
+ stream.close()
527
+
528
+ // We move the running index to the next request
529
+ client[kOnError](err)
530
+ completeRequest(client, request)
531
+ client[kResume]()
532
+ }
533
+
534
+ // We do not destroy the socket as we can continue using the session
535
+ // the stream gets destroyed and the session remains to create new streams
536
+ util.destroy(body, err)
537
+ }
538
+
539
+ try {
540
+ // We are already connected, streams are pending.
541
+ // We can call on connect, and wait for abort
542
+ request.onConnect(abort)
543
+ } catch (err) {
544
+ util.errorRequest(client, request, err)
545
+ }
546
+
547
+ if (request.aborted) {
548
+ return false
549
+ }
550
+
551
+ if (upgrade || method === 'CONNECT') {
552
+ session.ref()
553
+
554
+ if (upgrade === 'websocket') {
555
+ // We cannot upgrade to websocket if extended CONNECT protocol is not supported
556
+ if (session[kEnableConnectProtocol] === false) {
557
+ util.errorRequest(client, request, new InformationalError('HTTP/2: Extended CONNECT protocol not supported by server'))
558
+ session.unref()
559
+ return false
560
+ }
561
+
562
+ // We force the method to CONNECT
563
+ // as per RFC-8441
564
+ // https://datatracker.ietf.org/doc/html/rfc8441#section-4
565
+ headers[HTTP2_HEADER_METHOD] = 'CONNECT'
566
+ headers[HTTP2_HEADER_PROTOCOL] = 'websocket'
567
+ // :path and :scheme headers must be omitted when sending CONNECT but set if extended-CONNECT
568
+ headers[HTTP2_HEADER_PATH] = path
569
+
570
+ if (protocol === 'ws:' || protocol === 'wss:') {
571
+ headers[HTTP2_HEADER_SCHEME] = protocol === 'ws:' ? 'http' : 'https'
572
+ } else {
573
+ headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'
574
+ }
575
+
576
+ stream = session.request(headers, { endStream: false, signal })
577
+ stream[kHTTP2Stream] = true
578
+ ++session[kOpenStreams]
579
+
580
+ stream.once('response', (headers, _flags) => {
581
+ const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers
582
+
583
+ try {
584
+ request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)
585
+ } catch (err) {
586
+ abort(err)
587
+ return
588
+ }
589
+ completeRequest(client, request)
590
+ })
591
+
592
+ stream.on('error', () => {
593
+ if (stream.rstCode === NGHTTP2_REFUSED_STREAM || stream.rstCode === NGHTTP2_CANCEL) {
594
+ // NGHTTP2_REFUSED_STREAM (7) or NGHTTP2_CANCEL (8)
595
+ // We do not treat those as errors as the server might
596
+ // not support websockets and refuse the stream
597
+ abort(new InformationalError(`HTTP/2: "stream error" received - code ${stream.rstCode}`))
598
+ }
599
+ })
600
+
601
+ stream.once('close', () => {
602
+ session[kOpenStreams] -= 1
603
+ if (session[kOpenStreams] === 0) session.unref()
604
+ })
605
+
606
+ stream.setTimeout(headersTimeout)
607
+ return true
608
+ }
609
+
610
+ // TODO: consolidate once we support CONNECT properly
611
+ // NOTE: We are already connected, streams are pending, first request
612
+ // will create a new stream. We trigger a request to create the stream and wait until
613
+ // `ready` event is triggered
614
+ // We disabled endStream to allow the user to write to the stream
615
+ stream = session.request(headers, { endStream: false, signal })
616
+ stream[kHTTP2Stream] = true
617
+ ++session[kOpenStreams]
618
+ stream.on('response', headers => {
619
+ const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers
620
+
621
+ try {
622
+ request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)
623
+ } catch (err) {
624
+ abort(err)
625
+ return
626
+ }
627
+ completeRequest(client, request)
628
+ })
629
+ stream.on('error', abort)
630
+ stream.once('close', () => {
631
+ session[kOpenStreams] -= 1
632
+ if (session[kOpenStreams] === 0) session.unref()
633
+ })
634
+ stream.setTimeout(headersTimeout)
635
+
636
+ return true
637
+ }
638
+
639
+ // https://tools.ietf.org/html/rfc7540#section-8.3
640
+ // :path and :scheme headers must be omitted when sending CONNECT
641
+ headers[HTTP2_HEADER_PATH] = path
642
+ headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'
643
+
644
+ // https://tools.ietf.org/html/rfc7231#section-4.3.1
645
+ // https://tools.ietf.org/html/rfc7231#section-4.3.2
646
+ // https://tools.ietf.org/html/rfc7231#section-4.3.5
647
+
648
+ // Sending a payload body on a request that does not
649
+ // expect it can cause undefined behavior on some
650
+ // servers and corrupt connection state. Do not
651
+ // re-use the connection for further requests.
652
+
653
+ const expectsPayload = (
654
+ method === 'PUT' ||
655
+ method === 'POST' ||
656
+ method === 'PATCH'
657
+ )
658
+
659
+ if (body && typeof body.read === 'function') {
660
+ // Try to read EOF in order to get length.
661
+ body.read(0)
662
+ }
663
+
664
+ let contentLength = util.bodyLength(body)
665
+
666
+ if (util.isFormDataLike(body)) {
667
+ extractBody ??= require('../web/fetch/body.js').extractBody
668
+
669
+ const [bodyStream, contentType] = extractBody(body)
670
+ headers['content-type'] = contentType
671
+
672
+ body = bodyStream.stream
673
+ contentLength = bodyStream.length
674
+ }
675
+
676
+ if (contentLength == null) {
677
+ contentLength = request.contentLength
678
+ }
679
+
680
+ if (!expectsPayload) {
681
+ // https://tools.ietf.org/html/rfc7230#section-3.3.2
682
+ // A user agent SHOULD NOT send a Content-Length header field when
683
+ // the request message does not contain a payload body and the method
684
+ // semantics do not anticipate such a body.
685
+ // And for methods that don't expect a payload, omit Content-Length.
686
+ contentLength = null
687
+ }
688
+
689
+ // https://github.com/nodejs/undici/issues/2046
690
+ // A user agent may send a Content-Length header with 0 value, this should be allowed.
691
+ if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) {
692
+ if (client[kStrictContentLength]) {
693
+ util.errorRequest(client, request, new RequestContentLengthMismatchError())
694
+ return false
695
+ }
696
+
697
+ process.emitWarning(new RequestContentLengthMismatchError())
698
+ }
699
+
700
+ if (contentLength != null) {
701
+ assert(body || contentLength === 0, 'no body must not have content length')
702
+ headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`
703
+ }
704
+
705
+ session.ref()
706
+
707
+ if (channels.sendHeaders.hasSubscribers) {
708
+ let header = ''
709
+ for (const key in headers) {
710
+ header += `${key}: ${headers[key]}\r\n`
711
+ }
712
+ channels.sendHeaders.publish({ request, headers: header, socket: session[kSocket] })
713
+ }
714
+
715
+ // TODO(metcoder95): add support for sending trailers
716
+ const shouldEndStream = method === 'GET' || method === 'HEAD' || body === null
717
+ if (expectContinue) {
718
+ headers[HTTP2_HEADER_EXPECT] = '100-continue'
719
+ stream = session.request(headers, { endStream: shouldEndStream, signal })
720
+ stream[kHTTP2Stream] = true
721
+
722
+ stream.once('continue', writeBodyH2)
723
+ } else {
724
+ stream = session.request(headers, {
725
+ endStream: shouldEndStream,
726
+ signal
727
+ })
728
+ stream[kHTTP2Stream] = true
729
+
730
+ writeBodyH2()
731
+ }
732
+
733
+ // Increment counter as we have new streams open
734
+ ++session[kOpenStreams]
735
+ stream.setTimeout(headersTimeout)
736
+
737
+ // Track whether we received a response (headers)
738
+ let responseReceived = false
739
+
740
+ stream.once('response', headers => {
741
+ const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers
742
+ request.onResponseStarted()
743
+ responseReceived = true
744
+ stream.setTimeout(bodyTimeout)
745
+
746
+ // Due to the stream nature, it is possible we face a race condition
747
+ // where the stream has been assigned, but the request has been aborted
748
+ // the request remains in-flight and headers hasn't been received yet
749
+ // for those scenarios, best effort is to destroy the stream immediately
750
+ // as there's no value to keep it open.
751
+ if (request.aborted) {
752
+ stream.removeAllListeners('data')
753
+ return
754
+ }
755
+
756
+ if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), '') === false) {
757
+ stream.pause()
758
+ }
759
+
760
+ stream.on('data', (chunk) => {
761
+ if (request.aborted || request.completed) {
762
+ return
763
+ }
764
+
765
+ if (request.onData(chunk) === false) {
766
+ stream.pause()
767
+ }
768
+ })
769
+ })
770
+
771
+ stream.once('end', () => {
772
+ stream.removeAllListeners('data')
773
+ // If we received a response, this is a normal completion
774
+ if (responseReceived) {
775
+ if (!request.aborted && !request.completed) {
776
+ request.onComplete({})
777
+ }
778
+
779
+ completeRequest(client, request)
780
+ client[kResume]()
781
+ } else {
782
+ // Stream ended without receiving a response - this is an error
783
+ // (e.g., server destroyed the stream before sending headers)
784
+ abort(new InformationalError('HTTP/2: stream half-closed (remote)'))
785
+ completeRequest(client, request, true)
786
+ client[kResume]()
787
+ }
788
+ })
789
+
790
+ stream.once('close', () => {
791
+ stream.removeAllListeners('data')
792
+ session[kOpenStreams] -= 1
793
+ if (session[kOpenStreams] === 0) {
794
+ session.unref()
795
+ }
796
+
797
+ // A stream can close without ever emitting 'end' or 'error': a peer's
798
+ // RST_STREAM(CANCEL) received before the response is reported by Node as a
799
+ // bare 'close', and destroying the stream unenrolls its timeout, so no
800
+ // 'timeout' follows either. Nothing else would ever settle this request.
801
+ if (!request.aborted && !request.completed) {
802
+ abort(new InformationalError('HTTP/2: stream closed before the response was complete'))
803
+ }
804
+ })
805
+
806
+ stream.once('error', function (err) {
807
+ stream.removeAllListeners('data')
808
+ abort(err)
809
+ })
810
+
811
+ stream.once('frameError', (type, code) => {
812
+ stream.removeAllListeners('data')
813
+ abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`))
814
+ })
815
+
816
+ stream.on('aborted', () => {
817
+ stream.removeAllListeners('data')
818
+ })
819
+
820
+ stream.on('timeout', () => {
821
+ const err = responseReceived
822
+ ? new BodyTimeoutError(`HTTP/2: "body timeout after ${bodyTimeout}"`)
823
+ : new HeadersTimeoutError(`HTTP/2: "headers timeout after ${headersTimeout}"`)
824
+ stream.removeAllListeners('data')
825
+ session[kOpenStreams] -= 1
826
+
827
+ if (session[kOpenStreams] === 0) {
828
+ session.unref()
829
+ }
830
+
831
+ abort(err)
832
+ })
833
+
834
+ stream.once('trailers', trailers => {
835
+ if (request.aborted || request.completed) {
836
+ return
837
+ }
838
+
839
+ stream.removeAllListeners('data')
840
+ request.onComplete(trailers)
841
+ })
842
+
843
+ return true
844
+
845
+ function writeBodyH2 () {
846
+ if (!body || contentLength === 0) {
847
+ writeBuffer(
848
+ abort,
849
+ stream,
850
+ null,
851
+ client,
852
+ request,
853
+ client[kSocket],
854
+ contentLength,
855
+ expectsPayload
856
+ )
857
+ } else if (util.isBuffer(body)) {
858
+ writeBuffer(
859
+ abort,
860
+ stream,
861
+ body,
862
+ client,
863
+ request,
864
+ client[kSocket],
865
+ contentLength,
866
+ expectsPayload
867
+ )
868
+ } else if (util.isBlobLike(body)) {
869
+ if (typeof body.stream === 'function') {
870
+ writeIterable(
871
+ abort,
872
+ stream,
873
+ body.stream(),
874
+ client,
875
+ request,
876
+ client[kSocket],
877
+ contentLength,
878
+ expectsPayload
879
+ )
880
+ } else {
881
+ writeBlob(
882
+ abort,
883
+ stream,
884
+ body,
885
+ client,
886
+ request,
887
+ client[kSocket],
888
+ contentLength,
889
+ expectsPayload
890
+ )
891
+ }
892
+ } else if (util.isStream(body)) {
893
+ writeStream(
894
+ abort,
895
+ client[kSocket],
896
+ expectsPayload,
897
+ stream,
898
+ body,
899
+ client,
900
+ request,
901
+ contentLength
902
+ )
903
+ } else if (util.isIterable(body)) {
904
+ writeIterable(
905
+ abort,
906
+ stream,
907
+ body,
908
+ client,
909
+ request,
910
+ client[kSocket],
911
+ contentLength,
912
+ expectsPayload
913
+ )
914
+ } else {
915
+ assert(false)
916
+ }
917
+ }
918
+ }
919
+
920
+ function writeBuffer (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {
921
+ try {
922
+ if (body != null && util.isBuffer(body)) {
923
+ assert(contentLength === body.byteLength, 'buffer body must have content length')
924
+ h2stream.cork()
925
+ h2stream.write(body)
926
+ h2stream.uncork()
927
+ h2stream.end()
928
+
929
+ request.onBodySent(body)
930
+ }
931
+
932
+ if (!expectsPayload) {
933
+ socket[kReset] = true
934
+ }
935
+
936
+ request.onRequestSent()
937
+ client[kResume]()
938
+ } catch (error) {
939
+ abort(error)
940
+ }
941
+ }
942
+
943
+ function writeStream (abort, socket, expectsPayload, h2stream, body, client, request, contentLength) {
944
+ assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')
945
+
946
+ // For HTTP/2, is enough to pipe the stream
947
+ const pipe = pipeline(
948
+ body,
949
+ h2stream,
950
+ (err) => {
951
+ if (err) {
952
+ util.destroy(pipe, err)
953
+ abort(err)
954
+ } else {
955
+ util.removeAllListeners(pipe)
956
+ request.onRequestSent()
957
+
958
+ if (!expectsPayload) {
959
+ socket[kReset] = true
960
+ }
961
+
962
+ client[kResume]()
963
+ }
964
+ }
965
+ )
966
+
967
+ util.addListener(pipe, 'data', onPipeData)
968
+
969
+ function onPipeData (chunk) {
970
+ request.onBodySent(chunk)
971
+ }
972
+ }
973
+
974
+ async function writeBlob (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {
975
+ assert(contentLength === body.size, 'blob body must have content length')
976
+
977
+ try {
978
+ if (contentLength != null && contentLength !== body.size) {
979
+ throw new RequestContentLengthMismatchError()
980
+ }
981
+
982
+ const buffer = Buffer.from(await body.arrayBuffer())
983
+
984
+ h2stream.cork()
985
+ h2stream.write(buffer)
986
+ h2stream.uncork()
987
+ h2stream.end()
988
+
989
+ request.onBodySent(buffer)
990
+ request.onRequestSent()
991
+
992
+ if (!expectsPayload) {
993
+ socket[kReset] = true
994
+ }
995
+
996
+ client[kResume]()
997
+ } catch (err) {
998
+ abort(err)
999
+ }
1000
+ }
1001
+
1002
+ async function writeIterable (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {
1003
+ assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')
1004
+
1005
+ let callback = null
1006
+ function onDrain () {
1007
+ if (callback) {
1008
+ const cb = callback
1009
+ callback = null
1010
+ cb()
1011
+ }
1012
+ }
1013
+
1014
+ const waitForDrain = () => new Promise((resolve, reject) => {
1015
+ assert(callback === null)
1016
+
1017
+ if (socket[kError]) {
1018
+ reject(socket[kError])
1019
+ } else {
1020
+ callback = resolve
1021
+ }
1022
+ })
1023
+
1024
+ h2stream
1025
+ .on('close', onDrain)
1026
+ .on('drain', onDrain)
1027
+
1028
+ try {
1029
+ // It's up to the user to somehow abort the async iterable.
1030
+ for await (const chunk of body) {
1031
+ if (socket[kError]) {
1032
+ throw socket[kError]
1033
+ }
1034
+
1035
+ const res = h2stream.write(chunk)
1036
+ request.onBodySent(chunk)
1037
+ if (!res) {
1038
+ await waitForDrain()
1039
+ }
1040
+ }
1041
+
1042
+ h2stream.end()
1043
+
1044
+ request.onRequestSent()
1045
+
1046
+ if (!expectsPayload) {
1047
+ socket[kReset] = true
1048
+ }
1049
+
1050
+ client[kResume]()
1051
+ } catch (err) {
1052
+ abort(err)
1053
+ } finally {
1054
+ h2stream
1055
+ .off('close', onDrain)
1056
+ .off('drain', onDrain)
1057
+ }
1058
+ }
1059
+
1060
+ module.exports = connectH2