patchright-core 1.51.2 → 1.52.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 (303) hide show
  1. package/browsers.json +15 -13
  2. package/lib/androidServerImpl.js +42 -48
  3. package/lib/browserServerImpl.js +54 -67
  4. package/lib/cli/driver.js +71 -69
  5. package/lib/cli/program.js +312 -328
  6. package/lib/cli/programWithTestStub.js +51 -45
  7. package/lib/client/accessibility.js +31 -32
  8. package/lib/client/android.js +141 -228
  9. package/lib/client/api.js +135 -283
  10. package/lib/client/artifact.js +39 -36
  11. package/lib/client/browser.js +57 -61
  12. package/lib/client/browserContext.js +297 -326
  13. package/lib/client/browserType.js +92 -106
  14. package/lib/client/cdpSession.js +29 -31
  15. package/lib/client/channelOwner.js +82 -95
  16. package/lib/client/clientHelper.js +46 -38
  17. package/lib/client/clientInstrumentation.js +40 -37
  18. package/lib/client/clientStackTrace.js +41 -37
  19. package/lib/client/clock.js +36 -36
  20. package/lib/client/connection.js +190 -212
  21. package/lib/client/consoleMessage.js +31 -28
  22. package/lib/client/coverage.js +25 -22
  23. package/lib/client/dialog.js +30 -31
  24. package/lib/client/download.js +25 -25
  25. package/lib/client/electron.js +73 -75
  26. package/lib/client/elementHandle.js +111 -147
  27. package/lib/client/errors.js +53 -53
  28. package/lib/client/eventEmitter.js +124 -121
  29. package/lib/client/events.js +72 -68
  30. package/lib/client/fetch.js +135 -158
  31. package/lib/client/fileChooser.js +25 -24
  32. package/lib/client/fileUtils.js +31 -28
  33. package/lib/client/frame.js +187 -306
  34. package/lib/client/harRouter.js +42 -52
  35. package/lib/client/input.js +40 -69
  36. package/lib/client/jsHandle.js +54 -69
  37. package/lib/client/jsonPipe.js +27 -23
  38. package/lib/client/localUtils.js +29 -28
  39. package/lib/client/locator.js +161 -245
  40. package/lib/client/network.js +277 -295
  41. package/lib/client/page.js +270 -318
  42. package/lib/client/platform.js +46 -43
  43. package/lib/client/playwright.js +51 -66
  44. package/lib/client/selectors.js +48 -46
  45. package/lib/client/stream.js +29 -25
  46. package/lib/client/timeoutSettings.js +49 -39
  47. package/lib/client/tracing.js +48 -84
  48. package/lib/client/types.js +26 -22
  49. package/lib/client/video.js +35 -27
  50. package/lib/client/waiter.js +69 -88
  51. package/lib/client/webError.js +25 -23
  52. package/lib/client/webSocket.js +61 -56
  53. package/lib/client/worker.js +48 -58
  54. package/lib/client/writableStream.js +27 -23
  55. package/lib/generated/clockSource.js +26 -5
  56. package/lib/generated/consoleApiSource.js +26 -5
  57. package/lib/generated/injectedScriptSource.js +26 -5
  58. package/lib/generated/pollingRecorderSource.js +26 -5
  59. package/lib/generated/utilityScriptSource.js +26 -5
  60. package/lib/generated/webSocketMockSource.js +375 -4
  61. package/lib/inProcessFactory.js +53 -53
  62. package/lib/inprocess.js +2 -19
  63. package/lib/outofprocess.js +53 -46
  64. package/lib/protocol/debug.js +209 -25
  65. package/lib/protocol/serializers.js +153 -134
  66. package/lib/protocol/validator.js +2714 -2714
  67. package/lib/protocol/validatorPrimitives.js +114 -73
  68. package/lib/remote/playwrightConnection.js +140 -157
  69. package/lib/remote/playwrightServer.js +99 -84
  70. package/lib/server/accessibility.js +44 -37
  71. package/lib/server/android/android.js +216 -209
  72. package/lib/server/android/backendAdb.js +89 -82
  73. package/lib/server/artifact.js +78 -55
  74. package/lib/server/bidi/bidiBrowser.js +221 -155
  75. package/lib/server/bidi/bidiChromium.js +106 -79
  76. package/lib/server/bidi/bidiConnection.js +66 -83
  77. package/lib/server/bidi/bidiExecutionContext.js +128 -113
  78. package/lib/server/bidi/bidiFirefox.js +76 -69
  79. package/lib/server/bidi/bidiInput.js +86 -97
  80. package/lib/server/bidi/bidiNetworkManager.js +137 -154
  81. package/lib/server/bidi/bidiOverCdp.js +57 -58
  82. package/lib/server/bidi/bidiPage.js +247 -219
  83. package/lib/server/bidi/bidiPdf.js +52 -86
  84. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  85. package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
  86. package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
  87. package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
  88. package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
  89. package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
  90. package/lib/server/browser.js +76 -84
  91. package/lib/server/browserContext.js +321 -346
  92. package/lib/server/browserType.js +169 -182
  93. package/lib/server/callLog.js +47 -44
  94. package/lib/server/chromium/chromium.js +212 -190
  95. package/lib/server/chromium/chromiumSwitches.js +86 -64
  96. package/lib/server/chromium/crAccessibility.js +157 -131
  97. package/lib/server/chromium/crBrowser.js +253 -273
  98. package/lib/server/chromium/crConnection.js +91 -116
  99. package/lib/server/chromium/crCoverage.js +113 -127
  100. package/lib/server/chromium/crDevTools.js +59 -51
  101. package/lib/server/chromium/crDragDrop.js +62 -79
  102. package/lib/server/chromium/crExecutionContext.js +88 -83
  103. package/lib/server/chromium/crInput.js +97 -95
  104. package/lib/server/chromium/crNetworkManager.js +288 -403
  105. package/lib/server/chromium/crPage.js +522 -608
  106. package/lib/server/chromium/crPdf.js +54 -86
  107. package/lib/server/chromium/crProtocolHelper.js +92 -80
  108. package/lib/server/chromium/crServiceWorker.js +82 -67
  109. package/lib/server/chromium/defaultFontFamilies.js +152 -135
  110. package/lib/server/chromium/protocol.d.js +16 -0
  111. package/lib/server/chromium/videoRecorder.js +65 -99
  112. package/lib/server/clock.js +62 -50
  113. package/lib/server/codegen/csharp.js +185 -160
  114. package/lib/server/codegen/java.js +155 -128
  115. package/lib/server/codegen/javascript.js +163 -148
  116. package/lib/server/codegen/jsonl.js +32 -28
  117. package/lib/server/codegen/language.js +75 -52
  118. package/lib/server/codegen/languages.js +65 -27
  119. package/lib/server/codegen/python.js +140 -125
  120. package/lib/server/codegen/types.js +15 -4
  121. package/lib/server/console.js +28 -32
  122. package/lib/server/cookieStore.js +105 -86
  123. package/lib/server/debugController.js +97 -124
  124. package/lib/server/debugger.js +82 -78
  125. package/lib/server/deviceDescriptors.js +37 -24
  126. package/lib/server/deviceDescriptorsSource.json +50 -50
  127. package/lib/server/dialog.js +36 -35
  128. package/lib/server/dispatchers/androidDispatcher.js +196 -107
  129. package/lib/server/dispatchers/artifactDispatcher.js +62 -62
  130. package/lib/server/dispatchers/browserContextDispatcher.js +176 -205
  131. package/lib/server/dispatchers/browserDispatcher.js +78 -97
  132. package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
  133. package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
  134. package/lib/server/dispatchers/debugControllerDispatcher.js +48 -66
  135. package/lib/server/dispatchers/dialogDispatcher.js +30 -27
  136. package/lib/server/dispatchers/dispatcher.js +169 -220
  137. package/lib/server/dispatchers/electronDispatcher.js +54 -57
  138. package/lib/server/dispatchers/elementHandlerDispatcher.js +77 -119
  139. package/lib/server/dispatchers/frameDispatcher.js +99 -163
  140. package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
  141. package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
  142. package/lib/server/dispatchers/localUtilsDispatcher.js +95 -80
  143. package/lib/server/dispatchers/networkDispatchers.js +90 -107
  144. package/lib/server/dispatchers/pageDispatcher.js +128 -169
  145. package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
  146. package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
  147. package/lib/server/dispatchers/streamDispatcher.js +42 -45
  148. package/lib/server/dispatchers/tracingDispatcher.js +36 -41
  149. package/lib/server/dispatchers/webSocketRouteDispatcher.js +96 -131
  150. package/lib/server/dispatchers/writableStreamDispatcher.js +54 -38
  151. package/lib/server/dom.js +413 -443
  152. package/lib/server/download.js +45 -35
  153. package/lib/server/electron/electron.js +156 -176
  154. package/lib/server/electron/loader.js +8 -36
  155. package/lib/server/errors.js +47 -46
  156. package/lib/server/fetch.js +289 -323
  157. package/lib/server/fileChooser.js +25 -24
  158. package/lib/server/fileUploadUtils.js +65 -59
  159. package/lib/server/firefox/ffAccessibility.js +153 -131
  160. package/lib/server/firefox/ffBrowser.js +213 -277
  161. package/lib/server/firefox/ffConnection.js +63 -84
  162. package/lib/server/firefox/ffExecutionContext.js +91 -73
  163. package/lib/server/firefox/ffInput.js +67 -69
  164. package/lib/server/firefox/ffNetworkManager.js +131 -110
  165. package/lib/server/firefox/ffPage.js +236 -273
  166. package/lib/server/firefox/firefox.js +76 -67
  167. package/lib/server/firefox/protocol.d.js +16 -0
  168. package/lib/server/formData.js +107 -35
  169. package/lib/server/frameSelectors.js +77 -111
  170. package/lib/server/frames.js +741 -891
  171. package/lib/server/har/harRecorder.js +85 -77
  172. package/lib/server/har/harTracer.js +287 -222
  173. package/lib/server/harBackend.js +80 -80
  174. package/lib/server/helper.js +56 -59
  175. package/lib/server/index.js +59 -99
  176. package/lib/server/input.js +134 -163
  177. package/lib/server/instrumentation.js +49 -44
  178. package/lib/server/javascript.js +143 -134
  179. package/lib/server/launchApp.js +92 -73
  180. package/lib/server/localUtils.js +130 -122
  181. package/lib/server/macEditingCommands.js +141 -137
  182. package/lib/server/network.js +262 -296
  183. package/lib/server/page.js +329 -426
  184. package/lib/server/pageBinding.js +88 -0
  185. package/lib/server/pipeTransport.js +49 -45
  186. package/lib/server/playwright.js +60 -67
  187. package/lib/server/progress.js +56 -51
  188. package/lib/server/protocolError.js +34 -31
  189. package/lib/server/recorder/chat.js +70 -86
  190. package/lib/server/recorder/contextRecorder.js +134 -138
  191. package/lib/server/recorder/recorderApp.js +127 -136
  192. package/lib/server/recorder/recorderCollection.js +56 -44
  193. package/lib/server/recorder/recorderFrontend.js +15 -4
  194. package/lib/server/recorder/recorderRunner.js +79 -103
  195. package/lib/server/recorder/recorderUtils.js +56 -45
  196. package/lib/server/recorder/throttledFile.js +42 -30
  197. package/lib/server/recorder.js +177 -186
  198. package/lib/server/registry/browserFetcher.js +106 -101
  199. package/lib/server/registry/dependencies.js +245 -196
  200. package/lib/server/registry/index.js +904 -792
  201. package/lib/server/registry/nativeDeps.js +1073 -464
  202. package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
  203. package/lib/server/screenshotter.js +166 -182
  204. package/lib/server/selectors.js +85 -46
  205. package/lib/server/socksClientCertificatesInterceptor.js +166 -185
  206. package/lib/server/socksInterceptor.js +62 -70
  207. package/lib/server/storageScript.js +94 -100
  208. package/lib/server/timeoutSettings.js +58 -43
  209. package/lib/server/trace/recorder/snapshotter.js +70 -89
  210. package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
  211. package/lib/server/trace/recorder/tracing.js +321 -333
  212. package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
  213. package/lib/server/trace/viewer/traceViewer.js +168 -146
  214. package/lib/server/transport.js +124 -133
  215. package/lib/server/types.js +26 -22
  216. package/lib/server/usKeyboardLayout.js +135 -545
  217. package/lib/server/utils/ascii.js +39 -26
  218. package/lib/server/utils/comparators.js +105 -103
  219. package/lib/server/utils/crypto.js +157 -112
  220. package/lib/server/utils/debug.js +37 -28
  221. package/lib/server/utils/debugLogger.js +69 -48
  222. package/lib/server/utils/env.js +52 -37
  223. package/lib/server/utils/eventsHelper.js +29 -28
  224. package/lib/server/utils/expectUtils.js +31 -26
  225. package/lib/server/utils/fileUtils.js +123 -136
  226. package/lib/server/utils/happyEyeballs.js +138 -123
  227. package/lib/server/utils/hostPlatform.js +84 -120
  228. package/lib/server/utils/httpServer.js +106 -121
  229. package/lib/server/utils/image_tools/colorUtils.js +42 -51
  230. package/lib/server/utils/image_tools/compare.js +44 -43
  231. package/lib/server/utils/image_tools/imageChannel.js +38 -30
  232. package/lib/server/utils/image_tools/stats.js +40 -40
  233. package/lib/server/utils/linuxUtils.js +50 -37
  234. package/lib/server/utils/network.js +143 -86
  235. package/lib/server/utils/nodePlatform.js +87 -79
  236. package/lib/server/utils/pipeTransport.js +44 -42
  237. package/lib/server/utils/processLauncher.js +111 -121
  238. package/lib/server/utils/profiler.js +52 -39
  239. package/lib/server/utils/socksProxy.js +280 -339
  240. package/lib/server/utils/spawnAsync.js +37 -41
  241. package/lib/server/utils/task.js +31 -38
  242. package/lib/server/utils/userAgent.js +73 -66
  243. package/lib/server/utils/wsServer.js +73 -69
  244. package/lib/server/utils/zipFile.js +36 -37
  245. package/lib/server/utils/zones.js +37 -34
  246. package/lib/server/webkit/protocol.d.js +16 -0
  247. package/lib/server/webkit/webkit.js +76 -63
  248. package/lib/server/webkit/wkAccessibility.js +161 -118
  249. package/lib/server/webkit/wkBrowser.js +159 -176
  250. package/lib/server/webkit/wkConnection.js +59 -83
  251. package/lib/server/webkit/wkExecutionContext.js +84 -70
  252. package/lib/server/webkit/wkInput.js +82 -80
  253. package/lib/server/webkit/wkInterceptableRequest.js +102 -95
  254. package/lib/server/webkit/wkPage.js +525 -619
  255. package/lib/server/webkit/wkProvisionalPage.js +45 -56
  256. package/lib/server/webkit/wkWorkers.js +77 -77
  257. package/lib/utils/isomorphic/ariaSnapshot.js +144 -152
  258. package/lib/utils/isomorphic/assert.js +28 -22
  259. package/lib/utils/isomorphic/builtins.js +90 -0
  260. package/lib/utils/isomorphic/colors.js +66 -59
  261. package/lib/utils/isomorphic/cssParser.js +121 -125
  262. package/lib/utils/isomorphic/cssTokenizer.js +436 -364
  263. package/lib/utils/isomorphic/headers.js +38 -37
  264. package/lib/utils/isomorphic/locatorGenerators.js +340 -357
  265. package/lib/utils/isomorphic/locatorParser.js +96 -105
  266. package/lib/utils/isomorphic/locatorUtils.js +63 -44
  267. package/lib/utils/isomorphic/manualPromise.js +47 -39
  268. package/lib/utils/isomorphic/mimeType.js +448 -25
  269. package/lib/utils/isomorphic/multimap.js +35 -27
  270. package/lib/utils/isomorphic/rtti.js +35 -33
  271. package/lib/utils/isomorphic/selectorParser.js +183 -193
  272. package/lib/utils/isomorphic/semaphore.js +27 -24
  273. package/lib/utils/isomorphic/stackTrace.js +87 -98
  274. package/lib/utils/isomorphic/stringUtils.js +113 -106
  275. package/lib/utils/isomorphic/time.js +41 -22
  276. package/lib/utils/isomorphic/timeoutRunner.js +55 -54
  277. package/lib/utils/isomorphic/traceUtils.js +38 -41
  278. package/lib/utils/isomorphic/types.js +15 -4
  279. package/lib/utils/isomorphic/urlMatch.js +112 -67
  280. package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
  281. package/lib/utils.js +97 -443
  282. package/lib/utilsBundle.js +101 -52
  283. package/lib/vite/htmlReport/index.html +21 -15
  284. package/lib/vite/recorder/assets/{codeMirrorModule-B9YMkrwa.js → codeMirrorModule-DVQi6prl.js} +1 -1
  285. package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
  286. package/lib/vite/recorder/index.html +1 -1
  287. package/lib/vite/traceViewer/assets/{codeMirrorModule-DpJ-EmBQ.js → codeMirrorModule-dvXVzLxY.js} +1 -1
  288. package/lib/vite/traceViewer/assets/defaultSettingsView-BjymbO6M.js +265 -0
  289. package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
  290. package/lib/vite/traceViewer/index.ChIUCJnj.js +2 -0
  291. package/lib/vite/traceViewer/index.html +3 -3
  292. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  293. package/lib/vite/traceViewer/uiMode.html +3 -3
  294. package/lib/vite/traceViewer/uiMode.jUCiCtdp.js +5 -0
  295. package/lib/zipBundle.js +32 -23
  296. package/package.json +1 -1
  297. package/types/protocol.d.ts +436 -17
  298. package/types/types.d.ts +35 -16
  299. package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
  300. package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
  301. package/lib/vite/traceViewer/assets/defaultSettingsView-DTenqiGw.js +0 -259
  302. package/lib/vite/traceViewer/index.CUq7VgrV.js +0 -2
  303. package/lib/vite/traceViewer/uiMode.CHJSAD7F.js +0 -5
@@ -1,81 +1,116 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var crNetworkManager_exports = {};
30
+ __export(crNetworkManager_exports, {
31
+ CRNetworkManager: () => CRNetworkManager
5
32
  });
6
- exports.CRNetworkManager = void 0;
7
- var _crypto = _interopRequireDefault(require("crypto"));
8
- var _utils = require("../../utils");
9
- var _eventsHelper = require("../utils/eventsHelper");
10
- var _helper = require("../helper");
11
- var network = _interopRequireWildcard(require("../network"));
12
- var _protocolError = require("../protocolError");
13
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
- // undetected-undetected_playwright-patch - custom imports
17
-
18
- /**
19
- * Copyright 2017 Google Inc. All rights reserved.
20
- * Modifications copyright (c) Microsoft Corporation.
21
- *
22
- * Licensed under the Apache License, Version 2.0 (the "License");
23
- * you may not use this file except in compliance with the License.
24
- * You may obtain a copy of the License at
25
- *
26
- * http://www.apache.org/licenses/LICENSE-2.0
27
- *
28
- * Unless required by applicable law or agreed to in writing, software
29
- * distributed under the License is distributed on an "AS IS" BASIS,
30
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31
- * See the License for the specific language governing permissions and
32
- * limitations under the License.
33
- */
34
-
33
+ module.exports = __toCommonJS(crNetworkManager_exports);
34
+ var import_crypto = __toESM(require("crypto"));
35
+ var import_utils = require("../../utils");
36
+ var import_eventsHelper = require("../utils/eventsHelper");
37
+ var import_helper = require("../helper");
38
+ var network = __toESM(require("../network"));
39
+ var import_protocolError = require("../protocolError");
35
40
  class CRNetworkManager {
36
41
  constructor(page, serviceWorker) {
37
- this._page = void 0;
38
- this._serviceWorker = void 0;
39
- this._requestIdToRequest = new Map();
40
- this._requestIdToRequestWillBeSentEvent = new Map();
42
+ this._requestIdToRequest = /* @__PURE__ */ new Map();
43
+ this._requestIdToRequestWillBeSentEvent = /* @__PURE__ */ new Map();
41
44
  this._credentials = null;
42
- this._attemptedAuthentications = new Set();
45
+ this._attemptedAuthentications = /* @__PURE__ */ new Set();
43
46
  this._userRequestInterceptionEnabled = false;
44
47
  this._protocolRequestInterceptionEnabled = false;
45
48
  this._offline = false;
46
49
  this._extraHTTPHeaders = [];
47
- this._requestIdToRequestPausedEvent = new Map();
50
+ this._requestIdToRequestPausedEvent = /* @__PURE__ */ new Map();
48
51
  this._responseExtraInfoTracker = new ResponseExtraInfoTracker();
49
- this._sessions = new Map();
50
- this._alreadyTrackedNetworkIds = new Set();
52
+ this._sessions = /* @__PURE__ */ new Map();
53
+ this._alreadyTrackedNetworkIds = /* @__PURE__ */ new Set();
51
54
  this._page = page;
52
55
  this._serviceWorker = serviceWorker;
53
56
  }
54
57
  async addSession(session, workerFrame, isMain) {
55
- const sessionInfo = {
56
- session,
57
- isMain,
58
- workerFrame,
59
- eventListeners: []
60
- };
61
- sessionInfo.eventListeners = [_eventsHelper.eventsHelper.addEventListener(session, 'Fetch.requestPaused', this._onRequestPaused.bind(this, sessionInfo)), _eventsHelper.eventsHelper.addEventListener(session, 'Fetch.authRequired', this._onAuthRequired.bind(this, sessionInfo)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.requestWillBeSent', this._onRequestWillBeSent.bind(this, sessionInfo)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.requestWillBeSentExtraInfo', this._onRequestWillBeSentExtraInfo.bind(this)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.requestServedFromCache', this._onRequestServedFromCache.bind(this)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.responseReceived', this._onResponseReceived.bind(this, sessionInfo)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.responseReceivedExtraInfo', this._onResponseReceivedExtraInfo.bind(this)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.loadingFinished', this._onLoadingFinished.bind(this, sessionInfo)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.loadingFailed', this._onLoadingFailed.bind(this, sessionInfo))];
58
+ const sessionInfo = { session, isMain, workerFrame, eventListeners: [] };
59
+ sessionInfo.eventListeners = [
60
+ import_eventsHelper.eventsHelper.addEventListener(session, "Fetch.requestPaused", this._onRequestPaused.bind(this, sessionInfo)),
61
+ import_eventsHelper.eventsHelper.addEventListener(session, "Fetch.authRequired", this._onAuthRequired.bind(this, sessionInfo)),
62
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.requestWillBeSent", this._onRequestWillBeSent.bind(this, sessionInfo)),
63
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.requestWillBeSentExtraInfo", this._onRequestWillBeSentExtraInfo.bind(this)),
64
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.requestServedFromCache", this._onRequestServedFromCache.bind(this)),
65
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.responseReceived", this._onResponseReceived.bind(this, sessionInfo)),
66
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.responseReceivedExtraInfo", this._onResponseReceivedExtraInfo.bind(this)),
67
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.loadingFinished", this._onLoadingFinished.bind(this, sessionInfo)),
68
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.loadingFailed", this._onLoadingFailed.bind(this, sessionInfo))
69
+ ];
62
70
  if (this._page) {
63
- sessionInfo.eventListeners.push(...[_eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketCreated', e => this._page._frameManager.onWebSocketCreated(e.requestId, e.url)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketWillSendHandshakeRequest', e => this._page._frameManager.onWebSocketRequest(e.requestId)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketHandshakeResponseReceived', e => this._page._frameManager.onWebSocketResponse(e.requestId, e.response.status, e.response.statusText)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketFrameSent', e => e.response.payloadData && this._page._frameManager.onWebSocketFrameSent(e.requestId, e.response.opcode, e.response.payloadData)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketFrameReceived', e => e.response.payloadData && this._page._frameManager.webSocketFrameReceived(e.requestId, e.response.opcode, e.response.payloadData)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketClosed', e => this._page._frameManager.webSocketClosed(e.requestId)), _eventsHelper.eventsHelper.addEventListener(session, 'Network.webSocketFrameError', e => this._page._frameManager.webSocketError(e.requestId, e.errorMessage))]);
71
+ sessionInfo.eventListeners.push(...[
72
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.webSocketCreated", (e) => this._page._frameManager.onWebSocketCreated(e.requestId, e.url)),
73
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.webSocketWillSendHandshakeRequest", (e) => this._page._frameManager.onWebSocketRequest(e.requestId)),
74
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.webSocketHandshakeResponseReceived", (e) => this._page._frameManager.onWebSocketResponse(e.requestId, e.response.status, e.response.statusText)),
75
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.webSocketFrameSent", (e) => e.response.payloadData && this._page._frameManager.onWebSocketFrameSent(e.requestId, e.response.opcode, e.response.payloadData)),
76
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.webSocketFrameReceived", (e) => e.response.payloadData && this._page._frameManager.webSocketFrameReceived(e.requestId, e.response.opcode, e.response.payloadData)),
77
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.webSocketClosed", (e) => this._page._frameManager.webSocketClosed(e.requestId)),
78
+ import_eventsHelper.eventsHelper.addEventListener(session, "Network.webSocketFrameError", (e) => this._page._frameManager.webSocketError(e.requestId, e.errorMessage))
79
+ ]);
64
80
  }
65
81
  this._sessions.set(session, sessionInfo);
66
- await Promise.all([session.send('Network.enable'), this._updateProtocolRequestInterceptionForSession(sessionInfo, true /* initial */), this._setOfflineForSession(sessionInfo, true /* initial */), this._setExtraHTTPHeadersForSession(sessionInfo, true /* initial */)]);
82
+ await Promise.all([
83
+ session.send("Network.enable"),
84
+ this._updateProtocolRequestInterceptionForSession(
85
+ sessionInfo,
86
+ true
87
+ /* initial */
88
+ ),
89
+ this._setOfflineForSession(
90
+ sessionInfo,
91
+ true
92
+ /* initial */
93
+ ),
94
+ this._setExtraHTTPHeadersForSession(
95
+ sessionInfo,
96
+ true
97
+ /* initial */
98
+ )
99
+ ]);
67
100
  }
68
101
  removeSession(session) {
69
102
  const info = this._sessions.get(session);
70
- if (info) _eventsHelper.eventsHelper.removeEventListeners(info.eventListeners);
103
+ if (info)
104
+ import_eventsHelper.eventsHelper.removeEventListeners(info.eventListeners);
71
105
  this._sessions.delete(session);
72
106
  }
73
107
  async _forEachSession(cb) {
74
- await Promise.all([...this._sessions.values()].map(info => {
75
- if (info.isMain) return cb(info);
76
- return cb(info).catch(e => {
77
- // Broadcasting a message to the closed target should be a noop.
78
- if ((0, _protocolError.isSessionClosedError)(e)) return;
108
+ await Promise.all([...this._sessions.values()].map((info) => {
109
+ if (info.isMain)
110
+ return cb(info);
111
+ return cb(info).catch((e) => {
112
+ if ((0, import_protocolError.isSessionClosedError)(e))
113
+ return;
79
114
  throw e;
80
115
  });
81
116
  }));
@@ -85,15 +120,17 @@ class CRNetworkManager {
85
120
  await this._updateProtocolRequestInterception();
86
121
  }
87
122
  async setOffline(offline) {
88
- if (offline === this._offline) return;
123
+ if (offline === this._offline)
124
+ return;
89
125
  this._offline = offline;
90
- await this._forEachSession(info => this._setOfflineForSession(info));
126
+ await this._forEachSession((info) => this._setOfflineForSession(info));
91
127
  }
92
128
  async _setOfflineForSession(info, initial) {
93
- if (initial && !this._offline) return;
94
- // Workers are affected by the owner frame's Network.emulateNetworkConditions.
95
- if (info.workerFrame) return;
96
- await info.session.send('Network.emulateNetworkConditions', {
129
+ if (initial && !this._offline)
130
+ return;
131
+ if (info.workerFrame)
132
+ return;
133
+ await info.session.send("Network.emulateNetworkConditions", {
97
134
  offline: this._offline,
98
135
  // values of 0 remove any active throttling. crbug.com/456324#c9
99
136
  latency: 0,
@@ -107,67 +144,61 @@ class CRNetworkManager {
107
144
  }
108
145
  async _updateProtocolRequestInterception() {
109
146
  const enabled = this._userRequestInterceptionEnabled || !!this._credentials;
110
- if (enabled === this._protocolRequestInterceptionEnabled) return;
147
+ if (enabled === this._protocolRequestInterceptionEnabled)
148
+ return;
111
149
  this._protocolRequestInterceptionEnabled = enabled;
112
- await this._forEachSession(info => this._updateProtocolRequestInterceptionForSession(info));
150
+ await this._forEachSession((info) => this._updateProtocolRequestInterceptionForSession(info));
113
151
  }
114
152
  async _updateProtocolRequestInterceptionForSession(info, initial) {
115
153
  const enabled = this._protocolRequestInterceptionEnabled;
116
- if (initial && !enabled) return;
117
- const cachePromise = info.session.send('Network.setCacheDisabled', {
118
- cacheDisabled: false
119
- });
120
- let fetchPromise = Promise.resolve(undefined);
154
+ if (initial && !enabled)
155
+ return;
156
+ const cachePromise = info.session.send("Network.setCacheDisabled", { cacheDisabled: false });
157
+ let fetchPromise = Promise.resolve(void 0);
121
158
  if (!info.workerFrame) {
122
- if (enabled) fetchPromise = info.session.send('Fetch.enable', {
123
- handleAuthRequests: true,
124
- patterns: [{
125
- urlPattern: '*',
126
- requestStage: 'Request'
127
- }]
128
- });else fetchPromise = info.session.send('Fetch.disable');
159
+ if (enabled)
160
+ fetchPromise = info.session.send("Fetch.enable", { handleAuthRequests: true, patterns: [{ urlPattern: "*", requestStage: "Request" }] });
161
+ else
162
+ fetchPromise = info.session.send("Fetch.disable");
129
163
  }
130
164
  await Promise.all([cachePromise, fetchPromise]);
131
165
  }
132
166
  async setExtraHTTPHeaders(extraHTTPHeaders) {
133
- if (!this._extraHTTPHeaders.length && !extraHTTPHeaders.length) return;
167
+ if (!this._extraHTTPHeaders.length && !extraHTTPHeaders.length)
168
+ return;
134
169
  this._extraHTTPHeaders = extraHTTPHeaders;
135
- await this._forEachSession(info => this._setExtraHTTPHeadersForSession(info));
170
+ await this._forEachSession((info) => this._setExtraHTTPHeadersForSession(info));
136
171
  }
137
172
  async _setExtraHTTPHeadersForSession(info, initial) {
138
- if (initial && !this._extraHTTPHeaders.length) return;
139
- await info.session.send('Network.setExtraHTTPHeaders', {
140
- headers: (0, _utils.headersArrayToObject)(this._extraHTTPHeaders, false /* lowerCase */)
141
- });
173
+ if (initial && !this._extraHTTPHeaders.length)
174
+ return;
175
+ await info.session.send("Network.setExtraHTTPHeaders", { headers: (0, import_utils.headersArrayToObject)(
176
+ this._extraHTTPHeaders,
177
+ false
178
+ /* lowerCase */
179
+ ) });
142
180
  }
143
181
  async clearCache() {
144
- await this._forEachSession(async info => {
145
- // Sending 'Network.setCacheDisabled' with 'cacheDisabled = true' will clear the MemoryCache.
146
- await info.session.send('Network.setCacheDisabled', {
147
- cacheDisabled: true
148
- });
149
- if (!this._protocolRequestInterceptionEnabled) await info.session.send('Network.setCacheDisabled', {
150
- cacheDisabled: false
151
- });
152
- if (!info.workerFrame) await info.session.send('Network.clearBrowserCache');
182
+ await this._forEachSession(async (info) => {
183
+ await info.session.send("Network.setCacheDisabled", { cacheDisabled: true });
184
+ if (!this._protocolRequestInterceptionEnabled)
185
+ await info.session.send("Network.setCacheDisabled", { cacheDisabled: false });
186
+ if (!info.workerFrame)
187
+ await info.session.send("Network.clearBrowserCache");
153
188
  });
154
189
  }
155
190
  _onRequestWillBeSent(sessionInfo, event) {
156
- // Request interception doesn't happen for data URLs with Network Service.
157
- if (this._protocolRequestInterceptionEnabled && !event.request.url.startsWith('data:')) {
191
+ if (this._protocolRequestInterceptionEnabled && !event.request.url.startsWith("data:")) {
158
192
  const requestId = event.requestId;
159
193
  const requestPausedEvent = this._requestIdToRequestPausedEvent.get(requestId);
160
194
  if (requestPausedEvent) {
161
195
  this._onRequest(sessionInfo, event, requestPausedEvent.sessionInfo, requestPausedEvent.event);
162
196
  this._requestIdToRequestPausedEvent.delete(requestId);
163
197
  } else {
164
- this._requestIdToRequestWillBeSentEvent.set(event.requestId, {
165
- sessionInfo,
166
- event
167
- });
198
+ this._requestIdToRequestWillBeSentEvent.set(event.requestId, { sessionInfo, event });
168
199
  }
169
200
  } else {
170
- this._onRequest(sessionInfo, event, undefined, undefined);
201
+ this._onRequest(sessionInfo, event, void 0, void 0);
171
202
  }
172
203
  }
173
204
  _onRequestServedFromCache(event) {
@@ -177,159 +208,105 @@ class CRNetworkManager {
177
208
  this._responseExtraInfoTracker.requestWillBeSentExtraInfo(event);
178
209
  }
179
210
  _onAuthRequired(sessionInfo, event) {
180
- let response = 'Default';
211
+ let response = "Default";
181
212
  const shouldProvideCredentials = this._shouldProvideCredentials(event.request.url);
182
213
  if (this._attemptedAuthentications.has(event.requestId)) {
183
- response = 'CancelAuth';
214
+ response = "CancelAuth";
184
215
  } else if (shouldProvideCredentials) {
185
- response = 'ProvideCredentials';
216
+ response = "ProvideCredentials";
186
217
  this._attemptedAuthentications.add(event.requestId);
187
218
  }
188
- const {
189
- username,
190
- password
191
- } = shouldProvideCredentials && this._credentials ? this._credentials : {
192
- username: undefined,
193
- password: undefined
194
- };
195
- sessionInfo.session._sendMayFail('Fetch.continueWithAuth', {
219
+ const { username, password } = shouldProvideCredentials && this._credentials ? this._credentials : { username: void 0, password: void 0 };
220
+ sessionInfo.session._sendMayFail("Fetch.continueWithAuth", {
196
221
  requestId: event.requestId,
197
- authChallengeResponse: {
198
- response,
199
- username,
200
- password
201
- }
222
+ authChallengeResponse: { response, username, password }
202
223
  });
203
224
  }
204
225
  _shouldProvideCredentials(url) {
205
- if (!this._credentials) return false;
226
+ if (!this._credentials)
227
+ return false;
206
228
  return !this._credentials.origin || new URL(url).origin.toLowerCase() === this._credentials.origin.toLowerCase();
207
229
  }
208
230
  _onRequestPaused(sessionInfo, event) {
209
231
  if (this._alreadyTrackedNetworkIds.has(event.networkId)) return;
210
232
  if (!event.networkId) {
211
- // Fetch without networkId means that request was not recognized by inspector, and
212
- // it will never receive Network.requestWillBeSent. Continue the request to not affect it.
213
- sessionInfo.session._sendMayFail('Fetch.continueRequest', {
214
- requestId: event.requestId
215
- });
233
+ sessionInfo.session._sendMayFail("Fetch.continueRequest", { requestId: event.requestId });
216
234
  return;
217
235
  }
218
- if (event.request.url.startsWith('data:')) return;
236
+ if (event.request.url.startsWith("data:"))
237
+ return;
219
238
  const requestId = event.networkId;
220
239
  const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(requestId);
221
240
  if (requestWillBeSentEvent) {
222
241
  this._onRequest(requestWillBeSentEvent.sessionInfo, requestWillBeSentEvent.event, sessionInfo, event);
223
242
  this._requestIdToRequestWillBeSentEvent.delete(requestId);
224
243
  } else {
225
- var _existingRequest$_rou;
226
244
  const existingRequest = this._requestIdToRequest.get(requestId);
227
- const alreadyContinuedParams = existingRequest === null || existingRequest === void 0 || (_existingRequest$_rou = existingRequest._route) === null || _existingRequest$_rou === void 0 ? void 0 : _existingRequest$_rou._alreadyContinuedParams;
245
+ const alreadyContinuedParams = existingRequest?._route?._alreadyContinuedParams;
228
246
  if (alreadyContinuedParams && !event.redirectedRequestId) {
229
- // Sometimes Chromium network stack restarts the request internally.
230
- // For example, when no-cors request hits a "less public address space", it should be resent with cors.
231
- // There are some more examples here: https://source.chromium.org/chromium/chromium/src/+/main:services/network/url_loader.cc;l=1205-1234;drc=d5dd931e0ad3d9ffe74888ec62a3cc106efd7ea6
232
- // There are probably even more cases deep inside the network stack.
233
- //
234
- // Anyway, in this case, continue the request in the same way as before, and it should go through.
235
- //
236
- // Note: make sure not to prematurely continue the redirect, which shares the
237
- // `networkId` between the original request and the redirect.
238
- sessionInfo.session._sendMayFail('Fetch.continueRequest', {
247
+ sessionInfo.session._sendMayFail("Fetch.continueRequest", {
239
248
  ...alreadyContinuedParams,
240
249
  requestId: event.requestId
241
250
  });
242
251
  return;
243
252
  }
244
- this._requestIdToRequestPausedEvent.set(requestId, {
245
- sessionInfo,
246
- event
247
- });
253
+ this._requestIdToRequestPausedEvent.set(requestId, { sessionInfo, event });
248
254
  }
249
255
  }
250
256
  _onRequest(requestWillBeSentSessionInfo, requestWillBeSentEvent, requestPausedSessionInfo, requestPausedEvent) {
251
- var _this$_page, _this$_page2, _this$_page3;
252
257
  if (this._alreadyTrackedNetworkIds.has(requestWillBeSentEvent.initiator.requestId)) return;
253
- if (requestWillBeSentEvent.request.url.startsWith('data:')) return;
258
+ if (requestWillBeSentEvent.request.url.startsWith("data:"))
259
+ return;
254
260
  let redirectedFrom = null;
255
261
  if (requestWillBeSentEvent.redirectResponse) {
256
- const request = this._requestIdToRequest.get(requestWillBeSentEvent.requestId);
257
- // If we connect late to the target, we could have missed the requestWillBeSent event.
258
- if (request) {
259
- this._handleRequestRedirect(request, requestWillBeSentEvent.redirectResponse, requestWillBeSentEvent.timestamp, requestWillBeSentEvent.redirectHasExtraInfo);
260
- redirectedFrom = request;
262
+ const request2 = this._requestIdToRequest.get(requestWillBeSentEvent.requestId);
263
+ if (request2) {
264
+ this._handleRequestRedirect(request2, requestWillBeSentEvent.redirectResponse, requestWillBeSentEvent.timestamp, requestWillBeSentEvent.redirectHasExtraInfo);
265
+ redirectedFrom = request2;
261
266
  }
262
267
  }
263
- let frame = requestWillBeSentEvent.frameId ? (_this$_page = this._page) === null || _this$_page === void 0 ? void 0 : _this$_page._frameManager.frame(requestWillBeSentEvent.frameId) : requestWillBeSentSessionInfo.workerFrame;
264
- // Requests from workers lack frameId, because we receive Network.requestWillBeSent
265
- // on the worker target. However, we receive Fetch.requestPaused on the page target,
266
- // and lack workerFrame there. Luckily, Fetch.requestPaused provides a frameId.
267
- if (!frame && this._page && requestPausedEvent && requestPausedEvent.frameId) frame = this._page._frameManager.frame(requestPausedEvent.frameId);
268
-
269
- // Check if it's main resource request interception (targetId === main frame id).
270
- if (!frame && this._page && requestWillBeSentEvent.frameId === ((_this$_page2 = this._page) === null || _this$_page2 === void 0 ? void 0 : _this$_page2._delegate)._targetId) {
271
- // Main resource request for the page is being intercepted so the Frame is not created
272
- // yet. Precreate it here for the purposes of request interception. It will be updated
273
- // later as soon as the request continues and we receive frame tree from the page.
268
+ let frame = requestWillBeSentEvent.frameId ? this._page?._frameManager.frame(requestWillBeSentEvent.frameId) : requestWillBeSentSessionInfo.workerFrame;
269
+ if (!frame && this._page && requestPausedEvent && requestPausedEvent.frameId)
270
+ frame = this._page._frameManager.frame(requestPausedEvent.frameId);
271
+ if (!frame && this._page && requestWillBeSentEvent.frameId === (this._page?._delegate)._targetId) {
274
272
  frame = this._page._frameManager.frameAttached(requestWillBeSentEvent.frameId, null);
275
273
  }
276
-
277
- // CORS options preflight request is generated by the network stack. If interception is enabled,
278
- // we accept all CORS options, assuming that this was intended when setting route.
279
- //
280
- // Note: it would be better to match the URL against interception patterns.
281
- const isInterceptedOptionsPreflight = !!requestPausedEvent && requestPausedEvent.request.method === 'OPTIONS' && requestWillBeSentEvent.initiator.type === 'preflight';
274
+ const isInterceptedOptionsPreflight = !!requestPausedEvent && requestPausedEvent.request.method === "OPTIONS" && requestWillBeSentEvent.initiator.type === "preflight";
282
275
  if (isInterceptedOptionsPreflight && (this._page || this._serviceWorker).needsRequestInterception()) {
283
276
  const requestHeaders = requestPausedEvent.request.headers;
284
- const responseHeaders = [{
285
- name: 'Access-Control-Allow-Origin',
286
- value: requestHeaders['Origin'] || '*'
287
- }, {
288
- name: 'Access-Control-Allow-Methods',
289
- value: requestHeaders['Access-Control-Request-Method'] || 'GET, POST, OPTIONS, DELETE'
290
- }, {
291
- name: 'Access-Control-Allow-Credentials',
292
- value: 'true'
293
- }];
294
- if (requestHeaders['Access-Control-Request-Headers']) responseHeaders.push({
295
- name: 'Access-Control-Allow-Headers',
296
- value: requestHeaders['Access-Control-Request-Headers']
297
- });
298
- requestPausedSessionInfo.session._sendMayFail('Fetch.fulfillRequest', {
277
+ const responseHeaders = [
278
+ { name: "Access-Control-Allow-Origin", value: requestHeaders["Origin"] || "*" },
279
+ { name: "Access-Control-Allow-Methods", value: requestHeaders["Access-Control-Request-Method"] || "GET, POST, OPTIONS, DELETE" },
280
+ { name: "Access-Control-Allow-Credentials", value: "true" }
281
+ ];
282
+ if (requestHeaders["Access-Control-Request-Headers"])
283
+ responseHeaders.push({ name: "Access-Control-Allow-Headers", value: requestHeaders["Access-Control-Request-Headers"] });
284
+ requestPausedSessionInfo.session._sendMayFail("Fetch.fulfillRequest", {
299
285
  requestId: requestPausedEvent.requestId,
300
286
  responseCode: 204,
301
287
  responsePhrase: network.statusText(204),
302
288
  responseHeaders,
303
- body: ''
289
+ body: ""
304
290
  });
305
291
  return;
306
292
  }
307
-
308
- // Non-service-worker requests MUST have a frame—if they don't, we pretend there was no request
309
293
  if (!frame && !this._serviceWorker) {
310
- if (requestPausedEvent) requestPausedSessionInfo.session._sendMayFail('Fetch.continueRequest', {
311
- requestId: requestPausedEvent.requestId
312
- });
294
+ if (requestPausedEvent)
295
+ requestPausedSessionInfo.session._sendMayFail("Fetch.continueRequest", { requestId: requestPausedEvent.requestId });
313
296
  return;
314
297
  }
315
298
  let route = null;
316
299
  let headersOverride;
317
300
  if (requestPausedEvent) {
318
- // We do not support intercepting redirects.
319
301
  if (redirectedFrom || !this._userRequestInterceptionEnabled && this._protocolRequestInterceptionEnabled) {
320
- var _redirectedFrom;
321
- // Chromium does not preserve header overrides between redirects, so we have to do it ourselves.
322
- headersOverride = (_redirectedFrom = redirectedFrom) === null || _redirectedFrom === void 0 || (_redirectedFrom = _redirectedFrom._originalRequestRoute) === null || _redirectedFrom === void 0 || (_redirectedFrom = _redirectedFrom._alreadyContinuedParams) === null || _redirectedFrom === void 0 ? void 0 : _redirectedFrom.headers;
323
- requestPausedSessionInfo.session._sendMayFail('Fetch.continueRequest', {
324
- requestId: requestPausedEvent.requestId,
325
- headers: headersOverride
326
- });
302
+ headersOverride = redirectedFrom?._originalRequestRoute?._alreadyContinuedParams?.headers;
303
+ requestPausedSessionInfo.session._sendMayFail("Fetch.continueRequest", { requestId: requestPausedEvent.requestId, headers: headersOverride });
327
304
  } else {
328
305
  route = new RouteImpl(requestPausedSessionInfo.session, requestPausedEvent.requestId, this._page, requestPausedEvent.networkId, this);
329
306
  }
330
307
  }
331
- const isNavigationRequest = requestWillBeSentEvent.requestId === requestWillBeSentEvent.loaderId && requestWillBeSentEvent.type === 'Document';
332
- const documentId = isNavigationRequest ? requestWillBeSentEvent.loaderId : undefined;
308
+ const isNavigationRequest = requestWillBeSentEvent.requestId === requestWillBeSentEvent.loaderId && requestWillBeSentEvent.type === "Document";
309
+ const documentId = isNavigationRequest ? requestWillBeSentEvent.loaderId : void 0;
333
310
  const request = new InterceptableRequest({
334
311
  session: requestWillBeSentSessionInfo.session,
335
312
  context: (this._page || this._serviceWorker)._browserContext,
@@ -344,47 +321,27 @@ class CRNetworkManager {
344
321
  });
345
322
  this._requestIdToRequest.set(requestWillBeSentEvent.requestId, request);
346
323
  if (route) {
347
- // We may not receive extra info when intercepting the request.
348
- // Use the headers from the Fetch.requestPausedPayload and release the allHeaders()
349
- // right away, so that client can call it from the route handler.
350
- request.request.setRawRequestHeaders((0, _utils.headersObjectToArray)(requestPausedEvent.request.headers, '\n'));
324
+ request.request.setRawRequestHeaders((0, import_utils.headersObjectToArray)(requestPausedEvent.request.headers, "\n"));
351
325
  }
352
- (((_this$_page3 = this._page) === null || _this$_page3 === void 0 ? void 0 : _this$_page3._frameManager) || this._serviceWorker).requestStarted(request.request, route || undefined);
326
+ (this._page?._frameManager || this._serviceWorker).requestStarted(request.request, route || void 0);
353
327
  }
354
328
  _createResponse(request, responsePayload, hasExtraInfo) {
355
- var _responsePayload$secu, _responsePayload$secu2, _responsePayload$secu3, _responsePayload$secu4, _responsePayload$secu5;
356
329
  const getResponseBody = async () => {
357
- var _request$_route;
358
- const contentLengthHeader = Object.entries(responsePayload.headers).find(header => header[0].toLowerCase() === 'content-length');
359
- const expectedLength = contentLengthHeader ? +contentLengthHeader[1] : undefined;
330
+ const contentLengthHeader = Object.entries(responsePayload.headers).find((header) => header[0].toLowerCase() === "content-length");
331
+ const expectedLength = contentLengthHeader ? +contentLengthHeader[1] : void 0;
360
332
  const session = request.session;
361
- const response = await session.send('Network.getResponseBody', {
362
- requestId: request._requestId
363
- });
364
- if (response.body || !expectedLength) return Buffer.from(response.body, response.base64Encoded ? 'base64' : 'utf8');
365
-
366
- // Make sure no network requests sent while reading the body for fulfilled requests.
367
- if ((_request$_route = request._route) !== null && _request$_route !== void 0 && _request$_route._fulfilled) return Buffer.from('');
368
-
369
- // For <link prefetch we are going to receive empty body with non-empty content-length expectation. Reach out for the actual content.
370
- const resource = await session.send('Network.loadNetworkResource', {
371
- url: request.request.url(),
372
- frameId: this._serviceWorker ? undefined : request.request.frame()._id,
373
- options: {
374
- disableCache: false,
375
- includeCredentials: true
376
- }
377
- });
333
+ const response2 = await session.send("Network.getResponseBody", { requestId: request._requestId });
334
+ if (response2.body || !expectedLength)
335
+ return Buffer.from(response2.body, response2.base64Encoded ? "base64" : "utf8");
336
+ if (request._route?._fulfilled)
337
+ return Buffer.from("");
338
+ const resource = await session.send("Network.loadNetworkResource", { url: request.request.url(), frameId: this._serviceWorker ? void 0 : request.request.frame()._id, options: { disableCache: false, includeCredentials: true } });
378
339
  const chunks = [];
379
340
  while (resource.resource.stream) {
380
- const chunk = await session.send('IO.read', {
381
- handle: resource.resource.stream
382
- });
383
- chunks.push(Buffer.from(chunk.data, chunk.base64Encoded ? 'base64' : 'utf-8'));
341
+ const chunk = await session.send("IO.read", { handle: resource.resource.stream });
342
+ chunks.push(Buffer.from(chunk.data, chunk.base64Encoded ? "base64" : "utf-8"));
384
343
  if (chunk.eof) {
385
- await session.send('IO.close', {
386
- handle: resource.resource.stream
387
- });
344
+ await session.send("IO.close", { handle: resource.resource.stream });
388
345
  break;
389
346
  }
390
347
  }
@@ -394,7 +351,7 @@ class CRNetworkManager {
394
351
  let timing;
395
352
  if (timingPayload && !this._responseExtraInfoTracker.servedFromCache(request._requestId)) {
396
353
  timing = {
397
- startTime: (timingPayload.requestTime - request._timestamp + request._wallTime) * 1000,
354
+ startTime: (timingPayload.requestTime - request._timestamp + request._wallTime) * 1e3,
398
355
  domainLookupStart: timingPayload.dnsStart,
399
356
  domainLookupEnd: timingPayload.dnsEnd,
400
357
  connectStart: timingPayload.connectStart,
@@ -405,7 +362,7 @@ class CRNetworkManager {
405
362
  };
406
363
  } else {
407
364
  timing = {
408
- startTime: request._wallTime * 1000,
365
+ startTime: request._wallTime * 1e3,
409
366
  domainLookupStart: -1,
410
367
  domainLookupEnd: -1,
411
368
  connectStart: -1,
@@ -415,8 +372,8 @@ class CRNetworkManager {
415
372
  responseStart: -1
416
373
  };
417
374
  }
418
- const response = new network.Response(request.request, responsePayload.status, responsePayload.statusText, (0, _utils.headersObjectToArray)(responsePayload.headers), timing, getResponseBody, !!responsePayload.fromServiceWorker, responsePayload.protocol);
419
- if (responsePayload !== null && responsePayload !== void 0 && responsePayload.remoteIPAddress && typeof (responsePayload === null || responsePayload === void 0 ? void 0 : responsePayload.remotePort) === 'number') {
375
+ const response = new network.Response(request.request, responsePayload.status, responsePayload.statusText, (0, import_utils.headersObjectToArray)(responsePayload.headers), timing, getResponseBody, !!responsePayload.fromServiceWorker, responsePayload.protocol);
376
+ if (responsePayload?.remoteIPAddress && typeof responsePayload?.remotePort === "number") {
420
377
  response._serverAddrFinished({
421
378
  ipAddress: responsePayload.remoteIPAddress,
422
379
  port: responsePayload.remotePort
@@ -425,130 +382,96 @@ class CRNetworkManager {
425
382
  response._serverAddrFinished();
426
383
  }
427
384
  response._securityDetailsFinished({
428
- protocol: responsePayload === null || responsePayload === void 0 || (_responsePayload$secu = responsePayload.securityDetails) === null || _responsePayload$secu === void 0 ? void 0 : _responsePayload$secu.protocol,
429
- subjectName: responsePayload === null || responsePayload === void 0 || (_responsePayload$secu2 = responsePayload.securityDetails) === null || _responsePayload$secu2 === void 0 ? void 0 : _responsePayload$secu2.subjectName,
430
- issuer: responsePayload === null || responsePayload === void 0 || (_responsePayload$secu3 = responsePayload.securityDetails) === null || _responsePayload$secu3 === void 0 ? void 0 : _responsePayload$secu3.issuer,
431
- validFrom: responsePayload === null || responsePayload === void 0 || (_responsePayload$secu4 = responsePayload.securityDetails) === null || _responsePayload$secu4 === void 0 ? void 0 : _responsePayload$secu4.validFrom,
432
- validTo: responsePayload === null || responsePayload === void 0 || (_responsePayload$secu5 = responsePayload.securityDetails) === null || _responsePayload$secu5 === void 0 ? void 0 : _responsePayload$secu5.validTo
385
+ protocol: responsePayload?.securityDetails?.protocol,
386
+ subjectName: responsePayload?.securityDetails?.subjectName,
387
+ issuer: responsePayload?.securityDetails?.issuer,
388
+ validFrom: responsePayload?.securityDetails?.validFrom,
389
+ validTo: responsePayload?.securityDetails?.validTo
433
390
  });
434
391
  this._responseExtraInfoTracker.processResponse(request._requestId, response, hasExtraInfo);
435
392
  return response;
436
393
  }
437
394
  _deleteRequest(request) {
438
395
  this._requestIdToRequest.delete(request._requestId);
439
- if (request._interceptionId) this._attemptedAuthentications.delete(request._interceptionId);
396
+ if (request._interceptionId)
397
+ this._attemptedAuthentications.delete(request._interceptionId);
440
398
  }
441
399
  _handleRequestRedirect(request, responsePayload, timestamp, hasExtraInfo) {
442
- return;
400
+ const response = this._createResponse(request, responsePayload, hasExtraInfo);
401
+ response.setTransferSize(null);
402
+ response.setEncodedBodySize(null);
403
+ response._requestFinished((timestamp - request._timestamp) * 1e3);
404
+ this._deleteRequest(request);
405
+ (this._page?._frameManager || this._serviceWorker).requestReceivedResponse(response);
406
+ (this._page?._frameManager || this._serviceWorker).reportRequestFinished(request.request, response);
443
407
  }
444
408
  _onResponseReceivedExtraInfo(event) {
445
409
  this._responseExtraInfoTracker.responseReceivedExtraInfo(event);
446
410
  }
447
411
  _onResponseReceived(sessionInfo, event) {
448
- var _this$_page4;
449
412
  let request = this._requestIdToRequest.get(event.requestId);
450
- // For frame-level Requests that are handled by a Service Worker's fetch handler, we'll never get a requestPaused event, so we need to
451
- // manually create the request. In an ideal world, crNetworkManager would be able to know this on Network.requestWillBeSent, but there
452
- // is not enough metadata there.
453
413
  if (!request && event.response.fromServiceWorker) {
454
414
  const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);
455
415
  if (requestWillBeSentEvent) {
456
416
  this._requestIdToRequestWillBeSentEvent.delete(event.requestId);
457
- this._onRequest(sessionInfo, requestWillBeSentEvent.event, undefined, undefined);
417
+ this._onRequest(sessionInfo, requestWillBeSentEvent.event, void 0, void 0);
458
418
  request = this._requestIdToRequest.get(event.requestId);
459
419
  }
460
420
  }
461
- // FileUpload sends a response without a matching request.
462
- if (!request) return;
421
+ if (!request)
422
+ return;
463
423
  const response = this._createResponse(request, event.response, event.hasExtraInfo);
464
- (((_this$_page4 = this._page) === null || _this$_page4 === void 0 ? void 0 : _this$_page4._frameManager) || this._serviceWorker).requestReceivedResponse(response);
424
+ (this._page?._frameManager || this._serviceWorker).requestReceivedResponse(response);
465
425
  }
466
426
  _onLoadingFinished(sessionInfo, event) {
467
- var _this$_page5;
468
427
  this._responseExtraInfoTracker.loadingFinished(event);
469
428
  const request = this._requestIdToRequest.get(event.requestId);
470
- // For certain requestIds we never receive requestWillBeSent event.
471
- // @see https://crbug.com/750469
472
- if (!request) return;
429
+ if (!request)
430
+ return;
473
431
  this._maybeUpdateOOPIFMainRequest(sessionInfo, request);
474
-
475
- // Under certain conditions we never get the Network.responseReceived
476
- // event from protocol. @see https://crbug.com/883475
477
432
  const response = request.request._existingResponse();
478
433
  if (response) {
479
434
  response.setTransferSize(event.encodedDataLength);
480
- response.responseHeadersSize().then(size => response.setEncodedBodySize(event.encodedDataLength - size));
481
- response._requestFinished(_helper.helper.secondsToRoundishMillis(event.timestamp - request._timestamp));
435
+ response.responseHeadersSize().then((size) => response.setEncodedBodySize(event.encodedDataLength - size));
436
+ response._requestFinished(import_helper.helper.secondsToRoundishMillis(event.timestamp - request._timestamp));
482
437
  }
483
438
  this._deleteRequest(request);
484
- (((_this$_page5 = this._page) === null || _this$_page5 === void 0 ? void 0 : _this$_page5._frameManager) || this._serviceWorker).reportRequestFinished(request.request, response);
439
+ (this._page?._frameManager || this._serviceWorker).reportRequestFinished(request.request, response);
485
440
  }
486
441
  _onLoadingFailed(sessionInfo, event) {
487
- var _this$_page6;
488
442
  this._responseExtraInfoTracker.loadingFailed(event);
489
443
  let request = this._requestIdToRequest.get(event.requestId);
490
444
  if (!request) {
491
445
  const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);
492
446
  if (requestWillBeSentEvent) {
493
- // This is a case where request has failed before we had a chance to intercept it.
494
- // We stop waiting for Fetch.requestPaused (it might never come), and dispatch request event
495
- // right away, followed by requestfailed event.
496
447
  this._requestIdToRequestWillBeSentEvent.delete(event.requestId);
497
- this._onRequest(sessionInfo, requestWillBeSentEvent.event, undefined, undefined);
448
+ this._onRequest(sessionInfo, requestWillBeSentEvent.event, void 0, void 0);
498
449
  request = this._requestIdToRequest.get(event.requestId);
499
450
  }
500
451
  }
501
-
502
- // For certain requestIds we never receive requestWillBeSent event.
503
- // @see https://crbug.com/750469
504
- if (!request) return;
452
+ if (!request)
453
+ return;
505
454
  this._maybeUpdateOOPIFMainRequest(sessionInfo, request);
506
455
  const response = request.request._existingResponse();
507
456
  if (response) {
508
457
  response.setTransferSize(null);
509
458
  response.setEncodedBodySize(null);
510
- response._requestFinished(_helper.helper.secondsToRoundishMillis(event.timestamp - request._timestamp));
459
+ response._requestFinished(import_helper.helper.secondsToRoundishMillis(event.timestamp - request._timestamp));
511
460
  } else {
512
- // Loading failed before response has arrived - there will be no extra info events.
513
461
  request.request.setRawRequestHeaders(null);
514
462
  }
515
463
  this._deleteRequest(request);
516
- request.request._setFailureText(event.errorText || event.blockedReason || '');
517
- (((_this$_page6 = this._page) === null || _this$_page6 === void 0 ? void 0 : _this$_page6._frameManager) || this._serviceWorker).requestFailed(request.request, !!event.canceled);
464
+ request.request._setFailureText(event.errorText || event.blockedReason || "");
465
+ (this._page?._frameManager || this._serviceWorker).requestFailed(request.request, !!event.canceled);
518
466
  }
519
467
  _maybeUpdateOOPIFMainRequest(sessionInfo, request) {
520
- // OOPIF has a main request that starts in the parent session but finishes in the child session.
521
- // We check for the main request by matching loaderId and requestId, and if it now belongs to
522
- // a child session, migrate it there.
523
- if (request.session !== sessionInfo.session && !sessionInfo.isMain && request._documentId === request._requestId) request.session = sessionInfo.session;
468
+ if (request.session !== sessionInfo.session && !sessionInfo.isMain && request._documentId === request._requestId)
469
+ request.session = sessionInfo.session;
524
470
  }
525
471
  }
526
- exports.CRNetworkManager = CRNetworkManager;
527
472
  class InterceptableRequest {
528
473
  constructor(options) {
529
- this.request = void 0;
530
- this._requestId = void 0;
531
- this._interceptionId = void 0;
532
- this._documentId = void 0;
533
- this._timestamp = void 0;
534
- this._wallTime = void 0;
535
- this._route = void 0;
536
- // Only first request in the chain can be intercepted, so this will
537
- // store the first and only Route in the chain (if any).
538
- this._originalRequestRoute = void 0;
539
- this.session = void 0;
540
- const {
541
- session,
542
- context,
543
- frame,
544
- documentId,
545
- route,
546
- requestWillBeSentEvent,
547
- requestPausedEvent,
548
- redirectedFrom,
549
- serviceWorker,
550
- headersOverride
551
- } = options;
474
+ const { session, context, frame, documentId, route, requestWillBeSentEvent, requestPausedEvent, redirectedFrom, serviceWorker, headersOverride } = options;
552
475
  this.session = session;
553
476
  this._timestamp = requestWillBeSentEvent.timestamp;
554
477
  this._wallTime = requestWillBeSentEvent.wallTime;
@@ -556,25 +479,23 @@ class InterceptableRequest {
556
479
  this._interceptionId = requestPausedEvent && requestPausedEvent.requestId;
557
480
  this._documentId = documentId;
558
481
  this._route = route;
559
- this._originalRequestRoute = route !== null && route !== void 0 ? route : redirectedFrom === null || redirectedFrom === void 0 ? void 0 : redirectedFrom._originalRequestRoute;
482
+ this._originalRequestRoute = route ?? redirectedFrom?._originalRequestRoute;
560
483
  const {
561
484
  headers,
562
485
  method,
563
486
  url,
564
487
  postDataEntries = null
565
488
  } = requestPausedEvent ? requestPausedEvent.request : requestWillBeSentEvent.request;
566
- const type = (requestWillBeSentEvent.type || '').toLowerCase();
489
+ const type = (requestWillBeSentEvent.type || "").toLowerCase();
567
490
  let postDataBuffer = null;
568
- const entries = postDataEntries === null || postDataEntries === void 0 ? void 0 : postDataEntries.filter(entry => entry.bytes);
569
- if (entries && entries.length) postDataBuffer = Buffer.concat(entries.map(entry => Buffer.from(entry.bytes, 'base64')));
570
- this.request = new network.Request(context, frame, serviceWorker, (redirectedFrom === null || redirectedFrom === void 0 ? void 0 : redirectedFrom.request) || null, documentId, url, type, method, postDataBuffer, headersOverride || (0, _utils.headersObjectToArray)(headers));
491
+ const entries = postDataEntries?.filter((entry) => entry.bytes);
492
+ if (entries && entries.length)
493
+ postDataBuffer = Buffer.concat(entries.map((entry) => Buffer.from(entry.bytes, "base64")));
494
+ this.request = new network.Request(context, frame, serviceWorker, redirectedFrom?.request || null, documentId, url, type, method, postDataBuffer, headersOverride || (0, import_utils.headersObjectToArray)(headers));
571
495
  }
572
496
  }
573
497
  class RouteImpl {
574
498
  constructor(session, interceptionId, page, networkId, sessionManager) {
575
- this._session = void 0;
576
- this._interceptionId = void 0;
577
- this._alreadyContinuedParams = void 0;
578
499
  this._fulfilled = false;
579
500
  this._sessionManager = void 0;
580
501
  this._networkId = void 0;
@@ -584,7 +505,7 @@ class RouteImpl {
584
505
  this._page = page;
585
506
  this._networkId = networkId;
586
507
  this._sessionManager = sessionManager;
587
- _eventsHelper.eventsHelper.addEventListener(this._session, 'Fetch.requestPaused', async e => await this._networkRequestIntercepted(e));
508
+ import_eventsHelper.eventsHelper.addEventListener(this._session, "Fetch.requestPaused", async (e) => await this._networkRequestIntercepted(e));
588
509
  }
589
510
  async continue(overrides) {
590
511
  this._alreadyContinuedParams = {
@@ -592,41 +513,35 @@ class RouteImpl {
592
513
  url: overrides.url,
593
514
  headers: overrides.headers,
594
515
  method: overrides.method,
595
- postData: overrides.postData ? overrides.postData.toString('base64') : undefined
516
+ postData: overrides.postData ? overrides.postData.toString("base64") : void 0
596
517
  };
597
- if (overrides.url && (overrides.url === 'http://patchright-init-script-inject.internal/' || overrides.url === 'https://patchright-init-script-inject.internal/')) {
518
+ if (overrides.url && (overrides.url === "http://patchright-init-script-inject.internal/" || overrides.url === "https://patchright-init-script-inject.internal/")) {
598
519
  await catchDisallowedErrors(async () => {
599
520
  this._sessionManager._alreadyTrackedNetworkIds.add(this._networkId);
600
- this._session.send('Fetch.continueRequest', {
601
- requestId: this._interceptionId,
602
- interceptResponse: true
603
- });
521
+ this._session.send("Fetch.continueRequest", { requestId: this._interceptionId, interceptResponse: true });
604
522
  });
605
523
  } else {
606
524
  await catchDisallowedErrors(async () => {
607
- await this._session.send('Fetch.continueRequest', this._alreadyContinuedParams);
525
+ await this._session.send("Fetch.continueRequest", this._alreadyContinuedParams);
608
526
  });
609
527
  }
610
528
  }
611
529
  async fulfill(response) {
612
- const isTextHtml = response.resourceType === 'Document' || response.headers.some(header => header.name === 'content-type' && header.value.includes('text/html'));
530
+ const isTextHtml = response.resourceType === "Document" || response.headers.some((header) => header.name === "content-type" && header.value.includes("text/html"));
613
531
  var allInjections = [...this._page._delegate._mainFrameSession._evaluateOnNewDocumentScripts];
614
532
  for (const binding of this._page._delegate._browserContext._pageBindings.values()) {
615
533
  if (!allInjections.includes(binding)) allInjections.push(binding);
616
534
  }
617
535
  if (isTextHtml && allInjections.length) {
618
- // I Chatted so hard for this Code
619
- let scriptNonce = _crypto.default.randomBytes(22).toString('hex');
536
+ let scriptNonce = import_crypto.default.randomBytes(22).toString("hex");
620
537
  for (let i = 0; i < response.headers.length; i++) {
621
- if (response.headers[i].name === 'content-security-policy' || response.headers[i].name === 'content-security-policy-report-only') {
622
- // Search for an existing script-src nonce that we can hijack
538
+ if (response.headers[i].name === "content-security-policy" || response.headers[i].name === "content-security-policy-report-only") {
623
539
  let cspValue = response.headers[i].value;
624
540
  const nonceRegex = /script-src[^;]*'nonce-([\w-]+)'/;
625
541
  const nonceMatch = cspValue.match(nonceRegex);
626
542
  if (nonceMatch) {
627
543
  scriptNonce = nonceMatch[1];
628
544
  } else {
629
- // Add the new nonce value to the script-src directive
630
545
  const scriptSrcRegex = /(script-src[^;]*)(;|$)/;
631
546
  const newCspValue = cspValue.replace(scriptSrcRegex, `$1 'nonce-${scriptNonce}'$2`);
632
547
  response.headers[i].value = newCspValue;
@@ -635,22 +550,22 @@ class RouteImpl {
635
550
  }
636
551
  }
637
552
  let injectionHTML = "";
638
- allInjections.forEach(script => {
639
- let scriptId = _crypto.default.randomBytes(22).toString('hex');
553
+ allInjections.forEach((script) => {
554
+ let scriptId = import_crypto.default.randomBytes(22).toString("hex");
640
555
  injectionHTML += `<script class="${this._page._delegate.initScriptTag}" nonce="${scriptNonce}" type="text/javascript">document.getElementById("${scriptId}")?.remove();${script.source}</script>`;
641
556
  });
642
557
  if (response.isBase64) {
643
558
  response.isBase64 = false;
644
- response.body = injectionHTML + Buffer.from(response.body, 'base64').toString('utf-8');
559
+ response.body = injectionHTML + Buffer.from(response.body, "base64").toString("utf-8");
645
560
  } else {
646
561
  response.body = injectionHTML + response.body;
647
562
  }
648
563
  }
649
564
  this._fulfilled = true;
650
- const body = response.isBase64 ? response.body : Buffer.from(response.body).toString('base64');
565
+ const body = response.isBase64 ? response.body : Buffer.from(response.body).toString("base64");
651
566
  const responseHeaders = splitSetCookieHeader(response.headers);
652
567
  await catchDisallowedErrors(async () => {
653
- await this._session.send('Fetch.fulfillRequest', {
568
+ await this._session.send("Fetch.fulfillRequest", {
654
569
  requestId: response.interceptionId ? response.interceptionId : this._interceptionId,
655
570
  responseCode: response.status,
656
571
  responsePhrase: network.statusText(response.status),
@@ -659,36 +574,26 @@ class RouteImpl {
659
574
  });
660
575
  });
661
576
  }
662
- async abort(errorCode = 'failed') {
577
+ async abort(errorCode = "failed") {
663
578
  const errorReason = errorReasons[errorCode];
664
- (0, _utils.assert)(errorReason, 'Unknown error code: ' + errorCode);
579
+ (0, import_utils.assert)(errorReason, "Unknown error code: " + errorCode);
665
580
  await catchDisallowedErrors(async () => {
666
- await this._session.send('Fetch.failRequest', {
581
+ await this._session.send("Fetch.failRequest", {
667
582
  requestId: this._interceptionId,
668
583
  errorReason
669
584
  });
670
585
  });
671
586
  }
672
587
  async _networkRequestIntercepted(event) {
673
- if (event.resourceType !== 'Document') {
674
- await catchDisallowedErrors(async () => {
675
- await this._session.send('Fetch.continueRequest', {
676
- requestId: event.requestId
677
- });
678
- });
588
+ if (event.resourceType !== "Document") {
679
589
  return;
680
590
  }
681
591
  if (this._networkId != event.networkId || !this._sessionManager._alreadyTrackedNetworkIds.has(event.networkId)) return;
682
592
  try {
683
593
  if (event.responseStatusCode >= 301 && event.responseStatusCode <= 308 || event.redirectedRequestId && !event.responseStatusCode) {
684
- await this._session.send('Fetch.continueRequest', {
685
- requestId: event.requestId,
686
- interceptResponse: true
687
- });
594
+ await this._session.send("Fetch.continueRequest", { requestId: event.requestId, interceptResponse: true });
688
595
  } else {
689
- const responseBody = await this._session.send('Fetch.getResponseBody', {
690
- requestId: event.requestId
691
- });
596
+ const responseBody = await this._session.send("Fetch.getResponseBody", { requestId: event.requestId });
692
597
  await this.fulfill({
693
598
  headers: event.responseHeaders,
694
599
  isBase64: true,
@@ -699,70 +604,51 @@ class RouteImpl {
699
604
  });
700
605
  }
701
606
  } catch (error) {
702
- await this._session._sendMayFail('Fetch.continueRequest', {
703
- requestId: event.requestId
704
- });
607
+ await this._session._sendMayFail("Fetch.continueRequest", { requestId: event.requestId });
705
608
  }
706
609
  }
707
610
  }
708
-
709
- // In certain cases, protocol will return error if the request was already canceled
710
- // or the page was closed. We should tolerate these errors but propagate other.
711
611
  async function catchDisallowedErrors(callback) {
712
612
  try {
713
613
  return await callback();
714
614
  } catch (e) {
715
- if ((0, _protocolError.isProtocolError)(e) && e.message.includes('Invalid http status code or phrase')) throw e;
615
+ if ((0, import_protocolError.isProtocolError)(e) && e.message.includes("Invalid http status code or phrase"))
616
+ throw e;
617
+ if ((0, import_protocolError.isProtocolError)(e) && e.message.includes("Unsafe header"))
618
+ throw e;
716
619
  }
717
620
  }
718
621
  function splitSetCookieHeader(headers) {
719
- const index = headers.findIndex(({
720
- name
721
- }) => name.toLowerCase() === 'set-cookie');
722
- if (index === -1) return headers;
622
+ const index = headers.findIndex(({ name }) => name.toLowerCase() === "set-cookie");
623
+ if (index === -1)
624
+ return headers;
723
625
  const header = headers[index];
724
- const values = header.value.split('\n');
725
- if (values.length === 1) return headers;
626
+ const values = header.value.split("\n");
627
+ if (values.length === 1)
628
+ return headers;
726
629
  const result = headers.slice();
727
- result.splice(index, 1, ...values.map(value => ({
728
- name: header.name,
729
- value
730
- })));
630
+ result.splice(index, 1, ...values.map((value) => ({ name: header.name, value })));
731
631
  return result;
732
632
  }
733
633
  const errorReasons = {
734
- 'aborted': 'Aborted',
735
- 'accessdenied': 'AccessDenied',
736
- 'addressunreachable': 'AddressUnreachable',
737
- 'blockedbyclient': 'BlockedByClient',
738
- 'blockedbyresponse': 'BlockedByResponse',
739
- 'connectionaborted': 'ConnectionAborted',
740
- 'connectionclosed': 'ConnectionClosed',
741
- 'connectionfailed': 'ConnectionFailed',
742
- 'connectionrefused': 'ConnectionRefused',
743
- 'connectionreset': 'ConnectionReset',
744
- 'internetdisconnected': 'InternetDisconnected',
745
- 'namenotresolved': 'NameNotResolved',
746
- 'timedout': 'TimedOut',
747
- 'failed': 'Failed'
634
+ "aborted": "Aborted",
635
+ "accessdenied": "AccessDenied",
636
+ "addressunreachable": "AddressUnreachable",
637
+ "blockedbyclient": "BlockedByClient",
638
+ "blockedbyresponse": "BlockedByResponse",
639
+ "connectionaborted": "ConnectionAborted",
640
+ "connectionclosed": "ConnectionClosed",
641
+ "connectionfailed": "ConnectionFailed",
642
+ "connectionrefused": "ConnectionRefused",
643
+ "connectionreset": "ConnectionReset",
644
+ "internetdisconnected": "InternetDisconnected",
645
+ "namenotresolved": "NameNotResolved",
646
+ "timedout": "TimedOut",
647
+ "failed": "Failed"
748
648
  };
749
- // This class aligns responses with response headers from extra info:
750
- // - Network.requestWillBeSent, Network.responseReceived, Network.loadingFinished/loadingFailed are
751
- // dispatched using one channel.
752
- // - Network.requestWillBeSentExtraInfo and Network.responseReceivedExtraInfo are dispatched on
753
- // another channel. Those channels are not associated, so events come in random order.
754
- //
755
- // This class will associate responses with the new headers. These extra info headers will become
756
- // available to client reliably upon requestfinished event only. It consumes CDP
757
- // signals on one end and processResponse(network.Response) signals on the other hands. It then makes
758
- // sure that responses have all the extra headers in place by the time request finishes.
759
- //
760
- // The shape of the instrumentation API is deliberately following the CDP, so that it
761
- // is clear what is called when and what this means to the tracker without extra
762
- // documentation.
763
649
  class ResponseExtraInfoTracker {
764
650
  constructor() {
765
- this._requests = new Map();
651
+ this._requests = /* @__PURE__ */ new Map();
766
652
  }
767
653
  requestWillBeSentExtraInfo(event) {
768
654
  const info = this._getOrCreateEntry(event.requestId);
@@ -776,7 +662,7 @@ class ResponseExtraInfoTracker {
776
662
  }
777
663
  servedFromCache(requestId) {
778
664
  const info = this._requests.get(requestId);
779
- return !!(info !== null && info !== void 0 && info.servedFromCache);
665
+ return !!info?.servedFromCache;
780
666
  }
781
667
  responseReceivedExtraInfo(event) {
782
668
  const info = this._getOrCreateEntry(event.requestId);
@@ -785,12 +671,8 @@ class ResponseExtraInfoTracker {
785
671
  this._checkFinished(info);
786
672
  }
787
673
  processResponse(requestId, response, hasExtraInfo) {
788
- var _info;
789
674
  let info = this._requests.get(requestId);
790
- // Cached responses have erroneous "hasExtraInfo" flag.
791
- // https://bugs.chromium.org/p/chromium/issues/detail?id=1340398
792
- if (!hasExtraInfo || (_info = info) !== null && _info !== void 0 && _info.servedFromCache) {
793
- // Use "provisional" headers as "raw" ones.
675
+ if (!hasExtraInfo || info?.servedFromCache) {
794
676
  response.request().setRawRequestHeaders(null);
795
677
  response.setResponseHeadersSize(null);
796
678
  response.setRawResponseHeaders(null);
@@ -802,13 +684,15 @@ class ResponseExtraInfoTracker {
802
684
  }
803
685
  loadingFinished(event) {
804
686
  const info = this._requests.get(event.requestId);
805
- if (!info) return;
687
+ if (!info)
688
+ return;
806
689
  info.loadingFinished = event;
807
690
  this._checkFinished(info);
808
691
  }
809
692
  loadingFailed(event) {
810
693
  const info = this._requests.get(event.requestId);
811
- if (!info) return;
694
+ if (!info)
695
+ return;
812
696
  info.loadingFailed = event;
813
697
  this._checkFinished(info);
814
698
  }
@@ -816,7 +700,7 @@ class ResponseExtraInfoTracker {
816
700
  let info = this._requests.get(requestId);
817
701
  if (!info) {
818
702
  info = {
819
- requestId: requestId,
703
+ requestId,
820
704
  requestWillBeSentExtraInfo: [],
821
705
  responseReceivedExtraInfo: [],
822
706
  responses: []
@@ -829,28 +713,29 @@ class ResponseExtraInfoTracker {
829
713
  const response = info.responses[index];
830
714
  const requestExtraInfo = info.requestWillBeSentExtraInfo[index];
831
715
  if (response && requestExtraInfo) {
832
- response.request().setRawRequestHeaders((0, _utils.headersObjectToArray)(requestExtraInfo.headers, '\n'));
833
- info.requestWillBeSentExtraInfo[index] = undefined;
716
+ response.request().setRawRequestHeaders((0, import_utils.headersObjectToArray)(requestExtraInfo.headers, "\n"));
717
+ info.requestWillBeSentExtraInfo[index] = void 0;
834
718
  }
835
719
  const responseExtraInfo = info.responseReceivedExtraInfo[index];
836
720
  if (response && responseExtraInfo) {
837
- var _responseExtraInfo$he;
838
- response.setResponseHeadersSize(((_responseExtraInfo$he = responseExtraInfo.headersText) === null || _responseExtraInfo$he === void 0 ? void 0 : _responseExtraInfo$he.length) || 0);
839
- response.setRawResponseHeaders((0, _utils.headersObjectToArray)(responseExtraInfo.headers, '\n'));
840
- info.responseReceivedExtraInfo[index] = undefined;
721
+ response.setResponseHeadersSize(responseExtraInfo.headersText?.length || 0);
722
+ response.setRawResponseHeaders((0, import_utils.headersObjectToArray)(responseExtraInfo.headers, "\n"));
723
+ info.responseReceivedExtraInfo[index] = void 0;
841
724
  }
842
725
  }
843
726
  _checkFinished(info) {
844
- if (!info.loadingFinished && !info.loadingFailed) return;
727
+ if (!info.loadingFinished && !info.loadingFailed)
728
+ return;
845
729
  if (info.responses.length <= info.responseReceivedExtraInfo.length) {
846
- // We have extra info for each response.
847
730
  this._stopTracking(info.requestId);
848
731
  return;
849
732
  }
850
-
851
- // We are not done yet.
852
733
  }
853
734
  _stopTracking(requestId) {
854
735
  this._requests.delete(requestId);
855
736
  }
856
- }
737
+ }
738
+ // Annotate the CommonJS export names for ESM import in node:
739
+ 0 && (module.exports = {
740
+ CRNetworkManager
741
+ });