@mswjs/interceptors 0.41.9 → 0.42.0

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 (335) hide show
  1. package/README.md +274 -228
  2. package/lib/browser/{bufferUtils-BiiO6HZv.mjs → buffer-utils-DJj7YzLG.js} +3 -3
  3. package/lib/browser/buffer-utils-DJj7YzLG.js.map +1 -0
  4. package/lib/browser/create-request-id-DlEd4GOA.js +184 -0
  5. package/lib/browser/create-request-id-DlEd4GOA.js.map +1 -0
  6. package/lib/browser/{getRawRequest-B1BqgWG6.mjs → fetch-utils-zxA_SD66.js} +123 -52
  7. package/lib/browser/fetch-utils-zxA_SD66.js.map +1 -0
  8. package/lib/browser/handle-request-CIOa9O-N.js +167 -0
  9. package/lib/browser/handle-request-CIOa9O-N.js.map +1 -0
  10. package/lib/{node/hasConfigurableGlobal-BiTmog1u.mjs → browser/has-configurable-global-Cew-dYqk.js} +5 -7
  11. package/lib/browser/has-configurable-global-Cew-dYqk.js.map +1 -0
  12. package/lib/browser/http-CB9rQ7i_.d.ts +105 -0
  13. package/lib/browser/{index.d.cts → index.d.ts} +33 -38
  14. package/lib/browser/index.js +130 -0
  15. package/lib/browser/index.js.map +1 -0
  16. package/lib/browser/interceptor-dtJZ_9QT.d.ts +50 -0
  17. package/lib/browser/interceptors/WebSocket/index.d.ts +2 -0
  18. package/lib/browser/interceptors/WebSocket/{index.mjs → index.js} +39 -30
  19. package/lib/browser/interceptors/WebSocket/index.js.map +1 -0
  20. package/lib/browser/interceptors/XMLHttpRequest/web.d.ts +11 -0
  21. package/lib/browser/interceptors/XMLHttpRequest/web.js +2 -0
  22. package/lib/browser/interceptors/fetch/web.d.ts +14 -0
  23. package/lib/browser/interceptors/fetch/web.js +2 -0
  24. package/lib/browser/presets/browser.d.ts +11 -0
  25. package/lib/browser/presets/browser.js +12 -0
  26. package/lib/browser/presets/browser.js.map +1 -0
  27. package/lib/browser/{resolveWebSocketUrl-C83-x9iE.mjs → resolve-web-socket-url-CSvNPLGi.js} +3 -3
  28. package/lib/browser/resolve-web-socket-url-CSvNPLGi.js.map +1 -0
  29. package/lib/browser/web-BjVDkiX0.js +248 -0
  30. package/lib/browser/web-BjVDkiX0.js.map +1 -0
  31. package/lib/browser/{XMLHttpRequest-DrZAf3w6.mjs → web-C2oKsT3Q.js} +327 -255
  32. package/lib/browser/web-C2oKsT3Q.js.map +1 -0
  33. package/lib/browser/{interceptors/WebSocket/index.d.cts → websocket-CC0nB0md.d.ts} +41 -33
  34. package/lib/node/batch-interceptor-ByEZVih3.js +119 -0
  35. package/lib/node/batch-interceptor-ByEZVih3.js.map +1 -0
  36. package/lib/node/batch-interceptor-CPjFK2td.d.ts +28 -0
  37. package/lib/node/buffer-utils-BvPY1Tc-.js +187 -0
  38. package/lib/node/buffer-utils-BvPY1Tc-.js.map +1 -0
  39. package/lib/node/fetch-utils-Dw1PsmtX.js +568 -0
  40. package/lib/node/fetch-utils-Dw1PsmtX.js.map +1 -0
  41. package/lib/node/has-configurable-global-CJCh_g1I.js +22 -0
  42. package/lib/node/has-configurable-global-CJCh_g1I.js.map +1 -0
  43. package/lib/node/http-CB9rQ7i_.d.ts +105 -0
  44. package/lib/{browser/interceptors/WebSocket/index.d.mts → node/index.d.ts} +120 -60
  45. package/lib/node/{index.mjs → index.js} +8 -11
  46. package/lib/node/index.js.map +1 -0
  47. package/lib/node/interceptor-dtJZ_9QT.d.ts +50 -0
  48. package/lib/node/interceptors/ClientRequest/index.d.ts +14 -0
  49. package/lib/node/interceptors/ClientRequest/index.js +67 -0
  50. package/lib/node/interceptors/ClientRequest/index.js.map +1 -0
  51. package/lib/node/interceptors/XMLHttpRequest/node.d.ts +12 -0
  52. package/lib/node/interceptors/XMLHttpRequest/node.js +74 -0
  53. package/lib/node/interceptors/XMLHttpRequest/node.js.map +1 -0
  54. package/lib/node/interceptors/fetch/node.d.ts +18 -0
  55. package/lib/node/interceptors/fetch/node.js +83 -0
  56. package/lib/node/interceptors/fetch/node.js.map +1 -0
  57. package/lib/node/interceptors/http/index.d.ts +14 -0
  58. package/lib/node/interceptors/http/index.js +32 -0
  59. package/lib/node/interceptors/http/index.js.map +1 -0
  60. package/lib/node/interceptors/net/index.d.ts +203 -0
  61. package/lib/node/interceptors/net/index.js +2 -0
  62. package/lib/node/llhttp/constants.cjs +485 -0
  63. package/lib/node/llhttp/constants.d.cts +957 -0
  64. package/lib/node/llhttp/llhttp.wasm +0 -0
  65. package/lib/node/net-DtMnyEeg.js +1388 -0
  66. package/lib/node/net-DtMnyEeg.js.map +1 -0
  67. package/lib/node/presets/node.d.ts +12 -0
  68. package/lib/node/presets/node.js +17 -0
  69. package/lib/node/presets/node.js.map +1 -0
  70. package/lib/node/{RemoteHttpInterceptor.d.cts → remote-http-interceptor.d.ts} +12 -11
  71. package/lib/node/{RemoteHttpInterceptor.mjs → remote-http-interceptor.js} +38 -33
  72. package/lib/node/remote-http-interceptor.js.map +1 -0
  73. package/lib/node/source-lP0yyEtA.js +1990 -0
  74. package/lib/node/source-lP0yyEtA.js.map +1 -0
  75. package/package.json +79 -118
  76. package/src/batch-interceptor.test.ts +475 -0
  77. package/src/batch-interceptor.ts +244 -0
  78. package/src/{createRequestId.test.ts → create-request-id.test.ts} +1 -2
  79. package/src/disposable.ts +13 -0
  80. package/src/events/http.ts +92 -0
  81. package/src/events/websocket.ts +47 -0
  82. package/src/glossary.ts +1 -27
  83. package/src/index.ts +18 -10
  84. package/src/interceptor.test.ts +279 -0
  85. package/src/interceptor.ts +139 -0
  86. package/src/interceptors/ClientRequest/index.test.ts +21 -39
  87. package/src/interceptors/ClientRequest/index.ts +64 -179
  88. package/src/interceptors/ClientRequest/utils/{recordRawHeaders.test.ts → record-raw-headers.test.ts} +1 -2
  89. package/src/interceptors/ClientRequest/utils/{recordRawHeaders.ts → record-raw-headers.ts} +29 -2
  90. package/src/interceptors/WebSocket/index.ts +33 -50
  91. package/src/interceptors/WebSocket/utils/{bindEvent.test.ts → bind-event.test.ts} +1 -2
  92. package/src/interceptors/WebSocket/utils/events.test.ts +0 -1
  93. package/src/interceptors/WebSocket/{WebSocketClassTransport.ts → web-socket-class-transport.ts} +3 -3
  94. package/src/interceptors/WebSocket/{WebSocketClientConnection.ts → web-socket-client-connection.ts} +4 -4
  95. package/src/interceptors/WebSocket/{WebSocketOverride.ts → web-socket-override.ts} +6 -7
  96. package/src/interceptors/WebSocket/{WebSocketServerConnection.ts → web-socket-server-connection.ts} +4 -4
  97. package/src/interceptors/WebSocket/{WebSocketTransport.ts → web-socket-transport.ts} +1 -1
  98. package/src/interceptors/XMLHttpRequest/node.ts +104 -0
  99. package/src/interceptors/XMLHttpRequest/polyfills/{ProgressEventPolyfill.ts → progress-event-polyfill.ts} +1 -1
  100. package/src/interceptors/XMLHttpRequest/utils/{concateArrayBuffer.test.ts → concat-array-buffer.test.ts} +1 -2
  101. package/src/interceptors/XMLHttpRequest/utils/{concatArrayBuffer.ts → concat-array-buffer.ts} +1 -1
  102. package/src/interceptors/XMLHttpRequest/utils/{createEvent.test.ts → create-event.test.ts} +3 -4
  103. package/src/interceptors/XMLHttpRequest/utils/{createEvent.ts → create-event.ts} +2 -2
  104. package/src/interceptors/XMLHttpRequest/utils/{createResponse.ts → create-response.ts} +1 -1
  105. package/src/interceptors/XMLHttpRequest/utils/{getBodyByteLength.test.ts → get-body-byte-length.test.ts} +1 -2
  106. package/src/interceptors/XMLHttpRequest/web.ts +34 -0
  107. package/src/interceptors/XMLHttpRequest/{XMLHttpRequestController.ts → xml-http-request-controller.ts} +363 -204
  108. package/src/interceptors/XMLHttpRequest/{XMLHttpRequestProxy.ts → xml-http-request-proxy.ts} +28 -25
  109. package/src/interceptors/fetch/node.ts +103 -0
  110. package/src/interceptors/fetch/utils/{followRedirect.ts → follow-redirect.ts} +1 -1
  111. package/src/interceptors/fetch/web.ts +217 -0
  112. package/src/interceptors/http/forward-events.test.ts +86 -0
  113. package/src/interceptors/http/forward-events.ts +139 -0
  114. package/src/interceptors/http/http-parser/index.ts +310 -0
  115. package/src/interceptors/http/http-parser/llhttp/constants.cjs +485 -0
  116. package/src/interceptors/http/http-parser/llhttp/constants.d.cts +957 -0
  117. package/src/interceptors/http/http-parser/llhttp/llhttp.wasm +0 -0
  118. package/src/interceptors/http/http-parser.ts +138 -0
  119. package/src/interceptors/http/index.ts +34 -0
  120. package/src/interceptors/http/source.ts +688 -0
  121. package/src/interceptors/net/index.ts +368 -0
  122. package/src/interceptors/net/socket-controller.ts +1476 -0
  123. package/src/interceptors/net/utils/address-info.ts +54 -0
  124. package/src/interceptors/net/utils/connection-options-to-url.ts +56 -0
  125. package/src/interceptors/net/utils/flush-writes.ts +57 -0
  126. package/src/interceptors/net/utils/get-tls-connect-options.ts +23 -0
  127. package/src/interceptors/net/utils/normalize-net-connect-args.test.ts +233 -0
  128. package/src/interceptors/net/utils/normalize-net-connect-args.ts +121 -0
  129. package/src/interceptors/net/utils/normalize-tls-connect-args.ts +50 -0
  130. package/src/presets/browser.ts +4 -4
  131. package/src/presets/node.ts +4 -4
  132. package/src/{RemoteHttpInterceptor.ts → remote-http-interceptor.ts} +55 -42
  133. package/src/request-context.ts +40 -0
  134. package/src/{RequestController.test.ts → request-controller.test.ts} +37 -3
  135. package/src/{RequestController.ts → request-controller.ts} +33 -11
  136. package/src/utils/{bufferUtils.test.ts → buffer-utils.test.ts} +1 -2
  137. package/src/utils/buffer-utils.ts +37 -0
  138. package/src/utils/{cloneObject.test.ts → clone-object.test.ts} +1 -2
  139. package/src/utils/{cloneObject.ts → clone-object.ts} +8 -8
  140. package/src/utils/{createProxy.test.ts → create-proxy.test.ts} +6 -4
  141. package/src/utils/{createProxy.ts → create-proxy.ts} +1 -1
  142. package/src/utils/{fetchUtils.test.ts → fetch-utils.test.ts} +1 -1
  143. package/src/utils/{fetchUtils.ts → fetch-utils.ts} +28 -3
  144. package/src/utils/{findPropertySource.test.ts → find-property-source.test.ts} +1 -2
  145. package/src/utils/{getCleanUrl.test.ts → get-clean-url.test.ts} +1 -2
  146. package/src/utils/{getUrlByRequestOptions.test.ts → get-url-by-request-options.test.ts} +4 -8
  147. package/src/utils/{getUrlByRequestOptions.ts → get-url-by-request-options.ts} +16 -16
  148. package/src/utils/{getValueBySymbol.test.ts → get-value-by-symbol.test.ts} +1 -2
  149. package/src/utils/{handleRequest.ts → handle-request.ts} +61 -41
  150. package/src/utils/{hasConfigurableGlobal.test.ts → has-configurable-global.test.ts} +1 -2
  151. package/src/utils/{hasConfigurableGlobal.ts → has-configurable-global.ts} +2 -4
  152. package/src/utils/{isObject.test.ts → is-object.test.ts} +1 -2
  153. package/src/utils/logger.test.ts +154 -0
  154. package/src/utils/logger.ts +154 -0
  155. package/src/utils/{parseJson.test.ts → parse-json.test.ts} +1 -2
  156. package/src/utils/{patchesRegistry.test.ts → patches-registry.test.ts} +1 -1
  157. package/src/utils/{patchesRegistry.ts → patches-registry.ts} +1 -1
  158. package/src/utils/{responseUtils.ts → response-utils.ts} +25 -2
  159. package/ClientRequest/package.json +0 -11
  160. package/RemoteHttpInterceptor/package.json +0 -11
  161. package/WebSocket/package.json +0 -12
  162. package/XMLHttpRequest/package.json +0 -12
  163. package/fetch/package.json +0 -12
  164. package/lib/browser/Interceptor-Deczogc8.d.cts +0 -65
  165. package/lib/browser/Interceptor-gqKgs-aF.d.mts +0 -65
  166. package/lib/browser/XMLHttpRequest-DrZAf3w6.mjs.map +0 -1
  167. package/lib/browser/XMLHttpRequest-gXuzzX1g.cjs +0 -751
  168. package/lib/browser/XMLHttpRequest-gXuzzX1g.cjs.map +0 -1
  169. package/lib/browser/bufferUtils-BiiO6HZv.mjs.map +0 -1
  170. package/lib/browser/bufferUtils-Uc0eRItL.cjs +0 -38
  171. package/lib/browser/bufferUtils-Uc0eRItL.cjs.map +0 -1
  172. package/lib/browser/createRequestId-DOf8Ktjs.cjs +0 -205
  173. package/lib/browser/createRequestId-DOf8Ktjs.cjs.map +0 -1
  174. package/lib/browser/createRequestId-DYCsFHOi.mjs +0 -170
  175. package/lib/browser/createRequestId-DYCsFHOi.mjs.map +0 -1
  176. package/lib/browser/fetch-5IMPqr9e.mjs +0 -236
  177. package/lib/browser/fetch-5IMPqr9e.mjs.map +0 -1
  178. package/lib/browser/fetch-Bt9rMY9c.cjs +0 -241
  179. package/lib/browser/fetch-Bt9rMY9c.cjs.map +0 -1
  180. package/lib/browser/getRawRequest-B1BqgWG6.mjs.map +0 -1
  181. package/lib/browser/getRawRequest-DdfaiPVH.cjs +0 -376
  182. package/lib/browser/getRawRequest-DdfaiPVH.cjs.map +0 -1
  183. package/lib/browser/glossary-1lhZx6Aw.d.cts +0 -69
  184. package/lib/browser/glossary-nkHWcwvY.d.mts +0 -69
  185. package/lib/browser/handleRequest-CJim54xG.cjs +0 -191
  186. package/lib/browser/handleRequest-CJim54xG.cjs.map +0 -1
  187. package/lib/browser/handleRequest-CPPgsG7s.mjs +0 -180
  188. package/lib/browser/handleRequest-CPPgsG7s.mjs.map +0 -1
  189. package/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs +0 -109
  190. package/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs.map +0 -1
  191. package/lib/browser/hasConfigurableGlobal-CS7adEvV.cjs +0 -126
  192. package/lib/browser/hasConfigurableGlobal-CS7adEvV.cjs.map +0 -1
  193. package/lib/browser/index.cjs +0 -70
  194. package/lib/browser/index.cjs.map +0 -1
  195. package/lib/browser/index.d.mts +0 -125
  196. package/lib/browser/index.mjs +0 -56
  197. package/lib/browser/index.mjs.map +0 -1
  198. package/lib/browser/interceptors/WebSocket/index.cjs +0 -618
  199. package/lib/browser/interceptors/WebSocket/index.cjs.map +0 -1
  200. package/lib/browser/interceptors/WebSocket/index.mjs.map +0 -1
  201. package/lib/browser/interceptors/XMLHttpRequest/index.cjs +0 -8
  202. package/lib/browser/interceptors/XMLHttpRequest/index.d.cts +0 -15
  203. package/lib/browser/interceptors/XMLHttpRequest/index.d.mts +0 -15
  204. package/lib/browser/interceptors/XMLHttpRequest/index.mjs +0 -8
  205. package/lib/browser/interceptors/fetch/index.cjs +0 -7
  206. package/lib/browser/interceptors/fetch/index.d.cts +0 -13
  207. package/lib/browser/interceptors/fetch/index.d.mts +0 -13
  208. package/lib/browser/interceptors/fetch/index.mjs +0 -7
  209. package/lib/browser/presets/browser.cjs +0 -18
  210. package/lib/browser/presets/browser.cjs.map +0 -1
  211. package/lib/browser/presets/browser.d.cts +0 -12
  212. package/lib/browser/presets/browser.d.mts +0 -14
  213. package/lib/browser/presets/browser.mjs +0 -18
  214. package/lib/browser/presets/browser.mjs.map +0 -1
  215. package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs +0 -31
  216. package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs.map +0 -1
  217. package/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs.map +0 -1
  218. package/lib/node/BatchInterceptor-BGhH8z1z.cjs +0 -49
  219. package/lib/node/BatchInterceptor-BGhH8z1z.cjs.map +0 -1
  220. package/lib/node/BatchInterceptor-C4-RX5rg.mjs +0 -44
  221. package/lib/node/BatchInterceptor-C4-RX5rg.mjs.map +0 -1
  222. package/lib/node/BatchInterceptor-KKF8Q47I.d.cts +0 -26
  223. package/lib/node/BatchInterceptor-rSr-NH_H.d.mts +0 -26
  224. package/lib/node/ClientRequest-2loAH7xM.cjs +0 -1058
  225. package/lib/node/ClientRequest-2loAH7xM.cjs.map +0 -1
  226. package/lib/node/ClientRequest-DGhBX21V.mjs +0 -1049
  227. package/lib/node/ClientRequest-DGhBX21V.mjs.map +0 -1
  228. package/lib/node/Interceptor-BsZ21ue0.d.cts +0 -132
  229. package/lib/node/Interceptor-soD-WpQO.d.mts +0 -132
  230. package/lib/node/RemoteHttpInterceptor.cjs +0 -155
  231. package/lib/node/RemoteHttpInterceptor.cjs.map +0 -1
  232. package/lib/node/RemoteHttpInterceptor.d.mts +0 -39
  233. package/lib/node/RemoteHttpInterceptor.mjs.map +0 -1
  234. package/lib/node/XMLHttpRequest-BtDNZipW.cjs +0 -752
  235. package/lib/node/XMLHttpRequest-BtDNZipW.cjs.map +0 -1
  236. package/lib/node/XMLHttpRequest-Dw6Wm-UU.mjs +0 -746
  237. package/lib/node/XMLHttpRequest-Dw6Wm-UU.mjs.map +0 -1
  238. package/lib/node/bufferUtils-DxPxwff_.mjs +0 -20
  239. package/lib/node/bufferUtils-DxPxwff_.mjs.map +0 -1
  240. package/lib/node/bufferUtils-S5_-2eN4.cjs +0 -38
  241. package/lib/node/bufferUtils-S5_-2eN4.cjs.map +0 -1
  242. package/lib/node/chunk-CbDLau6x.cjs +0 -34
  243. package/lib/node/fetch-CaC3rGEu.mjs +0 -252
  244. package/lib/node/fetch-CaC3rGEu.mjs.map +0 -1
  245. package/lib/node/fetch-D2ClLNN-.cjs +0 -259
  246. package/lib/node/fetch-D2ClLNN-.cjs.map +0 -1
  247. package/lib/node/fetchUtils-BKJ1XmiO.mjs +0 -480
  248. package/lib/node/fetchUtils-BKJ1XmiO.mjs.map +0 -1
  249. package/lib/node/fetchUtils-umV5xXBy.cjs +0 -546
  250. package/lib/node/fetchUtils-umV5xXBy.cjs.map +0 -1
  251. package/lib/node/getRawRequest-B6znU6il.cjs +0 -36
  252. package/lib/node/getRawRequest-B6znU6il.cjs.map +0 -1
  253. package/lib/node/getRawRequest-C2-1urzA.mjs +0 -24
  254. package/lib/node/getRawRequest-C2-1urzA.mjs.map +0 -1
  255. package/lib/node/handleRequest-C-cKYjIh.cjs +0 -222
  256. package/lib/node/handleRequest-C-cKYjIh.cjs.map +0 -1
  257. package/lib/node/handleRequest-FIQv5pwH.mjs +0 -192
  258. package/lib/node/handleRequest-FIQv5pwH.mjs.map +0 -1
  259. package/lib/node/hasConfigurableGlobal-BiTmog1u.mjs.map +0 -1
  260. package/lib/node/hasConfigurableGlobal-MjY06_Ok.cjs +0 -108
  261. package/lib/node/hasConfigurableGlobal-MjY06_Ok.cjs.map +0 -1
  262. package/lib/node/index-BJ5E5aW-.d.cts +0 -113
  263. package/lib/node/index-DfoF45ih.d.mts +0 -113
  264. package/lib/node/index.cjs +0 -53
  265. package/lib/node/index.cjs.map +0 -1
  266. package/lib/node/index.d.cts +0 -104
  267. package/lib/node/index.d.mts +0 -104
  268. package/lib/node/index.mjs.map +0 -1
  269. package/lib/node/interceptors/ClientRequest/index.cjs +0 -6
  270. package/lib/node/interceptors/ClientRequest/index.d.cts +0 -2
  271. package/lib/node/interceptors/ClientRequest/index.d.mts +0 -3
  272. package/lib/node/interceptors/ClientRequest/index.mjs +0 -6
  273. package/lib/node/interceptors/XMLHttpRequest/index.cjs +0 -7
  274. package/lib/node/interceptors/XMLHttpRequest/index.d.cts +0 -14
  275. package/lib/node/interceptors/XMLHttpRequest/index.d.mts +0 -14
  276. package/lib/node/interceptors/XMLHttpRequest/index.mjs +0 -7
  277. package/lib/node/interceptors/fetch/index.cjs +0 -6
  278. package/lib/node/interceptors/fetch/index.d.cts +0 -12
  279. package/lib/node/interceptors/fetch/index.d.mts +0 -12
  280. package/lib/node/interceptors/fetch/index.mjs +0 -6
  281. package/lib/node/node-DIKcnzhK.cjs +0 -39
  282. package/lib/node/node-DIKcnzhK.cjs.map +0 -1
  283. package/lib/node/node-lsdNwZEW.mjs +0 -27
  284. package/lib/node/node-lsdNwZEW.mjs.map +0 -1
  285. package/lib/node/presets/node.cjs +0 -23
  286. package/lib/node/presets/node.cjs.map +0 -1
  287. package/lib/node/presets/node.d.cts +0 -13
  288. package/lib/node/presets/node.d.mts +0 -15
  289. package/lib/node/presets/node.mjs +0 -23
  290. package/lib/node/presets/node.mjs.map +0 -1
  291. package/lib/node/utils/node/index.cjs +0 -4
  292. package/lib/node/utils/node/index.d.cts +0 -16
  293. package/lib/node/utils/node/index.d.mts +0 -16
  294. package/lib/node/utils/node/index.mjs +0 -3
  295. package/presets/browser/package.json +0 -5
  296. package/presets/node/package.json +0 -11
  297. package/src/BatchInterceptor.test.ts +0 -255
  298. package/src/BatchInterceptor.ts +0 -96
  299. package/src/Interceptor.test.ts +0 -205
  300. package/src/Interceptor.ts +0 -249
  301. package/src/getRawRequest.ts +0 -21
  302. package/src/interceptors/ClientRequest/MockHttpSocket.ts +0 -724
  303. package/src/interceptors/ClientRequest/agents.ts +0 -110
  304. package/src/interceptors/ClientRequest/utils/getIncomingMessageBody.test.ts +0 -54
  305. package/src/interceptors/ClientRequest/utils/getIncomingMessageBody.ts +0 -45
  306. package/src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.test.ts +0 -427
  307. package/src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.ts +0 -268
  308. package/src/interceptors/ClientRequest/utils/parserUtils.ts +0 -48
  309. package/src/interceptors/Socket/MockSocket.test.ts +0 -264
  310. package/src/interceptors/Socket/MockSocket.ts +0 -58
  311. package/src/interceptors/Socket/utils/baseUrlFromConnectionOptions.ts +0 -26
  312. package/src/interceptors/Socket/utils/normalizeSocketWriteArgs.test.ts +0 -52
  313. package/src/interceptors/Socket/utils/normalizeSocketWriteArgs.ts +0 -33
  314. package/src/interceptors/XMLHttpRequest/index.ts +0 -40
  315. package/src/interceptors/fetch/index.ts +0 -203
  316. package/src/utils/bufferUtils.ts +0 -22
  317. package/src/utils/canParseUrl.ts +0 -13
  318. package/src/utils/emitAsync.ts +0 -25
  319. package/src/utils/nextTick.ts +0 -11
  320. package/src/utils/node/index.ts +0 -39
  321. /package/src/{createRequestId.ts → create-request-id.ts} +0 -0
  322. /package/src/{InterceptorError.ts → interceptor-error.ts} +0 -0
  323. /package/src/interceptors/WebSocket/utils/{bindEvent.ts → bind-event.ts} +0 -0
  324. /package/src/interceptors/XMLHttpRequest/polyfills/{EventPolyfill.ts → event-polyfill.ts} +0 -0
  325. /package/src/interceptors/XMLHttpRequest/utils/{getBodyByteLength.ts → get-body-byte-length.ts} +0 -0
  326. /package/src/interceptors/XMLHttpRequest/utils/{isDomParserSupportedType.ts → is-dom-parser-supported-type.ts} +0 -0
  327. /package/src/interceptors/fetch/utils/{createNetworkError.ts → create-network-error.ts} +0 -0
  328. /package/src/utils/{findPropertySource.ts → find-property-source.ts} +0 -0
  329. /package/src/utils/{getCleanUrl.ts → get-clean-url.ts} +0 -0
  330. /package/src/utils/{getValueBySymbol.ts → get-value-by-symbol.ts} +0 -0
  331. /package/src/utils/{isNodeLikeError.ts → is-node-like-error.ts} +0 -0
  332. /package/src/utils/{isObject.ts → is-object.ts} +0 -0
  333. /package/src/utils/{isPropertyAccessible.ts → is-property-accessible.ts} +0 -0
  334. /package/src/utils/{parseJson.ts → parse-json.ts} +0 -0
  335. /package/src/utils/{resolveWebSocketUrl.ts → resolve-web-socket-url.ts} +0 -0
@@ -1,1049 +0,0 @@
1
- import { a as RequestController, c as Interceptor, i as createRequestId, n as FetchResponse, s as INTERNAL_REQUEST_ID_HEADER_NAME, t as FetchRequest } from "./fetchUtils-BKJ1XmiO.mjs";
2
- import { n as setRawRequest } from "./getRawRequest-C2-1urzA.mjs";
3
- import { a as isPropertyAccessible, i as emitAsync, r as isObject, t as handleRequest } from "./handleRequest-FIQv5pwH.mjs";
4
- import { n as setRawRequestBodyStream } from "./node-lsdNwZEW.mjs";
5
- import { Logger } from "@open-draft/logger";
6
- import { invariant } from "outvariant";
7
- import http, { IncomingMessage, STATUS_CODES, ServerResponse, globalAgent } from "node:http";
8
- import https, { globalAgent as globalAgent$1 } from "node:https";
9
- import net from "node:net";
10
- import { HTTPParser } from "_http_common";
11
- import { Readable } from "node:stream";
12
- import { URL as URL$1, parse, urlToHttpOptions } from "node:url";
13
- import { Agent } from "http";
14
-
15
- //#region src/interceptors/Socket/utils/normalizeSocketWriteArgs.ts
16
- /**
17
- * Normalizes the arguments provided to the `Writable.prototype.write()`
18
- * and `Writable.prototype.end()`.
19
- */
20
- function normalizeSocketWriteArgs(args) {
21
- const normalized = [
22
- args[0],
23
- void 0,
24
- void 0
25
- ];
26
- if (typeof args[1] === "string") normalized[1] = args[1];
27
- else if (typeof args[1] === "function") normalized[2] = args[1];
28
- if (typeof args[2] === "function") normalized[2] = args[2];
29
- return normalized;
30
- }
31
-
32
- //#endregion
33
- //#region src/interceptors/Socket/MockSocket.ts
34
- var MockSocket = class extends net.Socket {
35
- constructor(options) {
36
- super();
37
- this.options = options;
38
- this.connecting = false;
39
- this.connect();
40
- this._final = (callback) => {
41
- callback(null);
42
- };
43
- }
44
- connect() {
45
- this.connecting = true;
46
- return this;
47
- }
48
- write(...args) {
49
- const [chunk, encoding, callback] = normalizeSocketWriteArgs(args);
50
- this.options.write(chunk, encoding, callback);
51
- return true;
52
- }
53
- end(...args) {
54
- const [chunk, encoding, callback] = normalizeSocketWriteArgs(args);
55
- this.options.write(chunk, encoding, callback);
56
- return super.end.apply(this, args);
57
- }
58
- push(chunk, encoding) {
59
- this.options.read(chunk, encoding);
60
- return super.push(chunk, encoding);
61
- }
62
- };
63
-
64
- //#endregion
65
- //#region src/interceptors/Socket/utils/baseUrlFromConnectionOptions.ts
66
- function baseUrlFromConnectionOptions(options) {
67
- if ("href" in options) return new URL(options.href);
68
- const protocol = options.port === 443 ? "https:" : "http:";
69
- const host = options.host;
70
- const url = new URL(`${protocol}//${host}`);
71
- if (options.port) url.port = options.port.toString();
72
- if (options.path) url.pathname = options.path;
73
- if (options.auth) {
74
- const [username, password] = options.auth.split(":");
75
- url.username = username;
76
- url.password = password;
77
- }
78
- return url;
79
- }
80
-
81
- //#endregion
82
- //#region src/interceptors/ClientRequest/utils/recordRawHeaders.ts
83
- const kRawHeaders = Symbol("kRawHeaders");
84
- const kRestorePatches = Symbol("kRestorePatches");
85
- function recordRawHeader(headers, args, behavior) {
86
- ensureRawHeadersSymbol(headers, []);
87
- const rawHeaders = Reflect.get(headers, kRawHeaders);
88
- if (behavior === "set") {
89
- for (let index = rawHeaders.length - 1; index >= 0; index--) if (rawHeaders[index][0].toLowerCase() === args[0].toLowerCase()) rawHeaders.splice(index, 1);
90
- }
91
- rawHeaders.push(args);
92
- }
93
- /**
94
- * Define the raw headers symbol on the given `Headers` instance.
95
- * If the symbol already exists, this function does nothing.
96
- */
97
- function ensureRawHeadersSymbol(headers, rawHeaders) {
98
- if (Reflect.has(headers, kRawHeaders)) return;
99
- defineRawHeadersSymbol(headers, rawHeaders);
100
- }
101
- /**
102
- * Define the raw headers symbol on the given `Headers` instance.
103
- * If the symbol already exists, it gets overridden.
104
- */
105
- function defineRawHeadersSymbol(headers, rawHeaders) {
106
- Object.defineProperty(headers, kRawHeaders, {
107
- value: rawHeaders,
108
- enumerable: false,
109
- configurable: true
110
- });
111
- }
112
- /**
113
- * Patch the global `Headers` class to store raw headers.
114
- * This is for compatibility with `IncomingMessage.prototype.rawHeaders`.
115
- *
116
- * @note Node.js has their own raw headers symbol but it
117
- * only records the first header name in case of multi-value headers.
118
- * Any other headers are normalized before comparing. This makes it
119
- * incompatible with the `rawHeaders` format.
120
- *
121
- * let h = new Headers()
122
- * h.append('X-Custom', 'one')
123
- * h.append('x-custom', 'two')
124
- * h[Symbol('headers map')] // Map { 'X-Custom' => 'one, two' }
125
- */
126
- function recordRawFetchHeaders() {
127
- if (Reflect.get(Headers, kRestorePatches)) return Reflect.get(Headers, kRestorePatches);
128
- const { Headers: OriginalHeaders, Request: OriginalRequest, Response: OriginalResponse } = globalThis;
129
- const { set, append, delete: headersDeleteMethod } = Headers.prototype;
130
- Object.defineProperty(Headers, kRestorePatches, {
131
- value: () => {
132
- Headers.prototype.set = set;
133
- Headers.prototype.append = append;
134
- Headers.prototype.delete = headersDeleteMethod;
135
- globalThis.Headers = OriginalHeaders;
136
- globalThis.Request = OriginalRequest;
137
- globalThis.Response = OriginalResponse;
138
- Object.setPrototypeOf(FetchRequest, OriginalRequest);
139
- Object.setPrototypeOf(FetchRequest.prototype, OriginalRequest.prototype);
140
- Object.setPrototypeOf(FetchResponse, OriginalResponse);
141
- Object.setPrototypeOf(FetchResponse.prototype, OriginalResponse.prototype);
142
- Reflect.deleteProperty(Headers, kRestorePatches);
143
- },
144
- enumerable: false,
145
- configurable: true
146
- });
147
- Object.defineProperty(globalThis, "Headers", {
148
- enumerable: true,
149
- writable: true,
150
- value: new Proxy(Headers, { construct(target, args, newTarget) {
151
- const headersInit = args[0] || [];
152
- if (headersInit instanceof Headers && Reflect.has(headersInit, kRawHeaders)) {
153
- const sanitizedHeaders = Reflect.get(headersInit, kRawHeaders).map((tuple) => [tuple[0], tuple[1]]);
154
- const headers$1 = Reflect.construct(target, [sanitizedHeaders], newTarget);
155
- ensureRawHeadersSymbol(headers$1, [...sanitizedHeaders]);
156
- return headers$1;
157
- }
158
- const headers = Reflect.construct(target, args, newTarget);
159
- if (!Reflect.has(headers, kRawHeaders)) ensureRawHeadersSymbol(headers, Array.isArray(headersInit) ? headersInit : Object.entries(headersInit));
160
- return headers;
161
- } })
162
- });
163
- Headers.prototype.set = new Proxy(Headers.prototype.set, { apply(target, thisArg, args) {
164
- recordRawHeader(thisArg, [args[0], args[1]], "set");
165
- return Reflect.apply(target, thisArg, args);
166
- } });
167
- Headers.prototype.append = new Proxy(Headers.prototype.append, { apply(target, thisArg, args) {
168
- recordRawHeader(thisArg, [args[0], args[1]], "append");
169
- return Reflect.apply(target, thisArg, args);
170
- } });
171
- Headers.prototype.delete = new Proxy(Headers.prototype.delete, { apply(target, thisArg, args) {
172
- const rawHeaders = Reflect.get(thisArg, kRawHeaders);
173
- if (rawHeaders) {
174
- for (let index = rawHeaders.length - 1; index >= 0; index--) if (rawHeaders[index][0].toLowerCase() === args[0].toLowerCase()) rawHeaders.splice(index, 1);
175
- }
176
- return Reflect.apply(target, thisArg, args);
177
- } });
178
- Object.defineProperty(globalThis, "Request", {
179
- enumerable: true,
180
- writable: true,
181
- value: new Proxy(Request, { construct(target, args, newTarget) {
182
- const request = Reflect.construct(target, args, newTarget);
183
- const inferredRawHeaders = [];
184
- if (typeof args[0] === "object" && args[0].headers != null) inferredRawHeaders.push(...inferRawHeaders(args[0].headers));
185
- if (typeof args[1] === "object" && args[1].headers != null) inferredRawHeaders.push(...inferRawHeaders(args[1].headers));
186
- if (inferredRawHeaders.length > 0) ensureRawHeadersSymbol(request.headers, inferredRawHeaders);
187
- return request;
188
- } })
189
- });
190
- Object.defineProperty(globalThis, "Response", {
191
- enumerable: true,
192
- writable: true,
193
- value: new Proxy(Response, { construct(target, args, newTarget) {
194
- const response = Reflect.construct(target, args, newTarget);
195
- if (typeof args[1] === "object" && args[1].headers != null) ensureRawHeadersSymbol(response.headers, inferRawHeaders(args[1].headers));
196
- return response;
197
- } })
198
- });
199
- /**
200
- * Re-parent FetchRequest/FetchResponse so their `super()` calls go
201
- * through the proxied globalThis.Request/Response above. Without this,
202
- * FetchRequest extends the statically-captured (original) Request,
203
- * bypassing the construct proxy that records raw headers.
204
- */
205
- Object.setPrototypeOf(FetchRequest, globalThis.Request);
206
- Object.setPrototypeOf(FetchRequest.prototype, globalThis.Request.prototype);
207
- Object.setPrototypeOf(FetchResponse, globalThis.Response);
208
- Object.setPrototypeOf(FetchResponse.prototype, globalThis.Response.prototype);
209
- }
210
- function restoreHeadersPrototype() {
211
- if (!Reflect.get(Headers, kRestorePatches)) return;
212
- Reflect.get(Headers, kRestorePatches)();
213
- }
214
- function getRawFetchHeaders(headers) {
215
- if (!Reflect.has(headers, kRawHeaders)) return Array.from(headers.entries());
216
- const rawHeaders = Reflect.get(headers, kRawHeaders);
217
- return rawHeaders.length > 0 ? rawHeaders : Array.from(headers.entries());
218
- }
219
- /**
220
- * Infers the raw headers from the given `HeadersInit` provided
221
- * to the Request/Response constructor.
222
- *
223
- * If the `init.headers` is a Headers instance, use it directly.
224
- * That means the headers were created standalone and already have
225
- * the raw headers stored.
226
- * If the `init.headers` is a HeadersInit, create a new Headers
227
- * instance out of it.
228
- */
229
- function inferRawHeaders(headers) {
230
- if (headers instanceof Headers) return Reflect.get(headers, kRawHeaders) || [];
231
- return Reflect.get(new Headers(headers), kRawHeaders);
232
- }
233
-
234
- //#endregion
235
- //#region src/interceptors/ClientRequest/utils/parserUtils.ts
236
- /**
237
- * @see https://github.com/nodejs/node/blob/f3adc11e37b8bfaaa026ea85c1cf22e3a0e29ae9/lib/_http_common.js#L180
238
- */
239
- function freeParser(parser, socket) {
240
- if (parser._consumed) parser.unconsume();
241
- parser._headers = [];
242
- parser._url = "";
243
- parser.socket = null;
244
- parser.incoming = null;
245
- parser.outgoing = null;
246
- parser.maxHeaderPairs = 2e3;
247
- parser._consumed = false;
248
- parser.onIncoming = null;
249
- parser[HTTPParser.kOnHeaders] = null;
250
- parser[HTTPParser.kOnHeadersComplete] = null;
251
- parser[HTTPParser.kOnMessageBegin] = null;
252
- parser[HTTPParser.kOnMessageComplete] = null;
253
- parser[HTTPParser.kOnBody] = null;
254
- parser[HTTPParser.kOnExecute] = null;
255
- parser[HTTPParser.kOnTimeout] = null;
256
- parser.remove();
257
- parser.free();
258
- if (socket)
259
- /**
260
- * @note Unassigning the socket's parser will fail this assertion
261
- * if there's still some data being processed on the socket:
262
- * @see https://github.com/nodejs/node/blob/4e1f39b678b37017ac9baa0971e3aeecd3b67b51/lib/_http_client.js#L613
263
- */
264
- if (socket.destroyed) socket.parser = null;
265
- else socket.once("end", () => {
266
- socket.parser = null;
267
- });
268
- }
269
-
270
- //#endregion
271
- //#region src/interceptors/ClientRequest/MockHttpSocket.ts
272
- const kRequestId = Symbol("kRequestId");
273
- var MockHttpSocket = class extends MockSocket {
274
- constructor(options) {
275
- super({
276
- write: (chunk, encoding, callback) => {
277
- if (this.socketState !== "passthrough") this.writeBuffer.push([
278
- chunk,
279
- encoding,
280
- callback
281
- ]);
282
- if (chunk) {
283
- /**
284
- * Forward any writes to the mock socket to the underlying original socket.
285
- * This ensures functional duplex connections, like WebSocket.
286
- * @see https://github.com/mswjs/interceptors/issues/682
287
- */
288
- if (this.socketState === "passthrough") this.originalSocket?.write(chunk, encoding, callback);
289
- this.requestParser.execute(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding));
290
- }
291
- },
292
- read: (chunk) => {
293
- if (chunk !== null)
294
- /**
295
- * @todo We need to free the parser if the connection has been
296
- * upgraded to a non-HTTP protocol. It won't be able to parse data
297
- * from that point onward anyway. No need to keep it in memory.
298
- */
299
- this.responseParser.execute(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
300
- }
301
- });
302
- this.requestRawHeadersBuffer = [];
303
- this.responseRawHeadersBuffer = [];
304
- this.writeBuffer = [];
305
- this.socketState = "unknown";
306
- this.onRequestHeaders = (rawHeaders) => {
307
- this.requestRawHeadersBuffer.push(...rawHeaders);
308
- };
309
- this.onRequestStart = (versionMajor, versionMinor, rawHeaders, _, path, __, ___, ____, shouldKeepAlive) => {
310
- this.shouldKeepAlive = shouldKeepAlive;
311
- const url = new URL(path || "", this.baseUrl);
312
- const method = this.connectionOptions.method?.toUpperCase() || "GET";
313
- const headers = FetchResponse.parseRawHeaders([...this.requestRawHeadersBuffer, ...rawHeaders || []]);
314
- this.requestRawHeadersBuffer.length = 0;
315
- const canHaveBody = method !== "GET" && method !== "HEAD";
316
- if (url.username || url.password) {
317
- if (!headers.has("authorization")) headers.set("authorization", `Basic ${url.username}:${url.password}`);
318
- url.username = "";
319
- url.password = "";
320
- }
321
- this.requestStream = new Readable({ read: () => {
322
- this.flushWriteBuffer();
323
- } });
324
- const requestId = createRequestId();
325
- this.request = new FetchRequest(url, {
326
- method,
327
- headers,
328
- credentials: "same-origin",
329
- duplex: canHaveBody ? "half" : void 0,
330
- body: canHaveBody ? Readable.toWeb(this.requestStream) : null
331
- });
332
- Reflect.set(this.request, kRequestId, requestId);
333
- setRawRequest(this.request, Reflect.get(this, "_httpMessage"));
334
- setRawRequestBodyStream(this.request, this.requestStream);
335
- /**
336
- * @fixme Stop relying on the "X-Request-Id" request header
337
- * to figure out if one interceptor has been invoked within another.
338
- * @see https://github.com/mswjs/interceptors/issues/378
339
- */
340
- if (this.request.headers.has(INTERNAL_REQUEST_ID_HEADER_NAME)) {
341
- this.passthrough();
342
- return;
343
- }
344
- this.onRequest({
345
- requestId,
346
- request: this.request,
347
- socket: this
348
- });
349
- };
350
- this.onResponseHeaders = (rawHeaders) => {
351
- this.responseRawHeadersBuffer.push(...rawHeaders);
352
- };
353
- this.onResponseStart = (versionMajor, versionMinor, rawHeaders, method, url, status, statusText) => {
354
- const headers = FetchResponse.parseRawHeaders([...this.responseRawHeadersBuffer, ...rawHeaders || []]);
355
- this.responseRawHeadersBuffer.length = 0;
356
- const response = new FetchResponse(
357
- /**
358
- * @note The Fetch API response instance exposed to the consumer
359
- * is created over the response stream of the HTTP parser. It is NOT
360
- * related to the Socket instance. This way, you can read response body
361
- * in response listener while the Socket instance delays the emission
362
- * of "end" and other events until those response listeners are finished.
363
- */
364
- FetchResponse.isResponseWithBody(status) ? Readable.toWeb(this.responseStream = new Readable({ read() {} })) : null,
365
- {
366
- url,
367
- status,
368
- statusText,
369
- headers
370
- }
371
- );
372
- invariant(this.request, "Failed to handle a response: request does not exist");
373
- FetchResponse.setUrl(this.request.url, response);
374
- /**
375
- * @fixme Stop relying on the "X-Request-Id" request header
376
- * to figure out if one interceptor has been invoked within another.
377
- * @see https://github.com/mswjs/interceptors/issues/378
378
- */
379
- if (this.request.headers.has(INTERNAL_REQUEST_ID_HEADER_NAME)) return;
380
- this.responseListenersPromise = this.onResponse({
381
- response,
382
- isMockedResponse: this.socketState === "mock",
383
- requestId: Reflect.get(this.request, kRequestId),
384
- request: this.request,
385
- socket: this
386
- });
387
- };
388
- this.connectionOptions = options.connectionOptions;
389
- this.createConnection = options.createConnection;
390
- this.onRequest = options.onRequest;
391
- this.onResponse = options.onResponse;
392
- this.baseUrl = baseUrlFromConnectionOptions(this.connectionOptions);
393
- this.requestParser = new HTTPParser();
394
- this.requestParser.initialize(HTTPParser.REQUEST, {});
395
- this.requestParser[HTTPParser.kOnHeaders] = this.onRequestHeaders.bind(this);
396
- this.requestParser[HTTPParser.kOnHeadersComplete] = this.onRequestStart.bind(this);
397
- this.requestParser[HTTPParser.kOnBody] = this.onRequestBody.bind(this);
398
- this.requestParser[HTTPParser.kOnMessageComplete] = this.onRequestEnd.bind(this);
399
- this.responseParser = new HTTPParser();
400
- this.responseParser.initialize(HTTPParser.RESPONSE, {});
401
- this.responseParser[HTTPParser.kOnHeaders] = this.onResponseHeaders.bind(this);
402
- this.responseParser[HTTPParser.kOnHeadersComplete] = this.onResponseStart.bind(this);
403
- this.responseParser[HTTPParser.kOnBody] = this.onResponseBody.bind(this);
404
- this.responseParser[HTTPParser.kOnMessageComplete] = this.onResponseEnd.bind(this);
405
- this.once("finish", () => freeParser(this.requestParser, this));
406
- if (this.baseUrl.protocol === "https:") {
407
- Reflect.set(this, "encrypted", true);
408
- Reflect.set(this, "authorized", false);
409
- Reflect.set(this, "getProtocol", () => "TLSv1.3");
410
- Reflect.set(this, "getSession", () => void 0);
411
- Reflect.set(this, "isSessionReused", () => false);
412
- Reflect.set(this, "getCipher", () => ({
413
- name: "AES256-SHA",
414
- standardName: "TLS_RSA_WITH_AES_256_CBC_SHA",
415
- version: "TLSv1.3"
416
- }));
417
- }
418
- }
419
- emit(event, ...args) {
420
- const emitEvent = super.emit.bind(this, event, ...args);
421
- if (this.responseListenersPromise) {
422
- this.responseListenersPromise.finally(emitEvent);
423
- return this.listenerCount(event) > 0;
424
- }
425
- return emitEvent();
426
- }
427
- destroy(error) {
428
- freeParser(this.responseParser, this);
429
- if (error) this.emit("error", error);
430
- return super.destroy(error);
431
- }
432
- /**
433
- * Establish this Socket connection as-is and pipe
434
- * its data/events through this Socket.
435
- */
436
- passthrough() {
437
- this.socketState = "passthrough";
438
- if (this.destroyed) return;
439
- const socket = this.createConnection();
440
- this.originalSocket = socket;
441
- /**
442
- * @note Inherit the original socket's connection handle.
443
- * Without this, each push to the mock socket results in a
444
- * new "connection" listener being added (i.e. buffering pushes).
445
- * @see https://github.com/nodejs/node/blob/b18153598b25485ce4f54d0c5cb830a9457691ee/lib/net.js#L734
446
- */
447
- if ("_handle" in socket) Object.defineProperty(this, "_handle", {
448
- value: socket._handle,
449
- enumerable: true,
450
- writable: true
451
- });
452
- this.once("close", () => {
453
- socket.removeAllListeners();
454
- if (!socket.destroyed) socket.destroy();
455
- this.originalSocket = void 0;
456
- });
457
- this.address = socket.address.bind(socket);
458
- let writeArgs;
459
- let headersWritten = false;
460
- while (writeArgs = this.writeBuffer.shift()) if (writeArgs !== void 0) {
461
- if (!headersWritten) {
462
- const [chunk, encoding, callback] = writeArgs;
463
- const chunkString = chunk.toString();
464
- const chunkBeforeRequestHeaders = chunkString.slice(0, chunkString.indexOf("\r\n") + 2);
465
- const chunkAfterRequestHeaders = chunkString.slice(chunk.indexOf("\r\n\r\n"));
466
- const headersChunk = `${chunkBeforeRequestHeaders}${getRawFetchHeaders(this.request.headers).filter(([name]) => {
467
- return name.toLowerCase() !== INTERNAL_REQUEST_ID_HEADER_NAME;
468
- }).map(([name, value]) => `${name}: ${value}`).join("\r\n")}${chunkAfterRequestHeaders}`;
469
- socket.write(headersChunk, encoding, callback);
470
- headersWritten = true;
471
- continue;
472
- }
473
- socket.write(...writeArgs);
474
- }
475
- if (Reflect.get(socket, "encrypted")) [
476
- "encrypted",
477
- "authorized",
478
- "getProtocol",
479
- "getSession",
480
- "isSessionReused",
481
- "getCipher"
482
- ].forEach((propertyName) => {
483
- Object.defineProperty(this, propertyName, {
484
- enumerable: true,
485
- get: () => {
486
- const value = Reflect.get(socket, propertyName);
487
- return typeof value === "function" ? value.bind(socket) : value;
488
- }
489
- });
490
- });
491
- socket.on("lookup", (...args) => this.emit("lookup", ...args)).on("connect", () => {
492
- this.connecting = socket.connecting;
493
- this.emit("connect");
494
- }).on("secureConnect", () => this.emit("secureConnect")).on("secure", () => this.emit("secure")).on("session", (session) => this.emit("session", session)).on("ready", () => this.emit("ready")).on("drain", () => this.emit("drain")).on("data", (chunk) => {
495
- this.push(chunk);
496
- }).on("error", (error) => {
497
- Reflect.set(this, "_hadError", Reflect.get(socket, "_hadError"));
498
- this.emit("error", error);
499
- }).on("resume", () => this.emit("resume")).on("timeout", () => this.emit("timeout")).on("prefinish", () => this.emit("prefinish")).on("finish", () => this.emit("finish")).on("close", (hadError) => this.emit("close", hadError)).on("end", () => this.emit("end"));
500
- }
501
- /**
502
- * Convert the given Fetch API `Response` instance to an
503
- * HTTP message and push it to the socket.
504
- */
505
- async respondWith(response) {
506
- if (this.destroyed) return;
507
- invariant(this.socketState !== "mock", "[MockHttpSocket] Failed to respond to the \"%s %s\" request with \"%s %s\": the request has already been handled", this.request?.method, this.request?.url, response.status, response.statusText);
508
- if (isPropertyAccessible(response, "type") && response.type === "error") {
509
- this.errorWith(/* @__PURE__ */ new TypeError("Network error"));
510
- return;
511
- }
512
- this.mockConnect();
513
- this.socketState = "mock";
514
- this.flushWriteBuffer();
515
- const serverResponse = new ServerResponse(new IncomingMessage(this));
516
- /**
517
- * Assign a mock socket instance to the server response to
518
- * spy on the response chunk writes. Push the transformed response chunks
519
- * to this `MockHttpSocket` instance to trigger the "data" event.
520
- * @note Providing the same `MockSocket` instance when creating `ServerResponse`
521
- * does not have the same effect.
522
- * @see https://github.com/nodejs/node/blob/10099bb3f7fd97bb9dd9667188426866b3098e07/test/parallel/test-http-server-response-standalone.js#L32
523
- */
524
- serverResponse.assignSocket(new MockSocket({
525
- write: (chunk, encoding, callback) => {
526
- this.push(chunk, encoding);
527
- callback?.();
528
- },
529
- read() {}
530
- }));
531
- /**
532
- * @note Remove the `Connection` and `Date` response headers
533
- * injected by `ServerResponse` by default. Those are required
534
- * from the server but the interceptor is NOT technically a server.
535
- * It's confusing to add response headers that the developer didn't
536
- * specify themselves. They can always add these if they wish.
537
- * @see https://www.rfc-editor.org/rfc/rfc9110#field.date
538
- * @see https://www.rfc-editor.org/rfc/rfc9110#field.connection
539
- */
540
- serverResponse.removeHeader("connection");
541
- serverResponse.removeHeader("date");
542
- const rawResponseHeaders = getRawFetchHeaders(response.headers);
543
- /**
544
- * @note Call `.writeHead` in order to set the raw response headers
545
- * in the same case as they were provided by the developer. Using
546
- * `.setHeader()`/`.appendHeader()` normalizes header names.
547
- */
548
- serverResponse.writeHead(response.status, response.statusText || STATUS_CODES[response.status], rawResponseHeaders);
549
- this.once("error", () => {
550
- serverResponse.destroy();
551
- });
552
- if (response.body) try {
553
- const reader = response.body.getReader();
554
- while (true) {
555
- const { done, value } = await reader.read();
556
- if (done) {
557
- serverResponse.end();
558
- break;
559
- }
560
- serverResponse.write(value);
561
- }
562
- } catch (error) {
563
- if (error instanceof Error) {
564
- serverResponse.destroy();
565
- /**
566
- * @note Destroy the request socket gracefully.
567
- * Response stream errors do NOT produce request errors.
568
- */
569
- this.destroy();
570
- return;
571
- }
572
- serverResponse.destroy();
573
- throw error;
574
- }
575
- else serverResponse.end();
576
- if (!this.shouldKeepAlive) {
577
- this.emit("readable");
578
- /**
579
- * @todo @fixme This is likely a hack.
580
- * Since we push null to the socket, it never propagates to the
581
- * parser, and the parser never calls "onResponseEnd" to close
582
- * the response stream. We are closing the stream here manually
583
- * but that shouldn't be the case.
584
- */
585
- this.responseStream?.push(null);
586
- this.push(null);
587
- }
588
- }
589
- /**
590
- * Close this socket connection with the given error.
591
- */
592
- errorWith(error) {
593
- this.destroy(error);
594
- }
595
- mockConnect() {
596
- this.connecting = false;
597
- const isIPv6 = net.isIPv6(this.connectionOptions.hostname) || this.connectionOptions.family === 6;
598
- const addressInfo = {
599
- address: isIPv6 ? "::1" : "127.0.0.1",
600
- family: isIPv6 ? "IPv6" : "IPv4",
601
- port: this.connectionOptions.port
602
- };
603
- this.address = () => addressInfo;
604
- this.emit("lookup", null, addressInfo.address, addressInfo.family === "IPv6" ? 6 : 4, this.connectionOptions.host);
605
- this.emit("connect");
606
- this.emit("ready");
607
- if (this.baseUrl.protocol === "https:") {
608
- this.emit("secure");
609
- this.emit("secureConnect");
610
- this.emit("session", this.connectionOptions.session || Buffer.from("mock-session-renegotiate"));
611
- this.emit("session", Buffer.from("mock-session-resume"));
612
- }
613
- }
614
- flushWriteBuffer() {
615
- for (const writeCall of this.writeBuffer) if (typeof writeCall[2] === "function") {
616
- writeCall[2]();
617
- /**
618
- * @note Remove the callback from the write call
619
- * so it doesn't get called twice on passthrough
620
- * if `request.end()` was called within `request.write()`.
621
- * @see https://github.com/mswjs/interceptors/issues/684
622
- */
623
- writeCall[2] = void 0;
624
- }
625
- }
626
- onRequestBody(chunk) {
627
- invariant(this.requestStream, "Failed to write to a request stream: stream does not exist");
628
- this.requestStream.push(chunk);
629
- }
630
- onRequestEnd() {
631
- if (this.requestStream) this.requestStream.push(null);
632
- }
633
- onResponseBody(chunk) {
634
- invariant(this.responseStream, "Failed to write to a response stream: stream does not exist");
635
- this.responseStream.push(chunk);
636
- }
637
- onResponseEnd() {
638
- if (this.responseStream) this.responseStream.push(null);
639
- }
640
- };
641
-
642
- //#endregion
643
- //#region src/interceptors/ClientRequest/agents.ts
644
- var MockAgent = class extends http.Agent {
645
- constructor(options) {
646
- super();
647
- this.customAgent = options.customAgent;
648
- this.onRequest = options.onRequest;
649
- this.onResponse = options.onResponse;
650
- }
651
- createConnection(options, callback) {
652
- const createConnection = this.customAgent instanceof http.Agent ? this.customAgent.createConnection : super.createConnection;
653
- const createConnectionOptions = this.customAgent instanceof http.Agent ? {
654
- ...options,
655
- ...this.customAgent.options
656
- } : options;
657
- return new MockHttpSocket({
658
- connectionOptions: options,
659
- createConnection: createConnection.bind(this.customAgent || this, createConnectionOptions, callback),
660
- onRequest: this.onRequest.bind(this),
661
- onResponse: this.onResponse.bind(this)
662
- });
663
- }
664
- };
665
- var MockHttpsAgent = class extends https.Agent {
666
- constructor(options) {
667
- super();
668
- this.customAgent = options.customAgent;
669
- this.onRequest = options.onRequest;
670
- this.onResponse = options.onResponse;
671
- }
672
- createConnection(options, callback) {
673
- const createConnection = this.customAgent instanceof http.Agent ? this.customAgent.createConnection : super.createConnection;
674
- const createConnectionOptions = this.customAgent instanceof http.Agent ? {
675
- ...options,
676
- ...this.customAgent.options
677
- } : options;
678
- return new MockHttpSocket({
679
- connectionOptions: options,
680
- createConnection: createConnection.bind(this.customAgent || this, createConnectionOptions, callback),
681
- onRequest: this.onRequest.bind(this),
682
- onResponse: this.onResponse.bind(this)
683
- });
684
- }
685
- };
686
-
687
- //#endregion
688
- //#region src/utils/getUrlByRequestOptions.ts
689
- const logger$2 = new Logger("utils getUrlByRequestOptions");
690
- const DEFAULT_PATH = "/";
691
- const DEFAULT_PROTOCOL = "http:";
692
- const DEFAULT_HOSTNAME = "localhost";
693
- const SSL_PORT = 443;
694
- function getAgent(options) {
695
- return options.agent instanceof Agent ? options.agent : void 0;
696
- }
697
- function getProtocolByRequestOptions(options) {
698
- if (options.protocol) return options.protocol;
699
- const agentProtocol = getAgent(options)?.protocol;
700
- if (agentProtocol) return agentProtocol;
701
- const port = getPortByRequestOptions(options);
702
- return options.cert || port === SSL_PORT ? "https:" : options.uri?.protocol || DEFAULT_PROTOCOL;
703
- }
704
- function getPortByRequestOptions(options) {
705
- if (options.port) return Number(options.port);
706
- const agent = getAgent(options);
707
- if (agent?.options.port) return Number(agent.options.port);
708
- if (agent?.defaultPort) return Number(agent.defaultPort);
709
- }
710
- function getAuthByRequestOptions(options) {
711
- if (options.auth) {
712
- const [username, password] = options.auth.split(":");
713
- return {
714
- username,
715
- password
716
- };
717
- }
718
- }
719
- /**
720
- * Returns true if host looks like an IPv6 address without surrounding brackets
721
- * It assumes any host containing `:` is definitely not IPv4 and probably IPv6,
722
- * but note that this could include invalid IPv6 addresses as well.
723
- */
724
- function isRawIPv6Address(host) {
725
- return host.includes(":") && !host.startsWith("[") && !host.endsWith("]");
726
- }
727
- function getHostname(options) {
728
- let host = options.hostname || options.host;
729
- if (host) {
730
- if (isRawIPv6Address(host)) host = `[${host}]`;
731
- return new URL(`http://${host}`).hostname;
732
- }
733
- return DEFAULT_HOSTNAME;
734
- }
735
- /**
736
- * Creates a `URL` instance from a given `RequestOptions` object.
737
- */
738
- function getUrlByRequestOptions(options) {
739
- logger$2.info("request options", options);
740
- if (options.uri) {
741
- logger$2.info("constructing url from explicitly provided \"options.uri\": %s", options.uri);
742
- return new URL(options.uri.href);
743
- }
744
- logger$2.info("figuring out url from request options...");
745
- const protocol = getProtocolByRequestOptions(options);
746
- logger$2.info("protocol", protocol);
747
- const port = getPortByRequestOptions(options);
748
- logger$2.info("port", port);
749
- const hostname = getHostname(options);
750
- logger$2.info("hostname", hostname);
751
- const path = options.path || DEFAULT_PATH;
752
- logger$2.info("path", path);
753
- const credentials = getAuthByRequestOptions(options);
754
- logger$2.info("credentials", credentials);
755
- const authString = credentials ? `${credentials.username}:${credentials.password}@` : "";
756
- logger$2.info("auth string:", authString);
757
- const portString = typeof port !== "undefined" ? `:${port}` : "";
758
- const url = new URL(`${protocol}//${hostname}${portString}${path}`);
759
- url.username = credentials?.username || "";
760
- url.password = credentials?.password || "";
761
- logger$2.info("created url:", url);
762
- return url;
763
- }
764
-
765
- //#endregion
766
- //#region src/utils/cloneObject.ts
767
- const logger$1 = new Logger("cloneObject");
768
- function isPlainObject(obj) {
769
- logger$1.info("is plain object?", obj);
770
- if (obj == null || !obj.constructor?.name) {
771
- logger$1.info("given object is undefined, not a plain object...");
772
- return false;
773
- }
774
- logger$1.info("checking the object constructor:", obj.constructor.name);
775
- return obj.constructor.name === "Object";
776
- }
777
- function cloneObject(obj) {
778
- logger$1.info("cloning object:", obj);
779
- const enumerableProperties = Object.entries(obj).reduce((acc, [key, value]) => {
780
- logger$1.info("analyzing key-value pair:", key, value);
781
- acc[key] = isPlainObject(value) ? cloneObject(value) : value;
782
- return acc;
783
- }, {});
784
- return isPlainObject(obj) ? enumerableProperties : Object.assign(Object.getPrototypeOf(obj), enumerableProperties);
785
- }
786
-
787
- //#endregion
788
- //#region src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.ts
789
- const logger = new Logger("http normalizeClientRequestArgs");
790
- function resolveRequestOptions(args, url) {
791
- if (typeof args[1] === "undefined" || typeof args[1] === "function") {
792
- logger.info("request options not provided, deriving from the url", url);
793
- return urlToHttpOptions(url);
794
- }
795
- if (args[1]) {
796
- logger.info("has custom RequestOptions!", args[1]);
797
- const requestOptionsFromUrl = urlToHttpOptions(url);
798
- logger.info("derived RequestOptions from the URL:", requestOptionsFromUrl);
799
- /**
800
- * Clone the request options to lock their state
801
- * at the moment they are provided to `ClientRequest`.
802
- * @see https://github.com/mswjs/interceptors/issues/86
803
- */
804
- logger.info("cloning RequestOptions...");
805
- const clonedRequestOptions = cloneObject(args[1]);
806
- logger.info("successfully cloned RequestOptions!", clonedRequestOptions);
807
- return {
808
- ...requestOptionsFromUrl,
809
- ...clonedRequestOptions
810
- };
811
- }
812
- logger.info("using an empty object as request options");
813
- return {};
814
- }
815
- /**
816
- * Overrides the given `URL` instance with the explicit properties provided
817
- * on the `RequestOptions` object. The options object takes precedence,
818
- * and will replace URL properties like "host", "path", and "port", if specified.
819
- */
820
- function overrideUrlByRequestOptions(url, options) {
821
- url.host = options.host || url.host;
822
- url.hostname = options.hostname || url.hostname;
823
- url.port = options.port ? options.port.toString() : url.port;
824
- if (options.path) {
825
- const parsedOptionsPath = parse(options.path, false);
826
- url.pathname = parsedOptionsPath.pathname || "";
827
- url.search = parsedOptionsPath.search || "";
828
- }
829
- return url;
830
- }
831
- function resolveCallback(args) {
832
- return typeof args[1] === "function" ? args[1] : args[2];
833
- }
834
- /**
835
- * Normalizes parameters given to a `http.request` call
836
- * so it always has a `URL` and `RequestOptions`.
837
- */
838
- function normalizeClientRequestArgs(defaultProtocol, args) {
839
- let url;
840
- let options;
841
- let callback;
842
- logger.info("arguments", args);
843
- logger.info("using default protocol:", defaultProtocol);
844
- if (args.length === 0) {
845
- const url$1 = new URL$1("http://localhost");
846
- return [url$1, resolveRequestOptions(args, url$1)];
847
- }
848
- if (typeof args[0] === "string") {
849
- logger.info("first argument is a location string:", args[0]);
850
- url = new URL$1(args[0]);
851
- logger.info("created a url:", url);
852
- const requestOptionsFromUrl = urlToHttpOptions(url);
853
- logger.info("request options from url:", requestOptionsFromUrl);
854
- options = resolveRequestOptions(args, url);
855
- logger.info("resolved request options:", options);
856
- callback = resolveCallback(args);
857
- } else if (args[0] instanceof URL$1) {
858
- url = args[0];
859
- logger.info("first argument is a URL:", url);
860
- if (typeof args[1] !== "undefined" && isObject(args[1])) url = overrideUrlByRequestOptions(url, args[1]);
861
- options = resolveRequestOptions(args, url);
862
- logger.info("derived request options:", options);
863
- callback = resolveCallback(args);
864
- } else if ("hash" in args[0] && !("method" in args[0])) {
865
- const [legacyUrl] = args;
866
- logger.info("first argument is a legacy URL:", legacyUrl);
867
- if (legacyUrl.hostname === null) {
868
- /**
869
- * We are dealing with a relative url, so use the path as an "option" and
870
- * merge in any existing options, giving priority to existing options -- i.e. a path in any
871
- * existing options will take precedence over the one contained in the url. This is consistent
872
- * with the behaviour in ClientRequest.
873
- * @see https://github.com/nodejs/node/blob/d84f1312915fe45fe0febe888db692c74894c382/lib/_http_client.js#L122
874
- */
875
- logger.info("given legacy URL is relative (no hostname)");
876
- return isObject(args[1]) ? normalizeClientRequestArgs(defaultProtocol, [{
877
- path: legacyUrl.path,
878
- ...args[1]
879
- }, args[2]]) : normalizeClientRequestArgs(defaultProtocol, [{ path: legacyUrl.path }, args[1]]);
880
- }
881
- logger.info("given legacy url is absolute");
882
- const resolvedUrl = new URL$1(legacyUrl.href);
883
- return args[1] === void 0 ? normalizeClientRequestArgs(defaultProtocol, [resolvedUrl]) : typeof args[1] === "function" ? normalizeClientRequestArgs(defaultProtocol, [resolvedUrl, args[1]]) : normalizeClientRequestArgs(defaultProtocol, [
884
- resolvedUrl,
885
- args[1],
886
- args[2]
887
- ]);
888
- } else if (isObject(args[0])) {
889
- options = { ...args[0] };
890
- logger.info("first argument is RequestOptions:", options);
891
- options.protocol = options.protocol || defaultProtocol;
892
- logger.info("normalized request options:", options);
893
- url = getUrlByRequestOptions(options);
894
- logger.info("created a URL from RequestOptions:", url.href);
895
- callback = resolveCallback(args);
896
- } else throw new Error(`Failed to construct ClientRequest with these parameters: ${args}`);
897
- options.protocol = options.protocol || url.protocol;
898
- options.method = options.method || "GET";
899
- /**
900
- * Ensure that the default Agent is always set.
901
- * This prevents the protocol mismatch for requests with { agent: false },
902
- * where the global Agent is inferred.
903
- * @see https://github.com/mswjs/msw/issues/1150
904
- * @see https://github.com/nodejs/node/blob/418ff70b810f0e7112d48baaa72932a56cfa213b/lib/_http_client.js#L130
905
- * @see https://github.com/nodejs/node/blob/418ff70b810f0e7112d48baaa72932a56cfa213b/lib/_http_client.js#L157-L159
906
- */
907
- if (!options._defaultAgent) {
908
- logger.info("has no default agent, setting the default agent for \"%s\"", options.protocol);
909
- options._defaultAgent = options.protocol === "https:" ? globalAgent$1 : globalAgent;
910
- }
911
- logger.info("successfully resolved url:", url.href);
912
- logger.info("successfully resolved options:", options);
913
- logger.info("successfully resolved callback:", callback);
914
- /**
915
- * @note If the user-provided URL is not a valid URL in Node.js,
916
- * (e.g. the one provided by the JSDOM polyfills), case it to
917
- * string. Otherwise, this throws on Node.js incompatibility
918
- * (`ERR_INVALID_ARG_TYPE` on the connection listener)
919
- * @see https://github.com/node-fetch/node-fetch/issues/1376#issuecomment-966435555
920
- */
921
- if (!(url instanceof URL$1)) url = url.toString();
922
- return [
923
- url,
924
- options,
925
- callback
926
- ];
927
- }
928
-
929
- //#endregion
930
- //#region src/interceptors/ClientRequest/index.ts
931
- var ClientRequestInterceptor = class ClientRequestInterceptor extends Interceptor {
932
- static {
933
- this.symbol = Symbol.for("client-request-interceptor");
934
- }
935
- constructor() {
936
- super(ClientRequestInterceptor.symbol);
937
- this.onRequest = async ({ request, socket }) => {
938
- const controller = new RequestController(request, {
939
- passthrough() {
940
- socket.passthrough();
941
- },
942
- async respondWith(response) {
943
- await socket.respondWith(response);
944
- },
945
- errorWith(reason) {
946
- if (reason instanceof Error) socket.errorWith(reason);
947
- }
948
- });
949
- await handleRequest({
950
- request,
951
- requestId: Reflect.get(request, kRequestId),
952
- controller,
953
- emitter: this.emitter
954
- });
955
- };
956
- this.onResponse = async ({ requestId, request, response, isMockedResponse }) => {
957
- return emitAsync(this.emitter, "response", {
958
- requestId,
959
- request,
960
- response,
961
- isMockedResponse
962
- });
963
- };
964
- }
965
- setup() {
966
- const { ClientRequest: OriginalClientRequest, get: originalGet, request: originalRequest } = http;
967
- const { get: originalHttpsGet, request: originalHttpsRequest } = https;
968
- const onRequest = this.onRequest.bind(this);
969
- const onResponse = this.onResponse.bind(this);
970
- http.ClientRequest = new Proxy(http.ClientRequest, { construct: (target, args) => {
971
- const [url, options, callback] = normalizeClientRequestArgs("http:", args);
972
- options.agent = new (options.protocol === "https:" ? MockHttpsAgent : MockAgent)({
973
- customAgent: options.agent,
974
- onRequest,
975
- onResponse
976
- });
977
- return Reflect.construct(target, [
978
- url,
979
- options,
980
- callback
981
- ]);
982
- } });
983
- http.request = new Proxy(http.request, { apply: (target, thisArg, args) => {
984
- const [url, options, callback] = normalizeClientRequestArgs("http:", args);
985
- options.agent = new MockAgent({
986
- customAgent: options.agent,
987
- onRequest,
988
- onResponse
989
- });
990
- return Reflect.apply(target, thisArg, [
991
- url,
992
- options,
993
- callback
994
- ]);
995
- } });
996
- http.get = new Proxy(http.get, { apply: (target, thisArg, args) => {
997
- const [url, options, callback] = normalizeClientRequestArgs("http:", args);
998
- options.agent = new MockAgent({
999
- customAgent: options.agent,
1000
- onRequest,
1001
- onResponse
1002
- });
1003
- return Reflect.apply(target, thisArg, [
1004
- url,
1005
- options,
1006
- callback
1007
- ]);
1008
- } });
1009
- https.request = new Proxy(https.request, { apply: (target, thisArg, args) => {
1010
- const [url, options, callback] = normalizeClientRequestArgs("https:", args);
1011
- options.agent = new MockHttpsAgent({
1012
- customAgent: options.agent,
1013
- onRequest,
1014
- onResponse
1015
- });
1016
- return Reflect.apply(target, thisArg, [
1017
- url,
1018
- options,
1019
- callback
1020
- ]);
1021
- } });
1022
- https.get = new Proxy(https.get, { apply: (target, thisArg, args) => {
1023
- const [url, options, callback] = normalizeClientRequestArgs("https:", args);
1024
- options.agent = new MockHttpsAgent({
1025
- customAgent: options.agent,
1026
- onRequest,
1027
- onResponse
1028
- });
1029
- return Reflect.apply(target, thisArg, [
1030
- url,
1031
- options,
1032
- callback
1033
- ]);
1034
- } });
1035
- recordRawFetchHeaders();
1036
- this.subscriptions.push(() => {
1037
- http.ClientRequest = OriginalClientRequest;
1038
- http.get = originalGet;
1039
- http.request = originalRequest;
1040
- https.get = originalHttpsGet;
1041
- https.request = originalHttpsRequest;
1042
- restoreHeadersPrototype();
1043
- });
1044
- }
1045
- };
1046
-
1047
- //#endregion
1048
- export { ClientRequestInterceptor as t };
1049
- //# sourceMappingURL=ClientRequest-DGhBX21V.mjs.map