@openclaw/slack 2026.9.6 → 2026.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/assets/icon.png +0 -0
  2. package/dist/.setup/{account-inspect-DP1Bcwj4.mjs → account-inspect-DWBXpER6.mjs} +1 -1
  3. package/dist/.setup/{accounts-BBHvg0pY.mjs → accounts-D_N9IqNA.mjs} +23 -1
  4. package/dist/.setup/{action-runtime-B01d85zt.mjs → action-runtime-DfWvuiZd.mjs} +26 -41
  5. package/dist/.setup/action-runtime.runtime-Ck4bAWOX.mjs +2 -0
  6. package/dist/.setup/{actions-DKCtBgCI.mjs → actions-Df0CzcDl.mjs} +88 -175
  7. package/dist/.setup/{approval-handler.runtime-DMszKn_7.mjs → approval-handler.runtime-Ed6Sw5VK.mjs} +37 -47
  8. package/dist/.setup/{approval-message-updates-Tb_qRokK.mjs → approval-message-updates-BadvtA7R.mjs} +1 -2
  9. package/dist/.setup/{channel-CErYZ5zw.mjs → channel-C7bgPSTE.mjs} +181 -273
  10. package/dist/.setup/channel-meta-C443t-lI.mjs +27 -0
  11. package/dist/.setup/{channel-type-Dxk8VJUb.mjs → channel-type-ClOttrZ5.mjs} +13 -21
  12. package/dist/.setup/{channel.setup-BVoUtdPn.mjs → channel.setup-Dh2jzAjN.mjs} +35 -42
  13. package/dist/.setup/{config-schema-CyL279e7.mjs → config-schema-BZCxmHKG.mjs} +24 -21
  14. package/dist/.setup/{directory-config-CQTSH45W.mjs → directory-config-BOUWH3hR.mjs} +7 -10
  15. package/dist/.setup/{directory-live-BCcj89QV.mjs → directory-live-B2O4B_Ho.mjs} +9 -21
  16. package/dist/.setup/doctor-contract-CRN1Z_c7.mjs +342 -0
  17. package/dist/.setup/{message-tool-api-C0PTFaNV.mjs → message-tool-api-Cu4lwlGy.mjs} +34 -48
  18. package/dist/.setup/{provider-C-jPaGt2.mjs → monitor-BPVfkumU.mjs} +2181 -2693
  19. package/dist/.setup/{outbound-adapter-A7Wdn8ZT.mjs → outbound-adapter-Bv48XUjq.mjs} +10 -21
  20. package/dist/.setup/{pipeline.runtime-BlPOexmJ.mjs → pipeline.runtime-B1H63Frf.mjs} +311 -457
  21. package/dist/.setup/{plugin-routes-C3X0eVaK.mjs → plugin-routes-B8tooDLj.mjs} +1 -1
  22. package/dist/.setup/{policy-BApW53pI.mjs → policy-D-jfM174.mjs} +5 -5
  23. package/dist/.setup/{probe-DiYIMPJo.mjs → probe-B2Y9qc_z.mjs} +101 -39
  24. package/dist/.setup/{registry-bbjH7IHX.mjs → registry-CIbMfuf8.mjs} +6 -2
  25. package/dist/.setup/{relay-source-DfOnjJTE.mjs → relay-source-BpKdjsll.mjs} +10 -12
  26. package/dist/.setup/{replies-BBAJxUOQ.mjs → replies-BAnUtr2f.mjs} +16 -76
  27. package/dist/.setup/{reply-blocks-Bm8kf6mK.mjs → reply-blocks-SE1kTE3I.mjs} +27 -154
  28. package/dist/.setup/{resolve-channels-BXbMBbJD.mjs → resolve-channels-XXBn8UU_.mjs} +4 -5
  29. package/dist/.setup/{resolve-users-65WqvIqD.mjs → resolve-users-DW0ngD03.mjs} +20 -22
  30. package/dist/.setup/{scopes-h3YB-mMs.mjs → scopes-CasuDvaa.mjs} +6 -17
  31. package/dist/.setup/{secret-contract-DxmvbxBF.mjs → secret-contract-BaZcu6P_.mjs} +15 -20
  32. package/dist/.setup/{secret-contract-api-D9UfYujm.mjs → secret-contract-api-Dp6290Vg.mjs} +1 -1
  33. package/dist/.setup/{security-audit-BypHqcq5.mjs → security-audit-BqDc-6VL.mjs} +1 -1
  34. package/dist/.setup/{send-Cp6omkOg.mjs → send-BOVLQi3n.mjs} +84 -171
  35. package/dist/.setup/{session-status-Cf7AvWOt.mjs → session-status-DscajIsd.mjs} +315 -238
  36. package/dist/.setup/{setup-plugin-api-dLPkL06L.mjs → setup-plugin-api-DTtbTKNk.mjs} +1 -1
  37. package/dist/.setup/{setup-surface-D3DLcCxu.mjs → setup-surface-Dn7QgWRE.mjs} +24 -56
  38. package/dist/.setup/{shared-CJ3arAFL.mjs → shared-qau-uDGl.mjs} +30 -56
  39. package/dist/.setup/{slash-dispatch.runtime-HFy_XvyO.mjs → slash-dispatch.runtime--AEzLVBF.mjs} +1 -1
  40. package/dist/.setup/{streaming-compat-B-e0mqM0.mjs → streaming-compat-C5Wut626.mjs} +31 -8
  41. package/dist/.setup/{target-parsing-DEsPjngB.mjs → target-parsing-FFE26kOV.mjs} +1 -7
  42. package/dist/.setup/{targets-Cku2KCvg.mjs → targets-C6LZQL1Q.mjs} +1 -1
  43. package/dist/.setup/{thread-ts-CukseRVL.mjs → thread-ts-Cvt7WD6B.mjs} +0 -1
  44. package/dist/account-inspect-api.js +1 -1
  45. package/dist/api.js +18 -17
  46. package/dist/channel-config-api.js +1 -1
  47. package/dist/channel-plugin-api.js +1 -1
  48. package/dist/directory-contract-api.js +1 -1
  49. package/dist/doctor-contract-api.js +1 -1
  50. package/dist/http-routes-api.js +1 -1
  51. package/dist/index.js +1 -1
  52. package/dist/message-tool-api.js +1 -1
  53. package/dist/runtime-api.js +11 -12
  54. package/dist/secret-contract-api.js +1 -1
  55. package/dist/security-contract-api.js +1 -1
  56. package/dist/setup-entry.js +2 -2
  57. package/dist/setup-plugin-api.js +1 -1
  58. package/node_modules/@slack/bolt/node_modules/@types/node/README.md +1 -1
  59. package/node_modules/@slack/bolt/node_modules/@types/node/child_process.d.ts +1 -1
  60. package/node_modules/@slack/bolt/node_modules/@types/node/crypto.d.ts +20 -8
  61. package/node_modules/@slack/bolt/node_modules/@types/node/ffi.d.ts +14 -0
  62. package/node_modules/@slack/bolt/node_modules/@types/node/http2.d.ts +3 -2
  63. package/node_modules/@slack/bolt/node_modules/@types/node/net.d.ts +16 -4
  64. package/node_modules/@slack/bolt/node_modules/@types/node/package.json +2 -2
  65. package/node_modules/@slack/bolt/node_modules/@types/node/process.d.ts +1 -0
  66. package/node_modules/@slack/bolt/node_modules/@types/node/quic.d.ts +39 -1
  67. package/node_modules/@slack/bolt/node_modules/@types/node/stream/iter.d.ts +9 -12
  68. package/node_modules/@slack/bolt/node_modules/@types/node/test/reporters.d.ts +1 -0
  69. package/node_modules/@slack/bolt/node_modules/@types/node/test.d.ts +72 -0
  70. package/node_modules/@slack/bolt/node_modules/@types/node/tls.d.ts +14 -10
  71. package/node_modules/@slack/bolt/node_modules/@types/node/vm.d.ts +2 -1
  72. package/node_modules/@slack/bolt/node_modules/@types/node/worker_threads.d.ts +4 -1
  73. package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
  74. package/node_modules/@slack/web-api/node_modules/@types/node/child_process.d.ts +1 -1
  75. package/node_modules/@slack/web-api/node_modules/@types/node/crypto.d.ts +20 -8
  76. package/node_modules/@slack/web-api/node_modules/@types/node/ffi.d.ts +14 -0
  77. package/node_modules/@slack/web-api/node_modules/@types/node/http2.d.ts +3 -2
  78. package/node_modules/@slack/web-api/node_modules/@types/node/net.d.ts +16 -4
  79. package/node_modules/@slack/web-api/node_modules/@types/node/package.json +2 -2
  80. package/node_modules/@slack/web-api/node_modules/@types/node/process.d.ts +1 -0
  81. package/node_modules/@slack/web-api/node_modules/@types/node/quic.d.ts +39 -1
  82. package/node_modules/@slack/web-api/node_modules/@types/node/stream/iter.d.ts +9 -12
  83. package/node_modules/@slack/web-api/node_modules/@types/node/test/reporters.d.ts +1 -0
  84. package/node_modules/@slack/web-api/node_modules/@types/node/test.d.ts +72 -0
  85. package/node_modules/@slack/web-api/node_modules/@types/node/tls.d.ts +14 -10
  86. package/node_modules/@slack/web-api/node_modules/@types/node/vm.d.ts +2 -1
  87. package/node_modules/@slack/web-api/node_modules/@types/node/worker_threads.d.ts +4 -1
  88. package/node_modules/get-east-asian-width/index.js +8 -3
  89. package/node_modules/get-east-asian-width/lookup-data.js +1 -1
  90. package/node_modules/get-east-asian-width/lookup.js +4 -4
  91. package/node_modules/get-east-asian-width/package.json +1 -1
  92. package/node_modules/typebox/build/compile/code.mjs +1 -2
  93. package/node_modules/typebox/build/compile/validator.mjs +5 -1
  94. package/node_modules/typebox/build/format/iri.mjs +16 -9
  95. package/node_modules/typebox/build/guard/emit.mjs +2 -2
  96. package/node_modules/typebox/build/guard/guard.d.mts +7 -5
  97. package/node_modules/typebox/build/guard/guard.mjs +14 -9
  98. package/node_modules/typebox/build/guard/index.mjs +6 -0
  99. package/node_modules/typebox/build/guard/unicode/unicode.d.mts +6 -0
  100. package/node_modules/typebox/build/guard/unicode/unicode.mjs +35 -0
  101. package/node_modules/typebox/build/guard/{string.mjs → unicode/unicode_segment.mjs} +16 -19
  102. package/node_modules/typebox/build/schema/build.mjs +2 -3
  103. package/node_modules/typebox/build/schema/engine/_pathing.d.mts +1 -0
  104. package/node_modules/typebox/build/schema/engine/_pathing.mjs +11 -0
  105. package/node_modules/typebox/build/schema/engine/_refine.mjs +13 -5
  106. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +2 -1
  107. package/node_modules/typebox/build/schema/engine/dependencies.mjs +2 -1
  108. package/node_modules/typebox/build/schema/engine/dependentSchemas.mjs +2 -1
  109. package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +1 -1
  110. package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +2 -2
  111. package/node_modules/typebox/build/schema/engine/format.mjs +9 -2
  112. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +3 -2
  113. package/node_modules/typebox/build/schema/engine/properties.mjs +3 -2
  114. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -1
  115. package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +1 -1
  116. package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +2 -2
  117. package/node_modules/typebox/build/schema/engine/ref.d.mts +1 -1
  118. package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
  119. package/node_modules/typebox/build/schema/engine/schema.mjs +24 -24
  120. package/node_modules/typebox/build/schema/parse.mjs +3 -0
  121. package/node_modules/typebox/build/schema/pointer/pointer.d.mts +1 -6
  122. package/node_modules/typebox/build/schema/pointer/pointer.mjs +47 -64
  123. package/node_modules/typebox/build/system/settings/internal.d.mts +2 -0
  124. package/node_modules/typebox/build/system/settings/internal.mjs +20 -0
  125. package/node_modules/typebox/build/system/settings/settings.d.mts +11 -0
  126. package/node_modules/typebox/build/system/settings/settings.mjs +14 -0
  127. package/node_modules/typebox/build/type/extends/inference.d.mts +1 -1
  128. package/node_modules/typebox/build/type/extends/inference.mjs +15 -2
  129. package/node_modules/typebox/build/type/extends/tuple.d.mts +2 -1
  130. package/node_modules/typebox/build/type/extends/tuple.mjs +21 -1
  131. package/node_modules/typebox/build/value/parse/parse.mjs +10 -4
  132. package/node_modules/typebox/package.json +1 -1
  133. package/node_modules/typebox/readme.md +3 -1
  134. package/node_modules/undici/README.md +81 -25
  135. package/node_modules/undici/docs/docs/api/Agent.md +249 -42
  136. package/node_modules/undici/docs/docs/api/BalancedPool.md +246 -48
  137. package/node_modules/undici/docs/docs/api/CacheStorage.md +171 -13
  138. package/node_modules/undici/docs/docs/api/CacheStore.md +294 -98
  139. package/node_modules/undici/docs/docs/api/Client.md +407 -162
  140. package/node_modules/undici/docs/docs/api/ClientStats.md +80 -14
  141. package/node_modules/undici/docs/docs/api/Connector.md +118 -35
  142. package/node_modules/undici/docs/docs/api/ContentType.md +65 -25
  143. package/node_modules/undici/docs/docs/api/Cookies.md +122 -71
  144. package/node_modules/undici/docs/docs/api/Debug.md +34 -18
  145. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +364 -164
  146. package/node_modules/undici/docs/docs/api/Dispatcher.md +490 -1055
  147. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +105 -93
  148. package/node_modules/undici/docs/docs/api/Errors.md +503 -28
  149. package/node_modules/undici/docs/docs/api/EventSource.md +326 -13
  150. package/node_modules/undici/docs/docs/api/Fetch.md +681 -30
  151. package/node_modules/undici/docs/docs/api/GlobalInstallation.md +78 -96
  152. package/node_modules/undici/docs/docs/api/H2CClient.md +298 -176
  153. package/node_modules/undici/docs/docs/api/Interceptors.md +418 -0
  154. package/node_modules/undici/docs/docs/api/MockAgent.md +333 -314
  155. package/node_modules/undici/docs/docs/api/MockCallHistory.md +272 -98
  156. package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +189 -26
  157. package/node_modules/undici/docs/docs/api/MockClient.md +151 -33
  158. package/node_modules/undici/docs/docs/api/MockErrors.md +56 -5
  159. package/node_modules/undici/docs/docs/api/MockPool.md +321 -258
  160. package/node_modules/undici/docs/docs/api/Pool.md +236 -41
  161. package/node_modules/undici/docs/docs/api/PoolStats.md +119 -13
  162. package/node_modules/undici/docs/docs/api/ProxyAgent.md +179 -160
  163. package/node_modules/undici/docs/docs/api/RedirectHandler.md +238 -55
  164. package/node_modules/undici/docs/docs/api/RetryAgent.md +113 -27
  165. package/node_modules/undici/docs/docs/api/RetryHandler.md +161 -79
  166. package/node_modules/undici/docs/docs/api/RoundRobinPool.md +166 -72
  167. package/node_modules/undici/docs/docs/api/SnapshotAgent.md +262 -517
  168. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +177 -196
  169. package/node_modules/undici/docs/docs/api/Util.md +68 -11
  170. package/node_modules/undici/docs/docs/api/WebSocket.md +475 -80
  171. package/node_modules/undici/docs/docs/api/api-lifecycle.md +100 -32
  172. package/node_modules/undici/docs/docs/best-practices/client-certificate.md +2 -0
  173. package/node_modules/undici/docs/docs/best-practices/crawling.md +3 -1
  174. package/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +233 -0
  175. package/node_modules/undici/docs/docs/best-practices/mocking-request.md +9 -7
  176. package/node_modules/undici/docs/docs/best-practices/proxy.md +3 -1
  177. package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +10 -8
  178. package/node_modules/undici/docs/docs/best-practices/writing-tests.md +2 -0
  179. package/node_modules/undici/docs/docs/getting-started.md +281 -0
  180. package/node_modules/undici/docs/docs/index.md +784 -0
  181. package/node_modules/undici/docs/docs/site.json +125 -0
  182. package/node_modules/undici/docs/docs/type-map.json +79 -0
  183. package/node_modules/undici/index.js +4 -2
  184. package/node_modules/undici/lib/api/api-connect.js +13 -11
  185. package/node_modules/undici/lib/api/api-pipeline.js +26 -13
  186. package/node_modules/undici/lib/api/api-request.js +51 -21
  187. package/node_modules/undici/lib/api/api-stream.js +81 -20
  188. package/node_modules/undici/lib/api/api-upgrade.js +21 -11
  189. package/node_modules/undici/lib/api/readable.js +45 -9
  190. package/node_modules/undici/lib/cache/memory-cache-store.js +3 -3
  191. package/node_modules/undici/lib/cache/sqlite-cache-store.js +3 -1
  192. package/node_modules/undici/lib/core/connect.js +46 -7
  193. package/node_modules/undici/lib/core/constants.js +1 -24
  194. package/node_modules/undici/lib/core/errors.js +22 -2
  195. package/node_modules/undici/lib/core/request.js +100 -18
  196. package/node_modules/undici/lib/core/symbols.js +4 -0
  197. package/node_modules/undici/lib/core/util.js +105 -48
  198. package/node_modules/undici/lib/dispatcher/agent.js +51 -32
  199. package/node_modules/undici/lib/dispatcher/balanced-pool.js +23 -27
  200. package/node_modules/undici/lib/dispatcher/client-h1.js +86 -24
  201. package/node_modules/undici/lib/dispatcher/client-h2.js +1091 -361
  202. package/node_modules/undici/lib/dispatcher/client.js +109 -36
  203. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +19 -6
  204. package/node_modules/undici/lib/dispatcher/dispatcher.js +15 -5
  205. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +110 -0
  206. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +37 -8
  207. package/node_modules/undici/lib/dispatcher/h2c-client.js +4 -4
  208. package/node_modules/undici/lib/dispatcher/pool-base.js +28 -10
  209. package/node_modules/undici/lib/dispatcher/pool.js +30 -5
  210. package/node_modules/undici/lib/dispatcher/proxy-agent.js +95 -19
  211. package/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
  212. package/node_modules/undici/lib/dispatcher/round-robin-pool.js +32 -10
  213. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +153 -63
  214. package/node_modules/undici/lib/global.js +37 -14
  215. package/node_modules/undici/lib/handler/cache-handler.js +49 -7
  216. package/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
  217. package/node_modules/undici/lib/handler/decorator-handler.js +8 -3
  218. package/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
  219. package/node_modules/undici/lib/handler/redirect-handler.js +66 -66
  220. package/node_modules/undici/lib/handler/retry-handler.js +191 -50
  221. package/node_modules/undici/lib/interceptor/cache.js +75 -25
  222. package/node_modules/undici/lib/interceptor/decompress.js +5 -2
  223. package/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
  224. package/node_modules/undici/lib/interceptor/dns.js +12 -1
  225. package/node_modules/undici/lib/interceptor/redirect.js +3 -3
  226. package/node_modules/undici/lib/llhttp/llhttp-wasm.js +1 -1
  227. package/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +1 -1
  228. package/node_modules/undici/lib/mock/mock-agent.js +21 -9
  229. package/node_modules/undici/lib/mock/mock-call-history.js +1 -1
  230. package/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
  231. package/node_modules/undici/lib/mock/mock-utils.js +281 -47
  232. package/node_modules/undici/lib/mock/snapshot-agent.js +25 -7
  233. package/node_modules/undici/lib/mock/snapshot-recorder.js +38 -3
  234. package/node_modules/undici/lib/util/cache.js +92 -10
  235. package/node_modules/undici/lib/util/runtime-features.js +3 -34
  236. package/node_modules/undici/lib/web/cache/cache.js +6 -8
  237. package/node_modules/undici/lib/web/cookies/parse.js +150 -146
  238. package/node_modules/undici/lib/web/cookies/util.js +1 -1
  239. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
  240. package/node_modules/undici/lib/web/eventsource/eventsource.js +20 -21
  241. package/node_modules/undici/lib/web/eventsource/util.js +32 -1
  242. package/node_modules/undici/lib/web/fetch/body.js +48 -10
  243. package/node_modules/undici/lib/web/fetch/constants.js +1 -1
  244. package/node_modules/undici/lib/web/fetch/formdata.js +21 -2
  245. package/node_modules/undici/lib/web/fetch/index.js +242 -223
  246. package/node_modules/undici/lib/web/fetch/request.js +35 -6
  247. package/node_modules/undici/lib/web/fetch/response.js +1 -3
  248. package/node_modules/undici/lib/web/fetch/util.js +10 -2
  249. package/node_modules/undici/lib/web/webidl/index.js +5 -7
  250. package/node_modules/undici/lib/web/websocket/frame.js +1 -7
  251. package/node_modules/undici/lib/web/websocket/receiver.js +1 -1
  252. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +10 -10
  253. package/node_modules/undici/lib/web/websocket/websocket.js +25 -3
  254. package/node_modules/undici/package.json +10 -10
  255. package/node_modules/undici/types/agent.d.ts +0 -2
  256. package/node_modules/undici/types/client.d.ts +69 -24
  257. package/node_modules/undici/types/connector.d.ts +1 -0
  258. package/node_modules/undici/types/cookies.d.ts +1 -1
  259. package/node_modules/undici/types/dispatcher.d.ts +8 -30
  260. package/node_modules/undici/types/dispatcher1-wrapper.d.ts +7 -0
  261. package/node_modules/undici/types/errors.d.ts +10 -0
  262. package/node_modules/undici/types/fetch.d.ts +5 -1
  263. package/node_modules/undici/types/formdata.d.ts +0 -6
  264. package/node_modules/undici/types/h2c-client.d.ts +6 -6
  265. package/node_modules/undici/types/handlers.d.ts +2 -0
  266. package/node_modules/undici/types/header.d.ts +5 -0
  267. package/node_modules/undici/types/index.d.ts +3 -1
  268. package/node_modules/undici/types/interceptors.d.ts +1 -1
  269. package/node_modules/undici/types/mock-agent.d.ts +11 -10
  270. package/node_modules/undici/types/mock-interceptor.d.ts +5 -1
  271. package/node_modules/undici/types/pool.d.ts +0 -2
  272. package/node_modules/undici/types/proxy-agent.d.ts +9 -2
  273. package/node_modules/undici/types/round-robin-pool.d.ts +0 -2
  274. package/node_modules/undici/types/snapshot-agent.d.ts +4 -0
  275. package/node_modules/undici/types/socks5-proxy-agent.d.ts +4 -2
  276. package/node_modules/undici/types/webidl.d.ts +0 -1
  277. package/openclaw.plugin.json +31 -3
  278. package/package.json +7 -7
  279. package/dist/.setup/accounts.runtime-DN-PPocC.mjs +0 -2
  280. package/dist/.setup/action-runtime.runtime-C8R8CUan.mjs +0 -2
  281. package/dist/.setup/doctor-contract-CtMUqjvk.mjs +0 -186
  282. package/dist/.setup/monitor-_Sht7Dqy.mjs +0 -13
  283. package/dist/.setup/rolldown-runtime-D7D4PA-g.mjs +0 -13
  284. package/dist/.setup/send.runtime-B4caZU6T.mjs +0 -2
  285. package/dist/.setup/slash-commands.runtime-BpSH0b3q.mjs +0 -2
  286. package/dist/.setup/slash-skill-commands.runtime-Bi1JWZHY.mjs +0 -2
  287. package/node_modules/undici/lib/handler/unwrap-handler.js +0 -106
  288. package/node_modules/undici/lib/handler/wrap-handler.js +0 -105
  289. package/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  290. package/node_modules/undici/lib/util/promise.js +0 -28
  291. /package/node_modules/typebox/build/guard/{string.d.mts → unicode/unicode_segment.d.mts} +0 -0
@@ -11,7 +11,7 @@ const {
11
11
  getResponseState
12
12
  } = require('./response')
13
13
  const { HeadersList } = require('./headers')
14
- const { Request, cloneRequest, getRequestDispatcher, getRequestState } = require('./request')
14
+ const { Request, cloneRequest, getRequestDispatcher, getRequestState, removeRequestAbortListener } = require('./request')
15
15
  const zlib = require('node:zlib')
16
16
  const {
17
17
  makePolicyContainer,
@@ -59,17 +59,13 @@ const {
59
59
  const EE = require('node:events')
60
60
  const { Readable, pipeline, finished, isErrored, isReadable } = require('node:stream')
61
61
  const { addAbortListener, bufferToLowerCasedHeaderName } = require('../../core/util')
62
+ const { SocketError } = require('../../core/errors')
62
63
  const { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require('./data-url')
63
64
  const { getGlobalDispatcher } = require('../../global')
64
65
  const { webidl } = require('../webidl')
65
66
  const { STATUS_CODES } = require('node:http')
66
67
  const { bytesMatch } = require('../subresource-integrity/subresource-integrity')
67
- const { createDeferredPromise } = require('../../util/promise')
68
68
  const { isomorphicEncode } = require('../infra')
69
- const { runtimeFeatures } = require('../../util/runtime-features')
70
-
71
- // Node.js v23.8.0+ and v22.15.0+ supports Zstandard
72
- const hasZstd = runtimeFeatures.has('zstd')
73
69
 
74
70
  const GET_OR_HEAD = ['GET', 'HEAD']
75
71
 
@@ -80,6 +76,35 @@ const defaultUserAgent = typeof __UNDICI_IS_NODE__ !== 'undefined' || typeof esb
80
76
  /** @type {import('buffer').resolveObjectURL} */
81
77
  let resolveObjectURL
82
78
 
79
+ function appendHeadersListFromResponseHeaders (headersList, headers, rawHeaders) {
80
+ if (Array.isArray(rawHeaders)) {
81
+ for (let i = 0; i < rawHeaders.length; i += 2) {
82
+ const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i])
83
+ const value = rawHeaders[i + 1]
84
+
85
+ if (Array.isArray(value) && !Buffer.isBuffer(value)) {
86
+ for (const val of value) {
87
+ headersList.append(nameStr, val.toString('latin1'), true)
88
+ }
89
+ } else {
90
+ headersList.append(nameStr, value.toString('latin1'), true)
91
+ }
92
+ }
93
+
94
+ return
95
+ }
96
+
97
+ for (const [name, value] of Object.entries(headers ?? {})) {
98
+ if (Array.isArray(value)) {
99
+ for (const entry of value) {
100
+ headersList.append(name, `${entry}`, true)
101
+ }
102
+ } else {
103
+ headersList.append(name, `${value}`, true)
104
+ }
105
+ }
106
+ }
107
+
83
108
  class Fetch extends EE {
84
109
  constructor (dispatcher) {
85
110
  super()
@@ -136,7 +161,7 @@ function fetch (input, init = undefined) {
136
161
  webidl.argumentLengthCheck(arguments, 1, 'globalThis.fetch')
137
162
 
138
163
  // 1. Let p be a new promise.
139
- let p = createDeferredPromise()
164
+ let p = Promise.withResolvers()
140
165
 
141
166
  // 2. Let requestObject be the result of invoking the initial value of
142
167
  // Request as constructor with input and init as arguments. If this throws
@@ -184,7 +209,7 @@ function fetch (input, init = undefined) {
184
209
  let controller = null
185
210
 
186
211
  // 11. Add the following abort steps to requestObject’s signal:
187
- addAbortListener(
212
+ const removeAbortListener = addAbortListener(
188
213
  requestObject.signal,
189
214
  () => {
190
215
  // 1. Set locallyAborted to true.
@@ -204,6 +229,15 @@ function fetch (input, init = undefined) {
204
229
  }
205
230
  )
206
231
 
232
+ // Remove the `abort` listeners registered above and in the Request
233
+ // constructor once the fetch has settled. Without this, reusing a single
234
+ // signal across many requests leaks listeners and Node.js emits a
235
+ // MaxListenersExceededWarning. See https://github.com/nodejs/undici/issues/5285
236
+ const cleanupAbortListeners = () => {
237
+ removeAbortListener()
238
+ removeRequestAbortListener(requestObject)
239
+ }
240
+
207
241
  // 12. Let handleFetchDone given response response be to finalize and
208
242
  // report timing with response, globalObject, and "fetch".
209
243
  // see function handleFetchDone
@@ -228,6 +262,7 @@ function fetch (input, init = undefined) {
228
262
  // deserializedError.
229
263
 
230
264
  abortFetch(p, request, responseObject, controller.serializedAbortReason, controller.controller)
265
+ cleanupAbortListeners()
231
266
  return
232
267
  }
233
268
 
@@ -235,6 +270,7 @@ function fetch (input, init = undefined) {
235
270
  // and terminate these substeps.
236
271
  if (response.type === 'error') {
237
272
  p.reject(new TypeError('fetch failed', { cause: response.error }))
273
+ cleanupAbortListeners()
238
274
  return
239
275
  }
240
276
 
@@ -249,7 +285,10 @@ function fetch (input, init = undefined) {
249
285
 
250
286
  controller = fetching({
251
287
  request,
252
- processResponseEndOfBody: handleFetchDone,
288
+ processResponseEndOfBody: (response) => {
289
+ handleFetchDone(response)
290
+ cleanupAbortListeners()
291
+ },
253
292
  processResponse,
254
293
  dispatcher: getRequestDispatcher(requestObject), // undici
255
294
  // Keep requestObject alive to prevent its AbortController from being GC'd
@@ -1393,7 +1432,16 @@ async function httpNetworkOrCacheFetch (
1393
1432
  // Otherwise:
1394
1433
 
1395
1434
  // 1. Set httpRequest to a clone of request.
1396
- httpRequest = cloneRequest(request)
1435
+ // Implementations are encouraged to avoid teeing request’s body’s stream
1436
+ // when request’s body’s source is null as only a single body is needed in
1437
+ // that case. E.g., when request’s body’s source is null, redirects and
1438
+ // authentication will end up failing the fetch.
1439
+ if (request.body?.source != null) {
1440
+ httpRequest = cloneRequest(request)
1441
+ } else {
1442
+ httpRequest = cloneRequest({ ...request, body: null })
1443
+ httpRequest.body = request.body
1444
+ }
1397
1445
 
1398
1446
  // 2. Set httpFetchParams to a copy of fetchParams.
1399
1447
  httpFetchParams = { ...fetchParams }
@@ -1522,7 +1570,7 @@ async function httpNetworkOrCacheFetch (
1522
1570
  // TODO: https://github.com/whatwg/fetch/issues/1285#issuecomment-896560129
1523
1571
  if (!httpRequest.headersList.contains('accept-encoding', true)) {
1524
1572
  if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {
1525
- httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate', true)
1573
+ httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate, zstd', true)
1526
1574
  } else {
1527
1575
  httpRequest.headersList.append('accept-encoding', 'gzip, deflate', true)
1528
1576
  }
@@ -2151,257 +2199,228 @@ async function httpNetworkFetch (
2151
2199
  const path = url.pathname + url.search
2152
2200
  const hasTrailingQuestionMark = url.search.length === 0 && url.href[url.href.length - url.hash.length - 1] === '?'
2153
2201
 
2154
- return new Promise((resolve, reject) => agent.dispatch(
2155
- {
2156
- path: hasTrailingQuestionMark ? `${path}?` : path,
2157
- origin: url.origin,
2158
- method: request.method,
2159
- body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body,
2160
- headers: request.headersList.entries,
2161
- maxRedirections: 0,
2162
- upgrade: request.mode === 'websocket' ? 'websocket' : undefined
2163
- },
2164
- {
2165
- body: null,
2166
- abort: null,
2167
-
2168
- onConnect (abort) {
2169
- // TODO (fix): Do we need connection here?
2170
- const { connection } = fetchParams.controller
2171
-
2172
- // Set timingInfo’s final connection timing info to the result of calling clamp and coarsen
2173
- // connection timing info with connection’s timing info, timingInfo’s post-redirect start
2174
- // time, and fetchParams’s cross-origin isolated capability.
2175
- // TODO: implement connection timing
2176
- timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(undefined, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability)
2177
-
2178
- if (connection.destroyed) {
2179
- abort(new DOMException('The operation was aborted.', 'AbortError'))
2180
- } else {
2181
- fetchParams.controller.on('terminated', abort)
2182
- this.abort = connection.abort = abort
2183
- }
2184
-
2185
- // Set timingInfo’s final network-request start time to the coarsened shared current time given
2186
- // fetchParams’s cross-origin isolated capability.
2187
- timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)
2202
+ return dispatchWithProtocolPreference(body)
2203
+
2204
+ function dispatchWithProtocolPreference (body, allowH2) {
2205
+ return new Promise((resolve, reject) => agent.dispatch(
2206
+ {
2207
+ path: hasTrailingQuestionMark ? `${path}?` : path,
2208
+ origin: url.origin,
2209
+ method: request.method,
2210
+ body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body,
2211
+ // Preserve the serialized fetch body for MockAgent net-connect fallthroughs.
2212
+ __mockAgentBodyForDispatch: body,
2213
+ headers: request.headersList.entries,
2214
+ maxRedirections: 0,
2215
+ upgrade: request.mode === 'websocket' ? 'websocket' : undefined,
2216
+ ...(allowH2 === false ? { allowH2 } : null)
2188
2217
  },
2218
+ {
2219
+ body: null,
2220
+ abort: null,
2189
2221
 
2190
- onResponseStarted () {
2191
- // Set timingInfo’s final network-response start time to the coarsened shared current
2192
- // time given fetchParams’s cross-origin isolated capability, immediately after the
2193
- // user agent’s HTTP parser receives the first byte of the response (e.g., frame header
2194
- // bytes for HTTP/2 or response status line for HTTP/1.x).
2195
- timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)
2196
- },
2222
+ onRequestStart (controller) {
2223
+ // TODO (fix): Do we need connection here?
2224
+ const { connection } = fetchParams.controller
2197
2225
 
2198
- onHeaders (status, rawHeaders, resume, statusText) {
2199
- if (status < 200) {
2200
- return false
2201
- }
2226
+ // Set timingInfo’s final connection timing info to the result of calling clamp and coarsen
2227
+ // connection timing info with connection’s timing info, timingInfo’s post-redirect start
2228
+ // time, and fetchParams’s cross-origin isolated capability.
2229
+ // TODO: implement connection timing
2230
+ timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(undefined, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability)
2202
2231
 
2203
- const headersList = new HeadersList()
2232
+ const abort = (reason) => controller.abort(reason)
2204
2233
 
2205
- for (let i = 0; i < rawHeaders.length; i += 2) {
2206
- const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i])
2207
- const value = rawHeaders[i + 1]
2208
- if (Array.isArray(value) && !Buffer.isBuffer(rawHeaders[i + 1])) {
2209
- for (const val of value) {
2210
- headersList.append(nameStr, val.toString('latin1'), true)
2211
- }
2234
+ if (connection.destroyed) {
2235
+ abort(new DOMException('The operation was aborted.', 'AbortError'))
2212
2236
  } else {
2213
- headersList.append(nameStr, value.toString('latin1'), true)
2237
+ fetchParams.controller.on('terminated', abort)
2238
+ this.abort = connection.abort = abort
2214
2239
  }
2215
- }
2216
- const location = headersList.get('location', true)
2217
-
2218
- this.body = new Readable({ read: resume })
2219
-
2220
- const willFollow = location && request.redirect === 'follow' &&
2221
- redirectStatusSet.has(status)
2222
-
2223
- const decoders = []
2224
2240
 
2225
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding
2226
- if (request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) {
2227
- // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1
2228
- const contentEncoding = headersList.get('content-encoding', true)
2229
- // "All content-coding values are case-insensitive..."
2230
- /** @type {string[]} */
2231
- const codings = contentEncoding ? contentEncoding.toLowerCase().split(',') : []
2232
-
2233
- // Limit the number of content-encodings to prevent resource exhaustion.
2234
- // CVE fix similar to urllib3 (GHSA-gm62-xv2j-4w53) and curl (CVE-2022-32206).
2235
- const maxContentEncodings = 5
2236
- if (codings.length > maxContentEncodings) {
2237
- reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`))
2238
- return true
2241
+ // Set timingInfo’s final network-request start time to the coarsened shared current time given
2242
+ // fetchParams’s cross-origin isolated capability.
2243
+ timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)
2244
+ },
2245
+
2246
+ onResponseStarted () {
2247
+ // Set timingInfo’s final network-response start time to the coarsened shared current
2248
+ // time given fetchParams’s cross-origin isolated capability, immediately after the
2249
+ // user agent’s HTTP parser receives the first byte of the response (e.g., frame header
2250
+ // bytes for HTTP/2 or response status line for HTTP/1.x).
2251
+ timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)
2252
+ },
2253
+
2254
+ onResponseStart (controller, status, headers, statusText) {
2255
+ if (status < 200) {
2256
+ return
2239
2257
  }
2240
2258
 
2241
- for (let i = codings.length - 1; i >= 0; --i) {
2242
- const coding = codings[i].trim()
2243
- // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2
2244
- if (coding === 'x-gzip' || coding === 'gzip') {
2245
- decoders.push(zlib.createGunzip({
2246
- // Be less strict when decoding compressed responses, since sometimes
2247
- // servers send slightly invalid responses that are still accepted
2248
- // by common browsers.
2249
- // Always using Z_SYNC_FLUSH is what cURL does.
2250
- flush: zlib.constants.Z_SYNC_FLUSH,
2251
- finishFlush: zlib.constants.Z_SYNC_FLUSH
2252
- }))
2253
- } else if (coding === 'deflate') {
2254
- decoders.push(createInflate({
2255
- flush: zlib.constants.Z_SYNC_FLUSH,
2256
- finishFlush: zlib.constants.Z_SYNC_FLUSH
2257
- }))
2258
- } else if (coding === 'br') {
2259
- decoders.push(zlib.createBrotliDecompress({
2260
- flush: zlib.constants.BROTLI_OPERATION_FLUSH,
2261
- finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH
2262
- }))
2263
- } else if (coding === 'zstd' && hasZstd) {
2264
- decoders.push(zlib.createZstdDecompress({
2265
- flush: zlib.constants.ZSTD_e_continue,
2266
- finishFlush: zlib.constants.ZSTD_e_end
2267
- }))
2268
- } else {
2269
- decoders.length = 0
2270
- break
2271
- }
2272
- }
2273
- }
2259
+ const rawHeaders = controller?.rawHeaders ?? []
2260
+ const headersList = new HeadersList()
2261
+ appendHeadersListFromResponseHeaders(headersList, headers, rawHeaders)
2262
+ const location = headersList.get('location', true)
2274
2263
 
2275
- const onError = this.onError.bind(this)
2264
+ this.body = new Readable({ read: () => controller.resume() })
2276
2265
 
2277
- resolve({
2278
- status,
2279
- statusText,
2280
- headersList,
2281
- body: decoders.length
2282
- ? pipeline(this.body, ...decoders, (err) => {
2283
- if (err) {
2284
- this.onError(err)
2285
- }
2286
- }).on('error', onError)
2287
- : this.body.on('error', onError)
2288
- })
2289
-
2290
- return true
2291
- },
2292
-
2293
- onData (chunk) {
2294
- if (fetchParams.controller.dump) {
2295
- return
2296
- }
2266
+ const willFollow = location && request.redirect === 'follow' &&
2267
+ redirectStatusSet.has(status)
2297
2268
 
2298
- // 1. If one or more bytes have been transmitted from response’s
2299
- // message body, then:
2269
+ const decoders = []
2300
2270
 
2301
- // 1. Let bytes be the transmitted bytes.
2302
- const bytes = chunk
2271
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding
2272
+ if (request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) {
2273
+ // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1
2274
+ const contentEncoding = headersList.get('content-encoding', true)
2275
+ // "All content-coding values are case-insensitive..."
2276
+ /** @type {string[]} */
2277
+ const codings = contentEncoding ? contentEncoding.toLowerCase().split(',') : []
2303
2278
 
2304
- // 2. Let codings be the result of extracting header list values
2305
- // given `Content-Encoding` and response’s header list.
2306
- // See pullAlgorithm.
2307
-
2308
- // 3. Increase timingInfo’s encoded body size by bytes’s length.
2309
- timingInfo.encodedBodySize += bytes.byteLength
2279
+ // Limit the number of content-encodings to prevent resource exhaustion.
2280
+ // CVE fix similar to urllib3 (GHSA-gm62-xv2j-4w53) and curl (CVE-2022-32206).
2281
+ const maxContentEncodings = 5
2282
+ if (codings.length > maxContentEncodings) {
2283
+ reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`))
2284
+ return
2285
+ }
2310
2286
 
2311
- // 4. See pullAlgorithm...
2287
+ for (let i = codings.length - 1; i >= 0; --i) {
2288
+ const coding = codings[i].trim()
2289
+ // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2
2290
+ if (coding === 'x-gzip' || coding === 'gzip') {
2291
+ decoders.push(zlib.createGunzip({
2292
+ // Be less strict when decoding compressed responses, since sometimes
2293
+ // servers send slightly invalid responses that are still accepted
2294
+ // by common browsers.
2295
+ // Always using Z_SYNC_FLUSH is what cURL does.
2296
+ flush: zlib.constants.Z_SYNC_FLUSH,
2297
+ finishFlush: zlib.constants.Z_SYNC_FLUSH
2298
+ }))
2299
+ } else if (coding === 'deflate') {
2300
+ decoders.push(createInflate({
2301
+ flush: zlib.constants.Z_SYNC_FLUSH,
2302
+ finishFlush: zlib.constants.Z_SYNC_FLUSH
2303
+ }))
2304
+ } else if (coding === 'br') {
2305
+ decoders.push(zlib.createBrotliDecompress({
2306
+ flush: zlib.constants.BROTLI_OPERATION_FLUSH,
2307
+ finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH
2308
+ }))
2309
+ } else if (coding === 'zstd') {
2310
+ decoders.push(zlib.createZstdDecompress({
2311
+ flush: zlib.constants.ZSTD_e_continue,
2312
+ finishFlush: zlib.constants.ZSTD_e_end
2313
+ }))
2314
+ } else {
2315
+ decoders.length = 0
2316
+ break
2317
+ }
2318
+ }
2319
+ }
2312
2320
 
2313
- return this.body.push(bytes)
2314
- },
2321
+ const onError = (err) => this.onResponseError(controller, err)
2322
+
2323
+ resolve({
2324
+ status,
2325
+ statusText,
2326
+ headersList,
2327
+ body: decoders.length
2328
+ ? pipeline(this.body, ...decoders, (err) => {
2329
+ if (err) {
2330
+ this.onResponseError(controller, err)
2331
+ }
2332
+ }).on('error', onError)
2333
+ : this.body.on('error', onError)
2334
+ })
2335
+ },
2336
+
2337
+ onResponseData (controller, chunk) {
2338
+ if (fetchParams.controller.dump) {
2339
+ return
2340
+ }
2315
2341
 
2316
- onComplete () {
2317
- if (this.abort) {
2318
- fetchParams.controller.off('terminated', this.abort)
2319
- }
2342
+ // 1. If one or more bytes have been transmitted from response’s
2343
+ // message body, then:
2320
2344
 
2321
- fetchParams.controller.ended = true
2345
+ // 1. Let bytes be the transmitted bytes.
2346
+ const bytes = chunk
2322
2347
 
2323
- this.body.push(null)
2324
- },
2348
+ // 2. Let codings be the result of extracting header list values
2349
+ // given `Content-Encoding` and response’s header list.
2350
+ // See pullAlgorithm.
2325
2351
 
2326
- onError (error) {
2327
- if (this.abort) {
2328
- fetchParams.controller.off('terminated', this.abort)
2329
- }
2352
+ // 3. Increase timingInfo’s encoded body size by bytes’s length.
2353
+ timingInfo.encodedBodySize += bytes.byteLength
2330
2354
 
2331
- this.body?.destroy(error)
2355
+ // 4. See pullAlgorithm...
2332
2356
 
2333
- fetchParams.controller.terminate(error)
2357
+ if (this.body.push(bytes) === false) {
2358
+ controller.pause()
2359
+ }
2360
+ },
2334
2361
 
2335
- reject(error)
2336
- },
2362
+ onResponseEnd () {
2363
+ if (this.abort) {
2364
+ fetchParams.controller.off('terminated', this.abort)
2365
+ }
2337
2366
 
2338
- onRequestUpgrade (_controller, status, headers, socket) {
2339
- // We need to support 200 for websocket over h2 as per RFC-8441
2340
- // Absence of session means H1
2341
- if ((socket.session != null && status !== 200) || (socket.session == null && status !== 101)) {
2342
- return false
2343
- }
2367
+ fetchParams.controller.ended = true
2344
2368
 
2345
- const headersList = new HeadersList()
2369
+ this.body?.push(null)
2370
+ },
2346
2371
 
2347
- for (const [name, value] of Object.entries(headers)) {
2348
- if (value == null) {
2349
- continue
2372
+ onResponseError (_controller, error) {
2373
+ if (this.abort) {
2374
+ fetchParams.controller.off('terminated', this.abort)
2350
2375
  }
2351
2376
 
2352
- const headerName = name.toLowerCase()
2353
-
2354
- if (Array.isArray(value)) {
2355
- for (const entry of value) {
2356
- headersList.append(headerName, String(entry), true)
2357
- }
2358
- } else {
2359
- headersList.append(headerName, String(value), true)
2377
+ if (
2378
+ request.mode === 'websocket' &&
2379
+ allowH2 !== false &&
2380
+ error?.code === 'UND_ERR_INFO' &&
2381
+ error?.message === 'HTTP/2: Extended CONNECT protocol not supported by server'
2382
+ ) {
2383
+ // The origin negotiated H2, but RFC 8441 websocket support is unavailable.
2384
+ // Retry the opening handshake on a fresh HTTP/1.1-only connection instead.
2385
+ resolve(dispatchWithProtocolPreference(body, false))
2386
+ return
2360
2387
  }
2361
- }
2362
2388
 
2363
- resolve({
2364
- status,
2365
- statusText: STATUS_CODES[status],
2366
- headersList,
2367
- socket
2368
- })
2369
-
2370
- return true
2371
- },
2389
+ this.body?.destroy(error)
2372
2390
 
2373
- onUpgrade (status, rawHeaders, socket) {
2374
- // We need to support 200 for websocket over h2 as per RFC-8441
2375
- // Absence of session means H1
2376
- if ((socket.session != null && status !== 200) || (socket.session == null && status !== 101)) {
2377
- return false
2378
- }
2391
+ fetchParams.controller.terminate(error)
2379
2392
 
2380
- const headersList = new HeadersList()
2393
+ reject(error)
2394
+ },
2381
2395
 
2382
- for (let i = 0; i < rawHeaders.length; i += 2) {
2383
- const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i])
2384
- const value = rawHeaders[i + 1]
2385
- if (Array.isArray(value) && !Buffer.isBuffer(rawHeaders[i + 1])) {
2386
- for (const val of value) {
2387
- headersList.append(nameStr, val.toString('latin1'), true)
2396
+ onRequestUpgrade (controller, status, headers, socket) {
2397
+ // We need to support 200 for websocket over h2 as per RFC-8441
2398
+ // Absence of session means H1
2399
+ if ((socket.session != null && status !== 200) || (socket.session == null && status !== 101)) {
2400
+ if (socket.session != null) {
2401
+ // The server refused the extended CONNECT, and nothing further
2402
+ // will settle this request. Fail the opening handshake here.
2403
+ controller.abort(new SocketError('bad upgrade', null))
2388
2404
  }
2389
- } else {
2390
- headersList.append(nameStr, value.toString('latin1'), true)
2405
+ return false
2391
2406
  }
2392
- }
2393
2407
 
2394
- resolve({
2395
- status,
2396
- statusText: STATUS_CODES[status],
2397
- headersList,
2398
- socket
2399
- })
2408
+ const rawHeaders = controller?.rawHeaders ?? []
2409
+ const headersList = new HeadersList()
2410
+ appendHeadersListFromResponseHeaders(headersList, headers, rawHeaders)
2411
+
2412
+ resolve({
2413
+ status,
2414
+ statusText: STATUS_CODES[status],
2415
+ headersList,
2416
+ socket
2417
+ })
2400
2418
 
2401
- return true
2419
+ return true
2420
+ }
2402
2421
  }
2403
- }
2404
- ))
2422
+ ))
2423
+ }
2405
2424
  }
2406
2425
  }
2407
2426