phantomwright-driver-core 1.58.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 (363) hide show
  1. package/README.md +3 -0
  2. package/ThirdPartyNotices.txt +4076 -0
  3. package/bin/install_media_pack.ps1 +5 -0
  4. package/bin/install_webkit_wsl.ps1 +33 -0
  5. package/bin/reinstall_chrome_beta_linux.sh +42 -0
  6. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  7. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  8. package/bin/reinstall_chrome_stable_linux.sh +42 -0
  9. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  10. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  11. package/bin/reinstall_msedge_beta_linux.sh +48 -0
  12. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  13. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  14. package/bin/reinstall_msedge_dev_linux.sh +48 -0
  15. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  16. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  17. package/bin/reinstall_msedge_stable_linux.sh +48 -0
  18. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  19. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  20. package/browsers.json +79 -0
  21. package/cli.js +18 -0
  22. package/index.d.ts +17 -0
  23. package/index.js +32 -0
  24. package/index.mjs +28 -0
  25. package/lib/androidServerImpl.js +65 -0
  26. package/lib/browserServerImpl.js +120 -0
  27. package/lib/cli/driver.js +97 -0
  28. package/lib/cli/program.js +589 -0
  29. package/lib/cli/programWithTestStub.js +74 -0
  30. package/lib/client/android.js +361 -0
  31. package/lib/client/api.js +137 -0
  32. package/lib/client/artifact.js +79 -0
  33. package/lib/client/browser.js +161 -0
  34. package/lib/client/browserContext.js +601 -0
  35. package/lib/client/browserType.js +185 -0
  36. package/lib/client/cdpSession.js +51 -0
  37. package/lib/client/channelOwner.js +194 -0
  38. package/lib/client/clientHelper.js +63 -0
  39. package/lib/client/clientInstrumentation.js +55 -0
  40. package/lib/client/clientStackTrace.js +69 -0
  41. package/lib/client/clock.js +69 -0
  42. package/lib/client/connection.js +318 -0
  43. package/lib/client/consoleMessage.js +58 -0
  44. package/lib/client/coverage.js +44 -0
  45. package/lib/client/dialog.js +56 -0
  46. package/lib/client/download.js +62 -0
  47. package/lib/client/electron.js +138 -0
  48. package/lib/client/elementHandle.js +284 -0
  49. package/lib/client/errors.js +77 -0
  50. package/lib/client/eventEmitter.js +314 -0
  51. package/lib/client/events.js +103 -0
  52. package/lib/client/fetch.js +368 -0
  53. package/lib/client/fileChooser.js +46 -0
  54. package/lib/client/fileUtils.js +34 -0
  55. package/lib/client/frame.js +409 -0
  56. package/lib/client/harRouter.js +87 -0
  57. package/lib/client/input.js +84 -0
  58. package/lib/client/jsHandle.js +109 -0
  59. package/lib/client/jsonPipe.js +39 -0
  60. package/lib/client/localUtils.js +60 -0
  61. package/lib/client/locator.js +390 -0
  62. package/lib/client/network.js +747 -0
  63. package/lib/client/page.js +764 -0
  64. package/lib/client/pageAgent.js +64 -0
  65. package/lib/client/platform.js +77 -0
  66. package/lib/client/playwright.js +71 -0
  67. package/lib/client/selectors.js +55 -0
  68. package/lib/client/stream.js +39 -0
  69. package/lib/client/timeoutSettings.js +79 -0
  70. package/lib/client/tracing.js +120 -0
  71. package/lib/client/types.js +28 -0
  72. package/lib/client/video.js +59 -0
  73. package/lib/client/waiter.js +142 -0
  74. package/lib/client/webError.js +39 -0
  75. package/lib/client/webSocket.js +93 -0
  76. package/lib/client/worker.js +85 -0
  77. package/lib/client/writableStream.js +39 -0
  78. package/lib/generated/bindingsControllerSource.js +28 -0
  79. package/lib/generated/clockSource.js +28 -0
  80. package/lib/generated/injectedScriptSource.js +28 -0
  81. package/lib/generated/pollingRecorderSource.js +28 -0
  82. package/lib/generated/storageScriptSource.js +28 -0
  83. package/lib/generated/utilityScriptSource.js +28 -0
  84. package/lib/generated/webSocketMockSource.js +336 -0
  85. package/lib/inProcessFactory.js +60 -0
  86. package/lib/inprocess.js +3 -0
  87. package/lib/mcpBundle.js +84 -0
  88. package/lib/mcpBundleImpl/index.js +147 -0
  89. package/lib/outofprocess.js +76 -0
  90. package/lib/protocol/serializers.js +197 -0
  91. package/lib/protocol/validator.js +2981 -0
  92. package/lib/protocol/validatorPrimitives.js +193 -0
  93. package/lib/remote/playwrightConnection.js +129 -0
  94. package/lib/remote/playwrightServer.js +334 -0
  95. package/lib/server/agent/actionRunner.js +335 -0
  96. package/lib/server/agent/actions.js +128 -0
  97. package/lib/server/agent/codegen.js +111 -0
  98. package/lib/server/agent/context.js +150 -0
  99. package/lib/server/agent/expectTools.js +156 -0
  100. package/lib/server/agent/pageAgent.js +204 -0
  101. package/lib/server/agent/performTools.js +262 -0
  102. package/lib/server/agent/tool.js +109 -0
  103. package/lib/server/android/android.js +465 -0
  104. package/lib/server/android/backendAdb.js +177 -0
  105. package/lib/server/artifact.js +127 -0
  106. package/lib/server/bidi/bidiBrowser.js +549 -0
  107. package/lib/server/bidi/bidiChromium.js +148 -0
  108. package/lib/server/bidi/bidiConnection.js +213 -0
  109. package/lib/server/bidi/bidiDeserializer.js +116 -0
  110. package/lib/server/bidi/bidiExecutionContext.js +267 -0
  111. package/lib/server/bidi/bidiFirefox.js +128 -0
  112. package/lib/server/bidi/bidiInput.js +146 -0
  113. package/lib/server/bidi/bidiNetworkManager.js +383 -0
  114. package/lib/server/bidi/bidiOverCdp.js +102 -0
  115. package/lib/server/bidi/bidiPage.js +583 -0
  116. package/lib/server/bidi/bidiPdf.js +106 -0
  117. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  118. package/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
  119. package/lib/server/bidi/third_party/bidiProtocol.js +24 -0
  120. package/lib/server/bidi/third_party/bidiProtocolCore.js +180 -0
  121. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  122. package/lib/server/bidi/third_party/bidiSerializer.js +148 -0
  123. package/lib/server/bidi/third_party/firefoxPrefs.js +259 -0
  124. package/lib/server/browser.js +149 -0
  125. package/lib/server/browserContext.js +689 -0
  126. package/lib/server/browserType.js +336 -0
  127. package/lib/server/callLog.js +82 -0
  128. package/lib/server/chromium/appIcon.png +0 -0
  129. package/lib/server/chromium/chromium.js +395 -0
  130. package/lib/server/chromium/chromiumSwitches.js +92 -0
  131. package/lib/server/chromium/crBrowser.js +516 -0
  132. package/lib/server/chromium/crConnection.js +197 -0
  133. package/lib/server/chromium/crCoverage.js +235 -0
  134. package/lib/server/chromium/crDevTools.js +110 -0
  135. package/lib/server/chromium/crDragDrop.js +131 -0
  136. package/lib/server/chromium/crExecutionContext.js +146 -0
  137. package/lib/server/chromium/crInput.js +187 -0
  138. package/lib/server/chromium/crNetworkManager.js +946 -0
  139. package/lib/server/chromium/crPage.js +1079 -0
  140. package/lib/server/chromium/crPdf.js +121 -0
  141. package/lib/server/chromium/crProtocolHelper.js +145 -0
  142. package/lib/server/chromium/crServiceWorker.js +144 -0
  143. package/lib/server/chromium/defaultFontFamilies.js +162 -0
  144. package/lib/server/chromium/protocol.d.js +16 -0
  145. package/lib/server/clock.js +157 -0
  146. package/lib/server/codegen/csharp.js +327 -0
  147. package/lib/server/codegen/java.js +274 -0
  148. package/lib/server/codegen/javascript.js +247 -0
  149. package/lib/server/codegen/jsonl.js +52 -0
  150. package/lib/server/codegen/language.js +132 -0
  151. package/lib/server/codegen/languages.js +68 -0
  152. package/lib/server/codegen/python.js +279 -0
  153. package/lib/server/codegen/types.js +16 -0
  154. package/lib/server/console.js +57 -0
  155. package/lib/server/cookieStore.js +206 -0
  156. package/lib/server/debugController.js +191 -0
  157. package/lib/server/debugger.js +119 -0
  158. package/lib/server/deviceDescriptors.js +39 -0
  159. package/lib/server/deviceDescriptorsSource.json +1779 -0
  160. package/lib/server/dialog.js +116 -0
  161. package/lib/server/dispatchers/androidDispatcher.js +325 -0
  162. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  163. package/lib/server/dispatchers/browserContextDispatcher.js +384 -0
  164. package/lib/server/dispatchers/browserDispatcher.js +118 -0
  165. package/lib/server/dispatchers/browserTypeDispatcher.js +64 -0
  166. package/lib/server/dispatchers/cdpSessionDispatcher.js +44 -0
  167. package/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
  168. package/lib/server/dispatchers/dialogDispatcher.js +47 -0
  169. package/lib/server/dispatchers/dispatcher.js +364 -0
  170. package/lib/server/dispatchers/electronDispatcher.js +89 -0
  171. package/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
  172. package/lib/server/dispatchers/frameDispatcher.js +227 -0
  173. package/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
  174. package/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
  175. package/lib/server/dispatchers/localUtilsDispatcher.js +149 -0
  176. package/lib/server/dispatchers/networkDispatchers.js +213 -0
  177. package/lib/server/dispatchers/pageAgentDispatcher.js +96 -0
  178. package/lib/server/dispatchers/pageDispatcher.js +393 -0
  179. package/lib/server/dispatchers/playwrightDispatcher.js +108 -0
  180. package/lib/server/dispatchers/streamDispatcher.js +67 -0
  181. package/lib/server/dispatchers/tracingDispatcher.js +68 -0
  182. package/lib/server/dispatchers/webSocketRouteDispatcher.js +165 -0
  183. package/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
  184. package/lib/server/dom.js +815 -0
  185. package/lib/server/download.js +70 -0
  186. package/lib/server/electron/electron.js +273 -0
  187. package/lib/server/electron/loader.js +29 -0
  188. package/lib/server/errors.js +69 -0
  189. package/lib/server/fetch.js +621 -0
  190. package/lib/server/fileChooser.js +43 -0
  191. package/lib/server/fileUploadUtils.js +84 -0
  192. package/lib/server/firefox/ffBrowser.js +418 -0
  193. package/lib/server/firefox/ffConnection.js +142 -0
  194. package/lib/server/firefox/ffExecutionContext.js +150 -0
  195. package/lib/server/firefox/ffInput.js +159 -0
  196. package/lib/server/firefox/ffNetworkManager.js +256 -0
  197. package/lib/server/firefox/ffPage.js +497 -0
  198. package/lib/server/firefox/firefox.js +114 -0
  199. package/lib/server/firefox/protocol.d.js +16 -0
  200. package/lib/server/formData.js +147 -0
  201. package/lib/server/frameSelectors.js +322 -0
  202. package/lib/server/frames.js +1802 -0
  203. package/lib/server/har/harRecorder.js +147 -0
  204. package/lib/server/har/harTracer.js +607 -0
  205. package/lib/server/harBackend.js +157 -0
  206. package/lib/server/helper.js +96 -0
  207. package/lib/server/index.js +58 -0
  208. package/lib/server/input.js +277 -0
  209. package/lib/server/instrumentation.js +72 -0
  210. package/lib/server/javascript.js +307 -0
  211. package/lib/server/launchApp.js +128 -0
  212. package/lib/server/localUtils.js +214 -0
  213. package/lib/server/macEditingCommands.js +143 -0
  214. package/lib/server/network.js +667 -0
  215. package/lib/server/page.js +812 -0
  216. package/lib/server/pageBinding.js +87 -0
  217. package/lib/server/pipeTransport.js +89 -0
  218. package/lib/server/playwright.js +69 -0
  219. package/lib/server/progress.js +132 -0
  220. package/lib/server/protocolError.js +52 -0
  221. package/lib/server/recorder/chat.js +161 -0
  222. package/lib/server/recorder/recorderApp.js +366 -0
  223. package/lib/server/recorder/recorderRunner.js +138 -0
  224. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  225. package/lib/server/recorder/recorderUtils.js +157 -0
  226. package/lib/server/recorder/throttledFile.js +57 -0
  227. package/lib/server/recorder.js +499 -0
  228. package/lib/server/registry/browserFetcher.js +177 -0
  229. package/lib/server/registry/dependencies.js +371 -0
  230. package/lib/server/registry/index.js +1422 -0
  231. package/lib/server/registry/nativeDeps.js +1280 -0
  232. package/lib/server/registry/oopDownloadBrowserMain.js +127 -0
  233. package/lib/server/screencast.js +190 -0
  234. package/lib/server/screenshotter.js +333 -0
  235. package/lib/server/selectors.js +112 -0
  236. package/lib/server/socksClientCertificatesInterceptor.js +383 -0
  237. package/lib/server/socksInterceptor.js +95 -0
  238. package/lib/server/trace/recorder/snapshotter.js +147 -0
  239. package/lib/server/trace/recorder/snapshotterInjected.js +561 -0
  240. package/lib/server/trace/recorder/tracing.js +604 -0
  241. package/lib/server/trace/viewer/traceParser.js +72 -0
  242. package/lib/server/trace/viewer/traceViewer.js +245 -0
  243. package/lib/server/transport.js +181 -0
  244. package/lib/server/types.js +28 -0
  245. package/lib/server/usKeyboardLayout.js +145 -0
  246. package/lib/server/utils/ascii.js +44 -0
  247. package/lib/server/utils/comparators.js +139 -0
  248. package/lib/server/utils/crypto.js +216 -0
  249. package/lib/server/utils/debug.js +42 -0
  250. package/lib/server/utils/debugLogger.js +122 -0
  251. package/lib/server/utils/env.js +73 -0
  252. package/lib/server/utils/eventsHelper.js +39 -0
  253. package/lib/server/utils/expectUtils.js +123 -0
  254. package/lib/server/utils/fileUtils.js +191 -0
  255. package/lib/server/utils/happyEyeballs.js +207 -0
  256. package/lib/server/utils/hostPlatform.js +123 -0
  257. package/lib/server/utils/httpServer.js +203 -0
  258. package/lib/server/utils/imageUtils.js +141 -0
  259. package/lib/server/utils/image_tools/colorUtils.js +89 -0
  260. package/lib/server/utils/image_tools/compare.js +109 -0
  261. package/lib/server/utils/image_tools/imageChannel.js +78 -0
  262. package/lib/server/utils/image_tools/stats.js +102 -0
  263. package/lib/server/utils/linuxUtils.js +71 -0
  264. package/lib/server/utils/network.js +242 -0
  265. package/lib/server/utils/nodePlatform.js +154 -0
  266. package/lib/server/utils/pipeTransport.js +84 -0
  267. package/lib/server/utils/processLauncher.js +241 -0
  268. package/lib/server/utils/profiler.js +65 -0
  269. package/lib/server/utils/socksProxy.js +511 -0
  270. package/lib/server/utils/spawnAsync.js +41 -0
  271. package/lib/server/utils/task.js +51 -0
  272. package/lib/server/utils/userAgent.js +98 -0
  273. package/lib/server/utils/wsServer.js +121 -0
  274. package/lib/server/utils/zipFile.js +74 -0
  275. package/lib/server/utils/zones.js +57 -0
  276. package/lib/server/videoRecorder.js +124 -0
  277. package/lib/server/webkit/protocol.d.js +16 -0
  278. package/lib/server/webkit/webkit.js +108 -0
  279. package/lib/server/webkit/wkBrowser.js +335 -0
  280. package/lib/server/webkit/wkConnection.js +144 -0
  281. package/lib/server/webkit/wkExecutionContext.js +154 -0
  282. package/lib/server/webkit/wkInput.js +181 -0
  283. package/lib/server/webkit/wkInterceptableRequest.js +197 -0
  284. package/lib/server/webkit/wkPage.js +1158 -0
  285. package/lib/server/webkit/wkProvisionalPage.js +83 -0
  286. package/lib/server/webkit/wkWorkers.js +105 -0
  287. package/lib/third_party/pixelmatch.js +255 -0
  288. package/lib/utils/isomorphic/ariaSnapshot.js +455 -0
  289. package/lib/utils/isomorphic/assert.js +31 -0
  290. package/lib/utils/isomorphic/colors.js +72 -0
  291. package/lib/utils/isomorphic/cssParser.js +245 -0
  292. package/lib/utils/isomorphic/cssTokenizer.js +1051 -0
  293. package/lib/utils/isomorphic/headers.js +53 -0
  294. package/lib/utils/isomorphic/locatorGenerators.js +689 -0
  295. package/lib/utils/isomorphic/locatorParser.js +176 -0
  296. package/lib/utils/isomorphic/locatorUtils.js +81 -0
  297. package/lib/utils/isomorphic/lruCache.js +51 -0
  298. package/lib/utils/isomorphic/manualPromise.js +114 -0
  299. package/lib/utils/isomorphic/mimeType.js +459 -0
  300. package/lib/utils/isomorphic/multimap.js +80 -0
  301. package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +248 -0
  302. package/lib/utils/isomorphic/protocolFormatter.js +81 -0
  303. package/lib/utils/isomorphic/protocolMetainfo.js +330 -0
  304. package/lib/utils/isomorphic/rtti.js +43 -0
  305. package/lib/utils/isomorphic/selectorParser.js +386 -0
  306. package/lib/utils/isomorphic/semaphore.js +54 -0
  307. package/lib/utils/isomorphic/stackTrace.js +158 -0
  308. package/lib/utils/isomorphic/stringUtils.js +204 -0
  309. package/lib/utils/isomorphic/time.js +49 -0
  310. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  311. package/lib/utils/isomorphic/trace/entries.js +16 -0
  312. package/lib/utils/isomorphic/trace/snapshotRenderer.js +499 -0
  313. package/lib/utils/isomorphic/trace/snapshotServer.js +120 -0
  314. package/lib/utils/isomorphic/trace/snapshotStorage.js +89 -0
  315. package/lib/utils/isomorphic/trace/traceLoader.js +131 -0
  316. package/lib/utils/isomorphic/trace/traceModel.js +365 -0
  317. package/lib/utils/isomorphic/trace/traceModernizer.js +400 -0
  318. package/lib/utils/isomorphic/trace/versions/traceV3.js +16 -0
  319. package/lib/utils/isomorphic/trace/versions/traceV4.js +16 -0
  320. package/lib/utils/isomorphic/trace/versions/traceV5.js +16 -0
  321. package/lib/utils/isomorphic/trace/versions/traceV6.js +16 -0
  322. package/lib/utils/isomorphic/trace/versions/traceV7.js +16 -0
  323. package/lib/utils/isomorphic/trace/versions/traceV8.js +16 -0
  324. package/lib/utils/isomorphic/traceUtils.js +58 -0
  325. package/lib/utils/isomorphic/types.js +16 -0
  326. package/lib/utils/isomorphic/urlMatch.js +190 -0
  327. package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
  328. package/lib/utils/isomorphic/yaml.js +84 -0
  329. package/lib/utils.js +111 -0
  330. package/lib/utilsBundle.js +109 -0
  331. package/lib/utilsBundleImpl/index.js +218 -0
  332. package/lib/utilsBundleImpl/xdg-open +1066 -0
  333. package/lib/vite/htmlReport/index.html +84 -0
  334. package/lib/vite/recorder/assets/codeMirrorModule-CFUTFUO7.js +32 -0
  335. package/lib/vite/recorder/assets/codeMirrorModule-DYBRYzYX.css +1 -0
  336. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  337. package/lib/vite/recorder/assets/index-BSjZa4pk.css +1 -0
  338. package/lib/vite/recorder/assets/index-CVkBxsGf.js +193 -0
  339. package/lib/vite/recorder/index.html +29 -0
  340. package/lib/vite/recorder/playwright-logo.svg +9 -0
  341. package/lib/vite/traceViewer/assets/codeMirrorModule-BVA4h_ZY.js +32 -0
  342. package/lib/vite/traceViewer/assets/defaultSettingsView-CjfmcdOz.js +266 -0
  343. package/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  344. package/lib/vite/traceViewer/codeMirrorModule.DYBRYzYX.css +1 -0
  345. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  346. package/lib/vite/traceViewer/defaultSettingsView.7ch9cixO.css +1 -0
  347. package/lib/vite/traceViewer/index.BVu7tZDe.css +1 -0
  348. package/lib/vite/traceViewer/index._nZoBaQx.js +2 -0
  349. package/lib/vite/traceViewer/index.html +43 -0
  350. package/lib/vite/traceViewer/manifest.webmanifest +16 -0
  351. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  352. package/lib/vite/traceViewer/snapshot.html +21 -0
  353. package/lib/vite/traceViewer/sw.bundle.js +5 -0
  354. package/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
  355. package/lib/vite/traceViewer/uiMode.fyrXARf2.js +5 -0
  356. package/lib/vite/traceViewer/uiMode.html +17 -0
  357. package/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  358. package/lib/zipBundle.js +34 -0
  359. package/lib/zipBundleImpl.js +5 -0
  360. package/package.json +43 -0
  361. package/types/protocol.d.ts +23824 -0
  362. package/types/structs.d.ts +45 -0
  363. package/types/types.d.ts +22843 -0
@@ -0,0 +1,946 @@
1
+ "use strict";
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
32
+ });
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");
40
+ class CRNetworkManager {
41
+ constructor(page, serviceWorker) {
42
+ this._requestIdToRequest = /* @__PURE__ */ new Map();
43
+ this._requestIdToRequestWillBeSentEvent = /* @__PURE__ */ new Map();
44
+ this._credentials = null;
45
+ this._attemptedAuthentications = /* @__PURE__ */ new Set();
46
+ this._userRequestInterceptionEnabled = false;
47
+ this._protocolRequestInterceptionEnabled = false;
48
+ this._offline = false;
49
+ this._extraHTTPHeaders = [];
50
+ this._requestIdToRequestPausedEvent = /* @__PURE__ */ new Map();
51
+ this._responseExtraInfoTracker = new ResponseExtraInfoTracker();
52
+ this._sessions = /* @__PURE__ */ new Map();
53
+ this._alreadyTrackedNetworkIds = /* @__PURE__ */ new Set();
54
+ this._page = page;
55
+ this._serviceWorker = serviceWorker;
56
+ }
57
+ async addSession(session, workerFrame, isMain) {
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
+ ];
70
+ if (this._page) {
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
+ ]);
80
+ }
81
+ this._sessions.set(session, sessionInfo);
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
+ ]);
100
+ }
101
+ removeSession(session) {
102
+ const info = this._sessions.get(session);
103
+ if (info)
104
+ import_eventsHelper.eventsHelper.removeEventListeners(info.eventListeners);
105
+ this._sessions.delete(session);
106
+ }
107
+ async _forEachSession(cb) {
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;
114
+ throw e;
115
+ });
116
+ }));
117
+ }
118
+ async authenticate(credentials) {
119
+ this._credentials = credentials;
120
+ await this._updateProtocolRequestInterception();
121
+ }
122
+ async setOffline(offline) {
123
+ if (offline === this._offline)
124
+ return;
125
+ this._offline = offline;
126
+ await this._forEachSession((info) => this._setOfflineForSession(info));
127
+ }
128
+ async _setOfflineForSession(info, initial) {
129
+ if (initial && !this._offline)
130
+ return;
131
+ if (info.workerFrame)
132
+ return;
133
+ await info.session.send("Network.emulateNetworkConditions", {
134
+ offline: this._offline,
135
+ // values of 0 remove any active throttling. crbug.com/456324#c9
136
+ latency: 0,
137
+ downloadThroughput: -1,
138
+ uploadThroughput: -1
139
+ });
140
+ }
141
+ async setRequestInterception(value) {
142
+ this._userRequestInterceptionEnabled = value;
143
+ await this._updateProtocolRequestInterception();
144
+ }
145
+ async _updateProtocolRequestInterception() {
146
+ const enabled = this._userRequestInterceptionEnabled || !!this._credentials;
147
+ if (enabled === this._protocolRequestInterceptionEnabled)
148
+ return;
149
+ this._protocolRequestInterceptionEnabled = enabled;
150
+ await this._forEachSession((info) => this._updateProtocolRequestInterceptionForSession(info));
151
+ }
152
+ async _updateProtocolRequestInterceptionForSession(info, initial) {
153
+ const enabled = this._protocolRequestInterceptionEnabled;
154
+ if (initial && !enabled)
155
+ return;
156
+ const cachePromise = info.session.send("Network.setCacheDisabled", { cacheDisabled: false });
157
+ let fetchPromise = Promise.resolve(void 0);
158
+ if (!info.workerFrame) {
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");
163
+ }
164
+ await Promise.all([cachePromise, fetchPromise]);
165
+ }
166
+ async setExtraHTTPHeaders(extraHTTPHeaders) {
167
+ if (!this._extraHTTPHeaders.length && !extraHTTPHeaders.length)
168
+ return;
169
+ this._extraHTTPHeaders = extraHTTPHeaders;
170
+ await this._forEachSession((info) => this._setExtraHTTPHeadersForSession(info));
171
+ }
172
+ async _setExtraHTTPHeadersForSession(info, initial) {
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
+ ) });
180
+ }
181
+ async clearCache() {
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");
188
+ });
189
+ }
190
+ _onRequestWillBeSent(sessionInfo, event) {
191
+ if (this._protocolRequestInterceptionEnabled && !event.request.url.startsWith("data:")) {
192
+ const requestId = event.requestId;
193
+ const requestPausedEvent = this._requestIdToRequestPausedEvent.get(requestId);
194
+ if (requestPausedEvent) {
195
+ this._onRequest(sessionInfo, event, requestPausedEvent.sessionInfo, requestPausedEvent.event);
196
+ this._requestIdToRequestPausedEvent.delete(requestId);
197
+ } else {
198
+ this._requestIdToRequestWillBeSentEvent.set(event.requestId, { sessionInfo, event });
199
+ }
200
+ } else {
201
+ this._onRequest(sessionInfo, event, void 0, void 0);
202
+ }
203
+ }
204
+ _onRequestServedFromCache(event) {
205
+ this._responseExtraInfoTracker.requestServedFromCache(event);
206
+ }
207
+ _onRequestWillBeSentExtraInfo(event) {
208
+ this._responseExtraInfoTracker.requestWillBeSentExtraInfo(event);
209
+ }
210
+ _onAuthRequired(sessionInfo, event) {
211
+ let response = "Default";
212
+ const shouldProvideCredentials = this._shouldProvideCredentials(event.request.url);
213
+ if (this._attemptedAuthentications.has(event.requestId)) {
214
+ response = "CancelAuth";
215
+ } else if (shouldProvideCredentials) {
216
+ response = "ProvideCredentials";
217
+ this._attemptedAuthentications.add(event.requestId);
218
+ }
219
+ const { username, password } = shouldProvideCredentials && this._credentials ? this._credentials : { username: void 0, password: void 0 };
220
+ sessionInfo.session._sendMayFail("Fetch.continueWithAuth", {
221
+ requestId: event.requestId,
222
+ authChallengeResponse: { response, username, password }
223
+ });
224
+ }
225
+ _shouldProvideCredentials(url) {
226
+ if (!this._credentials)
227
+ return false;
228
+ return !this._credentials.origin || new URL(url).origin.toLowerCase() === this._credentials.origin.toLowerCase();
229
+ }
230
+ _onRequestPaused(sessionInfo, event) {
231
+ if (this._alreadyTrackedNetworkIds.has(event.networkId)) return;
232
+ if (!event.networkId) {
233
+ sessionInfo.session._sendMayFail("Fetch.continueRequest", { requestId: event.requestId });
234
+ return;
235
+ }
236
+ if (event.request.url.startsWith("data:"))
237
+ return;
238
+ const requestId = event.networkId;
239
+ const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(requestId);
240
+ if (requestWillBeSentEvent) {
241
+ this._onRequest(requestWillBeSentEvent.sessionInfo, requestWillBeSentEvent.event, sessionInfo, event);
242
+ this._requestIdToRequestWillBeSentEvent.delete(requestId);
243
+ } else {
244
+ const existingRequest = this._requestIdToRequest.get(requestId);
245
+ const alreadyContinuedParams = existingRequest?._route?._alreadyContinuedParams;
246
+ if (alreadyContinuedParams && !event.redirectedRequestId) {
247
+ sessionInfo.session._sendMayFail("Fetch.continueRequest", {
248
+ ...alreadyContinuedParams,
249
+ requestId: event.requestId
250
+ });
251
+ return;
252
+ }
253
+ this._requestIdToRequestPausedEvent.set(requestId, { sessionInfo, event });
254
+ }
255
+ }
256
+ _onRequest(requestWillBeSentSessionInfo, requestWillBeSentEvent, requestPausedSessionInfo, requestPausedEvent) {
257
+ if (this._alreadyTrackedNetworkIds.has(requestWillBeSentEvent.initiator.requestId)) return;
258
+ if (requestWillBeSentEvent.request.url.startsWith("data:"))
259
+ return;
260
+ let redirectedFrom = null;
261
+ if (requestWillBeSentEvent.redirectResponse) {
262
+ const request2 = this._requestIdToRequest.get(requestWillBeSentEvent.requestId);
263
+ if (request2) {
264
+ this._handleRequestRedirect(request2, requestWillBeSentEvent.redirectResponse, requestWillBeSentEvent.timestamp, requestWillBeSentEvent.redirectHasExtraInfo);
265
+ redirectedFrom = request2;
266
+ }
267
+ }
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) {
272
+ frame = this._page.frameManager.frameAttached(requestWillBeSentEvent.frameId, null);
273
+ }
274
+ const isInterceptedOptionsPreflight = !!requestPausedEvent && requestPausedEvent.request.method === "OPTIONS" && requestWillBeSentEvent.initiator.type === "preflight";
275
+ if (isInterceptedOptionsPreflight && (this._page || this._serviceWorker).needsRequestInterception()) {
276
+ const requestHeaders = requestPausedEvent.request.headers;
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", {
285
+ requestId: requestPausedEvent.requestId,
286
+ responseCode: 204,
287
+ responsePhrase: network.statusText(204),
288
+ responseHeaders,
289
+ body: ""
290
+ });
291
+ return;
292
+ }
293
+ if (!frame && !this._serviceWorker) {
294
+ if (requestPausedEvent)
295
+ requestPausedSessionInfo.session._sendMayFail("Fetch.continueRequest", { requestId: requestPausedEvent.requestId });
296
+ return;
297
+ }
298
+ let route = null;
299
+ let headersOverride;
300
+ if (requestPausedEvent) {
301
+ if (redirectedFrom || !this._userRequestInterceptionEnabled && this._protocolRequestInterceptionEnabled) {
302
+ headersOverride = redirectedFrom?._originalRequestRoute?._alreadyContinuedParams?.headers;
303
+ if (headersOverride) {
304
+ const originalHeaders = Object.entries(requestPausedEvent.request.headers).map(([name, value]) => ({ name, value }));
305
+ headersOverride = network.applyHeadersOverrides(originalHeaders, headersOverride);
306
+ }
307
+ requestPausedSessionInfo.session._sendMayFail("Fetch.continueRequest", { requestId: requestPausedEvent.requestId, headers: headersOverride });
308
+ } else {
309
+ route = new RouteImpl(requestPausedSessionInfo.session, requestPausedEvent.requestId, this._page, requestPausedEvent.networkId, this);
310
+ }
311
+ }
312
+ const isNavigationRequest = requestWillBeSentEvent.requestId === requestWillBeSentEvent.loaderId && requestWillBeSentEvent.type === "Document";
313
+ const documentId = isNavigationRequest ? requestWillBeSentEvent.loaderId : void 0;
314
+ const request = new InterceptableRequest({
315
+ session: requestWillBeSentSessionInfo.session,
316
+ context: (this._page || this._serviceWorker).browserContext,
317
+ frame: frame || null,
318
+ serviceWorker: this._serviceWorker || null,
319
+ documentId,
320
+ route,
321
+ requestWillBeSentEvent,
322
+ requestPausedEvent,
323
+ redirectedFrom,
324
+ headersOverride: headersOverride || null
325
+ });
326
+ this._requestIdToRequest.set(requestWillBeSentEvent.requestId, request);
327
+ if (route) {
328
+ request.request.setRawRequestHeaders((0, import_utils.headersObjectToArray)(requestPausedEvent.request.headers, "\n"));
329
+ }
330
+ (this._page?.frameManager || this._serviceWorker).requestStarted(request.request, route || void 0);
331
+ }
332
+ _createResponse(request, responsePayload, hasExtraInfo) {
333
+ const getResponseBody = async () => {
334
+ const contentLengthHeader = Object.entries(responsePayload.headers).find((header) => header[0].toLowerCase() === "content-length");
335
+ const expectedLength = contentLengthHeader ? +contentLengthHeader[1] : void 0;
336
+ const session = request.session;
337
+ const response2 = await session.send("Network.getResponseBody", { requestId: request._requestId });
338
+ if (response2.body || !expectedLength)
339
+ return Buffer.from(response2.body, response2.base64Encoded ? "base64" : "utf8");
340
+ if (request._route?._fulfilled)
341
+ return Buffer.from("");
342
+ 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 } });
343
+ const chunks = [];
344
+ while (resource.resource.stream) {
345
+ const chunk = await session.send("IO.read", { handle: resource.resource.stream });
346
+ chunks.push(Buffer.from(chunk.data, chunk.base64Encoded ? "base64" : "utf-8"));
347
+ if (chunk.eof) {
348
+ await session.send("IO.close", { handle: resource.resource.stream });
349
+ break;
350
+ }
351
+ }
352
+ return Buffer.concat(chunks);
353
+ };
354
+ const timingPayload = responsePayload.timing;
355
+ let timing;
356
+ if (timingPayload && !this._responseExtraInfoTracker.servedFromCache(request._requestId)) {
357
+ timing = {
358
+ startTime: (timingPayload.requestTime - request._timestamp + request._wallTime) * 1e3,
359
+ domainLookupStart: timingPayload.dnsStart,
360
+ domainLookupEnd: timingPayload.dnsEnd,
361
+ connectStart: timingPayload.connectStart,
362
+ secureConnectionStart: timingPayload.sslStart,
363
+ connectEnd: timingPayload.connectEnd,
364
+ requestStart: timingPayload.sendStart,
365
+ responseStart: timingPayload.receiveHeadersEnd
366
+ };
367
+ } else {
368
+ timing = {
369
+ startTime: request._wallTime * 1e3,
370
+ domainLookupStart: -1,
371
+ domainLookupEnd: -1,
372
+ connectStart: -1,
373
+ secureConnectionStart: -1,
374
+ connectEnd: -1,
375
+ requestStart: -1,
376
+ responseStart: -1
377
+ };
378
+ }
379
+ const response = new network.Response(request.request, responsePayload.status, responsePayload.statusText, (0, import_utils.headersObjectToArray)(responsePayload.headers), timing, getResponseBody, !!responsePayload.fromServiceWorker, responsePayload.protocol);
380
+ if (responsePayload?.remoteIPAddress && typeof responsePayload?.remotePort === "number") {
381
+ response._serverAddrFinished({
382
+ ipAddress: responsePayload.remoteIPAddress,
383
+ port: responsePayload.remotePort
384
+ });
385
+ } else {
386
+ response._serverAddrFinished();
387
+ }
388
+ response._securityDetailsFinished({
389
+ protocol: responsePayload?.securityDetails?.protocol,
390
+ subjectName: responsePayload?.securityDetails?.subjectName,
391
+ issuer: responsePayload?.securityDetails?.issuer,
392
+ validFrom: responsePayload?.securityDetails?.validFrom,
393
+ validTo: responsePayload?.securityDetails?.validTo
394
+ });
395
+ this._responseExtraInfoTracker.processResponse(request._requestId, response, hasExtraInfo);
396
+ return response;
397
+ }
398
+ _deleteRequest(request) {
399
+ this._requestIdToRequest.delete(request._requestId);
400
+ if (request._interceptionId)
401
+ this._attemptedAuthentications.delete(request._interceptionId);
402
+ }
403
+ _handleRequestRedirect(request, responsePayload, timestamp, hasExtraInfo) {
404
+ const response = this._createResponse(request, responsePayload, hasExtraInfo);
405
+ response.setTransferSize(null);
406
+ response.setEncodedBodySize(null);
407
+ response._requestFinished((timestamp - request._timestamp) * 1e3);
408
+ this._deleteRequest(request);
409
+ (this._page?.frameManager || this._serviceWorker).requestReceivedResponse(response);
410
+ (this._page?.frameManager || this._serviceWorker).reportRequestFinished(request.request, response);
411
+ }
412
+ _onResponseReceivedExtraInfo(event) {
413
+ this._responseExtraInfoTracker.responseReceivedExtraInfo(event);
414
+ }
415
+ _onResponseReceived(sessionInfo, event) {
416
+ let request = this._requestIdToRequest.get(event.requestId);
417
+ if (!request && event.response.fromServiceWorker) {
418
+ const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);
419
+ if (requestWillBeSentEvent) {
420
+ this._requestIdToRequestWillBeSentEvent.delete(event.requestId);
421
+ this._onRequest(sessionInfo, requestWillBeSentEvent.event, void 0, void 0);
422
+ request = this._requestIdToRequest.get(event.requestId);
423
+ }
424
+ }
425
+ if (!request)
426
+ return;
427
+ const response = this._createResponse(request, event.response, event.hasExtraInfo);
428
+ (this._page?.frameManager || this._serviceWorker).requestReceivedResponse(response);
429
+ }
430
+ _onLoadingFinished(sessionInfo, event) {
431
+ this._responseExtraInfoTracker.loadingFinished(event);
432
+ const request = this._requestIdToRequest.get(event.requestId);
433
+ if (!request)
434
+ return;
435
+ this._maybeUpdateRequestSession(sessionInfo, request);
436
+ const response = request.request._existingResponse();
437
+ if (response) {
438
+ response.setTransferSize(event.encodedDataLength);
439
+ response.responseHeadersSize().then((size) => response.setEncodedBodySize(event.encodedDataLength - size));
440
+ response._requestFinished(import_helper.helper.secondsToRoundishMillis(event.timestamp - request._timestamp));
441
+ }
442
+ this._deleteRequest(request);
443
+ (this._page?.frameManager || this._serviceWorker).reportRequestFinished(request.request, response);
444
+ }
445
+ _onLoadingFailed(sessionInfo, event) {
446
+ this._responseExtraInfoTracker.loadingFailed(event);
447
+ let request = this._requestIdToRequest.get(event.requestId);
448
+ if (!request) {
449
+ const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);
450
+ if (requestWillBeSentEvent) {
451
+ this._requestIdToRequestWillBeSentEvent.delete(event.requestId);
452
+ this._onRequest(sessionInfo, requestWillBeSentEvent.event, void 0, void 0);
453
+ request = this._requestIdToRequest.get(event.requestId);
454
+ }
455
+ }
456
+ if (!request)
457
+ return;
458
+ this._maybeUpdateRequestSession(sessionInfo, request);
459
+ const response = request.request._existingResponse();
460
+ if (response) {
461
+ response.setTransferSize(null);
462
+ response.setEncodedBodySize(null);
463
+ response._requestFinished(import_helper.helper.secondsToRoundishMillis(event.timestamp - request._timestamp));
464
+ } else {
465
+ request.request.setRawRequestHeaders(null);
466
+ }
467
+ this._deleteRequest(request);
468
+ request.request._setFailureText(event.errorText || event.blockedReason || "");
469
+ (this._page?.frameManager || this._serviceWorker).requestFailed(request.request, !!event.canceled);
470
+ }
471
+ _maybeUpdateRequestSession(sessionInfo, request) {
472
+ if (request.session !== sessionInfo.session && !sessionInfo.isMain && (request._documentId === request._requestId || sessionInfo.workerFrame))
473
+ request.session = sessionInfo.session;
474
+ }
475
+ }
476
+ class InterceptableRequest {
477
+ constructor(options) {
478
+ const { session, context, frame, documentId, route, requestWillBeSentEvent, requestPausedEvent, redirectedFrom, serviceWorker, headersOverride } = options;
479
+ this.session = session;
480
+ this._timestamp = requestWillBeSentEvent.timestamp;
481
+ this._wallTime = requestWillBeSentEvent.wallTime;
482
+ this._requestId = requestWillBeSentEvent.requestId;
483
+ this._interceptionId = requestPausedEvent && requestPausedEvent.requestId;
484
+ this._documentId = documentId;
485
+ this._route = route;
486
+ this._originalRequestRoute = route ?? redirectedFrom?._originalRequestRoute;
487
+ const {
488
+ headers,
489
+ method,
490
+ url,
491
+ postDataEntries = null
492
+ } = requestPausedEvent ? requestPausedEvent.request : requestWillBeSentEvent.request;
493
+ let postDataBuffer = null;
494
+ const entries = postDataEntries?.filter((entry) => entry.bytes);
495
+ if (entries && entries.length)
496
+ postDataBuffer = Buffer.concat(entries.map((entry) => Buffer.from(entry.bytes, "base64")));
497
+ this.request = new network.Request(context, frame, serviceWorker, redirectedFrom?.request || null, documentId, url, toResourceType(requestWillBeSentEvent.type || "Other"), method, postDataBuffer, headersOverride || (0, import_utils.headersObjectToArray)(headers));
498
+ }
499
+ }
500
+ class RouteImpl {
501
+ constructor(session, interceptionId, page, networkId, sessionManager) {
502
+ this._fulfilled = false;
503
+ this._sessionManager = void 0;
504
+ this._networkId = void 0;
505
+ this._page = void 0;
506
+ this._session = session;
507
+ this._interceptionId = interceptionId;
508
+ this._page = page;
509
+ this._networkId = networkId;
510
+ this._sessionManager = sessionManager;
511
+ import_eventsHelper.eventsHelper.addEventListener(this._session, "Fetch.requestPaused", async (e) => await this._networkRequestIntercepted(e));
512
+ }
513
+ async continue(overrides) {
514
+ this._alreadyContinuedParams = {
515
+ requestId: this._interceptionId,
516
+ url: overrides.url,
517
+ headers: overrides.headers,
518
+ method: overrides.method,
519
+ postData: overrides.postData ? overrides.postData.toString("base64") : void 0
520
+ };
521
+ if (overrides.url && (overrides.url === "http://patchright-init-script-inject.internal/" || overrides.url === "https://patchright-init-script-inject.internal/")) {
522
+ await catchDisallowedErrors(async () => {
523
+ this._sessionManager._alreadyTrackedNetworkIds.add(this._networkId);
524
+ this._session._sendMayFail("Fetch.continueRequest", { requestId: this._interceptionId, interceptResponse: true });
525
+ });
526
+ } else {
527
+ await catchDisallowedErrors(async () => {
528
+ await this._session._sendMayFail("Fetch.continueRequest", this._alreadyContinuedParams);
529
+ });
530
+ }
531
+ }
532
+ async fulfill(response) {
533
+ const isTextHtml = response.headers.some((header) => header.name.toLowerCase() === "content-type" && header.value.includes("text/html"));
534
+ var allInjections = [...this._page.delegate._mainFrameSession._evaluateOnNewDocumentScripts];
535
+ if (isTextHtml && allInjections.length) {
536
+ let useNonce = false;
537
+ let scriptNonce = null;
538
+ if (response.isBase64) {
539
+ response.isBase64 = false;
540
+ response.body = Buffer.from(response.body, "base64").toString("utf-8");
541
+ }
542
+ const cspHeaderNames = ["content-security-policy", "content-security-policy-report-only"];
543
+ for (let i = 0; i < response.headers.length; i++) {
544
+ const headerName = response.headers[i].name.toLowerCase();
545
+ if (cspHeaderNames.includes(headerName)) {
546
+ const originalCsp = response.headers[i].value || "";
547
+ if (!useNonce) {
548
+ const nonceMatch = originalCsp.match(/script-src[^;]*'nonce-([^'"\s;]+)'/i);
549
+ if (nonceMatch && nonceMatch[1]) {
550
+ scriptNonce = nonceMatch[1];
551
+ useNonce = true;
552
+ }
553
+ }
554
+ const fixedCsp = this._fixCSP(originalCsp, scriptNonce);
555
+ response.headers[i].value = fixedCsp;
556
+ }
557
+ }
558
+ if (typeof response.body === "string" && response.body.length) {
559
+ response.body = response.body.replace(
560
+ /<meta[^>]*http-equiv=(?:"|')?Content-Security-Policy(?:"|')?[^>]*>/gi,
561
+ (match) => {
562
+ const contentMatch = match.match(/content=(?:"|')([^"']*)(?:"|')/i);
563
+ if (contentMatch && contentMatch[1]) {
564
+ let originalCsp = contentMatch[1];
565
+ originalCsp = originalCsp.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#x27;/g, "'").replace(/&#x22;/g, '"').replace(/&nbsp;/g, " ").replace(/&#(d+);/g, (match2, dec) => String.fromCharCode(dec)).replace(/&#x([0-9a-fA-F]+);/g, (match2, hex) => String.fromCharCode(parseInt(hex, 16)));
566
+ if (!useNonce) {
567
+ const nonceMatch = originalCsp.match(/script-src[^;]*'nonce-([^'"\s;]+)'/i);
568
+ if (nonceMatch && nonceMatch[1]) {
569
+ scriptNonce = nonceMatch[1];
570
+ useNonce = true;
571
+ }
572
+ }
573
+ const fixedCsp = this._fixCSP(originalCsp, scriptNonce);
574
+ const encodedCsp = fixedCsp.replace(/'/g, "&#x27;").replace(/"/g, "&#x22;");
575
+ return match.replace(contentMatch[1], encodedCsp);
576
+ }
577
+ return match;
578
+ }
579
+ );
580
+ }
581
+ let injectionHTML = "";
582
+ allInjections.forEach((script) => {
583
+ let scriptId = import_crypto.default.randomBytes(22).toString("hex");
584
+ let scriptSource = script.source || script;
585
+ const nonceAttr = useNonce ? `nonce="${scriptNonce}"` : "";
586
+ injectionHTML += `<script class="${this._page.delegate.initScriptTag}" ${nonceAttr} id="${scriptId}" type="text/javascript">document.getElementById("${scriptId}")?.remove();${scriptSource}</script>`;
587
+ });
588
+ const lower = response.body.toLowerCase();
589
+ const headStartIndex = lower.indexOf("<head");
590
+ if (headStartIndex !== -1) {
591
+ const headEndTagIndex = lower.indexOf("</head>", headStartIndex);
592
+ if (headEndTagIndex !== -1) {
593
+ const headOpenEnd = response.body.indexOf(">", headStartIndex) + 1;
594
+ const headContent = response.body.slice(headOpenEnd, headEndTagIndex);
595
+ const headContentLower = headContent.toLowerCase();
596
+ let firstScriptIndex = -1;
597
+ let searchPos = 0;
598
+ const endSearchPos = headContentLower.length;
599
+ while (searchPos < endSearchPos) {
600
+ const commentStart = headContentLower.indexOf("<!--", searchPos);
601
+ const scriptStart = headContentLower.indexOf("<script", searchPos);
602
+ if (scriptStart === -1 || scriptStart >= endSearchPos) {
603
+ break;
604
+ }
605
+ if (commentStart !== -1 && commentStart < scriptStart) {
606
+ const commentEnd = headContentLower.indexOf("-->", commentStart);
607
+ if (commentEnd !== -1) {
608
+ searchPos = commentEnd + 3;
609
+ continue;
610
+ } else {
611
+ break;
612
+ }
613
+ }
614
+ firstScriptIndex = scriptStart;
615
+ break;
616
+ }
617
+ if (firstScriptIndex !== -1) {
618
+ const insertPosition = headOpenEnd + firstScriptIndex;
619
+ response.body = response.body.slice(0, insertPosition) + injectionHTML + response.body.slice(insertPosition);
620
+ } else {
621
+ response.body = response.body.slice(0, headEndTagIndex) + injectionHTML + response.body.slice(headEndTagIndex);
622
+ }
623
+ } else {
624
+ const headStartTagEnd = response.body.indexOf(">", headStartIndex) + 1;
625
+ response.body = response.body.slice(0, headStartTagEnd) + injectionHTML + response.body.slice(headStartTagEnd);
626
+ }
627
+ } else {
628
+ const doctypeIndex = lower.indexOf("<!doctype");
629
+ if (doctypeIndex === 0) {
630
+ const doctypeEnd = response.body.indexOf(">", doctypeIndex) + 1;
631
+ response.body = response.body.slice(0, doctypeEnd) + injectionHTML + response.body.slice(doctypeEnd);
632
+ } else {
633
+ const htmlIndex = lower.indexOf("<html");
634
+ if (htmlIndex !== -1) {
635
+ const htmlTagEnd = response.body.indexOf(">", htmlIndex) + 1;
636
+ response.body = response.body.slice(0, htmlTagEnd) + `<head>${injectionHTML}</head>` + response.body.slice(htmlTagEnd);
637
+ } else {
638
+ response.body = injectionHTML + response.body;
639
+ }
640
+ }
641
+ }
642
+ }
643
+ this._fulfilled = true;
644
+ const body = response.isBase64 ? response.body : Buffer.from(response.body).toString("base64");
645
+ const responseHeaders = splitSetCookieHeader(response.headers);
646
+ await catchDisallowedErrors(async () => {
647
+ await this._session.send("Fetch.fulfillRequest", {
648
+ requestId: response.interceptionId ? response.interceptionId : this._interceptionId,
649
+ responseCode: response.status,
650
+ responsePhrase: network.statusText(response.status),
651
+ responseHeaders,
652
+ body
653
+ });
654
+ });
655
+ }
656
+ async abort(errorCode = "failed") {
657
+ const errorReason = errorReasons[errorCode];
658
+ (0, import_utils.assert)(errorReason, "Unknown error code: " + errorCode);
659
+ await catchDisallowedErrors(async () => {
660
+ await this._session.send("Fetch.failRequest", {
661
+ requestId: this._interceptionId,
662
+ errorReason
663
+ });
664
+ });
665
+ }
666
+ _fixCSP(csp, scriptNonce) {
667
+ if (!csp || typeof csp !== "string") return csp;
668
+ const directives = csp.split(";").map((d) => d.trim()).filter((d) => d && d.length > 0);
669
+ const fixedDirectives = [];
670
+ let hasScriptSrc = false;
671
+ for (let directive of directives) {
672
+ if (!directive.trim()) continue;
673
+ const directiveMatch = directive.match(/^([a-zA-Z-]+)\s+(.*)$/);
674
+ if (!directiveMatch) {
675
+ fixedDirectives.push(directive);
676
+ continue;
677
+ }
678
+ const directiveName = directiveMatch[1].toLowerCase();
679
+ const directiveValues = directiveMatch[2].split(/\s+/).filter((v) => v.length > 0);
680
+ switch (directiveName) {
681
+ case "script-src":
682
+ hasScriptSrc = true;
683
+ let values = [...directiveValues];
684
+ if (scriptNonce && !values.some((v) => v.includes(`nonce-${scriptNonce}`))) {
685
+ values.push(`'nonce-${scriptNonce}'`);
686
+ }
687
+ if (!values.includes("'unsafe-eval'")) {
688
+ values.push("'unsafe-eval'");
689
+ }
690
+ if (!values.includes("'unsafe-inline'") && !scriptNonce) {
691
+ values.push("'unsafe-inline'");
692
+ }
693
+ if (!values.includes("*") && !values.includes("'self'") && !values.some((v) => v.includes("https:"))) {
694
+ values.push("*");
695
+ }
696
+ fixedDirectives.push(`script-src ${values.join(" ")}`);
697
+ break;
698
+ case "style-src":
699
+ let styleValues = [...directiveValues];
700
+ if (!styleValues.includes("'unsafe-inline'")) {
701
+ styleValues.push("'unsafe-inline'");
702
+ }
703
+ fixedDirectives.push(`style-src ${styleValues.join(" ")}`);
704
+ break;
705
+ case "img-src":
706
+ let imgValues = [...directiveValues];
707
+ if (!imgValues.includes("data:") && !imgValues.includes("*")) {
708
+ imgValues.push("data:");
709
+ }
710
+ fixedDirectives.push(`img-src ${imgValues.join(" ")}`);
711
+ break;
712
+ case "font-src":
713
+ let fontValues = [...directiveValues];
714
+ if (!fontValues.includes("data:") && !fontValues.includes("*")) {
715
+ fontValues.push("data:");
716
+ }
717
+ fixedDirectives.push(`font-src ${fontValues.join(" ")}`);
718
+ break;
719
+ case "connect-src":
720
+ let connectValues = [...directiveValues];
721
+ const hasWs = connectValues.some((v) => v.includes("ws:") || v.includes("wss:") || v === "*");
722
+ if (!hasWs) {
723
+ connectValues.push("ws:", "wss:");
724
+ }
725
+ fixedDirectives.push(`connect-src ${connectValues.join(" ")}`);
726
+ break;
727
+ case "frame-ancestors":
728
+ let frameAncestorValues = [...directiveValues];
729
+ if (frameAncestorValues.includes("'none'")) {
730
+ frameAncestorValues = ["'self'"];
731
+ }
732
+ fixedDirectives.push(`frame-ancestors ${frameAncestorValues.join(" ")}`);
733
+ break;
734
+ default:
735
+ fixedDirectives.push(directive);
736
+ break;
737
+ }
738
+ }
739
+ if (!hasScriptSrc) {
740
+ if (scriptNonce) {
741
+ fixedDirectives.push(`script-src 'self' 'unsafe-eval' 'nonce-${scriptNonce}' *`);
742
+ } else {
743
+ fixedDirectives.push(`script-src 'self' 'unsafe-eval' 'unsafe-inline' *`);
744
+ }
745
+ }
746
+ return fixedDirectives.join("; ");
747
+ }
748
+ async _networkRequestIntercepted(event) {
749
+ if (event.resourceType !== "Document") {
750
+ return;
751
+ }
752
+ if (this._networkId != event.networkId || !this._sessionManager._alreadyTrackedNetworkIds.has(event.networkId)) return;
753
+ try {
754
+ const url = event.request?.url || "";
755
+ const isPrivilegePage = url.startsWith("https://ntp.msn");
756
+ if (isPrivilegePage) {
757
+ await this._session._sendMayFail("Fetch.continueRequest", { requestId: event.requestId });
758
+ return;
759
+ }
760
+ if (event.responseStatusCode >= 301 && event.responseStatusCode <= 308 || event.redirectedRequestId && !event.responseStatusCode) {
761
+ await this._session.send("Fetch.continueRequest", { requestId: event.requestId, interceptResponse: true });
762
+ } else {
763
+ const responseBody = await this._session.send("Fetch.getResponseBody", { requestId: event.requestId });
764
+ await this.fulfill({
765
+ headers: event.responseHeaders,
766
+ isBase64: true,
767
+ body: responseBody.body,
768
+ status: event.responseStatusCode,
769
+ interceptionId: event.requestId,
770
+ resourceType: event.resourceType
771
+ });
772
+ }
773
+ } catch (error) {
774
+ await this._session._sendMayFail("Fetch.continueRequest", { requestId: event.requestId });
775
+ }
776
+ }
777
+ }
778
+ async function catchDisallowedErrors(callback) {
779
+ try {
780
+ return await callback();
781
+ } catch (e) {
782
+ if ((0, import_protocolError.isProtocolError)(e) && e.message.includes("Invalid http status code or phrase"))
783
+ throw e;
784
+ if ((0, import_protocolError.isProtocolError)(e) && e.message.includes("Unsafe header"))
785
+ throw e;
786
+ }
787
+ }
788
+ function splitSetCookieHeader(headers) {
789
+ const index = headers.findIndex(({ name }) => name.toLowerCase() === "set-cookie");
790
+ if (index === -1)
791
+ return headers;
792
+ const header = headers[index];
793
+ const values = header.value.split("\n");
794
+ if (values.length === 1)
795
+ return headers;
796
+ const result = headers.slice();
797
+ result.splice(index, 1, ...values.map((value) => ({ name: header.name, value })));
798
+ return result;
799
+ }
800
+ const errorReasons = {
801
+ "aborted": "Aborted",
802
+ "accessdenied": "AccessDenied",
803
+ "addressunreachable": "AddressUnreachable",
804
+ "blockedbyclient": "BlockedByClient",
805
+ "blockedbyresponse": "BlockedByResponse",
806
+ "connectionaborted": "ConnectionAborted",
807
+ "connectionclosed": "ConnectionClosed",
808
+ "connectionfailed": "ConnectionFailed",
809
+ "connectionrefused": "ConnectionRefused",
810
+ "connectionreset": "ConnectionReset",
811
+ "internetdisconnected": "InternetDisconnected",
812
+ "namenotresolved": "NameNotResolved",
813
+ "timedout": "TimedOut",
814
+ "failed": "Failed"
815
+ };
816
+ class ResponseExtraInfoTracker {
817
+ constructor() {
818
+ this._requests = /* @__PURE__ */ new Map();
819
+ }
820
+ requestWillBeSentExtraInfo(event) {
821
+ const info = this._getOrCreateEntry(event.requestId);
822
+ info.requestWillBeSentExtraInfo.push(event);
823
+ this._patchHeaders(info, info.requestWillBeSentExtraInfo.length - 1);
824
+ this._checkFinished(info);
825
+ }
826
+ requestServedFromCache(event) {
827
+ const info = this._getOrCreateEntry(event.requestId);
828
+ info.servedFromCache = true;
829
+ }
830
+ servedFromCache(requestId) {
831
+ const info = this._requests.get(requestId);
832
+ return !!info?.servedFromCache;
833
+ }
834
+ responseReceivedExtraInfo(event) {
835
+ const info = this._getOrCreateEntry(event.requestId);
836
+ info.responseReceivedExtraInfo.push(event);
837
+ this._patchHeaders(info, info.responseReceivedExtraInfo.length - 1);
838
+ this._checkFinished(info);
839
+ }
840
+ processResponse(requestId, response, hasExtraInfo) {
841
+ let info = this._requests.get(requestId);
842
+ if (!hasExtraInfo || info?.servedFromCache) {
843
+ response.request().setRawRequestHeaders(null);
844
+ response.setResponseHeadersSize(null);
845
+ response.setRawResponseHeaders(null);
846
+ return;
847
+ }
848
+ info = this._getOrCreateEntry(requestId);
849
+ info.responses.push(response);
850
+ this._patchHeaders(info, info.responses.length - 1);
851
+ }
852
+ loadingFinished(event) {
853
+ const info = this._requests.get(event.requestId);
854
+ if (!info)
855
+ return;
856
+ info.loadingFinished = event;
857
+ this._checkFinished(info);
858
+ }
859
+ loadingFailed(event) {
860
+ const info = this._requests.get(event.requestId);
861
+ if (!info)
862
+ return;
863
+ info.loadingFailed = event;
864
+ this._checkFinished(info);
865
+ }
866
+ _getOrCreateEntry(requestId) {
867
+ let info = this._requests.get(requestId);
868
+ if (!info) {
869
+ info = {
870
+ requestId,
871
+ requestWillBeSentExtraInfo: [],
872
+ responseReceivedExtraInfo: [],
873
+ responses: []
874
+ };
875
+ this._requests.set(requestId, info);
876
+ }
877
+ return info;
878
+ }
879
+ _patchHeaders(info, index) {
880
+ const response = info.responses[index];
881
+ const requestExtraInfo = info.requestWillBeSentExtraInfo[index];
882
+ if (response && requestExtraInfo) {
883
+ response.request().setRawRequestHeaders((0, import_utils.headersObjectToArray)(requestExtraInfo.headers, "\n"));
884
+ info.requestWillBeSentExtraInfo[index] = void 0;
885
+ }
886
+ const responseExtraInfo = info.responseReceivedExtraInfo[index];
887
+ if (response && responseExtraInfo) {
888
+ response.setResponseHeadersSize(responseExtraInfo.headersText?.length || 0);
889
+ response.setRawResponseHeaders((0, import_utils.headersObjectToArray)(responseExtraInfo.headers, "\n"));
890
+ info.responseReceivedExtraInfo[index] = void 0;
891
+ }
892
+ }
893
+ _checkFinished(info) {
894
+ if (!info.loadingFinished && !info.loadingFailed)
895
+ return;
896
+ if (info.responses.length <= info.responseReceivedExtraInfo.length) {
897
+ this._stopTracking(info.requestId);
898
+ return;
899
+ }
900
+ }
901
+ _stopTracking(requestId) {
902
+ this._requests.delete(requestId);
903
+ }
904
+ }
905
+ function toResourceType(type) {
906
+ switch (type) {
907
+ case "Document":
908
+ return "document";
909
+ case "Stylesheet":
910
+ return "stylesheet";
911
+ case "Image":
912
+ return "image";
913
+ case "Media":
914
+ return "media";
915
+ case "Font":
916
+ return "font";
917
+ case "Script":
918
+ return "script";
919
+ case "TextTrack":
920
+ return "texttrack";
921
+ case "XHR":
922
+ return "xhr";
923
+ case "Fetch":
924
+ return "fetch";
925
+ case "EventSource":
926
+ return "eventsource";
927
+ case "WebSocket":
928
+ return "websocket";
929
+ case "Manifest":
930
+ return "manifest";
931
+ case "Ping":
932
+ return "ping";
933
+ case "CSPViolationReport":
934
+ return "cspreport";
935
+ case "Prefetch":
936
+ case "SignedExchange":
937
+ case "Preflight":
938
+ case "FedCM":
939
+ default:
940
+ return "other";
941
+ }
942
+ }
943
+ // Annotate the CommonJS export names for ESM import in node:
944
+ 0 && (module.exports = {
945
+ CRNetworkManager
946
+ });