@openclaw/discord 2026.6.33 → 2026.6.35

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 (179) hide show
  1. package/dist/action-runtime-api.js +1 -1
  2. package/dist/{api-CjnGBhM3.js → api-1GXlSrYP.js} +42 -21
  3. package/dist/api.js +14 -14
  4. package/dist/{approval-handler.runtime-BWPQrzpP.js → approval-handler.runtime-Dv4p7REU.js} +3 -3
  5. package/dist/{audit-BwJ_2OjL.js → audit-DEVi9nIs.js} +3 -3
  6. package/dist/{channel-Ddnonoy4.js → channel-CQIRiosn.js} +15 -15
  7. package/dist/{channel-actions-CwmIqnYN.js → channel-actions-JziPEcBU.js} +2 -2
  8. package/dist/{channel-actions.runtime-DvpTfaJ4.js → channel-actions.runtime-D7L47LY3.js} +5 -5
  9. package/dist/channel-plugin-api.js +1 -1
  10. package/dist/{channel.setup-glZ5Y98a.js → channel.setup-oMeR19Cc.js} +2 -2
  11. package/dist/{components-j6lTZBsT.js → components-_s5UPJqU.js} +1 -1
  12. package/dist/{conversation-identity-36FFBwm5.js → conversation-identity-B0k94-bz.js} +2 -2
  13. package/dist/{directory-config-BYMFzL29.js → directory-config-CD1svkyN.js} +1 -1
  14. package/dist/directory-contract-api.js +1 -1
  15. package/dist/{directory-live-9JtJCiu8.js → directory-live-DBTsSRxl.js} +5 -5
  16. package/dist/{handle-action.guild-admin-xxGYrp-I.js → handle-action.guild-admin-CYIFMxh-.js} +2 -2
  17. package/dist/index.js +1 -1
  18. package/dist/{manager.runtime-BK6cf2Zu.js → manager.runtime-BZVdGX2d.js} +17 -9
  19. package/dist/{message-handler-BqpJIavO.js → message-handler-DZd9Bpq8.js} +7 -6
  20. package/dist/{message-handler.preflight-C90MxCcv.js → message-handler.preflight-Axv9J9EO.js} +12 -11
  21. package/dist/{message-handler.process-CeQ7Bd_3.js → message-handler.process-CG0zFS-Z.js} +10 -10
  22. package/dist/{message-utils-CJeAoISH.js → message-utils-Dbuw27gd.js} +1 -1
  23. package/dist/{outbound-adapter-Dxs6iKEq.js → outbound-adapter-CKC_kmUN.js} +6 -6
  24. package/dist/pluralkit-CfTReLl3.js +40 -0
  25. package/dist/{probe-esE_Oqdm.js → probe-DcgZIpyF.js} +3 -2
  26. package/dist/{probe.runtime-C3Atgpvr.js → probe.runtime-CVwM9L5E.js} +1 -1
  27. package/dist/{provider-C7376XFH.js → provider-CwwSXIIj.js} +102 -37
  28. package/dist/{provider-session.runtime-CCdqogGf.js → provider-session.runtime-reBWkqHZ.js} +3 -3
  29. package/dist/provider.runtime-BsmTLYS_.js +2 -0
  30. package/dist/{resolve-allowlist-common-3gB2Gpmm.js → resolve-allowlist-common-D7bZqAw3.js} +3 -3
  31. package/dist/{resolve-channels-B3gQf8QL.js → resolve-channels--oE-RnO6.js} +6 -6
  32. package/dist/{resolve-users-BO10y5fJ.js → resolve-users-QXo8CXBU.js} +5 -5
  33. package/dist/{runtime-CFlR3L9X.js → runtime-CF7ramAs.js} +7 -7
  34. package/dist/runtime-api.actions.js +2 -2
  35. package/dist/runtime-api.js +19 -19
  36. package/dist/runtime-api.lookup.js +5 -5
  37. package/dist/runtime-api.monitor-CzF8MUl_.js +6 -0
  38. package/dist/runtime-api.monitor.js +5 -5
  39. package/dist/runtime-api.send.js +5 -5
  40. package/dist/runtime-api.threads.js +3 -3
  41. package/dist/{send-JHxfT4Pk.js → send-Bb295iHT.js} +5 -5
  42. package/dist/{send.components-CN35E2Ck.js → send.components-COkDUO3B.js} +4 -4
  43. package/dist/{send.outbound-B-cA1Esv.js → send.outbound-B_sk0hNe.js} +3 -3
  44. package/dist/{send.receipt-CGecJDin.js → send.receipt-Cli6_9Sn.js} +19 -7
  45. package/dist/{send.shared-vcbfThdy.js → send.shared-BCG7MWnP.js} +2 -2
  46. package/dist/session-binding-contract-api.js +1 -1
  47. package/dist/setup-plugin-api.js +1 -1
  48. package/dist/{subagent-hooks-20wXhVzZ.js → subagent-hooks-CtqoWK4x.js} +2 -2
  49. package/dist/subagent-hooks-api.js +1 -1
  50. package/dist/{system-events-DR27TE7p.js → system-events-BxGNk_wE.js} +1 -1
  51. package/dist/{target-resolver-CDi1gI90.js → target-resolver-BcoK6b0g.js} +2 -2
  52. package/dist/targets-Q-ZoP7K4.js +3 -0
  53. package/dist/{thread-bindings-DU4T6nDo.js → thread-bindings-DJ_HT6GJ.js} +4 -4
  54. package/dist/{thread-bindings.discord-api-CYkr-3Gj.js → thread-bindings.discord-api-OPyjvgyz.js} +4 -4
  55. package/dist/{thread-bindings.manager-BqWs1UE2.js → thread-bindings.manager-Cd2HAVw_.js} +3 -3
  56. package/dist/{transcripts-source-D-lBI5ZD.js → transcripts-source-CPf5gURy.js} +1 -1
  57. package/dist/transcripts-source-api.js +1 -1
  58. package/dist/{typing-xr05bL-r.js → typing-DY0cwLdg.js} +1 -1
  59. package/node_modules/undici/README.md +8 -2
  60. package/node_modules/undici/docs/docs/api/Agent.md +248 -44
  61. package/node_modules/undici/docs/docs/api/BalancedPool.md +246 -48
  62. package/node_modules/undici/docs/docs/api/CacheStorage.md +171 -13
  63. package/node_modules/undici/docs/docs/api/CacheStore.md +294 -98
  64. package/node_modules/undici/docs/docs/api/Client.md +386 -179
  65. package/node_modules/undici/docs/docs/api/ClientStats.md +80 -14
  66. package/node_modules/undici/docs/docs/api/Connector.md +118 -36
  67. package/node_modules/undici/docs/docs/api/ContentType.md +65 -25
  68. package/node_modules/undici/docs/docs/api/Cookies.md +122 -71
  69. package/node_modules/undici/docs/docs/api/Debug.md +34 -18
  70. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +364 -164
  71. package/node_modules/undici/docs/docs/api/Dispatcher.md +485 -1102
  72. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +102 -87
  73. package/node_modules/undici/docs/docs/api/Errors.md +503 -40
  74. package/node_modules/undici/docs/docs/api/EventSource.md +298 -32
  75. package/node_modules/undici/docs/docs/api/Fetch.md +680 -31
  76. package/node_modules/undici/docs/docs/api/GlobalInstallation.md +78 -98
  77. package/node_modules/undici/docs/docs/api/H2CClient.md +298 -176
  78. package/node_modules/undici/docs/docs/api/Interceptors.md +418 -0
  79. package/node_modules/undici/docs/docs/api/MockAgent.md +333 -314
  80. package/node_modules/undici/docs/docs/api/MockCallHistory.md +272 -98
  81. package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +189 -26
  82. package/node_modules/undici/docs/docs/api/MockClient.md +151 -33
  83. package/node_modules/undici/docs/docs/api/MockErrors.md +56 -5
  84. package/node_modules/undici/docs/docs/api/MockPool.md +321 -258
  85. package/node_modules/undici/docs/docs/api/Pool.md +235 -43
  86. package/node_modules/undici/docs/docs/api/PoolStats.md +119 -13
  87. package/node_modules/undici/docs/docs/api/ProxyAgent.md +179 -160
  88. package/node_modules/undici/docs/docs/api/RedirectHandler.md +238 -63
  89. package/node_modules/undici/docs/docs/api/RetryAgent.md +113 -26
  90. package/node_modules/undici/docs/docs/api/RetryHandler.md +161 -77
  91. package/node_modules/undici/docs/docs/api/RoundRobinPool.md +166 -72
  92. package/node_modules/undici/docs/docs/api/SnapshotAgent.md +264 -542
  93. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +177 -196
  94. package/node_modules/undici/docs/docs/api/Util.md +68 -11
  95. package/node_modules/undici/docs/docs/api/WebSocket.md +475 -80
  96. package/node_modules/undici/docs/docs/api/api-lifecycle.md +100 -32
  97. package/node_modules/undici/docs/docs/best-practices/client-certificate.md +2 -0
  98. package/node_modules/undici/docs/docs/best-practices/crawling.md +3 -1
  99. package/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +6 -4
  100. package/node_modules/undici/docs/docs/best-practices/mocking-request.md +9 -7
  101. package/node_modules/undici/docs/docs/best-practices/proxy.md +3 -1
  102. package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +10 -8
  103. package/node_modules/undici/docs/docs/best-practices/writing-tests.md +2 -0
  104. package/node_modules/undici/docs/docs/{GettingStarted.md → getting-started.md} +22 -19
  105. package/node_modules/undici/docs/docs/index.md +784 -0
  106. package/node_modules/undici/docs/docs/site.json +125 -0
  107. package/node_modules/undici/docs/docs/type-map.json +79 -0
  108. package/node_modules/undici/lib/api/api-request.js +7 -1
  109. package/node_modules/undici/lib/api/readable.js +42 -7
  110. package/node_modules/undici/lib/cache/memory-cache-store.js +56 -11
  111. package/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  112. package/node_modules/undici/lib/core/connect.js +16 -2
  113. package/node_modules/undici/lib/core/errors.js +20 -0
  114. package/node_modules/undici/lib/core/request.js +14 -3
  115. package/node_modules/undici/lib/core/symbols.js +3 -0
  116. package/node_modules/undici/lib/core/util.js +30 -2
  117. package/node_modules/undici/lib/dispatcher/agent.js +10 -5
  118. package/node_modules/undici/lib/dispatcher/balanced-pool.js +7 -4
  119. package/node_modules/undici/lib/dispatcher/client-h1.js +74 -9
  120. package/node_modules/undici/lib/dispatcher/client-h2.js +483 -151
  121. package/node_modules/undici/lib/dispatcher/client.js +76 -30
  122. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
  123. package/node_modules/undici/lib/dispatcher/dispatcher.js +15 -1
  124. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -0
  125. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +37 -8
  126. package/node_modules/undici/lib/dispatcher/proxy-agent.js +58 -7
  127. package/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
  128. package/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
  129. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +106 -22
  130. package/node_modules/undici/lib/global.js +36 -16
  131. package/node_modules/undici/lib/handler/cache-handler.js +297 -65
  132. package/node_modules/undici/lib/handler/cache-revalidation-handler.js +13 -3
  133. package/node_modules/undici/lib/handler/decorator-handler.js +7 -1
  134. package/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
  135. package/node_modules/undici/lib/handler/redirect-handler.js +26 -5
  136. package/node_modules/undici/lib/handler/retry-handler.js +238 -51
  137. package/node_modules/undici/lib/interceptor/cache.js +221 -58
  138. package/node_modules/undici/lib/interceptor/decompress.js +124 -15
  139. package/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
  140. package/node_modules/undici/lib/interceptor/dns.js +7 -0
  141. package/node_modules/undici/lib/interceptor/dump.js +10 -23
  142. package/node_modules/undici/lib/mock/mock-agent.js +13 -1
  143. package/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
  144. package/node_modules/undici/lib/mock/mock-utils.js +246 -27
  145. package/node_modules/undici/lib/util/cache.js +415 -71
  146. package/node_modules/undici/lib/util/date.js +23 -6
  147. package/node_modules/undici/lib/web/cookies/parse.js +150 -146
  148. package/node_modules/undici/lib/web/cookies/util.js +79 -9
  149. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
  150. package/node_modules/undici/lib/web/eventsource/eventsource.js +13 -3
  151. package/node_modules/undici/lib/web/eventsource/util.js +1 -1
  152. package/node_modules/undici/lib/web/fetch/body.js +2 -1
  153. package/node_modules/undici/lib/web/fetch/constants.js +1 -1
  154. package/node_modules/undici/lib/web/fetch/index.js +17 -2
  155. package/node_modules/undici/lib/web/fetch/request.js +2 -3
  156. package/node_modules/undici/lib/web/fetch/response.js +1 -3
  157. package/node_modules/undici/lib/web/fetch/util.js +10 -2
  158. package/node_modules/undici/lib/web/webidl/index.js +3 -3
  159. package/node_modules/undici/lib/web/websocket/connection.js +1 -1
  160. package/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
  161. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
  162. package/node_modules/undici/lib/web/websocket/websocket.js +22 -0
  163. package/node_modules/undici/package.json +4 -4
  164. package/node_modules/undici/types/client.d.ts +53 -3
  165. package/node_modules/undici/types/cookies.d.ts +1 -1
  166. package/node_modules/undici/types/dispatcher.d.ts +3 -3
  167. package/node_modules/undici/types/errors.d.ts +10 -0
  168. package/node_modules/undici/types/handlers.d.ts +2 -0
  169. package/node_modules/undici/types/interceptors.d.ts +2 -0
  170. package/node_modules/undici/types/mock-agent.d.ts +11 -10
  171. package/node_modules/undici/types/mock-interceptor.d.ts +5 -1
  172. package/node_modules/undici/types/proxy-agent.d.ts +7 -0
  173. package/node_modules/undici/types/socks5-proxy-agent.d.ts +2 -0
  174. package/npm-shrinkwrap.json +7 -7
  175. package/package.json +6 -5
  176. package/dist/pluralkit-DI6RYaVj.js +0 -24
  177. package/dist/provider.runtime-D1m66kDS.js +0 -2
  178. package/dist/runtime-api.monitor-4oc58TSk.js +0 -6
  179. package/dist/targets-C6yd3y8R.js +0 -3
@@ -1,87 +1,291 @@
1
1
  # Agent
2
2
 
3
- Extends: `undici.Dispatcher`
3
+ <!--introduced_in=v3.2.0-->
4
+ <!--type=module-->
5
+ <!-- source_link=lib/dispatcher/agent.js -->
6
+
7
+ > Stability: 2 - Stable
8
+
9
+ An `Agent` dispatches requests against multiple different origins, creating and
10
+ reusing a per-origin [`Pool`][] (or [`Client`][]) on demand. It is the default
11
+ dispatcher used by [`request`][], [`stream`][], and [`fetch`][] when no explicit
12
+ dispatcher is supplied.
13
+
14
+ Requests are not guaranteed to be dispatched in their order of invocation.
15
+
16
+ ```mjs
17
+ import { Agent, setGlobalDispatcher } from 'undici'
18
+
19
+ const agent = new Agent({ connections: 10 })
20
+ setGlobalDispatcher(agent)
21
+ ```
22
+
23
+ ## Class: `Agent`
24
+
25
+ <!-- YAML
26
+ added: v3.2.0
27
+ -->
28
+
29
+ * Extends: {Dispatcher}
30
+
31
+ `Agent` keeps an internal map of origins to dispatchers. The first request to a
32
+ given origin lazily creates a dispatcher through the configured `factory`, and
33
+ subsequent requests to the same origin reuse it. Idle dispatchers are closed
34
+ automatically once they have no open connections and are no longer busy.
35
+
36
+ ### `new Agent([options])`
37
+
38
+ <!-- YAML
39
+ added: v3.2.0
40
+ changes:
41
+ - version: v7.16.0
42
+ pr-url: https://github.com/nodejs/undici/pull/4365
43
+ description: Added the `maxOrigins` option to cap the number of origins.
44
+ -->
45
+
46
+ * `options` {AgentOptions} (optional) Extends {PoolOptions}.
47
+ * `factory` {Function} Builds the dispatcher used for a given origin. When the
48
+ resolved options contain `connections: 1`, the default factory creates a
49
+ {Client}; otherwise it creates a {Pool}. **Default:** `(origin, opts) => new Pool(origin, opts)`.
50
+ * `origin` {URL|string} The origin to create a dispatcher for.
51
+ * `opts` {Object} The resolved options for the new dispatcher.
52
+ * Returns: {Dispatcher}
53
+ * `maxOrigins` {number} Limits the total number of distinct origins that may
54
+ receive requests at the same time. A {MaxOriginsReachedError} is thrown when
55
+ a request targets a new origin once the limit is reached. When set to
56
+ `Infinity`, no limit is enforced. Must be a number greater than `0`.
57
+ **Default:** `Infinity`.
58
+
59
+ `Agent` inherits all {PoolOptions} (and therefore all {ClientOptions}). The
60
+ per-origin {Pool} it creates uses the default unlimited `connections`, so
61
+ concurrent requests to the same origin are spread across separate {Client}
62
+ instances on separate sockets.
4
63
 
5
- Agent allows dispatching requests against multiple different origins.
64
+ > [!NOTE]
65
+ > Because each concurrent request to an origin may use a different {Client},
66
+ > HTTP/2 multiplexing on a shared session does not apply unless `connections` is
67
+ > set to a small value (for example `connections: 1`). See {PoolOptions} and
68
+ > {ClientOptions} for the full set of inherited options such as `allowH2`
69
+ > (default `true`) and `maxConcurrentStreams` (default `100`).
6
70
 
7
- Requests are not guaranteed to be dispatched in order of invocation.
71
+ ### `agent.closed`
8
72
 
9
- ## `new undici.Agent([options])`
73
+ <!-- YAML
74
+ added: v3.2.0
75
+ -->
10
76
 
11
- Arguments:
77
+ * Type: {boolean}
12
78
 
13
- * **options** `AgentOptions` (optional)
79
+ `true` after [`agent.close()`][] has been called.
14
80
 
15
- Returns: `Agent`
81
+ ### `agent.destroyed`
16
82
 
17
- ### Parameter: `AgentOptions`
83
+ <!-- YAML
84
+ added: v3.2.0
85
+ -->
18
86
 
19
- Extends: [`PoolOptions`](/docs/docs/api/Pool.md#parameter-pooloptions)
87
+ * Type: {boolean}
20
88
 
21
- * **factory** `(origin: URL, opts: Object) => Dispatcher` - Default: `(origin, opts) => new Pool(origin, opts)`
22
- * **maxOrigins** `number` (optional) - Default: `Infinity` - Limits the total number of origins that can receive requests at a time, throwing an `MaxOriginsReachedError` error when attempting to dispatch when the max is reached. If `Infinity`, no limit is enforced.
89
+ `true` after [`agent.destroy()`][] has been called, or after [`agent.close()`][]
90
+ has been called and the shutdown has completed.
23
91
 
24
- > [!NOTE]
25
- > Like `Pool`, `Agent` inherits all [`ClientOptions`](/docs/docs/api/Client.md#parameter-clientoptions). `allowH2` defaults to `true` and `maxConcurrentStreams` to `100`. The per-origin `Pool` it creates uses the default unlimited `connections`, so concurrent requests to the same origin land on separate `Client` instances and separate TCP/TLS sockets — HTTP/2 multiplexing on a shared session does not apply unless `connections` is set to a small value. See [`PoolOptions`](/docs/docs/api/Pool.md#parameter-pooloptions).
92
+ ### `agent.stats`
93
+
94
+ <!-- YAML
95
+ added: v7.9.0
96
+ -->
97
+
98
+ * Type: {Record<string, ClientStats|PoolStats>}
99
+
100
+ Aggregate statistics for the agent, keyed by origin. Each value is the
101
+ [`ClientStats`][] or [`PoolStats`][] object reported by the dispatcher currently
102
+ serving that origin. Origins whose dispatcher does not expose `stats` are
103
+ omitted.
104
+
105
+ ```mjs
106
+ import { Agent } from 'undici'
107
+
108
+ const agent = new Agent()
109
+ await agent.request({ origin: 'http://localhost:3000', path: '/', method: 'GET' })
110
+ console.log(agent.stats)
111
+ // { 'http://localhost:3000': PoolStats { ... } }
112
+ ```
113
+
114
+ ### `agent.dispatch(options, handler)`
115
+
116
+ <!-- YAML
117
+ added: v3.2.0
118
+ -->
119
+
120
+ * `options` {AgentDispatchOptions} Extends {DispatchOptions}.
121
+ * `origin` {string|URL} The origin to dispatch the request against. Required.
122
+ * `handler` {DispatchHandler}
123
+ * Returns: {boolean} `false` if the dispatcher is busy and the caller should
124
+ wait for the [`'drain'`][] event before dispatching again.
125
+
126
+ Routes the request to the dispatcher for `options.origin`, creating one through
127
+ the `factory` if needed. Throws an {InvalidArgumentError} when `options.origin`
128
+ is not a non-empty string or {URL}, and a {MaxOriginsReachedError} when a new
129
+ origin would exceed `maxOrigins`. Implements [`Dispatcher.dispatch()`][].
130
+
131
+ ### `agent.close([callback])`
132
+
133
+ <!-- YAML
134
+ added: v3.2.0
135
+ -->
136
+
137
+ * `callback` {Function} (optional) Invoked once every per-origin dispatcher has
138
+ closed. When omitted, a {Promise} is returned.
139
+ * Returns: {Promise|void}
140
+
141
+ Gracefully closes the agent and every dispatcher it owns, waiting for in-flight
142
+ requests to complete. Implements [`Dispatcher.close()`][].
143
+
144
+ ### `agent.destroy([error[, callback]])`
145
+
146
+ <!-- YAML
147
+ added: v3.2.0
148
+ -->
149
+
150
+ * `error` {Error} (optional) The error to abort pending requests with.
151
+ * `callback` {Function} (optional) Invoked once every per-origin dispatcher has
152
+ been destroyed. When omitted, a {Promise} is returned.
153
+ * Returns: {Promise|void}
154
+
155
+ Forcefully destroys the agent and every dispatcher it owns, aborting all pending
156
+ requests. Implements [`Dispatcher.destroy()`][].
157
+
158
+ ### `agent.connect(options[, callback])`
159
+
160
+ <!-- YAML
161
+ added: v3.2.0
162
+ -->
163
+
164
+ See [`Dispatcher.connect()`][]. The request is routed to the dispatcher for
165
+ `options.origin`.
166
+
167
+ ### `agent.pipeline(options, handler)`
26
168
 
27
- ## Instance Properties
169
+ <!-- YAML
170
+ added: v3.2.0
171
+ -->
28
172
 
29
- ### `Agent.closed`
173
+ See [`Dispatcher.pipeline()`][]. The request is routed to the dispatcher for
174
+ `options.origin`.
30
175
 
31
- Implements [Client.closed](/docs/docs/api/Client.md#clientclosed)
176
+ ### `agent.request(options[, callback])`
32
177
 
33
- ### `Agent.destroyed`
178
+ <!-- YAML
179
+ added: v3.2.0
180
+ -->
34
181
 
35
- Implements [Client.destroyed](/docs/docs/api/Client.md#clientdestroyed)
182
+ See [`Dispatcher.request()`][]. The request is routed to the dispatcher for
183
+ `options.origin`.
36
184
 
37
- ## Instance Methods
185
+ ```mjs
186
+ import { Agent } from 'undici'
38
187
 
39
- ### `Agent.close([callback])`
188
+ const agent = new Agent()
189
+ const { statusCode, body } = await agent.request({
190
+ origin: 'http://localhost:3000',
191
+ path: '/',
192
+ method: 'GET',
193
+ })
40
194
 
41
- Implements [`Dispatcher.close([callback])`](/docs/docs/api/Dispatcher.md#dispatcherclosecallback-promise).
195
+ console.log('response received', statusCode)
196
+ console.log('data', await body.text())
197
+ ```
42
198
 
43
- ### `Agent.destroy([error, callback])`
199
+ ### `agent.stream(options, factory[, callback])`
44
200
 
45
- Implements [`Dispatcher.destroy([error, callback])`](/docs/docs/api/Dispatcher.md#dispatcherdestroyerror-callback-promise).
201
+ <!-- YAML
202
+ added: v3.2.0
203
+ -->
46
204
 
47
- ### `Agent.dispatch(options, handler: AgentDispatchOptions)`
205
+ See [`Dispatcher.stream()`][]. The request is routed to the dispatcher for
206
+ `options.origin`.
48
207
 
49
- Implements [`Dispatcher.dispatch(options, handler)`](/docs/docs/api/Dispatcher.md#dispatcherdispatchoptions-handler).
208
+ ### `agent.upgrade(options[, callback])`
50
209
 
51
- #### Parameter: `AgentDispatchOptions`
210
+ <!-- YAML
211
+ added: v3.2.0
212
+ -->
52
213
 
53
- Extends: [`DispatchOptions`](/docs/docs/api/Dispatcher.md#parameter-dispatchoptions)
214
+ See [`Dispatcher.upgrade()`][]. The request is routed to the dispatcher for
215
+ `options.origin`.
54
216
 
55
- * **origin** `string | URL`
217
+ ### Event: `'connect'`
56
218
 
57
- Implements [`Dispatcher.destroy([error, callback])`](/docs/docs/api/Dispatcher.md#dispatcherdestroyerror-callback-promise).
219
+ <!-- YAML
220
+ added: v6.6.0
221
+ -->
58
222
 
59
- ### `Agent.connect(options[, callback])`
223
+ * `origin` {URL}
224
+ * `targets` {Array<Dispatcher>} The dispatchers involved, starting with this
225
+ `Agent` followed by the per-origin dispatcher chain.
60
226
 
61
- See [`Dispatcher.connect(options[, callback])`](/docs/docs/api/Dispatcher.md#dispatcherconnectoptions-callback).
227
+ Emitted when a socket has been created for an origin and is ready to receive
228
+ requests. Forwarded from the underlying dispatcher's [`'connect'`][] event.
62
229
 
63
- ### `Agent.dispatch(options, handler)`
230
+ ### Event: `'disconnect'`
64
231
 
65
- Implements [`Dispatcher.dispatch(options, handler)`](/docs/docs/api/Dispatcher.md#dispatcherdispatchoptions-handler).
232
+ <!-- YAML
233
+ added: v6.6.0
234
+ -->
66
235
 
67
- ### `Agent.pipeline(options, handler)`
236
+ * `origin` {URL}
237
+ * `targets` {Array<Dispatcher>} The dispatchers involved, starting with this
238
+ `Agent`.
239
+ * `error` {Error}
68
240
 
69
- See [`Dispatcher.pipeline(options, handler)`](/docs/docs/api/Dispatcher.md#dispatcherpipelineoptions-handler).
241
+ Emitted when a socket for an origin has disconnected. Forwarded from the
242
+ underlying dispatcher's [`'disconnect'`][] event.
70
243
 
71
- ### `Agent.request(options[, callback])`
244
+ ### Event: `'connectionError'`
72
245
 
73
- See [`Dispatcher.request(options [, callback])`](/docs/docs/api/Dispatcher.md#dispatcherrequestoptions-callback).
246
+ <!-- YAML
247
+ added: v6.6.0
248
+ -->
74
249
 
75
- ### `Agent.stream(options, factory[, callback])`
250
+ * `origin` {URL}
251
+ * `targets` {Array<Dispatcher>} The dispatchers involved, starting with this
252
+ `Agent`.
253
+ * `error` {Error}
76
254
 
77
- See [`Dispatcher.stream(options, factory[, callback])`](/docs/docs/api/Dispatcher.md#dispatcherstreamoptions-factory-callback).
255
+ Emitted when a connection attempt for an origin fails. Forwarded from the
256
+ underlying dispatcher's [`'connectionError'`][] event.
78
257
 
79
- ### `Agent.upgrade(options[, callback])`
258
+ ### Event: `'drain'`
80
259
 
81
- See [`Dispatcher.upgrade(options[, callback])`](/docs/docs/api/Dispatcher.md#dispatcherupgradeoptions-callback).
260
+ <!-- YAML
261
+ added: v6.6.0
262
+ -->
82
263
 
83
- ### `Agent.stats()`
264
+ * `origin` {URL}
265
+ * `targets` {Array<Dispatcher>} The dispatchers involved, starting with this
266
+ `Agent`.
84
267
 
85
- Returns an object of stats by origin in the format of `Record<string, TClientStats | TPoolStats>`
268
+ Emitted when an origin's dispatcher is no longer busy and can accept more
269
+ requests. Forwarded from the underlying dispatcher's [`'drain'`][] event.
86
270
 
87
- See [`PoolStats`](/docs/docs/api/PoolStats.md) and [`ClientStats`](/docs/docs/api/ClientStats.md).
271
+ [`'connect'`]: Dispatcher.md#event-connect
272
+ [`'connectionError'`]: Dispatcher.md#event-connectionerror
273
+ [`'disconnect'`]: Dispatcher.md#event-disconnect
274
+ [`'drain'`]: Dispatcher.md#event-drain
275
+ [`Client`]: Client.md#class-client
276
+ [`ClientStats`]: ClientStats.md
277
+ [`Dispatcher.close()`]: Dispatcher.md#dispatcherclosecallback-promise
278
+ [`Dispatcher.connect()`]: Dispatcher.md#dispatcherconnectoptions-callback
279
+ [`Dispatcher.destroy()`]: Dispatcher.md#dispatcherdestroyerror-callback-promise
280
+ [`Dispatcher.dispatch()`]: Dispatcher.md#dispatcherdispatchoptions-handler
281
+ [`Dispatcher.pipeline()`]: Dispatcher.md#dispatcherpipelineoptions-handler
282
+ [`Dispatcher.request()`]: Dispatcher.md#dispatcherrequestoptions-callback
283
+ [`Dispatcher.stream()`]: Dispatcher.md#dispatcherstreamoptions-factory-callback
284
+ [`Dispatcher.upgrade()`]: Dispatcher.md#dispatcherupgradeoptions-callback
285
+ [`Pool`]: Pool.md#class-pool
286
+ [`PoolStats`]: PoolStats.md
287
+ [`agent.close()`]: #agentclosecallback
288
+ [`agent.destroy()`]: #agentdestroyerror-callback
289
+ [`fetch`]: Fetch.md
290
+ [`request`]: Dispatcher.md#dispatcherrequestoptions-callback
291
+ [`stream`]: Dispatcher.md#dispatcherstreamoptions-factory-callback
@@ -1,99 +1,297 @@
1
- # Class: BalancedPool
1
+ # BalancedPool
2
2
 
3
- Extends: `undici.Dispatcher`
3
+ <!--introduced_in=v4.8.0-->
4
+ <!--type=module-->
5
+ <!-- source_link=lib/dispatcher/balanced-pool.js -->
4
6
 
5
- A pool of [Pool](/docs/docs/api/Pool.md) instances connected to multiple upstreams.
7
+ > Stability: 2 - Stable
6
8
 
7
- Requests are not guaranteed to be dispatched in order of invocation.
9
+ A `BalancedPool` distributes requests across a set of {Pool} instances, each
10
+ connected to a different upstream. It uses a weighted round-robin algorithm:
11
+ every upstream starts with the same weight, and the weight is adjusted up on
12
+ successful connections and down on connection errors, so that healthy upstreams
13
+ receive a larger share of traffic.
8
14
 
9
- ## `new BalancedPool(upstreams [, options])`
15
+ Requests are not guaranteed to be dispatched in the order they are issued.
10
16
 
11
- Arguments:
17
+ ```mjs
18
+ import { BalancedPool } from 'undici'
12
19
 
13
- * **upstreams** `URL | string | string[]` - It should only include the **protocol, hostname, and port**.
14
- * **options** `BalancedPoolOptions` (optional)
20
+ const pool = new BalancedPool([
21
+ 'http://localhost:3000',
22
+ 'http://localhost:3001',
23
+ 'http://localhost:3002',
24
+ ])
15
25
 
16
- ### Parameter: `BalancedPoolOptions`
26
+ const { statusCode, body } = await pool.request({
27
+ path: '/',
28
+ method: 'GET',
29
+ })
30
+ console.log('response received', statusCode)
31
+ for await (const chunk of body) {
32
+ console.log('data', chunk.toString())
33
+ }
34
+ ```
17
35
 
18
- Extends: [`PoolOptions`](/docs/docs/api/Pool.md#parameter-pooloptions)
36
+ ## Class: `BalancedPool`
19
37
 
20
- * **factory** `(origin: URL, opts: Object) => Dispatcher` - Default: `(origin, opts) => new Pool(origin, opts)`
38
+ <!-- YAML
39
+ added: v4.8.0
40
+ changes:
41
+ - version: v4.10.4
42
+ pr-url: https://github.com/nodejs/undici/pull/1114
43
+ description: Introduced the `BalancedPool` class.
44
+ -->
21
45
 
22
- The `PoolOptions` are passed to each of the `Pool` instances being created.
23
- ## Instance Properties
46
+ * Extends: {Dispatcher}
24
47
 
25
- ### `BalancedPool.upstreams`
48
+ A pool of {Pool} instances connected to multiple upstreams.
26
49
 
27
- Returns an array of upstreams that were previously added.
50
+ ### `new BalancedPool(upstreams[, options])`
28
51
 
29
- ### `BalancedPool.closed`
52
+ <!-- YAML
53
+ added: v4.8.0
54
+ changes:
55
+ - version: v4.15.0
56
+ pr-url: https://github.com/nodejs/undici/pull/1237
57
+ description: Added the `factory` option.
58
+ -->
30
59
 
31
- Implements [Client.closed](/docs/docs/api/Client.md#clientclosed)
60
+ * `upstreams` {URL|string|URL[]|string[]} One or more upstream origins. Each
61
+ value should only include the **protocol, hostname, and port**. **Default:**
62
+ `[]`.
63
+ * `options` {BalancedPoolOptions} (optional)
32
64
 
33
- ### `BalancedPool.destroyed`
65
+ The options passed to the constructor are forwarded to every {Pool} instance
66
+ that is created for an upstream.
34
67
 
35
- Implements [Client.destroyed](/docs/docs/api/Client.md#clientdestroyed)
68
+ #### Parameter: `BalancedPoolOptions`
36
69
 
37
- ### `BalancedPool.stats`
70
+ Extends: {PoolOptions}
38
71
 
39
- Returns [`PoolStats`](/docs/docs/api/PoolStats.md) instance for this pool.
72
+ In addition to all {PoolOptions}, the following options are supported:
40
73
 
41
- ## Instance Methods
74
+ * `factory` {Function} A function used to create the {Pool} instance for each
75
+ upstream. **Default:** `(origin, opts) => new Pool(origin, opts)`.
76
+ * `origin` {URL|string} The upstream origin.
77
+ * `opts` {Object} The options object derived from the constructor options.
78
+ * Returns: {Dispatcher}
79
+ * `maxWeightPerServer` {number} The maximum weight any single upstream can
80
+ reach. Successful connections increase an upstream's weight up to this value.
81
+ **Default:** `100`.
82
+ * `errorPenalty` {number} The amount by which an upstream's weight is decreased
83
+ on a connection error and increased on a successful connection. **Default:**
84
+ `15`.
42
85
 
43
- ### `BalancedPool.addUpstream(upstream)`
86
+ ### `balancedPool.addUpstream(upstream)`
44
87
 
45
- Add an upstream.
88
+ <!-- YAML
89
+ added: v4.8.0
90
+ -->
46
91
 
47
- Arguments:
92
+ * `upstream` {URL|string} The upstream origin to add. It should only include the
93
+ **protocol, hostname, and port**.
94
+ * Returns: {BalancedPool} The `BalancedPool` instance, for chaining.
48
95
 
49
- * **upstream** `string` - It should only include the **protocol, hostname, and port**.
96
+ Adds an upstream. If an open, non-destroyed upstream with the same origin is
97
+ already present, the call is a no-op.
50
98
 
51
- ### `BalancedPool.removeUpstream(upstream)`
99
+ ### `balancedPool.removeUpstream(upstream)`
52
100
 
53
- Removes an upstream that was previously added.
101
+ <!-- YAML
102
+ added: v4.8.0
103
+ -->
54
104
 
55
- ### `BalancedPool.close([callback])`
105
+ * `upstream` {URL|string} The upstream origin to remove. It should only include
106
+ the **protocol, hostname, and port**.
107
+ * Returns: {BalancedPool} The `BalancedPool` instance, for chaining.
56
108
 
57
- Implements [`Dispatcher.close([callback])`](/docs/docs/api/Dispatcher.md#dispatcherclosecallback-promise).
109
+ Removes an upstream that was previously added. If no matching upstream is found,
110
+ the call is a no-op.
58
111
 
59
- ### `BalancedPool.destroy([error, callback])`
112
+ ### `balancedPool.getUpstream(upstream)`
60
113
 
61
- Implements [`Dispatcher.destroy([error, callback])`](/docs/docs/api/Dispatcher.md#dispatcherdestroyerror-callback-promise).
114
+ <!-- YAML
115
+ added: v7.17.0
116
+ -->
62
117
 
63
- ### `BalancedPool.connect(options[, callback])`
118
+ * `upstream` {URL|string} The upstream origin to look up. It should only include
119
+ the **protocol, hostname, and port**.
120
+ * Returns: {Pool|undefined} The {Pool} instance managing the given upstream, or
121
+ `undefined` if it is not present.
64
122
 
65
- See [`Dispatcher.connect(options[, callback])`](/docs/docs/api/Dispatcher.md#dispatcherconnectoptions-callback).
123
+ Returns the {Pool} instance for the given upstream origin, if it is open and not
124
+ destroyed.
66
125
 
67
- ### `BalancedPool.dispatch(options, handlers)`
126
+ ### `balancedPool.upstreams`
68
127
 
69
- Implements [`Dispatcher.dispatch(options, handlers)`](/docs/docs/api/Dispatcher.md#dispatcherdispatchoptions-handler).
128
+ <!-- YAML
129
+ added: v4.8.0
130
+ -->
70
131
 
71
- ### `BalancedPool.pipeline(options, handler)`
132
+ * Type: {string[]} The origins of the upstreams that are currently open and not
133
+ destroyed.
72
134
 
73
- See [`Dispatcher.pipeline(options, handler)`](/docs/docs/api/Dispatcher.md#dispatcherpipelineoptions-handler).
135
+ ### `balancedPool.closed`
74
136
 
75
- ### `BalancedPool.request(options[, callback])`
137
+ <!-- YAML
138
+ added: v4.8.0
139
+ changes:
140
+ - version: v4.10.4
141
+ pr-url: https://github.com/nodejs/undici/pull/1114
142
+ description: Introduced the `BalancedPool` class.
143
+ -->
76
144
 
77
- See [`Dispatcher.request(options [, callback])`](/docs/docs/api/Dispatcher.md#dispatcherrequestoptions-callback).
145
+ * Type: {boolean} `true` after `balancedPool.close()` has been called.
78
146
 
79
- ### `BalancedPool.stream(options, factory[, callback])`
147
+ Implements [`client.closed`][].
80
148
 
81
- See [`Dispatcher.stream(options, factory[, callback])`](/docs/docs/api/Dispatcher.md#dispatcherstreamoptions-factory-callback).
149
+ ### `balancedPool.destroyed`
82
150
 
83
- ### `BalancedPool.upgrade(options[, callback])`
151
+ <!-- YAML
152
+ added: v4.8.0
153
+ changes:
154
+ - version: v4.10.4
155
+ pr-url: https://github.com/nodejs/undici/pull/1114
156
+ description: Introduced the `BalancedPool` class.
157
+ -->
84
158
 
85
- See [`Dispatcher.upgrade(options[, callback])`](/docs/docs/api/Dispatcher.md#dispatcherupgradeoptions-callback).
159
+ * Type: {boolean} `true` after `balancedPool.destroy()` has been called, or after
160
+ `balancedPool.close()` has been called and the shutdown has completed.
86
161
 
87
- ## Instance Events
162
+ Implements [`client.destroyed`][].
163
+
164
+ ### `balancedPool.stats`
165
+
166
+ <!-- YAML
167
+ added: v4.8.0
168
+ -->
169
+
170
+ * Type: {PoolStats}
171
+
172
+ Returns a {PoolStats} instance aggregating the statistics of the underlying
173
+ pools.
174
+
175
+ ### `balancedPool.close([callback])`
176
+
177
+ <!-- YAML
178
+ added: v4.8.0
179
+ -->
180
+
181
+ Implements [`Dispatcher.close([callback])`][].
182
+
183
+ ### `balancedPool.destroy([error[, callback]])`
184
+
185
+ <!-- YAML
186
+ added: v4.8.0
187
+ -->
188
+
189
+ Implements [`Dispatcher.destroy([error, callback])`][].
190
+
191
+ ### `balancedPool.connect(options[, callback])`
192
+
193
+ <!-- YAML
194
+ added: v4.8.0
195
+ -->
196
+
197
+ See [`Dispatcher.connect(options[, callback])`][].
198
+
199
+ ### `balancedPool.dispatch(options, handlers)`
200
+
201
+ <!-- YAML
202
+ added: v4.8.0
203
+ changes:
204
+ - version: v4.10.4
205
+ pr-url: https://github.com/nodejs/undici/pull/1114
206
+ description: Introduced the `BalancedPool` class.
207
+ -->
208
+
209
+ Implements [`Dispatcher.dispatch(options, handler)`][].
210
+
211
+ ### `balancedPool.pipeline(options, handler)`
212
+
213
+ <!-- YAML
214
+ added: v4.8.0
215
+ -->
216
+
217
+ See [`Dispatcher.pipeline(options, handler)`][].
218
+
219
+ ### `balancedPool.request(options[, callback])`
220
+
221
+ <!-- YAML
222
+ added: v4.8.0
223
+ -->
224
+
225
+ See [`Dispatcher.request(options[, callback])`][].
226
+
227
+ ### `balancedPool.stream(options, factory[, callback])`
228
+
229
+ <!-- YAML
230
+ added: v4.8.0
231
+ -->
232
+
233
+ See [`Dispatcher.stream(options, factory[, callback])`][].
234
+
235
+ ### `balancedPool.upgrade(options[, callback])`
236
+
237
+ <!-- YAML
238
+ added: v4.8.0
239
+ -->
240
+
241
+ See [`Dispatcher.upgrade(options[, callback])`][].
88
242
 
89
243
  ### Event: `'connect'`
90
244
 
91
- See [Dispatcher Event: `'connect'`](/docs/docs/api/Dispatcher.md#event-connect).
245
+ <!-- YAML
246
+ added: v4.8.0
247
+ changes:
248
+ - version: v4.10.4
249
+ pr-url: https://github.com/nodejs/undici/pull/1114
250
+ description: Introduced the `BalancedPool` class.
251
+ - version: v5.8.0
252
+ pr-url: https://github.com/nodejs/undici/pull/1069
253
+ description: Adopted weighted round-robin selection across upstreams.
254
+ -->
255
+
256
+ See [Dispatcher Event: `'connect'`][].
92
257
 
93
258
  ### Event: `'disconnect'`
94
259
 
95
- See [Dispatcher Event: `'disconnect'`](/docs/docs/api/Dispatcher.md#event-disconnect).
260
+ <!-- YAML
261
+ added: v4.8.0
262
+ changes:
263
+ - version: v4.10.4
264
+ pr-url: https://github.com/nodejs/undici/pull/1114
265
+ description: Introduced the `BalancedPool` class.
266
+ - version: v5.8.0
267
+ pr-url: https://github.com/nodejs/undici/pull/1069
268
+ description: Adopted weighted round-robin selection across upstreams.
269
+ -->
270
+
271
+ See [Dispatcher Event: `'disconnect'`][].
96
272
 
97
273
  ### Event: `'drain'`
98
274
 
99
- See [Dispatcher Event: `'drain'`](/docs/docs/api/Dispatcher.md#event-drain).
275
+ <!-- YAML
276
+ added: v4.8.0
277
+ changes:
278
+ - version: v4.10.4
279
+ pr-url: https://github.com/nodejs/undici/pull/1114
280
+ description: Introduced the `BalancedPool` class.
281
+ -->
282
+
283
+ See [Dispatcher Event: `'drain'`][].
284
+
285
+ [Dispatcher Event: `'connect'`]: Dispatcher.md#event-connect
286
+ [Dispatcher Event: `'disconnect'`]: Dispatcher.md#event-disconnect
287
+ [Dispatcher Event: `'drain'`]: Dispatcher.md#event-drain
288
+ [`Dispatcher.close([callback])`]: Dispatcher.md#dispatcherclosecallback-promise
289
+ [`Dispatcher.connect(options[, callback])`]: Dispatcher.md#dispatcherconnectoptions-callback
290
+ [`Dispatcher.destroy([error, callback])`]: Dispatcher.md#dispatcherdestroyerror-callback-promise
291
+ [`Dispatcher.dispatch(options, handler)`]: Dispatcher.md#dispatcherdispatchoptions-handler
292
+ [`Dispatcher.pipeline(options, handler)`]: Dispatcher.md#dispatcherpipelineoptions-handler
293
+ [`Dispatcher.request(options[, callback])`]: Dispatcher.md#dispatcherrequestoptions-callback
294
+ [`Dispatcher.stream(options, factory[, callback])`]: Dispatcher.md#dispatcherstreamoptions-factory-callback
295
+ [`Dispatcher.upgrade(options[, callback])`]: Dispatcher.md#dispatcherupgradeoptions-callback
296
+ [`client.closed`]: Client.md#clientclosed
297
+ [`client.destroyed`]: Client.md#clientdestroyed