@openclaw/slack 2026.9.6 → 2026.9.8

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
@@ -16,6 +16,7 @@ const {
16
16
  hasSafeIterator,
17
17
  isBlobLike,
18
18
  serializePathWithQuery,
19
+ parseHeaders,
19
20
  assertRequestHandler,
20
21
  getServerName,
21
22
  normalizedMethodRecords,
@@ -43,6 +44,55 @@ function isValidContentLengthHeaderValue (val) {
43
44
  }
44
45
 
45
46
  const kHandler = Symbol('handler')
47
+ const kController = Symbol('controller')
48
+ const kResume = Symbol('resume')
49
+
50
+ class RequestController {
51
+ #paused = false
52
+ #reason = null
53
+ #aborted = false
54
+ #abort
55
+
56
+ [kResume] = null
57
+
58
+ rawHeaders = null
59
+ rawTrailers = null
60
+
61
+ constructor (abort) {
62
+ this.#abort = abort
63
+ }
64
+
65
+ pause () {
66
+ this.#paused = true
67
+ }
68
+
69
+ resume () {
70
+ if (this.#paused) {
71
+ this.#paused = false
72
+ this[kResume]?.()
73
+ }
74
+ }
75
+
76
+ abort (reason) {
77
+ if (!this.#aborted) {
78
+ this.#aborted = true
79
+ this.#reason = reason
80
+ this.#abort(reason)
81
+ }
82
+ }
83
+
84
+ get aborted () {
85
+ return this.#aborted
86
+ }
87
+
88
+ get reason () {
89
+ return this.#reason
90
+ }
91
+
92
+ get paused () {
93
+ return this.#paused
94
+ }
95
+ }
46
96
 
47
97
  class Request {
48
98
  constructor (origin, {
@@ -123,7 +173,7 @@ class Request {
123
173
 
124
174
  this.method = method
125
175
 
126
- this.typeOfService = typeOfService ?? 0
176
+ this.typeOfService = typeOfService
127
177
 
128
178
  this.abort = null
129
179
 
@@ -175,7 +225,7 @@ class Request {
175
225
  this.protocol = getProtocolFromUrlString(origin)
176
226
 
177
227
  this.idempotent = idempotent == null
178
- ? method === 'HEAD' || method === 'GET'
228
+ ? method === 'HEAD' || method === 'GET' || method === 'QUERY'
179
229
  : idempotent
180
230
 
181
231
  this.blocking = blocking ?? this.method !== 'HEAD'
@@ -256,23 +306,26 @@ class Request {
256
306
  }
257
307
  }
258
308
 
259
- onConnect (abort) {
309
+ onRequestStart (abort, context) {
260
310
  assert(!this.aborted)
261
311
  assert(!this.completed)
262
312
 
313
+ this[kController] = new RequestController(abort)
314
+
263
315
  if (this.error) {
264
- abort(this.error)
265
- } else {
266
- this.abort = abort
267
- return this[kHandler].onConnect(abort)
316
+ this[kController].abort(this.error)
317
+ return
268
318
  }
319
+
320
+ this.abort = abort
321
+ return this[kHandler].onRequestStart(this[kController], context)
269
322
  }
270
323
 
271
324
  onResponseStarted () {
272
325
  return this[kHandler].onResponseStarted?.()
273
326
  }
274
327
 
275
- onHeaders (statusCode, headers, resume, statusText) {
328
+ onResponseStart (statusCode, headers, resume, statusText) {
276
329
  assert(!this.aborted)
277
330
  assert(!this.completed)
278
331
 
@@ -280,36 +333,56 @@ class Request {
280
333
  channels.headers.publish({ request: this, response: { statusCode, headers, statusText } })
281
334
  }
282
335
 
336
+ const controller = this[kController]
337
+ if (controller) {
338
+ controller[kResume] = resume
339
+ controller.rawHeaders = headers
340
+ }
341
+
342
+ const parsedHeaders = Array.isArray(headers) ? parseHeaders(headers) : headers
343
+
283
344
  try {
284
- return this[kHandler].onHeaders(statusCode, headers, resume, statusText)
345
+ this[kHandler].onResponseStart?.(controller, statusCode, parsedHeaders, statusText)
346
+ return !controller?.paused
285
347
  } catch (err) {
286
348
  this.abort(err)
349
+ return false
287
350
  }
288
351
  }
289
352
 
290
- onData (chunk) {
353
+ onResponseData (chunk) {
291
354
  assert(!this.aborted)
292
355
  assert(!this.completed)
293
356
 
294
357
  if (channels.bodyChunkReceived.hasSubscribers) {
295
358
  channels.bodyChunkReceived.publish({ request: this, chunk })
296
359
  }
360
+
361
+ const controller = this[kController]
297
362
  try {
298
- return this[kHandler].onData(chunk)
363
+ this[kHandler].onResponseData?.(controller, chunk)
364
+ return !controller?.paused
299
365
  } catch (err) {
300
366
  this.abort(err)
301
367
  return false
302
368
  }
303
369
  }
304
370
 
305
- onUpgrade (statusCode, headers, socket) {
371
+ onRequestUpgrade (statusCode, headers, socket) {
306
372
  assert(!this.aborted)
307
373
  assert(!this.completed)
308
374
 
309
- return this[kHandler].onUpgrade(statusCode, headers, socket)
375
+ const controller = this[kController]
376
+ if (controller) {
377
+ controller.rawHeaders = headers
378
+ }
379
+
380
+ const parsedHeaders = Array.isArray(headers) ? parseHeaders(headers) : headers
381
+
382
+ return this[kHandler].onRequestUpgrade?.(controller, statusCode, parsedHeaders, socket)
310
383
  }
311
384
 
312
- onComplete (trailers) {
385
+ onResponseEnd (trailers) {
313
386
  this.onFinally()
314
387
 
315
388
  assert(!this.aborted)
@@ -320,15 +393,22 @@ class Request {
320
393
  channels.trailers.publish({ request: this, trailers })
321
394
  }
322
395
 
396
+ const controller = this[kController]
397
+ if (controller) {
398
+ controller.rawTrailers = trailers
399
+ }
400
+
401
+ const parsedTrailers = Array.isArray(trailers) ? parseHeaders(trailers) : trailers
402
+
323
403
  try {
324
- return this[kHandler].onComplete(trailers)
404
+ return this[kHandler].onResponseEnd?.(controller, parsedTrailers)
325
405
  } catch (err) {
326
406
  // TODO (fix): This might be a bad idea?
327
- this.onError(err)
407
+ this.onResponseError(err)
328
408
  }
329
409
  }
330
410
 
331
- onError (error) {
411
+ onResponseError (error) {
332
412
  this.onFinally()
333
413
 
334
414
  if (channels.error.hasSubscribers) {
@@ -340,7 +420,9 @@ class Request {
340
420
  }
341
421
  this.aborted = true
342
422
 
343
- return this[kHandler].onError(error)
423
+ const controller = this[kController]
424
+
425
+ return this[kHandler].onResponseError?.(controller, error)
344
426
  }
345
427
 
346
428
  onFinally () {
@@ -5,6 +5,8 @@ module.exports = {
5
5
  kDestroy: Symbol('destroy'),
6
6
  kDispatch: Symbol('dispatch'),
7
7
  kUrl: Symbol('url'),
8
+ kRequestOrigin: Symbol('request origin'),
9
+ kOriginless: Symbol('originless'),
8
10
  kWriting: Symbol('writing'),
9
11
  kResuming: Symbol('resuming'),
10
12
  kQueue: Symbol('queue'),
@@ -56,12 +58,14 @@ module.exports = {
56
58
  kCounter: Symbol('socket request counter'),
57
59
  kMaxResponseSize: Symbol('max response size'),
58
60
  kHTTP2Session: Symbol('http2Session'),
61
+ kHTTP2Options: Symbol('http2 options'),
59
62
  kHTTP2SessionState: Symbol('http2Session state'),
60
63
  kRetryHandlerDefaultRetry: Symbol('retry agent default retry'),
61
64
  kConstruct: Symbol('constructable'),
62
65
  kListeners: Symbol('listeners'),
63
66
  kHTTPContext: Symbol('http context'),
64
67
  kMaxConcurrentStreams: Symbol('max concurrent streams'),
68
+ kHostAuthority: Symbol('host authority'),
65
69
  kHTTP2InitialWindowSize: Symbol('http2 initial window size'),
66
70
  kHTTP2ConnectionWindowSize: Symbol('http2 connection window size'),
67
71
  kEnableConnectProtocol: Symbol('http2session connect protocol'),
@@ -6,14 +6,12 @@ const { IncomingMessage } = require('node:http')
6
6
  const stream = require('node:stream')
7
7
  const net = require('node:net')
8
8
  const { stringify } = require('node:querystring')
9
- const { EventEmitter: EE } = require('node:events')
9
+ const { EventEmitter: EE, addAbortListener: addAbortListenerNative } = require('node:events')
10
10
  const timers = require('../util/timers')
11
11
  const { InvalidArgumentError, ConnectTimeoutError } = require('./errors')
12
12
  const { headerNameLowerCasedRecord } = require('./constants')
13
13
  const { tree } = require('./tree')
14
14
 
15
- const [nodeMajor, nodeMinor] = process.versions.node.split('.', 2).map(v => Number(v))
16
-
17
15
  class BodyAsyncIterable {
18
16
  constructor (body) {
19
17
  this[kBody] = body
@@ -85,23 +83,9 @@ function isStream (obj) {
85
83
  /**
86
84
  * @param {*} object
87
85
  * @returns {object is Blob}
88
- * based on https://github.com/node-fetch/fetch-blob/blob/8ab587d34080de94140b54f07168451e7d0b655e/index.js#L229-L241 (MIT License)
89
86
  */
90
87
  function isBlobLike (object) {
91
- if (object === null) {
92
- return false
93
- } else if (object instanceof Blob) {
94
- return true
95
- } else if (typeof object !== 'object') {
96
- return false
97
- } else {
98
- const sTag = object[Symbol.toStringTag]
99
-
100
- return (sTag === 'Blob' || sTag === 'File') && (
101
- ('stream' in object && typeof object.stream === 'function') ||
102
- ('arrayBuffer' in object && typeof object.arrayBuffer === 'function')
103
- )
104
- }
88
+ return object instanceof Blob
105
89
  }
106
90
 
107
91
  /**
@@ -337,7 +321,7 @@ function isIterable (obj) {
337
321
  */
338
322
  function hasSafeIterator (obj) {
339
323
  const prototype = Object.getPrototypeOf(obj)
340
- const ownIterator = Object.prototype.hasOwnProperty.call(obj, Symbol.iterator)
324
+ const ownIterator = Object.hasOwn(obj, Symbol.iterator)
341
325
  return ownIterator || (prototype != null && prototype !== Object.prototype && typeof obj[Symbol.iterator] === 'function')
342
326
  }
343
327
 
@@ -386,7 +370,12 @@ function destroy (stream, err) {
386
370
  stream.socket = null
387
371
  }
388
372
 
389
- stream.destroy(err)
373
+ try {
374
+ stream.destroy(err)
375
+ } catch {
376
+ // stream.destroy may throw on managed sockets (e.g., http2).
377
+ // Silently ignore — the socket lifecycle is handled by the subsystem.
378
+ }
390
379
  } else if (err) {
391
380
  queueMicrotask(() => {
392
381
  stream.emit('error', err)
@@ -480,10 +469,30 @@ function parseHeaders (headers, obj) {
480
469
  }
481
470
 
482
471
  /**
483
- * @param {Buffer[]} headers
472
+ * @param {Buffer[] | string[] | Record<string, string | string[]> | null | undefined} headers
484
473
  * @returns {string[]}
485
474
  */
486
475
  function parseRawHeaders (headers) {
476
+ if (headers == null) {
477
+ return []
478
+ }
479
+
480
+ if (!Array.isArray(headers)) {
481
+ const rawHeaders = []
482
+
483
+ for (const [name, value] of Object.entries(headers)) {
484
+ if (Array.isArray(value)) {
485
+ for (const entry of value) {
486
+ rawHeaders.push(name, `${entry}`)
487
+ }
488
+ } else {
489
+ rawHeaders.push(name, `${value}`)
490
+ }
491
+ }
492
+
493
+ return rawHeaders
494
+ }
495
+
487
496
  const headersLength = headers.length
488
497
  /**
489
498
  * @type {string[]}
@@ -507,6 +516,26 @@ function parseRawHeaders (headers) {
507
516
  return ret
508
517
  }
509
518
 
519
+ /**
520
+ * @param {Record<string, string | string[]>} headers
521
+ * @returns {Buffer[]}
522
+ */
523
+ function toRawHeaders (headers) {
524
+ const rawHeaders = []
525
+
526
+ for (const [name, value] of Object.entries(headers)) {
527
+ if (Array.isArray(value)) {
528
+ for (const entry of value) {
529
+ rawHeaders.push(Buffer.from(name, 'latin1'), Buffer.from(`${entry}`, 'latin1'))
530
+ }
531
+ } else {
532
+ rawHeaders.push(Buffer.from(name, 'latin1'), Buffer.from(`${value}`, 'latin1'))
533
+ }
534
+ }
535
+
536
+ return rawHeaders
537
+ }
538
+
510
539
  /**
511
540
  * @param {string[]} headers
512
541
  * @param {Buffer[]} headers
@@ -540,38 +569,37 @@ function assertRequestHandler (handler, method, upgrade) {
540
569
  throw new InvalidArgumentError('handler must be an object')
541
570
  }
542
571
 
543
- if (typeof handler.onRequestStart === 'function') {
544
- // TODO (fix): More checks...
545
- return
546
- }
547
-
548
- if (typeof handler.onConnect !== 'function') {
549
- throw new InvalidArgumentError('invalid onConnect method')
572
+ if (typeof handler.onRequestStart !== 'function') {
573
+ throw new InvalidArgumentError('invalid onRequestStart method')
550
574
  }
551
575
 
552
- if (typeof handler.onError !== 'function') {
553
- throw new InvalidArgumentError('invalid onError method')
576
+ if (typeof handler.onResponseError !== 'function') {
577
+ throw new InvalidArgumentError('invalid onResponseError method')
554
578
  }
555
579
 
556
580
  if (typeof handler.onBodySent !== 'function' && handler.onBodySent !== undefined) {
557
581
  throw new InvalidArgumentError('invalid onBodySent method')
558
582
  }
559
583
 
584
+ if (typeof handler.onRequestSent !== 'function' && handler.onRequestSent !== undefined) {
585
+ throw new InvalidArgumentError('invalid onRequestSent method')
586
+ }
587
+
560
588
  if (upgrade || method === 'CONNECT') {
561
- if (typeof handler.onUpgrade !== 'function') {
562
- throw new InvalidArgumentError('invalid onUpgrade method')
589
+ if (typeof handler.onRequestUpgrade !== 'function') {
590
+ throw new InvalidArgumentError('invalid onRequestUpgrade method')
563
591
  }
564
592
  } else {
565
- if (typeof handler.onHeaders !== 'function') {
566
- throw new InvalidArgumentError('invalid onHeaders method')
593
+ if (typeof handler.onResponseStart !== 'function') {
594
+ throw new InvalidArgumentError('invalid onResponseStart method')
567
595
  }
568
596
 
569
- if (typeof handler.onData !== 'function') {
570
- throw new InvalidArgumentError('invalid onData method')
597
+ if (typeof handler.onResponseData !== 'function') {
598
+ throw new InvalidArgumentError('invalid onResponseData method')
571
599
  }
572
600
 
573
- if (typeof handler.onComplete !== 'function') {
574
- throw new InvalidArgumentError('invalid onComplete method')
601
+ if (typeof handler.onResponseEnd !== 'function') {
602
+ throw new InvalidArgumentError('invalid onResponseEnd method')
575
603
  }
576
604
  }
577
605
  }
@@ -675,7 +703,11 @@ function isFormDataLike (object) {
675
703
  }
676
704
 
677
705
  function addAbortListener (signal, listener) {
678
- if ('addEventListener' in signal) {
706
+ if (!signal || 'aborted' in signal) {
707
+ return addAbortListenerNative(signal, listener)[Symbol.dispose]
708
+ }
709
+
710
+ if (typeof signal.addEventListener === 'function') {
679
711
  signal.addEventListener('abort', listener, { once: true })
680
712
  return () => signal.removeEventListener('abort', listener)
681
713
  }
@@ -748,7 +780,7 @@ function isValidHeaderValue (characters) {
748
780
  return !headerCharRegex.test(characters)
749
781
  }
750
782
 
751
- const rangeHeaderRegex = /^bytes (\d+)-(\d+)\/(\d+)?$/
783
+ const rangeHeaderRegex = /^bytes (\d+)-(\d+)\/(\d+|\*)?$/
752
784
 
753
785
  /**
754
786
  * @typedef {object} RangeHeader
@@ -765,13 +797,14 @@ const rangeHeaderRegex = /^bytes (\d+)-(\d+)\/(\d+)?$/
765
797
  */
766
798
  function parseRangeHeader (range) {
767
799
  if (range == null || range === '') return { start: 0, end: null, size: null }
800
+ if (!range) return null
768
801
 
769
- const m = range ? range.match(rangeHeaderRegex) : null
802
+ const m = rangeHeaderRegex.exec(range)
770
803
  return m
771
804
  ? {
772
805
  start: parseInt(m[1]),
773
806
  end: m[2] ? parseInt(m[2]) : null,
774
- size: m[3] ? parseInt(m[3]) : null
807
+ size: m[3] && m[3] !== '*' ? parseInt(m[3]) : null
775
808
  }
776
809
  : null
777
810
  }
@@ -812,7 +845,7 @@ function removeAllListeners (obj) {
812
845
  */
813
846
  function errorRequest (client, request, err) {
814
847
  try {
815
- request.onError(err)
848
+ request.onResponseError(err)
816
849
  assert(request.aborted)
817
850
  } catch (err) {
818
851
  client.emit('error', err)
@@ -891,11 +924,32 @@ function onConnectTimeout (socket, opts) {
891
924
  destroy(socket, new ConnectTimeoutError(message))
892
925
  }
893
926
 
927
+ let lastUrlString = null
928
+ let lastProtocol = null
929
+
894
930
  /**
895
931
  * @param {string} urlString
896
932
  * @returns {string}
897
933
  */
898
934
  function getProtocolFromUrlString (urlString) {
935
+ // Requests are typically dispatched against the same origin over and over,
936
+ // so cache the last (urlString, protocol) pair to skip re-parsing.
937
+ if (urlString === lastUrlString) {
938
+ return lastProtocol
939
+ }
940
+
941
+ const protocol = getProtocolFromUrlStringSlow(urlString)
942
+ lastUrlString = urlString
943
+ lastProtocol = protocol
944
+
945
+ return protocol
946
+ }
947
+
948
+ /**
949
+ * @param {string} urlString
950
+ * @returns {string}
951
+ */
952
+ function getProtocolFromUrlStringSlow (urlString) {
899
953
  if (
900
954
  urlString[0] === 'h' &&
901
955
  urlString[1] === 't' &&
@@ -915,8 +969,10 @@ function getProtocolFromUrlString (urlString) {
915
969
  return urlString.slice(0, urlString.indexOf(':') + 1)
916
970
  }
917
971
 
918
- const kEnumerableProperty = Object.create(null)
919
- kEnumerableProperty.enumerable = true
972
+ const kEnumerableProperty = {
973
+ __proto__: null,
974
+ enumerable: true
975
+ }
920
976
 
921
977
  const normalizedMethodRecordsBase = {
922
978
  delete: 'DELETE',
@@ -930,7 +986,9 @@ const normalizedMethodRecordsBase = {
930
986
  post: 'POST',
931
987
  POST: 'POST',
932
988
  put: 'PUT',
933
- PUT: 'PUT'
989
+ PUT: 'PUT',
990
+ query: 'QUERY',
991
+ QUERY: 'QUERY'
934
992
  }
935
993
 
936
994
  const normalizedMethodRecords = {
@@ -961,6 +1019,7 @@ module.exports = {
961
1019
  removeAllListeners,
962
1020
  errorRequest,
963
1021
  parseRawHeaders,
1022
+ toRawHeaders,
964
1023
  encodeRawHeaders,
965
1024
  parseHeaders,
966
1025
  parseKeepAliveTimeout,
@@ -983,8 +1042,6 @@ module.exports = {
983
1042
  normalizedMethodRecords,
984
1043
  isValidPort,
985
1044
  isHttpOrHttpsPrefixed,
986
- nodeMajor,
987
- nodeMinor,
988
1045
  safeHTTPMethods: Object.freeze(['GET', 'HEAD', 'OPTIONS', 'TRACE']),
989
1046
  wrapRequestBody,
990
1047
  setupConnectTimeout,
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const { InvalidArgumentError, MaxOriginsReachedError } = require('../core/errors')
4
- const { kClients, kRunning, kClose, kDestroy, kDispatch, kUrl } = require('../core/symbols')
4
+ const { kBusy, kClients, kConnected, kRunning, kPending, kClose, kDestroy, kDispatch, kUrl } = require('../core/symbols')
5
5
  const DispatcherBase = require('./dispatcher-base')
6
6
  const Pool = require('./pool')
7
7
  const Client = require('./client')
@@ -65,60 +65,79 @@ class Agent extends DispatcherBase {
65
65
 
66
66
  get [kRunning] () {
67
67
  let ret = 0
68
- for (const { dispatcher } of this[kClients].values()) {
68
+ for (const dispatcher of this[kClients].values()) {
69
69
  ret += dispatcher[kRunning]
70
70
  }
71
71
  return ret
72
72
  }
73
73
 
74
74
  [kDispatch] (opts, handler) {
75
- let key
75
+ let origin
76
76
  if (opts.origin && (typeof opts.origin === 'string' || opts.origin instanceof URL)) {
77
- key = String(opts.origin)
77
+ origin = String(opts.origin)
78
78
  } else {
79
79
  throw new InvalidArgumentError('opts.origin must be a non-empty string or URL.')
80
80
  }
81
81
 
82
- if (this[kOrigins].size >= this[kOptions].maxOrigins && !this[kOrigins].has(key)) {
82
+ const allowH2 = opts.allowH2 ?? this[kOptions].allowH2
83
+ const key = allowH2 === false ? `${origin}#http1-only` : origin
84
+
85
+ if (this[kOrigins].size >= this[kOptions].maxOrigins && !this[kOrigins].has(origin)) {
83
86
  throw new MaxOriginsReachedError()
84
87
  }
85
88
 
86
- const result = this[kClients].get(key)
87
- let dispatcher = result && result.dispatcher
89
+ let dispatcher = this[kClients].get(key)
88
90
  if (!dispatcher) {
89
- const closeClientIfUnused = (connected) => {
90
- const result = this[kClients].get(key)
91
- if (result) {
92
- if (connected) result.count -= 1
93
- if (result.count <= 0) {
94
- this[kClients].delete(key)
95
- if (!result.dispatcher.destroyed) {
96
- result.dispatcher.close()
97
- }
91
+ dispatcher = this[kFactory](opts.origin, allowH2 === false
92
+ ? { ...this[kOptions], allowH2: false }
93
+ : this[kOptions])
94
+
95
+ const closeClientIfUnused = () => {
96
+ if (this[kClients].get(key) !== dispatcher) {
97
+ return
98
+ }
99
+
100
+ // A GOAWAY detaches the HTTP/2 session before requeued requests are
101
+ // dispatched on a replacement connection. At that point the pool has
102
+ // no connected clients and is not busy, but it still has pending work.
103
+ // Closing it here lets the replacement Client finish those requests
104
+ // and then destroys that new connection with ClientDestroyedError.
105
+ if (dispatcher[kConnected] > 0 || dispatcher[kBusy] || dispatcher[kPending] > 0) {
106
+ return
107
+ }
108
+
109
+ this[kClients].delete(key)
110
+ if (!dispatcher.destroyed) {
111
+ dispatcher.close()
112
+ }
113
+
114
+ let hasOrigin = false
115
+ for (const k of this[kClients].keys()) {
116
+ if (k === origin || k === `${origin}#http1-only`) {
117
+ hasOrigin = true
118
+ break
98
119
  }
99
- this[kOrigins].delete(key)
120
+ }
121
+
122
+ if (!hasOrigin) {
123
+ this[kOrigins].delete(origin)
100
124
  }
101
125
  }
102
- dispatcher = this[kFactory](opts.origin, this[kOptions])
126
+
127
+ dispatcher
103
128
  .on('drain', this[kOnDrain])
104
- .on('connect', (origin, targets) => {
105
- const result = this[kClients].get(key)
106
- if (result) {
107
- result.count += 1
108
- }
109
- this[kOnConnect](origin, targets)
110
- })
129
+ .on('connect', this[kOnConnect])
111
130
  .on('disconnect', (origin, targets, err) => {
112
- closeClientIfUnused(true)
131
+ closeClientIfUnused()
113
132
  this[kOnDisconnect](origin, targets, err)
114
133
  })
115
134
  .on('connectionError', (origin, targets, err) => {
116
- closeClientIfUnused(false)
135
+ closeClientIfUnused()
117
136
  this[kOnConnectionError](origin, targets, err)
118
137
  })
119
138
 
120
- this[kClients].set(key, { count: 0, dispatcher })
121
- this[kOrigins].add(key)
139
+ this[kClients].set(key, dispatcher)
140
+ this[kOrigins].add(origin)
122
141
  }
123
142
 
124
143
  return dispatcher.dispatch(opts, handler)
@@ -126,7 +145,7 @@ class Agent extends DispatcherBase {
126
145
 
127
146
  [kClose] () {
128
147
  const closePromises = []
129
- for (const { dispatcher } of this[kClients].values()) {
148
+ for (const dispatcher of this[kClients].values()) {
130
149
  closePromises.push(dispatcher.close())
131
150
  }
132
151
  this[kClients].clear()
@@ -136,7 +155,7 @@ class Agent extends DispatcherBase {
136
155
 
137
156
  [kDestroy] (err) {
138
157
  const destroyPromises = []
139
- for (const { dispatcher } of this[kClients].values()) {
158
+ for (const dispatcher of this[kClients].values()) {
140
159
  destroyPromises.push(dispatcher.destroy(err))
141
160
  }
142
161
  this[kClients].clear()
@@ -146,7 +165,7 @@ class Agent extends DispatcherBase {
146
165
 
147
166
  get stats () {
148
167
  const allClientStats = {}
149
- for (const { dispatcher } of this[kClients].values()) {
168
+ for (const dispatcher of this[kClients].values()) {
150
169
  if (dispatcher.stats) {
151
170
  allClientStats[dispatcher[kUrl].origin] = dispatcher.stats
152
171
  }