pi-cursor-sdk 0.1.50 → 0.1.52

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 (279) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +1 -1
  3. package/docs/cursor-live-smoke-checklist.md +4 -4
  4. package/docs/cursor-model-ux-spec.md +5 -5
  5. package/docs/cursor-native-tool-replay.md +2 -2
  6. package/docs/cursor-native-tool-visual-audit.md +1 -1
  7. package/docs/cursor-testing-lessons.md +1 -1
  8. package/package.json +3 -12
  9. package/src/cursor-fallback-models.generated.ts +536 -302
  10. package/src/cursor-provider-errors.ts +29 -0
  11. package/src/cursor-provider-turn-runner.ts +1 -1
  12. package/src/cursor-provider.ts +9 -2
  13. package/src/cursor-session-turn-queue.ts +52 -0
  14. package/src/cursor-tool-manifest.ts +1 -1
  15. package/node_modules/@connectrpc/connect-node/README.md +0 -141
  16. package/node_modules/@connectrpc/connect-node/dist/cjs/compression.d.ts +0 -15
  17. package/node_modules/@connectrpc/connect-node/dist/cjs/compression.js +0 -89
  18. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.d.ts +0 -42
  19. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.js +0 -61
  20. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.d.ts +0 -100
  21. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.js +0 -25
  22. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.d.ts +0 -96
  23. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.js +0 -25
  24. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.d.ts +0 -96
  25. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.js +0 -25
  26. package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.d.ts +0 -146
  27. package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.js +0 -536
  28. package/node_modules/@connectrpc/connect-node/dist/cjs/index.d.ts +0 -15
  29. package/node_modules/@connectrpc/connect-node/dist/cjs/index.js +0 -36
  30. package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.d.ts +0 -45
  31. package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.js +0 -154
  32. package/node_modules/@connectrpc/connect-node/dist/cjs/node-headers-polyfill.d.ts +0 -1
  33. package/node_modules/@connectrpc/connect-node/dist/cjs/node-headers-polyfill.js +0 -29
  34. package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.d.ts +0 -89
  35. package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.js +0 -58
  36. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.d.ts +0 -54
  37. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.js +0 -326
  38. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.d.ts +0 -41
  39. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.js +0 -234
  40. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.d.ts +0 -19
  41. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.js +0 -97
  42. package/node_modules/@connectrpc/connect-node/dist/cjs/package.json +0 -1
  43. package/node_modules/@connectrpc/connect-node/dist/esm/compression.d.ts +0 -15
  44. package/node_modules/@connectrpc/connect-node/dist/esm/compression.js +0 -86
  45. package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.d.ts +0 -42
  46. package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.js +0 -58
  47. package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.d.ts +0 -100
  48. package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.js +0 -22
  49. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.d.ts +0 -96
  50. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.js +0 -22
  51. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.d.ts +0 -96
  52. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.js +0 -22
  53. package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.d.ts +0 -146
  54. package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.js +0 -532
  55. package/node_modules/@connectrpc/connect-node/dist/esm/index.d.ts +0 -15
  56. package/node_modules/@connectrpc/connect-node/dist/esm/index.js +0 -23
  57. package/node_modules/@connectrpc/connect-node/dist/esm/node-error.d.ts +0 -45
  58. package/node_modules/@connectrpc/connect-node/dist/esm/node-error.js +0 -147
  59. package/node_modules/@connectrpc/connect-node/dist/esm/node-headers-polyfill.d.ts +0 -1
  60. package/node_modules/@connectrpc/connect-node/dist/esm/node-headers-polyfill.js +0 -27
  61. package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.d.ts +0 -89
  62. package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.js +0 -58
  63. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.d.ts +0 -54
  64. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.js +0 -324
  65. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.d.ts +0 -41
  66. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.js +0 -230
  67. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.d.ts +0 -19
  68. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.js +0 -93
  69. package/node_modules/@connectrpc/connect-node/package.json +0 -46
  70. package/node_modules/undici/LICENSE +0 -21
  71. package/node_modules/undici/README.md +0 -741
  72. package/node_modules/undici/docs/docs/api/Agent.md +0 -84
  73. package/node_modules/undici/docs/docs/api/BalancedPool.md +0 -99
  74. package/node_modules/undici/docs/docs/api/CacheStorage.md +0 -30
  75. package/node_modules/undici/docs/docs/api/CacheStore.md +0 -164
  76. package/node_modules/undici/docs/docs/api/Client.md +0 -288
  77. package/node_modules/undici/docs/docs/api/ClientStats.md +0 -27
  78. package/node_modules/undici/docs/docs/api/Connector.md +0 -115
  79. package/node_modules/undici/docs/docs/api/ContentType.md +0 -57
  80. package/node_modules/undici/docs/docs/api/Cookies.md +0 -128
  81. package/node_modules/undici/docs/docs/api/Debug.md +0 -62
  82. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +0 -315
  83. package/node_modules/undici/docs/docs/api/Dispatcher.md +0 -1392
  84. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +0 -159
  85. package/node_modules/undici/docs/docs/api/Errors.md +0 -49
  86. package/node_modules/undici/docs/docs/api/EventSource.md +0 -45
  87. package/node_modules/undici/docs/docs/api/Fetch.md +0 -60
  88. package/node_modules/undici/docs/docs/api/GlobalInstallation.md +0 -139
  89. package/node_modules/undici/docs/docs/api/H2CClient.md +0 -263
  90. package/node_modules/undici/docs/docs/api/MockAgent.md +0 -603
  91. package/node_modules/undici/docs/docs/api/MockCallHistory.md +0 -197
  92. package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +0 -43
  93. package/node_modules/undici/docs/docs/api/MockClient.md +0 -81
  94. package/node_modules/undici/docs/docs/api/MockErrors.md +0 -12
  95. package/node_modules/undici/docs/docs/api/MockPool.md +0 -555
  96. package/node_modules/undici/docs/docs/api/Pool.md +0 -84
  97. package/node_modules/undici/docs/docs/api/PoolStats.md +0 -35
  98. package/node_modules/undici/docs/docs/api/ProxyAgent.md +0 -229
  99. package/node_modules/undici/docs/docs/api/RedirectHandler.md +0 -93
  100. package/node_modules/undici/docs/docs/api/RetryAgent.md +0 -50
  101. package/node_modules/undici/docs/docs/api/RetryHandler.md +0 -118
  102. package/node_modules/undici/docs/docs/api/RoundRobinPool.md +0 -145
  103. package/node_modules/undici/docs/docs/api/SnapshotAgent.md +0 -616
  104. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +0 -275
  105. package/node_modules/undici/docs/docs/api/Util.md +0 -25
  106. package/node_modules/undici/docs/docs/api/WebSocket.md +0 -141
  107. package/node_modules/undici/docs/docs/api/api-lifecycle.md +0 -91
  108. package/node_modules/undici/docs/docs/best-practices/client-certificate.md +0 -64
  109. package/node_modules/undici/docs/docs/best-practices/crawling.md +0 -58
  110. package/node_modules/undici/docs/docs/best-practices/mocking-request.md +0 -190
  111. package/node_modules/undici/docs/docs/best-practices/proxy.md +0 -127
  112. package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +0 -224
  113. package/node_modules/undici/docs/docs/best-practices/writing-tests.md +0 -63
  114. package/node_modules/undici/index-fetch.js +0 -65
  115. package/node_modules/undici/index.d.ts +0 -3
  116. package/node_modules/undici/index.js +0 -234
  117. package/node_modules/undici/lib/api/abort-signal.js +0 -59
  118. package/node_modules/undici/lib/api/api-connect.js +0 -110
  119. package/node_modules/undici/lib/api/api-pipeline.js +0 -252
  120. package/node_modules/undici/lib/api/api-request.js +0 -214
  121. package/node_modules/undici/lib/api/api-stream.js +0 -209
  122. package/node_modules/undici/lib/api/api-upgrade.js +0 -111
  123. package/node_modules/undici/lib/api/index.js +0 -7
  124. package/node_modules/undici/lib/api/readable.js +0 -580
  125. package/node_modules/undici/lib/cache/memory-cache-store.js +0 -234
  126. package/node_modules/undici/lib/cache/sqlite-cache-store.js +0 -461
  127. package/node_modules/undici/lib/core/connect.js +0 -153
  128. package/node_modules/undici/lib/core/constants.js +0 -143
  129. package/node_modules/undici/lib/core/diagnostics.js +0 -227
  130. package/node_modules/undici/lib/core/errors.js +0 -477
  131. package/node_modules/undici/lib/core/request.js +0 -453
  132. package/node_modules/undici/lib/core/socks5-client.js +0 -422
  133. package/node_modules/undici/lib/core/socks5-utils.js +0 -212
  134. package/node_modules/undici/lib/core/symbols.js +0 -75
  135. package/node_modules/undici/lib/core/tree.js +0 -160
  136. package/node_modules/undici/lib/core/util.js +0 -992
  137. package/node_modules/undici/lib/dispatcher/agent.js +0 -158
  138. package/node_modules/undici/lib/dispatcher/balanced-pool.js +0 -219
  139. package/node_modules/undici/lib/dispatcher/client-h1.js +0 -1722
  140. package/node_modules/undici/lib/dispatcher/client-h2.js +0 -995
  141. package/node_modules/undici/lib/dispatcher/client.js +0 -664
  142. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +0 -184
  143. package/node_modules/undici/lib/dispatcher/dispatcher.js +0 -48
  144. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +0 -146
  145. package/node_modules/undici/lib/dispatcher/fixed-queue.js +0 -135
  146. package/node_modules/undici/lib/dispatcher/h2c-client.js +0 -51
  147. package/node_modules/undici/lib/dispatcher/pool-base.js +0 -214
  148. package/node_modules/undici/lib/dispatcher/pool.js +0 -118
  149. package/node_modules/undici/lib/dispatcher/proxy-agent.js +0 -319
  150. package/node_modules/undici/lib/dispatcher/retry-agent.js +0 -35
  151. package/node_modules/undici/lib/dispatcher/round-robin-pool.js +0 -137
  152. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +0 -260
  153. package/node_modules/undici/lib/encoding/index.js +0 -33
  154. package/node_modules/undici/lib/global.js +0 -59
  155. package/node_modules/undici/lib/handler/cache-handler.js +0 -578
  156. package/node_modules/undici/lib/handler/cache-revalidation-handler.js +0 -124
  157. package/node_modules/undici/lib/handler/decorator-handler.js +0 -67
  158. package/node_modules/undici/lib/handler/deduplication-handler.js +0 -460
  159. package/node_modules/undici/lib/handler/redirect-handler.js +0 -238
  160. package/node_modules/undici/lib/handler/retry-handler.js +0 -394
  161. package/node_modules/undici/lib/handler/unwrap-handler.js +0 -106
  162. package/node_modules/undici/lib/handler/wrap-handler.js +0 -105
  163. package/node_modules/undici/lib/interceptor/cache.js +0 -495
  164. package/node_modules/undici/lib/interceptor/decompress.js +0 -259
  165. package/node_modules/undici/lib/interceptor/deduplicate.js +0 -117
  166. package/node_modules/undici/lib/interceptor/dns.js +0 -571
  167. package/node_modules/undici/lib/interceptor/dump.js +0 -112
  168. package/node_modules/undici/lib/interceptor/redirect.js +0 -21
  169. package/node_modules/undici/lib/interceptor/response-error.js +0 -95
  170. package/node_modules/undici/lib/interceptor/retry.js +0 -19
  171. package/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  172. package/node_modules/undici/lib/llhttp/constants.d.ts +0 -195
  173. package/node_modules/undici/lib/llhttp/constants.js +0 -531
  174. package/node_modules/undici/lib/llhttp/llhttp-wasm.js +0 -15
  175. package/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +0 -15
  176. package/node_modules/undici/lib/llhttp/utils.d.ts +0 -2
  177. package/node_modules/undici/lib/llhttp/utils.js +0 -12
  178. package/node_modules/undici/lib/mock/mock-agent.js +0 -232
  179. package/node_modules/undici/lib/mock/mock-call-history.js +0 -248
  180. package/node_modules/undici/lib/mock/mock-client.js +0 -68
  181. package/node_modules/undici/lib/mock/mock-errors.js +0 -29
  182. package/node_modules/undici/lib/mock/mock-interceptor.js +0 -209
  183. package/node_modules/undici/lib/mock/mock-pool.js +0 -68
  184. package/node_modules/undici/lib/mock/mock-symbols.js +0 -32
  185. package/node_modules/undici/lib/mock/mock-utils.js +0 -486
  186. package/node_modules/undici/lib/mock/pending-interceptors-formatter.js +0 -43
  187. package/node_modules/undici/lib/mock/snapshot-agent.js +0 -353
  188. package/node_modules/undici/lib/mock/snapshot-recorder.js +0 -588
  189. package/node_modules/undici/lib/mock/snapshot-utils.js +0 -158
  190. package/node_modules/undici/lib/util/cache.js +0 -414
  191. package/node_modules/undici/lib/util/date.js +0 -653
  192. package/node_modules/undici/lib/util/promise.js +0 -28
  193. package/node_modules/undici/lib/util/runtime-features.js +0 -124
  194. package/node_modules/undici/lib/util/stats.js +0 -32
  195. package/node_modules/undici/lib/util/timers.js +0 -425
  196. package/node_modules/undici/lib/web/cache/cache.js +0 -864
  197. package/node_modules/undici/lib/web/cache/cachestorage.js +0 -152
  198. package/node_modules/undici/lib/web/cache/util.js +0 -45
  199. package/node_modules/undici/lib/web/cookies/constants.js +0 -12
  200. package/node_modules/undici/lib/web/cookies/index.js +0 -199
  201. package/node_modules/undici/lib/web/cookies/parse.js +0 -314
  202. package/node_modules/undici/lib/web/cookies/util.js +0 -282
  203. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +0 -399
  204. package/node_modules/undici/lib/web/eventsource/eventsource.js +0 -501
  205. package/node_modules/undici/lib/web/eventsource/util.js +0 -29
  206. package/node_modules/undici/lib/web/fetch/LICENSE +0 -21
  207. package/node_modules/undici/lib/web/fetch/body.js +0 -509
  208. package/node_modules/undici/lib/web/fetch/constants.js +0 -131
  209. package/node_modules/undici/lib/web/fetch/data-url.js +0 -596
  210. package/node_modules/undici/lib/web/fetch/formdata-parser.js +0 -586
  211. package/node_modules/undici/lib/web/fetch/formdata.js +0 -259
  212. package/node_modules/undici/lib/web/fetch/global.js +0 -40
  213. package/node_modules/undici/lib/web/fetch/headers.js +0 -719
  214. package/node_modules/undici/lib/web/fetch/index.js +0 -2413
  215. package/node_modules/undici/lib/web/fetch/request.js +0 -1115
  216. package/node_modules/undici/lib/web/fetch/response.js +0 -641
  217. package/node_modules/undici/lib/web/fetch/util.js +0 -1522
  218. package/node_modules/undici/lib/web/infra/index.js +0 -229
  219. package/node_modules/undici/lib/web/subresource-integrity/Readme.md +0 -9
  220. package/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js +0 -307
  221. package/node_modules/undici/lib/web/webidl/index.js +0 -1006
  222. package/node_modules/undici/lib/web/websocket/connection.js +0 -329
  223. package/node_modules/undici/lib/web/websocket/constants.js +0 -126
  224. package/node_modules/undici/lib/web/websocket/events.js +0 -331
  225. package/node_modules/undici/lib/web/websocket/frame.js +0 -133
  226. package/node_modules/undici/lib/web/websocket/permessage-deflate.js +0 -100
  227. package/node_modules/undici/lib/web/websocket/receiver.js +0 -507
  228. package/node_modules/undici/lib/web/websocket/sender.js +0 -109
  229. package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +0 -104
  230. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +0 -498
  231. package/node_modules/undici/lib/web/websocket/util.js +0 -347
  232. package/node_modules/undici/lib/web/websocket/websocket.js +0 -758
  233. package/node_modules/undici/package.json +0 -152
  234. package/node_modules/undici/scripts/strip-comments.js +0 -10
  235. package/node_modules/undici/types/README.md +0 -6
  236. package/node_modules/undici/types/agent.d.ts +0 -32
  237. package/node_modules/undici/types/api.d.ts +0 -43
  238. package/node_modules/undici/types/balanced-pool.d.ts +0 -30
  239. package/node_modules/undici/types/cache-interceptor.d.ts +0 -179
  240. package/node_modules/undici/types/cache.d.ts +0 -36
  241. package/node_modules/undici/types/client-stats.d.ts +0 -15
  242. package/node_modules/undici/types/client.d.ts +0 -139
  243. package/node_modules/undici/types/connector.d.ts +0 -36
  244. package/node_modules/undici/types/content-type.d.ts +0 -21
  245. package/node_modules/undici/types/cookies.d.ts +0 -30
  246. package/node_modules/undici/types/diagnostics-channel.d.ts +0 -74
  247. package/node_modules/undici/types/dispatcher.d.ts +0 -275
  248. package/node_modules/undici/types/env-http-proxy-agent.d.ts +0 -22
  249. package/node_modules/undici/types/errors.d.ts +0 -177
  250. package/node_modules/undici/types/eventsource.d.ts +0 -66
  251. package/node_modules/undici/types/fetch.d.ts +0 -231
  252. package/node_modules/undici/types/formdata.d.ts +0 -114
  253. package/node_modules/undici/types/global-dispatcher.d.ts +0 -9
  254. package/node_modules/undici/types/global-origin.d.ts +0 -7
  255. package/node_modules/undici/types/h2c-client.d.ts +0 -73
  256. package/node_modules/undici/types/handlers.d.ts +0 -14
  257. package/node_modules/undici/types/header.d.ts +0 -160
  258. package/node_modules/undici/types/index.d.ts +0 -91
  259. package/node_modules/undici/types/interceptors.d.ts +0 -80
  260. package/node_modules/undici/types/mock-agent.d.ts +0 -68
  261. package/node_modules/undici/types/mock-call-history.d.ts +0 -111
  262. package/node_modules/undici/types/mock-client.d.ts +0 -27
  263. package/node_modules/undici/types/mock-errors.d.ts +0 -12
  264. package/node_modules/undici/types/mock-interceptor.d.ts +0 -94
  265. package/node_modules/undici/types/mock-pool.d.ts +0 -27
  266. package/node_modules/undici/types/patch.d.ts +0 -29
  267. package/node_modules/undici/types/pool-stats.d.ts +0 -19
  268. package/node_modules/undici/types/pool.d.ts +0 -41
  269. package/node_modules/undici/types/proxy-agent.d.ts +0 -29
  270. package/node_modules/undici/types/readable.d.ts +0 -68
  271. package/node_modules/undici/types/retry-agent.d.ts +0 -8
  272. package/node_modules/undici/types/retry-handler.d.ts +0 -125
  273. package/node_modules/undici/types/round-robin-pool.d.ts +0 -41
  274. package/node_modules/undici/types/snapshot-agent.d.ts +0 -109
  275. package/node_modules/undici/types/socks5-proxy-agent.d.ts +0 -25
  276. package/node_modules/undici/types/util.d.ts +0 -18
  277. package/node_modules/undici/types/utility.d.ts +0 -7
  278. package/node_modules/undici/types/webidl.d.ts +0 -347
  279. package/node_modules/undici/types/websocket.d.ts +0 -188
@@ -1,603 +0,0 @@
1
- # Class: MockAgent
2
-
3
- Extends: `undici.Dispatcher`
4
-
5
- A mocked Agent class that implements the Agent API. It allows one to intercept HTTP requests made through undici and return mocked responses instead.
6
-
7
- ## `new MockAgent([options])`
8
-
9
- Arguments:
10
-
11
- * **options** `MockAgentOptions` (optional) - It extends the `Agent` options.
12
-
13
- Returns: `MockAgent`
14
-
15
- ### Parameter: `MockAgentOptions`
16
-
17
- Extends: [`AgentOptions`](/docs/docs/api/Agent.md#parameter-agentoptions)
18
-
19
- * **agent** `Agent` (optional) - Default: `new Agent([options])` - a custom agent encapsulated by the MockAgent.
20
-
21
- * **ignoreTrailingSlash** `boolean` (optional) - Default: `false` - set the default value for `ignoreTrailingSlash` for interceptors.
22
-
23
- * **acceptNonStandardSearchParameters** `boolean` (optional) - Default: `false` - set to `true` if the matcher should also accept non standard search parameters such as multi-value items specified with `[]` (e.g. `param[]=1&param[]=2&param[]=3`) and multi-value items which values are comma separated (e.g. `param=1,2,3`).
24
-
25
- ### Example - Basic MockAgent instantiation
26
-
27
- This will instantiate the MockAgent. It will not do anything until registered as the agent to use with requests and mock interceptions are added.
28
-
29
- ```js
30
- import { MockAgent } from 'undici'
31
-
32
- const mockAgent = new MockAgent()
33
- ```
34
-
35
- ### Example - Basic MockAgent instantiation with custom agent
36
-
37
- ```js
38
- import { Agent, MockAgent } from 'undici'
39
-
40
- const agent = new Agent()
41
-
42
- const mockAgent = new MockAgent({ agent })
43
- ```
44
-
45
- ## Instance Methods
46
-
47
- ### `MockAgent.get(origin)`
48
-
49
- This method creates and retrieves MockPool or MockClient instances which can then be used to intercept HTTP requests. If the number of connections on the mock agent is set to 1, a MockClient instance is returned. Otherwise a MockPool instance is returned.
50
-
51
- For subsequent `MockAgent.get` calls on the same origin, the same mock instance will be returned.
52
-
53
- Arguments:
54
-
55
- * **origin** `string | RegExp | (value) => boolean` - a matcher for the pool origin to be retrieved from the MockAgent.
56
-
57
- | Matcher type | Condition to pass |
58
- |:------------:| -------------------------- |
59
- | `string` | Exact match against string |
60
- | `RegExp` | Regex must pass |
61
- | `Function` | Function must return true |
62
-
63
- Returns: `MockClient | MockPool`.
64
-
65
- | `MockAgentOptions` | Mock instance returned |
66
- | -------------------- | ---------------------- |
67
- | `connections === 1` | `MockClient` |
68
- | `connections` > `1` | `MockPool` |
69
-
70
- #### Example - Basic Mocked Request
71
-
72
- ```js
73
- import { MockAgent, setGlobalDispatcher, request } from 'undici'
74
-
75
- const mockAgent = new MockAgent()
76
- setGlobalDispatcher(mockAgent)
77
-
78
- const mockPool = mockAgent.get('http://localhost:3000')
79
- mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
80
-
81
- const { statusCode, body } = await request('http://localhost:3000/foo')
82
-
83
- console.log('response received', statusCode) // response received 200
84
-
85
- for await (const data of body) {
86
- console.log('data', data.toString('utf8')) // data foo
87
- }
88
- ```
89
-
90
- #### Example - Basic Mocked Request with local mock agent dispatcher
91
-
92
- ```js
93
- import { MockAgent, request } from 'undici'
94
-
95
- const mockAgent = new MockAgent()
96
-
97
- const mockPool = mockAgent.get('http://localhost:3000')
98
- mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
99
-
100
- const {
101
- statusCode,
102
- body
103
- } = await request('http://localhost:3000/foo', { dispatcher: mockAgent })
104
-
105
- console.log('response received', statusCode) // response received 200
106
-
107
- for await (const data of body) {
108
- console.log('data', data.toString('utf8')) // data foo
109
- }
110
- ```
111
-
112
- #### Example - Basic Mocked Request with local mock pool dispatcher
113
-
114
- ```js
115
- import { MockAgent, request } from 'undici'
116
-
117
- const mockAgent = new MockAgent()
118
-
119
- const mockPool = mockAgent.get('http://localhost:3000')
120
- mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
121
-
122
- const {
123
- statusCode,
124
- body
125
- } = await request('http://localhost:3000/foo', { dispatcher: mockPool })
126
-
127
- console.log('response received', statusCode) // response received 200
128
-
129
- for await (const data of body) {
130
- console.log('data', data.toString('utf8')) // data foo
131
- }
132
- ```
133
-
134
- #### Example - Basic Mocked Request with local mock client dispatcher
135
-
136
- ```js
137
- import { MockAgent, request } from 'undici'
138
-
139
- const mockAgent = new MockAgent({ connections: 1 })
140
-
141
- const mockClient = mockAgent.get('http://localhost:3000')
142
- mockClient.intercept({ path: '/foo' }).reply(200, 'foo')
143
-
144
- const {
145
- statusCode,
146
- body
147
- } = await request('http://localhost:3000/foo', { dispatcher: mockClient })
148
-
149
- console.log('response received', statusCode) // response received 200
150
-
151
- for await (const data of body) {
152
- console.log('data', data.toString('utf8')) // data foo
153
- }
154
- ```
155
-
156
- #### Example - Basic Mocked requests with multiple intercepts
157
-
158
- ```js
159
- import { MockAgent, setGlobalDispatcher, request } from 'undici'
160
-
161
- const mockAgent = new MockAgent()
162
- setGlobalDispatcher(mockAgent)
163
-
164
- const mockPool = mockAgent.get('http://localhost:3000')
165
- mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
166
- mockPool.intercept({ path: '/hello'}).reply(200, 'hello')
167
-
168
- const result1 = await request('http://localhost:3000/foo')
169
-
170
- console.log('response received', result1.statusCode) // response received 200
171
-
172
- for await (const data of result1.body) {
173
- console.log('data', data.toString('utf8')) // data foo
174
- }
175
-
176
- const result2 = await request('http://localhost:3000/hello')
177
-
178
- console.log('response received', result2.statusCode) // response received 200
179
-
180
- for await (const data of result2.body) {
181
- console.log('data', data.toString('utf8')) // data hello
182
- }
183
- ```
184
-
185
- #### Example - Mock different requests within the same file
186
-
187
- ```js
188
- const { MockAgent, setGlobalDispatcher } = require('undici');
189
- const agent = new MockAgent();
190
- agent.disableNetConnect();
191
- setGlobalDispatcher(agent);
192
- describe('Test', () => {
193
- it('200', async () => {
194
- const mockAgent = agent.get('http://test.com');
195
- // your test
196
- });
197
- it('200', async () => {
198
- const mockAgent = agent.get('http://testing.com');
199
- // your test
200
- });
201
- });
202
- ```
203
-
204
- #### Example - Mocked request with query body, headers and trailers
205
-
206
- ```js
207
- import { MockAgent, setGlobalDispatcher, request } from 'undici'
208
-
209
- const mockAgent = new MockAgent()
210
- setGlobalDispatcher(mockAgent)
211
-
212
- const mockPool = mockAgent.get('http://localhost:3000')
213
-
214
- mockPool.intercept({
215
- path: '/foo?hello=there&see=ya',
216
- method: 'POST',
217
- body: 'form1=data1&form2=data2'
218
- }).reply(200, { foo: 'bar' }, {
219
- headers: { 'content-type': 'application/json' },
220
- trailers: { 'Content-MD5': 'test' }
221
- })
222
-
223
- const {
224
- statusCode,
225
- headers,
226
- trailers,
227
- body
228
- } = await request('http://localhost:3000/foo?hello=there&see=ya', {
229
- method: 'POST',
230
- body: 'form1=data1&form2=data2'
231
- })
232
-
233
- console.log('response received', statusCode) // response received 200
234
- console.log('headers', headers) // { 'content-type': 'application/json' }
235
-
236
- for await (const data of body) {
237
- console.log('data', data.toString('utf8')) // '{"foo":"bar"}'
238
- }
239
-
240
- console.log('trailers', trailers) // { 'content-md5': 'test' }
241
- ```
242
-
243
- #### Example - Mocked request with origin regex
244
-
245
- ```js
246
- import { MockAgent, setGlobalDispatcher, request } from 'undici'
247
-
248
- const mockAgent = new MockAgent()
249
- setGlobalDispatcher(mockAgent)
250
-
251
- const mockPool = mockAgent.get(new RegExp('http://localhost:3000'))
252
- mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
253
-
254
- const {
255
- statusCode,
256
- body
257
- } = await request('http://localhost:3000/foo')
258
-
259
- console.log('response received', statusCode) // response received 200
260
-
261
- for await (const data of body) {
262
- console.log('data', data.toString('utf8')) // data foo
263
- }
264
- ```
265
-
266
- #### Example - Mocked request with origin function
267
-
268
- ```js
269
- import { MockAgent, setGlobalDispatcher, request } from 'undici'
270
-
271
- const mockAgent = new MockAgent()
272
- setGlobalDispatcher(mockAgent)
273
-
274
- const mockPool = mockAgent.get((origin) => origin === 'http://localhost:3000')
275
- mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
276
-
277
- const {
278
- statusCode,
279
- body
280
- } = await request('http://localhost:3000/foo')
281
-
282
- console.log('response received', statusCode) // response received 200
283
-
284
- for await (const data of body) {
285
- console.log('data', data.toString('utf8')) // data foo
286
- }
287
- ```
288
-
289
- ### `MockAgent.close()`
290
-
291
- Closes the mock agent and waits for registered mock pools and clients to also close before resolving.
292
-
293
- Returns: `Promise<void>`
294
-
295
- #### Example - clean up after tests are complete
296
-
297
- ```js
298
- import { MockAgent, setGlobalDispatcher } from 'undici'
299
-
300
- const mockAgent = new MockAgent()
301
- setGlobalDispatcher(mockAgent)
302
-
303
- await mockAgent.close()
304
- ```
305
-
306
- ### `MockAgent.dispatch(options, handlers)`
307
-
308
- Implements [`Agent.dispatch(options, handlers)`](/docs/docs/api/Agent.md#parameter-agentdispatchoptions).
309
-
310
- ### `MockAgent.request(options[, callback])`
311
-
312
- See [`Dispatcher.request(options [, callback])`](/docs/docs/api/Dispatcher.md#dispatcherrequestoptions-callback).
313
-
314
- #### Example - MockAgent request
315
-
316
- ```js
317
- import { MockAgent } from 'undici'
318
-
319
- const mockAgent = new MockAgent()
320
-
321
- const mockPool = mockAgent.get('http://localhost:3000')
322
- mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
323
-
324
- const {
325
- statusCode,
326
- body
327
- } = await mockAgent.request({
328
- origin: 'http://localhost:3000',
329
- path: '/foo',
330
- method: 'GET'
331
- })
332
-
333
- console.log('response received', statusCode) // response received 200
334
-
335
- for await (const data of body) {
336
- console.log('data', data.toString('utf8')) // data foo
337
- }
338
- ```
339
-
340
- ### `MockAgent.deactivate()`
341
-
342
- This method disables mocking in MockAgent.
343
-
344
- Returns: `void`
345
-
346
- #### Example - Deactivate Mocking
347
-
348
- ```js
349
- import { MockAgent, setGlobalDispatcher } from 'undici'
350
-
351
- const mockAgent = new MockAgent()
352
- setGlobalDispatcher(mockAgent)
353
-
354
- mockAgent.deactivate()
355
- ```
356
-
357
- ### `MockAgent.activate()`
358
-
359
- This method enables mocking in a MockAgent instance. When instantiated, a MockAgent is automatically activated. Therefore, this method is only effective after `MockAgent.deactivate` has been called.
360
-
361
- Returns: `void`
362
-
363
- #### Example - Activate Mocking
364
-
365
- ```js
366
- import { MockAgent, setGlobalDispatcher } from 'undici'
367
-
368
- const mockAgent = new MockAgent()
369
- setGlobalDispatcher(mockAgent)
370
-
371
- mockAgent.deactivate()
372
- // No mocking will occur
373
-
374
- // Later
375
- mockAgent.activate()
376
- ```
377
-
378
- ### `MockAgent.enableNetConnect([host])`
379
-
380
- When requests are not matched in a MockAgent intercept, a real HTTP request is attempted. We can control this further through the use of `enableNetConnect`. This is achieved by defining host matchers so only matching requests will be attempted.
381
-
382
- When using a string, it should only include the **hostname and optionally, the port**. In addition, calling this method multiple times with a string will allow all HTTP requests that match these values.
383
-
384
- Arguments:
385
-
386
- * **host** `string | RegExp | (value) => boolean` - (optional)
387
-
388
- Returns: `void`
389
-
390
- #### Example - Allow all non-matching urls to be dispatched in a real HTTP request
391
-
392
- ```js
393
- import { MockAgent, setGlobalDispatcher, request } from 'undici'
394
-
395
- const mockAgent = new MockAgent()
396
- setGlobalDispatcher(mockAgent)
397
-
398
- mockAgent.enableNetConnect()
399
-
400
- await request('http://example.com')
401
- // A real request is made
402
- ```
403
-
404
- #### Example - Allow requests matching a host string to make real requests
405
-
406
- ```js
407
- import { MockAgent, setGlobalDispatcher, request } from 'undici'
408
-
409
- const mockAgent = new MockAgent()
410
- setGlobalDispatcher(mockAgent)
411
-
412
- mockAgent.enableNetConnect('example-1.com')
413
- mockAgent.enableNetConnect('example-2.com:8080')
414
-
415
- await request('http://example-1.com')
416
- // A real request is made
417
-
418
- await request('http://example-2.com:8080')
419
- // A real request is made
420
-
421
- await request('http://example-3.com')
422
- // Will throw
423
- ```
424
-
425
- #### Example - Allow requests matching a host regex to make real requests
426
-
427
- ```js
428
- import { MockAgent, setGlobalDispatcher, request } from 'undici'
429
-
430
- const mockAgent = new MockAgent()
431
- setGlobalDispatcher(mockAgent)
432
-
433
- mockAgent.enableNetConnect(new RegExp('example.com'))
434
-
435
- await request('http://example.com')
436
- // A real request is made
437
- ```
438
-
439
- #### Example - Allow requests matching a host function to make real requests
440
-
441
- ```js
442
- import { MockAgent, setGlobalDispatcher, request } from 'undici'
443
-
444
- const mockAgent = new MockAgent()
445
- setGlobalDispatcher(mockAgent)
446
-
447
- mockAgent.enableNetConnect((value) => value === 'example.com')
448
-
449
- await request('http://example.com')
450
- // A real request is made
451
- ```
452
-
453
- ### `MockAgent.disableNetConnect()`
454
-
455
- This method causes all requests to throw when requests are not matched in a MockAgent intercept.
456
-
457
- Returns: `void`
458
-
459
- #### Example - Disable all non-matching requests by throwing an error for each
460
-
461
- ```js
462
- import { MockAgent, request } from 'undici'
463
-
464
- const mockAgent = new MockAgent()
465
-
466
- mockAgent.disableNetConnect()
467
-
468
- await request('http://example.com')
469
- // Will throw
470
- ```
471
-
472
- ### `MockAgent.pendingInterceptors()`
473
-
474
- This method returns any pending interceptors registered on a mock agent. A pending interceptor meets one of the following criteria:
475
-
476
- - Is registered with neither `.times(<number>)` nor `.persist()`, and has not been invoked;
477
- - Is persistent (i.e., registered with `.persist()`) and has not been invoked;
478
- - Is registered with `.times(<number>)` and has not been invoked `<number>` of times.
479
-
480
- Returns: `PendingInterceptor[]` (where `PendingInterceptor` is a `MockDispatch` with an additional `origin: string`)
481
-
482
- #### Example - List all pending interceptors
483
-
484
- ```js
485
- const agent = new MockAgent()
486
- agent.disableNetConnect()
487
-
488
- agent
489
- .get('https://example.com')
490
- .intercept({ method: 'GET', path: '/' })
491
- .reply(200)
492
-
493
- const pendingInterceptors = agent.pendingInterceptors()
494
- // Returns [
495
- // {
496
- // timesInvoked: 0,
497
- // times: 1,
498
- // persist: false,
499
- // consumed: false,
500
- // pending: true,
501
- // path: '/',
502
- // method: 'GET',
503
- // body: undefined,
504
- // headers: undefined,
505
- // data: {
506
- // error: null,
507
- // statusCode: 200,
508
- // data: '',
509
- // headers: {},
510
- // trailers: {}
511
- // },
512
- // origin: 'https://example.com'
513
- // }
514
- // ]
515
- ```
516
-
517
- ### `MockAgent.assertNoPendingInterceptors([options])`
518
-
519
- This method throws if the mock agent has any pending interceptors. A pending interceptor meets one of the following criteria:
520
-
521
- - Is registered with neither `.times(<number>)` nor `.persist()`, and has not been invoked;
522
- - Is persistent (i.e., registered with `.persist()`) and has not been invoked;
523
- - Is registered with `.times(<number>)` and has not been invoked `<number>` of times.
524
-
525
- #### Example - Check that there are no pending interceptors
526
-
527
- ```js
528
- const agent = new MockAgent()
529
- agent.disableNetConnect()
530
-
531
- agent
532
- .get('https://example.com')
533
- .intercept({ method: 'GET', path: '/' })
534
- .reply(200)
535
-
536
- agent.assertNoPendingInterceptors()
537
- // Throws an UndiciError with the following message:
538
- //
539
- // 1 interceptor is pending:
540
- //
541
- // ┌─────────┬────────┬───────────────────────┬──────┬─────────────┬────────────┬─────────────┬───────────┐
542
- // │ (index) │ Method │ Origin │ Path │ Status code │ Persistent │ Invocations │ Remaining │
543
- // ├─────────┼────────┼───────────────────────┼──────┼─────────────┼────────────┼─────────────┼───────────┤
544
- // │ 0 │ 'GET' │ 'https://example.com' │ '/' │ 200 │ '❌' │ 0 │ 1 │
545
- // └─────────┴────────┴───────────────────────┴──────┴─────────────┴────────────┴─────────────┴───────────┘
546
- ```
547
-
548
- #### Example - access call history on MockAgent
549
-
550
- You can register every call made within a MockAgent to be able to retrieve the body, headers and so on.
551
-
552
- This is not enabled by default.
553
-
554
- ```js
555
- import { MockAgent, setGlobalDispatcher, request } from 'undici'
556
-
557
- const mockAgent = new MockAgent({ enableCallHistory: true })
558
- setGlobalDispatcher(mockAgent)
559
-
560
- await request('http://example.com', { query: { item: 1 }})
561
-
562
- mockAgent.getCallHistory()?.firstCall()
563
- // Returns
564
- // MockCallHistoryLog {
565
- // body: undefined,
566
- // headers: undefined,
567
- // method: 'GET',
568
- // origin: 'http://example.com',
569
- // fullUrl: 'http://example.com/?item=1',
570
- // path: '/',
571
- // searchParams: { item: '1' },
572
- // protocol: 'http:',
573
- // host: 'example.com',
574
- // port: ''
575
- // }
576
- ```
577
-
578
- #### Example - clear call history
579
-
580
- ```js
581
- const mockAgent = new MockAgent()
582
-
583
- mockAgent.clearAllCallHistory()
584
- ```
585
-
586
- #### Example - call history instance class method
587
-
588
- ```js
589
- const mockAgent = new MockAgent()
590
-
591
- const mockAgentHistory = mockAgent.getCallHistory()
592
-
593
- mockAgentHistory?.calls() // returns an array of MockCallHistoryLogs
594
- mockAgentHistory?.firstCall() // returns the first MockCallHistoryLogs or undefined
595
- mockAgentHistory?.lastCall() // returns the last MockCallHistoryLogs or undefined
596
- mockAgentHistory?.nthCall(3) // returns the third MockCallHistoryLogs or undefined
597
- mockAgentHistory?.filterCalls({ path: '/endpoint', hash: '#hash-value' }) // returns an Array of MockCallHistoryLogs WHERE path === /endpoint OR hash === #hash-value
598
- mockAgentHistory?.filterCalls({ path: '/endpoint', hash: '#hash-value' }, { operator: 'AND' }) // returns an Array of MockCallHistoryLogs WHERE path === /endpoint AND hash === #hash-value
599
- mockAgentHistory?.filterCalls(/"data": "{}"/) // returns an Array of MockCallHistoryLogs where any value match regexp
600
- mockAgentHistory?.filterCalls('application/json') // returns an Array of MockCallHistoryLogs where any value === 'application/json'
601
- mockAgentHistory?.filterCalls((log) => log.path === '/endpoint') // returns an Array of MockCallHistoryLogs when given function returns true
602
- mockAgentHistory?.clear() // clear the history
603
- ```