@mswjs/interceptors 0.41.8 → 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.
- package/README.md +274 -228
- package/lib/browser/{bufferUtils-BiiO6HZv.mjs → buffer-utils-DJj7YzLG.js} +3 -3
- package/lib/browser/buffer-utils-DJj7YzLG.js.map +1 -0
- package/lib/browser/create-request-id-DlEd4GOA.js +184 -0
- package/lib/browser/create-request-id-DlEd4GOA.js.map +1 -0
- package/lib/browser/{getRawRequest-B1BqgWG6.mjs → fetch-utils-zxA_SD66.js} +123 -52
- package/lib/browser/fetch-utils-zxA_SD66.js.map +1 -0
- package/lib/browser/handle-request-CIOa9O-N.js +167 -0
- package/lib/browser/handle-request-CIOa9O-N.js.map +1 -0
- package/lib/{node/hasConfigurableGlobal-BiTmog1u.mjs → browser/has-configurable-global-Cew-dYqk.js} +5 -7
- package/lib/browser/has-configurable-global-Cew-dYqk.js.map +1 -0
- package/lib/browser/http-CB9rQ7i_.d.ts +105 -0
- package/lib/browser/{index.d.cts → index.d.ts} +33 -38
- package/lib/browser/index.js +130 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/interceptor-dtJZ_9QT.d.ts +50 -0
- package/lib/browser/interceptors/WebSocket/index.d.ts +2 -0
- package/lib/browser/interceptors/WebSocket/{index.mjs → index.js} +40 -31
- package/lib/browser/interceptors/WebSocket/index.js.map +1 -0
- package/lib/browser/interceptors/XMLHttpRequest/web.d.ts +11 -0
- package/lib/browser/interceptors/XMLHttpRequest/web.js +2 -0
- package/lib/browser/interceptors/fetch/web.d.ts +14 -0
- package/lib/browser/interceptors/fetch/web.js +2 -0
- package/lib/browser/presets/browser.d.ts +11 -0
- package/lib/browser/presets/browser.js +12 -0
- package/lib/browser/presets/browser.js.map +1 -0
- package/lib/browser/{resolveWebSocketUrl-C83-x9iE.mjs → resolve-web-socket-url-CSvNPLGi.js} +3 -3
- package/lib/browser/resolve-web-socket-url-CSvNPLGi.js.map +1 -0
- package/lib/browser/web-BjVDkiX0.js +248 -0
- package/lib/browser/web-BjVDkiX0.js.map +1 -0
- package/lib/{node/XMLHttpRequest-DhupxLHX.mjs → browser/web-C2oKsT3Q.js} +328 -256
- package/lib/browser/web-C2oKsT3Q.js.map +1 -0
- package/lib/browser/{interceptors/WebSocket/index.d.cts → websocket-CC0nB0md.d.ts} +41 -33
- package/lib/node/batch-interceptor-ByEZVih3.js +119 -0
- package/lib/node/batch-interceptor-ByEZVih3.js.map +1 -0
- package/lib/node/batch-interceptor-CPjFK2td.d.ts +28 -0
- package/lib/node/buffer-utils-BvPY1Tc-.js +187 -0
- package/lib/node/buffer-utils-BvPY1Tc-.js.map +1 -0
- package/lib/node/fetch-utils-Dw1PsmtX.js +568 -0
- package/lib/node/fetch-utils-Dw1PsmtX.js.map +1 -0
- package/lib/node/has-configurable-global-CJCh_g1I.js +22 -0
- package/lib/node/has-configurable-global-CJCh_g1I.js.map +1 -0
- package/lib/node/http-CB9rQ7i_.d.ts +105 -0
- package/lib/{browser/interceptors/WebSocket/index.d.mts → node/index.d.ts} +120 -60
- package/lib/node/{index.mjs → index.js} +8 -11
- package/lib/node/index.js.map +1 -0
- package/lib/node/interceptor-dtJZ_9QT.d.ts +50 -0
- package/lib/node/interceptors/ClientRequest/index.d.ts +14 -0
- package/lib/node/interceptors/ClientRequest/index.js +67 -0
- package/lib/node/interceptors/ClientRequest/index.js.map +1 -0
- package/lib/node/interceptors/XMLHttpRequest/node.d.ts +12 -0
- package/lib/node/interceptors/XMLHttpRequest/node.js +74 -0
- package/lib/node/interceptors/XMLHttpRequest/node.js.map +1 -0
- package/lib/node/interceptors/fetch/node.d.ts +18 -0
- package/lib/node/interceptors/fetch/node.js +83 -0
- package/lib/node/interceptors/fetch/node.js.map +1 -0
- package/lib/node/interceptors/http/index.d.ts +14 -0
- package/lib/node/interceptors/http/index.js +32 -0
- package/lib/node/interceptors/http/index.js.map +1 -0
- package/lib/node/interceptors/net/index.d.ts +203 -0
- package/lib/node/interceptors/net/index.js +2 -0
- package/lib/node/llhttp/constants.cjs +485 -0
- package/lib/node/llhttp/constants.d.cts +957 -0
- package/lib/node/llhttp/llhttp.wasm +0 -0
- package/lib/node/net-DtMnyEeg.js +1388 -0
- package/lib/node/net-DtMnyEeg.js.map +1 -0
- package/lib/node/presets/node.d.ts +12 -0
- package/lib/node/presets/node.js +17 -0
- package/lib/node/presets/node.js.map +1 -0
- package/lib/node/{RemoteHttpInterceptor.d.cts → remote-http-interceptor.d.ts} +12 -11
- package/lib/node/{RemoteHttpInterceptor.mjs → remote-http-interceptor.js} +38 -33
- package/lib/node/remote-http-interceptor.js.map +1 -0
- package/lib/node/source-lP0yyEtA.js +1990 -0
- package/lib/node/source-lP0yyEtA.js.map +1 -0
- package/package.json +79 -118
- package/src/batch-interceptor.test.ts +475 -0
- package/src/batch-interceptor.ts +244 -0
- package/src/{createRequestId.test.ts → create-request-id.test.ts} +1 -2
- package/src/disposable.ts +13 -0
- package/src/events/http.ts +92 -0
- package/src/events/websocket.ts +47 -0
- package/src/glossary.ts +1 -27
- package/src/index.ts +18 -10
- package/src/interceptor.test.ts +279 -0
- package/src/interceptor.ts +139 -0
- package/src/interceptors/ClientRequest/index.test.ts +21 -39
- package/src/interceptors/ClientRequest/index.ts +65 -180
- package/src/interceptors/ClientRequest/utils/{recordRawHeaders.test.ts → record-raw-headers.test.ts} +1 -2
- package/src/interceptors/ClientRequest/utils/{recordRawHeaders.ts → record-raw-headers.ts} +29 -2
- package/src/interceptors/WebSocket/index.ts +34 -51
- package/src/interceptors/WebSocket/utils/{bindEvent.test.ts → bind-event.test.ts} +1 -2
- package/src/interceptors/WebSocket/utils/events.test.ts +0 -1
- package/src/interceptors/WebSocket/{WebSocketClassTransport.ts → web-socket-class-transport.ts} +3 -3
- package/src/interceptors/WebSocket/{WebSocketClientConnection.ts → web-socket-client-connection.ts} +4 -4
- package/src/interceptors/WebSocket/{WebSocketOverride.ts → web-socket-override.ts} +6 -7
- package/src/interceptors/WebSocket/{WebSocketServerConnection.ts → web-socket-server-connection.ts} +4 -4
- package/src/interceptors/WebSocket/{WebSocketTransport.ts → web-socket-transport.ts} +1 -1
- package/src/interceptors/XMLHttpRequest/node.ts +104 -0
- package/src/interceptors/XMLHttpRequest/polyfills/{ProgressEventPolyfill.ts → progress-event-polyfill.ts} +1 -1
- package/src/interceptors/XMLHttpRequest/utils/{concateArrayBuffer.test.ts → concat-array-buffer.test.ts} +1 -2
- package/src/interceptors/XMLHttpRequest/utils/{concatArrayBuffer.ts → concat-array-buffer.ts} +1 -1
- package/src/interceptors/XMLHttpRequest/utils/{createEvent.test.ts → create-event.test.ts} +3 -4
- package/src/interceptors/XMLHttpRequest/utils/{createEvent.ts → create-event.ts} +2 -2
- package/src/interceptors/XMLHttpRequest/utils/{createResponse.ts → create-response.ts} +1 -1
- package/src/interceptors/XMLHttpRequest/utils/{getBodyByteLength.test.ts → get-body-byte-length.test.ts} +1 -2
- package/src/interceptors/XMLHttpRequest/web.ts +34 -0
- package/src/interceptors/XMLHttpRequest/{XMLHttpRequestController.ts → xml-http-request-controller.ts} +363 -204
- package/src/interceptors/XMLHttpRequest/{XMLHttpRequestProxy.ts → xml-http-request-proxy.ts} +28 -25
- package/src/interceptors/fetch/node.ts +103 -0
- package/src/interceptors/fetch/utils/{followRedirect.ts → follow-redirect.ts} +1 -1
- package/src/interceptors/fetch/web.ts +217 -0
- package/src/interceptors/http/forward-events.test.ts +86 -0
- package/src/interceptors/http/forward-events.ts +139 -0
- package/src/interceptors/http/http-parser/index.ts +310 -0
- package/src/interceptors/http/http-parser/llhttp/constants.cjs +485 -0
- package/src/interceptors/http/http-parser/llhttp/constants.d.cts +957 -0
- package/src/interceptors/http/http-parser/llhttp/llhttp.wasm +0 -0
- package/src/interceptors/http/http-parser.ts +138 -0
- package/src/interceptors/http/index.ts +34 -0
- package/src/interceptors/http/source.ts +688 -0
- package/src/interceptors/net/index.ts +368 -0
- package/src/interceptors/net/socket-controller.ts +1476 -0
- package/src/interceptors/net/utils/address-info.ts +54 -0
- package/src/interceptors/net/utils/connection-options-to-url.ts +56 -0
- package/src/interceptors/net/utils/flush-writes.ts +57 -0
- package/src/interceptors/net/utils/get-tls-connect-options.ts +23 -0
- package/src/interceptors/net/utils/normalize-net-connect-args.test.ts +233 -0
- package/src/interceptors/net/utils/normalize-net-connect-args.ts +121 -0
- package/src/interceptors/net/utils/normalize-tls-connect-args.ts +50 -0
- package/src/presets/browser.ts +4 -4
- package/src/presets/node.ts +4 -4
- package/src/{RemoteHttpInterceptor.ts → remote-http-interceptor.ts} +55 -42
- package/src/request-context.ts +40 -0
- package/src/{RequestController.test.ts → request-controller.test.ts} +37 -3
- package/src/{RequestController.ts → request-controller.ts} +33 -11
- package/src/utils/{bufferUtils.test.ts → buffer-utils.test.ts} +1 -2
- package/src/utils/buffer-utils.ts +37 -0
- package/src/utils/{cloneObject.test.ts → clone-object.test.ts} +1 -2
- package/src/utils/{cloneObject.ts → clone-object.ts} +8 -8
- package/src/utils/{createProxy.test.ts → create-proxy.test.ts} +6 -4
- package/src/utils/{createProxy.ts → create-proxy.ts} +1 -1
- package/src/utils/{fetchUtils.test.ts → fetch-utils.test.ts} +1 -1
- package/src/utils/{fetchUtils.ts → fetch-utils.ts} +28 -3
- package/src/utils/{findPropertySource.test.ts → find-property-source.test.ts} +1 -2
- package/src/utils/{getCleanUrl.test.ts → get-clean-url.test.ts} +1 -2
- package/src/utils/{getUrlByRequestOptions.test.ts → get-url-by-request-options.test.ts} +4 -8
- package/src/utils/{getUrlByRequestOptions.ts → get-url-by-request-options.ts} +16 -16
- package/src/utils/{getValueBySymbol.test.ts → get-value-by-symbol.test.ts} +1 -2
- package/src/utils/{handleRequest.ts → handle-request.ts} +66 -47
- package/src/utils/{hasConfigurableGlobal.test.ts → has-configurable-global.test.ts} +1 -2
- package/src/utils/{hasConfigurableGlobal.ts → has-configurable-global.ts} +2 -4
- package/src/utils/{isObject.test.ts → is-object.test.ts} +1 -2
- package/src/utils/logger.test.ts +154 -0
- package/src/utils/logger.ts +154 -0
- package/src/utils/{parseJson.test.ts → parse-json.test.ts} +1 -2
- package/src/utils/{patchesRegistry.test.ts → patches-registry.test.ts} +1 -1
- package/src/utils/{patchesRegistry.ts → patches-registry.ts} +1 -1
- package/src/utils/{responseUtils.ts → response-utils.ts} +25 -2
- package/ClientRequest/package.json +0 -11
- package/RemoteHttpInterceptor/package.json +0 -11
- package/WebSocket/package.json +0 -12
- package/XMLHttpRequest/package.json +0 -12
- package/fetch/package.json +0 -12
- package/lib/browser/Interceptor-Deczogc8.d.cts +0 -65
- package/lib/browser/Interceptor-gqKgs-aF.d.mts +0 -65
- package/lib/browser/XMLHttpRequest-B11I9TBx.cjs +0 -751
- package/lib/browser/XMLHttpRequest-B11I9TBx.cjs.map +0 -1
- package/lib/browser/XMLHttpRequest-DHEkSoRN.mjs +0 -746
- package/lib/browser/XMLHttpRequest-DHEkSoRN.mjs.map +0 -1
- package/lib/browser/bufferUtils-BiiO6HZv.mjs.map +0 -1
- package/lib/browser/bufferUtils-Uc0eRItL.cjs +0 -38
- package/lib/browser/bufferUtils-Uc0eRItL.cjs.map +0 -1
- package/lib/browser/createRequestId-DOf8Ktjs.cjs +0 -205
- package/lib/browser/createRequestId-DOf8Ktjs.cjs.map +0 -1
- package/lib/browser/createRequestId-DYCsFHOi.mjs +0 -170
- package/lib/browser/createRequestId-DYCsFHOi.mjs.map +0 -1
- package/lib/browser/fetch-BJwfdses.mjs +0 -236
- package/lib/browser/fetch-BJwfdses.mjs.map +0 -1
- package/lib/browser/fetch-M8iXkZ3L.cjs +0 -241
- package/lib/browser/fetch-M8iXkZ3L.cjs.map +0 -1
- package/lib/browser/getRawRequest-B1BqgWG6.mjs.map +0 -1
- package/lib/browser/getRawRequest-DdfaiPVH.cjs +0 -376
- package/lib/browser/getRawRequest-DdfaiPVH.cjs.map +0 -1
- package/lib/browser/glossary-1lhZx6Aw.d.cts +0 -69
- package/lib/browser/glossary-nkHWcwvY.d.mts +0 -69
- package/lib/browser/handleRequest-1Yqu_ho_.mjs +0 -178
- package/lib/browser/handleRequest-1Yqu_ho_.mjs.map +0 -1
- package/lib/browser/handleRequest-Cz4_wmQ9.cjs +0 -189
- package/lib/browser/handleRequest-Cz4_wmQ9.cjs.map +0 -1
- package/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs +0 -109
- package/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs.map +0 -1
- package/lib/browser/hasConfigurableGlobal-CS7adEvV.cjs +0 -126
- package/lib/browser/hasConfigurableGlobal-CS7adEvV.cjs.map +0 -1
- package/lib/browser/index.cjs +0 -70
- package/lib/browser/index.cjs.map +0 -1
- package/lib/browser/index.d.mts +0 -125
- package/lib/browser/index.mjs +0 -56
- package/lib/browser/index.mjs.map +0 -1
- package/lib/browser/interceptors/WebSocket/index.cjs +0 -618
- package/lib/browser/interceptors/WebSocket/index.cjs.map +0 -1
- package/lib/browser/interceptors/WebSocket/index.mjs.map +0 -1
- package/lib/browser/interceptors/XMLHttpRequest/index.cjs +0 -8
- package/lib/browser/interceptors/XMLHttpRequest/index.d.cts +0 -15
- package/lib/browser/interceptors/XMLHttpRequest/index.d.mts +0 -15
- package/lib/browser/interceptors/XMLHttpRequest/index.mjs +0 -8
- package/lib/browser/interceptors/fetch/index.cjs +0 -7
- package/lib/browser/interceptors/fetch/index.d.cts +0 -13
- package/lib/browser/interceptors/fetch/index.d.mts +0 -13
- package/lib/browser/interceptors/fetch/index.mjs +0 -7
- package/lib/browser/presets/browser.cjs +0 -18
- package/lib/browser/presets/browser.cjs.map +0 -1
- package/lib/browser/presets/browser.d.cts +0 -12
- package/lib/browser/presets/browser.d.mts +0 -14
- package/lib/browser/presets/browser.mjs +0 -18
- package/lib/browser/presets/browser.mjs.map +0 -1
- package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs +0 -31
- package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs.map +0 -1
- package/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs.map +0 -1
- package/lib/node/BatchInterceptor-DdMNfSUY.mjs +0 -44
- package/lib/node/BatchInterceptor-DdMNfSUY.mjs.map +0 -1
- package/lib/node/BatchInterceptor-KKF8Q47I.d.cts +0 -26
- package/lib/node/BatchInterceptor-Z1lwK23r.cjs +0 -49
- package/lib/node/BatchInterceptor-Z1lwK23r.cjs.map +0 -1
- package/lib/node/BatchInterceptor-rSr-NH_H.d.mts +0 -26
- package/lib/node/ClientRequest-DFs7FPNi.cjs +0 -1058
- package/lib/node/ClientRequest-DFs7FPNi.cjs.map +0 -1
- package/lib/node/ClientRequest-dRpI9v1o.mjs +0 -1049
- package/lib/node/ClientRequest-dRpI9v1o.mjs.map +0 -1
- package/lib/node/Interceptor-BsZ21ue0.d.cts +0 -132
- package/lib/node/Interceptor-soD-WpQO.d.mts +0 -132
- package/lib/node/RemoteHttpInterceptor.cjs +0 -155
- package/lib/node/RemoteHttpInterceptor.cjs.map +0 -1
- package/lib/node/RemoteHttpInterceptor.d.mts +0 -39
- package/lib/node/RemoteHttpInterceptor.mjs.map +0 -1
- package/lib/node/XMLHttpRequest-DhupxLHX.mjs.map +0 -1
- package/lib/node/XMLHttpRequest-Dyi6ahGz.cjs +0 -752
- package/lib/node/XMLHttpRequest-Dyi6ahGz.cjs.map +0 -1
- package/lib/node/bufferUtils-DxPxwff_.mjs +0 -20
- package/lib/node/bufferUtils-DxPxwff_.mjs.map +0 -1
- package/lib/node/bufferUtils-S5_-2eN4.cjs +0 -38
- package/lib/node/bufferUtils-S5_-2eN4.cjs.map +0 -1
- package/lib/node/chunk-CbDLau6x.cjs +0 -34
- package/lib/node/fetch-BqMcbuYR.mjs +0 -252
- package/lib/node/fetch-BqMcbuYR.mjs.map +0 -1
- package/lib/node/fetch-aQJu1Gf_.cjs +0 -259
- package/lib/node/fetch-aQJu1Gf_.cjs.map +0 -1
- package/lib/node/fetchUtils-BKJ1XmiO.mjs +0 -480
- package/lib/node/fetchUtils-BKJ1XmiO.mjs.map +0 -1
- package/lib/node/fetchUtils-umV5xXBy.cjs +0 -546
- package/lib/node/fetchUtils-umV5xXBy.cjs.map +0 -1
- package/lib/node/getRawRequest-B6znU6il.cjs +0 -36
- package/lib/node/getRawRequest-B6znU6il.cjs.map +0 -1
- package/lib/node/getRawRequest-C2-1urzA.mjs +0 -24
- package/lib/node/getRawRequest-C2-1urzA.mjs.map +0 -1
- package/lib/node/handleRequest-DCLzePtS.mjs +0 -190
- package/lib/node/handleRequest-DCLzePtS.mjs.map +0 -1
- package/lib/node/handleRequest-DVOthWJo.cjs +0 -220
- package/lib/node/handleRequest-DVOthWJo.cjs.map +0 -1
- package/lib/node/hasConfigurableGlobal-BiTmog1u.mjs.map +0 -1
- package/lib/node/hasConfigurableGlobal-MjY06_Ok.cjs +0 -108
- package/lib/node/hasConfigurableGlobal-MjY06_Ok.cjs.map +0 -1
- package/lib/node/index-BJ5E5aW-.d.cts +0 -113
- package/lib/node/index-DfoF45ih.d.mts +0 -113
- package/lib/node/index.cjs +0 -53
- package/lib/node/index.cjs.map +0 -1
- package/lib/node/index.d.cts +0 -104
- package/lib/node/index.d.mts +0 -104
- package/lib/node/index.mjs.map +0 -1
- package/lib/node/interceptors/ClientRequest/index.cjs +0 -6
- package/lib/node/interceptors/ClientRequest/index.d.cts +0 -2
- package/lib/node/interceptors/ClientRequest/index.d.mts +0 -3
- package/lib/node/interceptors/ClientRequest/index.mjs +0 -6
- package/lib/node/interceptors/XMLHttpRequest/index.cjs +0 -7
- package/lib/node/interceptors/XMLHttpRequest/index.d.cts +0 -14
- package/lib/node/interceptors/XMLHttpRequest/index.d.mts +0 -14
- package/lib/node/interceptors/XMLHttpRequest/index.mjs +0 -7
- package/lib/node/interceptors/fetch/index.cjs +0 -6
- package/lib/node/interceptors/fetch/index.d.cts +0 -12
- package/lib/node/interceptors/fetch/index.d.mts +0 -12
- package/lib/node/interceptors/fetch/index.mjs +0 -6
- package/lib/node/node-DIKcnzhK.cjs +0 -39
- package/lib/node/node-DIKcnzhK.cjs.map +0 -1
- package/lib/node/node-lsdNwZEW.mjs +0 -27
- package/lib/node/node-lsdNwZEW.mjs.map +0 -1
- package/lib/node/presets/node.cjs +0 -23
- package/lib/node/presets/node.cjs.map +0 -1
- package/lib/node/presets/node.d.cts +0 -13
- package/lib/node/presets/node.d.mts +0 -15
- package/lib/node/presets/node.mjs +0 -23
- package/lib/node/presets/node.mjs.map +0 -1
- package/lib/node/utils/node/index.cjs +0 -4
- package/lib/node/utils/node/index.d.cts +0 -16
- package/lib/node/utils/node/index.d.mts +0 -16
- package/lib/node/utils/node/index.mjs +0 -3
- package/presets/browser/package.json +0 -5
- package/presets/node/package.json +0 -11
- package/src/BatchInterceptor.test.ts +0 -255
- package/src/BatchInterceptor.ts +0 -95
- package/src/Interceptor.test.ts +0 -205
- package/src/Interceptor.ts +0 -249
- package/src/getRawRequest.ts +0 -21
- package/src/interceptors/ClientRequest/MockHttpSocket.ts +0 -724
- package/src/interceptors/ClientRequest/agents.ts +0 -110
- package/src/interceptors/ClientRequest/utils/getIncomingMessageBody.test.ts +0 -54
- package/src/interceptors/ClientRequest/utils/getIncomingMessageBody.ts +0 -45
- package/src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.test.ts +0 -427
- package/src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.ts +0 -268
- package/src/interceptors/ClientRequest/utils/parserUtils.ts +0 -48
- package/src/interceptors/Socket/MockSocket.test.ts +0 -264
- package/src/interceptors/Socket/MockSocket.ts +0 -58
- package/src/interceptors/Socket/utils/baseUrlFromConnectionOptions.ts +0 -26
- package/src/interceptors/Socket/utils/normalizeSocketWriteArgs.test.ts +0 -52
- package/src/interceptors/Socket/utils/normalizeSocketWriteArgs.ts +0 -33
- package/src/interceptors/XMLHttpRequest/index.ts +0 -40
- package/src/interceptors/fetch/index.ts +0 -203
- package/src/utils/bufferUtils.ts +0 -22
- package/src/utils/canParseUrl.ts +0 -13
- package/src/utils/emitAsync.ts +0 -25
- package/src/utils/nextTick.ts +0 -11
- package/src/utils/node/index.ts +0 -39
- /package/src/{createRequestId.ts → create-request-id.ts} +0 -0
- /package/src/{InterceptorError.ts → interceptor-error.ts} +0 -0
- /package/src/interceptors/WebSocket/utils/{bindEvent.ts → bind-event.ts} +0 -0
- /package/src/interceptors/XMLHttpRequest/polyfills/{EventPolyfill.ts → event-polyfill.ts} +0 -0
- /package/src/interceptors/XMLHttpRequest/utils/{getBodyByteLength.ts → get-body-byte-length.ts} +0 -0
- /package/src/interceptors/XMLHttpRequest/utils/{isDomParserSupportedType.ts → is-dom-parser-supported-type.ts} +0 -0
- /package/src/interceptors/fetch/utils/{createNetworkError.ts → create-network-error.ts} +0 -0
- /package/src/utils/{findPropertySource.ts → find-property-source.ts} +0 -0
- /package/src/utils/{getCleanUrl.ts → get-clean-url.ts} +0 -0
- /package/src/utils/{getValueBySymbol.ts → get-value-by-symbol.ts} +0 -0
- /package/src/utils/{isNodeLikeError.ts → is-node-like-error.ts} +0 -0
- /package/src/utils/{isObject.ts → is-object.ts} +0 -0
- /package/src/utils/{isPropertyAccessible.ts → is-property-accessible.ts} +0 -0
- /package/src/utils/{parseJson.ts → parse-json.ts} +0 -0
- /package/src/utils/{resolveWebSocketUrl.ts → resolve-web-socket-url.ts} +0 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import fs from 'node:fs'
|
|
2
|
+
import * as constants from './llhttp/constants.cjs'
|
|
3
|
+
|
|
4
|
+
export { constants }
|
|
5
|
+
|
|
6
|
+
export interface RequestHeadersComplete {
|
|
7
|
+
versionMajor: number
|
|
8
|
+
versionMinor: number
|
|
9
|
+
rawHeaders: Array<string>
|
|
10
|
+
method: string
|
|
11
|
+
url: string
|
|
12
|
+
upgrade: boolean
|
|
13
|
+
shouldKeepAlive: boolean
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ResponseHeadersComplete {
|
|
17
|
+
versionMajor: number
|
|
18
|
+
versionMinor: number
|
|
19
|
+
rawHeaders: Array<string>
|
|
20
|
+
statusCode: number
|
|
21
|
+
statusMessage: string
|
|
22
|
+
upgrade: boolean
|
|
23
|
+
shouldKeepAlive: boolean
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const KIND_REQUEST = constants.TYPE.REQUEST
|
|
27
|
+
const KIND_RESPONSE = constants.TYPE.RESPONSE
|
|
28
|
+
|
|
29
|
+
type ParserKind = typeof KIND_REQUEST | typeof KIND_RESPONSE
|
|
30
|
+
|
|
31
|
+
export interface ParserCallbacks<K extends ParserKind> {
|
|
32
|
+
onMessageBegin?: () => number | void
|
|
33
|
+
onHeadersComplete?: (
|
|
34
|
+
info: K extends typeof KIND_REQUEST
|
|
35
|
+
? RequestHeadersComplete
|
|
36
|
+
: ResponseHeadersComplete
|
|
37
|
+
) => number | void
|
|
38
|
+
onBody?: (body: Buffer) => number | void
|
|
39
|
+
onMessageComplete?: () => number | void
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export type RequestParserCallbacks = ParserCallbacks<typeof KIND_REQUEST>
|
|
43
|
+
export type ResponseParserCallbacks = ParserCallbacks<typeof KIND_RESPONSE>
|
|
44
|
+
|
|
45
|
+
const kPointer = Symbol('kPtr')
|
|
46
|
+
const kUrl = Symbol('kUrl')
|
|
47
|
+
const kStatusMessage = Symbol('kStatusMessage')
|
|
48
|
+
const kHeadersFields = Symbol('kHeadersFields')
|
|
49
|
+
const kHeadersValues = Symbol('kHeadersValues')
|
|
50
|
+
const kLastHeaderCallback = Symbol('kLastHeaderCallback')
|
|
51
|
+
const kCallbacks = Symbol('kCallbacks')
|
|
52
|
+
const kType = Symbol('kType')
|
|
53
|
+
|
|
54
|
+
const HEADER_CB_NONE = 0
|
|
55
|
+
const HEADER_CB_FIELD = 1
|
|
56
|
+
const HEADER_CB_VALUE = 2
|
|
57
|
+
|
|
58
|
+
const parsersMap = new Map<number, HttpParser<any>>()
|
|
59
|
+
|
|
60
|
+
const methodNames = Object.fromEntries(
|
|
61
|
+
Object.entries(constants.METHODS).map(([name, num]) => [num, name])
|
|
62
|
+
) as Record<number, string>
|
|
63
|
+
|
|
64
|
+
function readStringFrom(pointer: number, length: number): string {
|
|
65
|
+
return Buffer.from(llhttp_memory.buffer, pointer, length).toString('latin1')
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @note Reference the base URL through a variable. Bundlers (e.g. Vite)
|
|
70
|
+
* statically rewrite the `new URL('...', import.meta.url)` pattern into
|
|
71
|
+
* an asset URL resolved against the served origin, which breaks reading
|
|
72
|
+
* the WASM binary from the file system in DOM-like test environments.
|
|
73
|
+
*/
|
|
74
|
+
const wasmBaseUrl = import.meta.url
|
|
75
|
+
|
|
76
|
+
const llhttpModule = new WebAssembly.Module(
|
|
77
|
+
fs.readFileSync(new URL('./llhttp/llhttp.wasm', wasmBaseUrl))
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
const llhttpInstance = new WebAssembly.Instance(llhttpModule, {
|
|
81
|
+
env: {
|
|
82
|
+
wasm_on_message_begin(parserPointer: number) {
|
|
83
|
+
const parser = parsersMap.get(parserPointer)!
|
|
84
|
+
parser[kUrl] = ''
|
|
85
|
+
parser[kStatusMessage] = ''
|
|
86
|
+
parser[kHeadersFields] = []
|
|
87
|
+
parser[kHeadersValues] = []
|
|
88
|
+
parser[kLastHeaderCallback] = HEADER_CB_NONE
|
|
89
|
+
return parser[kCallbacks].onMessageBegin?.() ?? 0
|
|
90
|
+
},
|
|
91
|
+
// Request only
|
|
92
|
+
wasm_on_url(parserPointer: number, at: number, length: number) {
|
|
93
|
+
parsersMap.get(parserPointer)![kUrl] = readStringFrom(at, length)
|
|
94
|
+
return 0
|
|
95
|
+
},
|
|
96
|
+
// Response only
|
|
97
|
+
wasm_on_status(parserPointer: number, at: number, length: number) {
|
|
98
|
+
parsersMap.get(parserPointer)![kStatusMessage] = readStringFrom(
|
|
99
|
+
at,
|
|
100
|
+
length
|
|
101
|
+
)
|
|
102
|
+
return 0
|
|
103
|
+
},
|
|
104
|
+
wasm_on_header_field(parserPointer: number, at: number, length: number) {
|
|
105
|
+
const parser = parsersMap.get(parserPointer)!
|
|
106
|
+
const chunk = readStringFrom(at, length)
|
|
107
|
+
const fields = parser[kHeadersFields]
|
|
108
|
+
|
|
109
|
+
// llhttp emits header field/value across multiple callbacks when the
|
|
110
|
+
// bytes span buffer boundaries. Concatenate consecutive same-type
|
|
111
|
+
// callbacks into a single entry; switch entries on field<->value transitions.
|
|
112
|
+
if (parser[kLastHeaderCallback] === HEADER_CB_FIELD) {
|
|
113
|
+
fields[fields.length - 1] += chunk
|
|
114
|
+
} else {
|
|
115
|
+
fields.push(chunk)
|
|
116
|
+
parser[kLastHeaderCallback] = HEADER_CB_FIELD
|
|
117
|
+
}
|
|
118
|
+
return 0
|
|
119
|
+
},
|
|
120
|
+
wasm_on_header_value(parserPointer: number, at: number, length: number) {
|
|
121
|
+
const parser = parsersMap.get(parserPointer)!
|
|
122
|
+
const chunk = readStringFrom(at, length)
|
|
123
|
+
const values = parser[kHeadersValues]
|
|
124
|
+
|
|
125
|
+
if (parser[kLastHeaderCallback] === HEADER_CB_VALUE) {
|
|
126
|
+
values[values.length - 1] += chunk
|
|
127
|
+
} else {
|
|
128
|
+
values.push(chunk)
|
|
129
|
+
parser[kLastHeaderCallback] = HEADER_CB_VALUE
|
|
130
|
+
}
|
|
131
|
+
return 0
|
|
132
|
+
},
|
|
133
|
+
wasm_on_headers_complete(
|
|
134
|
+
parserPointer: number,
|
|
135
|
+
statusCode: number,
|
|
136
|
+
rawUpgrade: number,
|
|
137
|
+
rawShouldKeepAlive: number
|
|
138
|
+
) {
|
|
139
|
+
const parser = parsersMap.get(parserPointer)!
|
|
140
|
+
const versionMajor = llhttp_get_version_major(parserPointer)
|
|
141
|
+
const versionMinor = llhttp_get_version_minor(parserPointer)
|
|
142
|
+
const rawHeaders: Array<string> = []
|
|
143
|
+
const upgrade = rawUpgrade === 1
|
|
144
|
+
const shouldKeepAlive = rawShouldKeepAlive === 1
|
|
145
|
+
|
|
146
|
+
for (let c = 0; c < parser[kHeadersFields].length; c++) {
|
|
147
|
+
rawHeaders.push(parser[kHeadersFields][c]!, parser[kHeadersValues][c]!)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (parser[kType] === KIND_REQUEST) {
|
|
151
|
+
const method = methodNames[llhttp_get_method(parserPointer)]
|
|
152
|
+
const url = parser[kUrl]
|
|
153
|
+
const callback = parser[kCallbacks] as ParserCallbacks<
|
|
154
|
+
typeof KIND_REQUEST
|
|
155
|
+
>
|
|
156
|
+
|
|
157
|
+
return (
|
|
158
|
+
callback.onHeadersComplete?.({
|
|
159
|
+
versionMajor,
|
|
160
|
+
versionMinor,
|
|
161
|
+
rawHeaders,
|
|
162
|
+
method,
|
|
163
|
+
url,
|
|
164
|
+
upgrade,
|
|
165
|
+
shouldKeepAlive,
|
|
166
|
+
}) ?? 0
|
|
167
|
+
)
|
|
168
|
+
} else {
|
|
169
|
+
const statusCode = llhttp_get_status_code(parserPointer) as number
|
|
170
|
+
const statusMessage = parser[kStatusMessage]
|
|
171
|
+
const callback = parser[kCallbacks] as ParserCallbacks<
|
|
172
|
+
typeof KIND_RESPONSE
|
|
173
|
+
>
|
|
174
|
+
|
|
175
|
+
return (
|
|
176
|
+
callback.onHeadersComplete?.({
|
|
177
|
+
versionMajor,
|
|
178
|
+
versionMinor,
|
|
179
|
+
rawHeaders,
|
|
180
|
+
statusCode,
|
|
181
|
+
statusMessage,
|
|
182
|
+
upgrade,
|
|
183
|
+
shouldKeepAlive,
|
|
184
|
+
}) ?? 0
|
|
185
|
+
)
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
wasm_on_body(parserPointer: number, at: number, length: number) {
|
|
189
|
+
const parser = parsersMap.get(parserPointer)!
|
|
190
|
+
// Create a copy of the body chunk, as the underlying memory buffer is reused by llhttp and can be overwritten on the next callback call.
|
|
191
|
+
// Maybe not the most efficient way, but it is simple and safe.
|
|
192
|
+
const body = Buffer.from(new Uint8Array(llhttp_memory.buffer, at, length))
|
|
193
|
+
return parser[kCallbacks].onBody?.(body) ?? 0
|
|
194
|
+
},
|
|
195
|
+
wasm_on_message_complete(parserPointer: number) {
|
|
196
|
+
return (
|
|
197
|
+
parsersMap.get(parserPointer)![kCallbacks].onMessageComplete?.() ?? 0
|
|
198
|
+
)
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
const llhttp_memory = llhttpInstance.exports.memory as WebAssembly.Memory
|
|
204
|
+
const llhttp_alloc = llhttpInstance.exports.llhttp_alloc as CallableFunction
|
|
205
|
+
const llhttp_malloc = llhttpInstance.exports.malloc as CallableFunction
|
|
206
|
+
const llhttp_execute = llhttpInstance.exports.llhttp_execute as CallableFunction
|
|
207
|
+
const llhttp_get_type = llhttpInstance.exports
|
|
208
|
+
.llhttp_get_type as CallableFunction
|
|
209
|
+
const llhttp_get_upgrade = llhttpInstance.exports
|
|
210
|
+
.llhttp_get_upgrade as CallableFunction
|
|
211
|
+
const llhttp_should_keep_alive = llhttpInstance.exports
|
|
212
|
+
.llhttp_should_keep_alive as CallableFunction
|
|
213
|
+
const llhttp_get_method = llhttpInstance.exports
|
|
214
|
+
.llhttp_get_method as CallableFunction
|
|
215
|
+
const llhttp_get_status_code = llhttpInstance.exports
|
|
216
|
+
.llhttp_get_status_code as CallableFunction
|
|
217
|
+
const llhttp_get_version_minor = llhttpInstance.exports
|
|
218
|
+
.llhttp_get_http_minor as CallableFunction
|
|
219
|
+
const llhttp_get_version_major = llhttpInstance.exports
|
|
220
|
+
.llhttp_get_http_major as CallableFunction
|
|
221
|
+
const llhttp_get_error_reason = llhttpInstance.exports
|
|
222
|
+
.llhttp_get_error_reason as CallableFunction
|
|
223
|
+
const llhttp_get_error_pos = llhttpInstance.exports
|
|
224
|
+
.llhttp_get_error_pos as CallableFunction
|
|
225
|
+
const llhttp_free = llhttpInstance.exports.free as CallableFunction
|
|
226
|
+
|
|
227
|
+
const initialize = llhttpInstance.exports._initialize as CallableFunction
|
|
228
|
+
initialize() // wasi reactor
|
|
229
|
+
|
|
230
|
+
export class HttpParser<K extends ParserKind> {
|
|
231
|
+
[kPointer]: number;
|
|
232
|
+
[kUrl]: string = '';
|
|
233
|
+
[kStatusMessage]: string = '';
|
|
234
|
+
[kHeadersFields]: Array<string> = [];
|
|
235
|
+
[kHeadersValues]: Array<string> = [];
|
|
236
|
+
[kLastHeaderCallback]: number = HEADER_CB_NONE;
|
|
237
|
+
[kCallbacks]: ParserCallbacks<K>;
|
|
238
|
+
[kType]: ParserKind
|
|
239
|
+
|
|
240
|
+
constructor(type: K, callbacks: ParserCallbacks<K>) {
|
|
241
|
+
this[kType] = type
|
|
242
|
+
this[kCallbacks] = callbacks
|
|
243
|
+
|
|
244
|
+
const parserPointer = llhttp_alloc(type)
|
|
245
|
+
|
|
246
|
+
if (parserPointer === 0) {
|
|
247
|
+
throw new Error('Failed to allocate llhttp parser')
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
this[kPointer] = parserPointer
|
|
251
|
+
parsersMap.set(this[kPointer], this)
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
destroy() {
|
|
255
|
+
// Guard against multiple calls to free/destroy.
|
|
256
|
+
if (this[kPointer] === 0) {
|
|
257
|
+
return
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
parsersMap.delete(this[kPointer])
|
|
261
|
+
llhttp_free(this[kPointer])
|
|
262
|
+
this[kPointer] = 0
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
execute(data: Buffer) {
|
|
266
|
+
const pointer = llhttp_malloc(data.byteLength)
|
|
267
|
+
|
|
268
|
+
if (pointer === 0) {
|
|
269
|
+
throw new Error('Failed to allocate llhttp input buffer')
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
let ret: number
|
|
273
|
+
try {
|
|
274
|
+
const buffer = new Uint8Array(llhttp_memory.buffer)
|
|
275
|
+
buffer.set(data, pointer)
|
|
276
|
+
ret = llhttp_execute(this[kPointer], pointer, data.byteLength)
|
|
277
|
+
} catch (error) {
|
|
278
|
+
// Free the input buffer if a user callback threw synchronously,
|
|
279
|
+
// otherwise the wasm heap leaks the chunk on every execute() call.
|
|
280
|
+
llhttp_free(pointer)
|
|
281
|
+
throw error
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
if (ret === constants.ERROR.PAUSED_UPGRADE) {
|
|
285
|
+
// Find how many bytes llhttp consumed
|
|
286
|
+
const errorPos = llhttp_get_error_pos(this[kPointer])
|
|
287
|
+
const consumed = errorPos - pointer
|
|
288
|
+
llhttp_free(pointer)
|
|
289
|
+
// Return the unconsumed trailing bytes (tunnel/protocol data)
|
|
290
|
+
return data.subarray(consumed)
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
llhttp_free(pointer)
|
|
294
|
+
this.#checkError(ret)
|
|
295
|
+
|
|
296
|
+
return null // fully consumed
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
#checkError(errorCode: number) {
|
|
300
|
+
if (errorCode === constants.ERROR.OK) {
|
|
301
|
+
return
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
const errorPointer = llhttp_get_error_reason(this[kPointer])
|
|
305
|
+
const buffer = new Uint8Array(llhttp_memory.buffer)
|
|
306
|
+
const length = buffer.indexOf(0, errorPointer) - errorPointer
|
|
307
|
+
|
|
308
|
+
throw new Error(readStringFrom(errorPointer, length))
|
|
309
|
+
}
|
|
310
|
+
}
|