@pedropaulovc/playwright-core 1.59.0-alpha-1769214875000

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 (364) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +3 -0
  4. package/ThirdPartyNotices.txt +4076 -0
  5. package/bin/install_media_pack.ps1 +5 -0
  6. package/bin/install_webkit_wsl.ps1 +33 -0
  7. package/bin/reinstall_chrome_beta_linux.sh +42 -0
  8. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  9. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  10. package/bin/reinstall_chrome_stable_linux.sh +42 -0
  11. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  12. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  13. package/bin/reinstall_msedge_beta_linux.sh +48 -0
  14. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  15. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  16. package/bin/reinstall_msedge_dev_linux.sh +48 -0
  17. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  18. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  19. package/bin/reinstall_msedge_stable_linux.sh +48 -0
  20. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  21. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  22. package/browsers.json +79 -0
  23. package/cli.js +18 -0
  24. package/index.d.ts +17 -0
  25. package/index.js +32 -0
  26. package/index.mjs +28 -0
  27. package/lib/androidServerImpl.js +65 -0
  28. package/lib/browserServerImpl.js +120 -0
  29. package/lib/cli/driver.js +97 -0
  30. package/lib/cli/program.js +601 -0
  31. package/lib/cli/programWithTestStub.js +74 -0
  32. package/lib/client/android.js +361 -0
  33. package/lib/client/api.js +137 -0
  34. package/lib/client/artifact.js +79 -0
  35. package/lib/client/browser.js +161 -0
  36. package/lib/client/browserContext.js +582 -0
  37. package/lib/client/browserType.js +185 -0
  38. package/lib/client/cdpSession.js +51 -0
  39. package/lib/client/channelOwner.js +194 -0
  40. package/lib/client/clientHelper.js +64 -0
  41. package/lib/client/clientInstrumentation.js +55 -0
  42. package/lib/client/clientStackTrace.js +69 -0
  43. package/lib/client/clock.js +68 -0
  44. package/lib/client/connection.js +318 -0
  45. package/lib/client/consoleMessage.js +58 -0
  46. package/lib/client/coverage.js +44 -0
  47. package/lib/client/dialog.js +56 -0
  48. package/lib/client/download.js +62 -0
  49. package/lib/client/electron.js +138 -0
  50. package/lib/client/elementHandle.js +284 -0
  51. package/lib/client/errors.js +77 -0
  52. package/lib/client/eventEmitter.js +314 -0
  53. package/lib/client/events.js +103 -0
  54. package/lib/client/fetch.js +368 -0
  55. package/lib/client/fileChooser.js +46 -0
  56. package/lib/client/fileUtils.js +34 -0
  57. package/lib/client/frame.js +409 -0
  58. package/lib/client/harRouter.js +87 -0
  59. package/lib/client/input.js +84 -0
  60. package/lib/client/jsHandle.js +109 -0
  61. package/lib/client/jsonPipe.js +39 -0
  62. package/lib/client/localUtils.js +60 -0
  63. package/lib/client/locator.js +369 -0
  64. package/lib/client/network.js +747 -0
  65. package/lib/client/page.js +743 -0
  66. package/lib/client/pageAgent.js +64 -0
  67. package/lib/client/platform.js +77 -0
  68. package/lib/client/playwright.js +71 -0
  69. package/lib/client/selectors.js +55 -0
  70. package/lib/client/stream.js +39 -0
  71. package/lib/client/timeoutSettings.js +79 -0
  72. package/lib/client/tracing.js +119 -0
  73. package/lib/client/types.js +28 -0
  74. package/lib/client/video.js +59 -0
  75. package/lib/client/waiter.js +142 -0
  76. package/lib/client/webError.js +39 -0
  77. package/lib/client/webSocket.js +93 -0
  78. package/lib/client/worker.js +85 -0
  79. package/lib/client/writableStream.js +39 -0
  80. package/lib/generated/bindingsControllerSource.js +28 -0
  81. package/lib/generated/clockSource.js +28 -0
  82. package/lib/generated/injectedScriptSource.js +28 -0
  83. package/lib/generated/pollingRecorderSource.js +28 -0
  84. package/lib/generated/storageScriptSource.js +28 -0
  85. package/lib/generated/utilityScriptSource.js +28 -0
  86. package/lib/generated/webSocketMockSource.js +336 -0
  87. package/lib/inProcessFactory.js +60 -0
  88. package/lib/inprocess.js +3 -0
  89. package/lib/mcpBundle.js +84 -0
  90. package/lib/mcpBundleImpl/index.js +147 -0
  91. package/lib/outofprocess.js +76 -0
  92. package/lib/protocol/serializers.js +197 -0
  93. package/lib/protocol/validator.js +2969 -0
  94. package/lib/protocol/validatorPrimitives.js +193 -0
  95. package/lib/remote/playwrightConnection.js +129 -0
  96. package/lib/remote/playwrightServer.js +334 -0
  97. package/lib/server/agent/actionRunner.js +335 -0
  98. package/lib/server/agent/actions.js +128 -0
  99. package/lib/server/agent/codegen.js +111 -0
  100. package/lib/server/agent/context.js +150 -0
  101. package/lib/server/agent/expectTools.js +156 -0
  102. package/lib/server/agent/pageAgent.js +204 -0
  103. package/lib/server/agent/performTools.js +262 -0
  104. package/lib/server/agent/tool.js +109 -0
  105. package/lib/server/android/android.js +465 -0
  106. package/lib/server/android/backendAdb.js +177 -0
  107. package/lib/server/artifact.js +127 -0
  108. package/lib/server/bidi/bidiBrowser.js +549 -0
  109. package/lib/server/bidi/bidiChromium.js +148 -0
  110. package/lib/server/bidi/bidiConnection.js +213 -0
  111. package/lib/server/bidi/bidiDeserializer.js +116 -0
  112. package/lib/server/bidi/bidiExecutionContext.js +267 -0
  113. package/lib/server/bidi/bidiFirefox.js +128 -0
  114. package/lib/server/bidi/bidiInput.js +146 -0
  115. package/lib/server/bidi/bidiNetworkManager.js +383 -0
  116. package/lib/server/bidi/bidiOverCdp.js +102 -0
  117. package/lib/server/bidi/bidiPage.js +583 -0
  118. package/lib/server/bidi/bidiPdf.js +106 -0
  119. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  120. package/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
  121. package/lib/server/bidi/third_party/bidiProtocol.js +24 -0
  122. package/lib/server/bidi/third_party/bidiProtocolCore.js +180 -0
  123. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  124. package/lib/server/bidi/third_party/bidiSerializer.js +148 -0
  125. package/lib/server/bidi/third_party/firefoxPrefs.js +259 -0
  126. package/lib/server/browser.js +149 -0
  127. package/lib/server/browserContext.js +702 -0
  128. package/lib/server/browserType.js +336 -0
  129. package/lib/server/callLog.js +82 -0
  130. package/lib/server/chromium/appIcon.png +0 -0
  131. package/lib/server/chromium/chromium.js +395 -0
  132. package/lib/server/chromium/chromiumSwitches.js +104 -0
  133. package/lib/server/chromium/crBrowser.js +511 -0
  134. package/lib/server/chromium/crConnection.js +197 -0
  135. package/lib/server/chromium/crCoverage.js +235 -0
  136. package/lib/server/chromium/crDevTools.js +111 -0
  137. package/lib/server/chromium/crDragDrop.js +131 -0
  138. package/lib/server/chromium/crExecutionContext.js +146 -0
  139. package/lib/server/chromium/crInput.js +187 -0
  140. package/lib/server/chromium/crNetworkManager.js +707 -0
  141. package/lib/server/chromium/crPage.js +1001 -0
  142. package/lib/server/chromium/crPdf.js +121 -0
  143. package/lib/server/chromium/crProtocolHelper.js +145 -0
  144. package/lib/server/chromium/crServiceWorker.js +136 -0
  145. package/lib/server/chromium/defaultFontFamilies.js +162 -0
  146. package/lib/server/chromium/protocol.d.js +16 -0
  147. package/lib/server/clock.js +149 -0
  148. package/lib/server/codegen/csharp.js +327 -0
  149. package/lib/server/codegen/java.js +274 -0
  150. package/lib/server/codegen/javascript.js +247 -0
  151. package/lib/server/codegen/jsonl.js +52 -0
  152. package/lib/server/codegen/language.js +132 -0
  153. package/lib/server/codegen/languages.js +68 -0
  154. package/lib/server/codegen/python.js +279 -0
  155. package/lib/server/codegen/types.js +16 -0
  156. package/lib/server/console.js +57 -0
  157. package/lib/server/cookieStore.js +206 -0
  158. package/lib/server/debugController.js +191 -0
  159. package/lib/server/debugger.js +119 -0
  160. package/lib/server/deviceDescriptors.js +39 -0
  161. package/lib/server/deviceDescriptorsSource.json +1779 -0
  162. package/lib/server/dialog.js +116 -0
  163. package/lib/server/dispatchers/androidDispatcher.js +325 -0
  164. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  165. package/lib/server/dispatchers/browserContextDispatcher.js +384 -0
  166. package/lib/server/dispatchers/browserDispatcher.js +118 -0
  167. package/lib/server/dispatchers/browserTypeDispatcher.js +64 -0
  168. package/lib/server/dispatchers/cdpSessionDispatcher.js +44 -0
  169. package/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
  170. package/lib/server/dispatchers/dialogDispatcher.js +47 -0
  171. package/lib/server/dispatchers/dispatcher.js +364 -0
  172. package/lib/server/dispatchers/electronDispatcher.js +89 -0
  173. package/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
  174. package/lib/server/dispatchers/frameDispatcher.js +227 -0
  175. package/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
  176. package/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
  177. package/lib/server/dispatchers/localUtilsDispatcher.js +149 -0
  178. package/lib/server/dispatchers/networkDispatchers.js +213 -0
  179. package/lib/server/dispatchers/pageAgentDispatcher.js +96 -0
  180. package/lib/server/dispatchers/pageDispatcher.js +393 -0
  181. package/lib/server/dispatchers/playwrightDispatcher.js +108 -0
  182. package/lib/server/dispatchers/streamDispatcher.js +67 -0
  183. package/lib/server/dispatchers/tracingDispatcher.js +68 -0
  184. package/lib/server/dispatchers/webSocketRouteDispatcher.js +165 -0
  185. package/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
  186. package/lib/server/dom.js +815 -0
  187. package/lib/server/download.js +70 -0
  188. package/lib/server/electron/electron.js +273 -0
  189. package/lib/server/electron/loader.js +29 -0
  190. package/lib/server/errors.js +69 -0
  191. package/lib/server/fetch.js +621 -0
  192. package/lib/server/fileChooser.js +43 -0
  193. package/lib/server/fileUploadUtils.js +84 -0
  194. package/lib/server/firefox/ffBrowser.js +418 -0
  195. package/lib/server/firefox/ffConnection.js +142 -0
  196. package/lib/server/firefox/ffExecutionContext.js +150 -0
  197. package/lib/server/firefox/ffInput.js +159 -0
  198. package/lib/server/firefox/ffNetworkManager.js +256 -0
  199. package/lib/server/firefox/ffPage.js +497 -0
  200. package/lib/server/firefox/firefox.js +114 -0
  201. package/lib/server/firefox/protocol.d.js +16 -0
  202. package/lib/server/formData.js +147 -0
  203. package/lib/server/frameSelectors.js +160 -0
  204. package/lib/server/frames.js +1471 -0
  205. package/lib/server/har/harRecorder.js +147 -0
  206. package/lib/server/har/harTracer.js +607 -0
  207. package/lib/server/harBackend.js +157 -0
  208. package/lib/server/helper.js +96 -0
  209. package/lib/server/index.js +58 -0
  210. package/lib/server/input.js +277 -0
  211. package/lib/server/instrumentation.js +72 -0
  212. package/lib/server/javascript.js +291 -0
  213. package/lib/server/launchApp.js +128 -0
  214. package/lib/server/localUtils.js +214 -0
  215. package/lib/server/macEditingCommands.js +143 -0
  216. package/lib/server/network.js +667 -0
  217. package/lib/server/page.js +830 -0
  218. package/lib/server/pipeTransport.js +89 -0
  219. package/lib/server/playwright.js +69 -0
  220. package/lib/server/progress.js +132 -0
  221. package/lib/server/protocolError.js +52 -0
  222. package/lib/server/recorder/chat.js +161 -0
  223. package/lib/server/recorder/recorderApp.js +366 -0
  224. package/lib/server/recorder/recorderRunner.js +138 -0
  225. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  226. package/lib/server/recorder/recorderUtils.js +157 -0
  227. package/lib/server/recorder/throttledFile.js +57 -0
  228. package/lib/server/recorder.js +499 -0
  229. package/lib/server/registry/browserFetcher.js +177 -0
  230. package/lib/server/registry/dependencies.js +371 -0
  231. package/lib/server/registry/index.js +1422 -0
  232. package/lib/server/registry/nativeDeps.js +1280 -0
  233. package/lib/server/registry/oopDownloadBrowserMain.js +127 -0
  234. package/lib/server/screencast.js +190 -0
  235. package/lib/server/screenshotter.js +333 -0
  236. package/lib/server/selectors.js +112 -0
  237. package/lib/server/socksClientCertificatesInterceptor.js +383 -0
  238. package/lib/server/socksInterceptor.js +95 -0
  239. package/lib/server/trace/exporter/traceExporter.js +1102 -0
  240. package/lib/server/trace/recorder/snapshotter.js +147 -0
  241. package/lib/server/trace/recorder/snapshotterInjected.js +561 -0
  242. package/lib/server/trace/recorder/tracing.js +604 -0
  243. package/lib/server/trace/viewer/traceParser.js +72 -0
  244. package/lib/server/trace/viewer/traceViewer.js +245 -0
  245. package/lib/server/transport.js +181 -0
  246. package/lib/server/types.js +28 -0
  247. package/lib/server/usKeyboardLayout.js +145 -0
  248. package/lib/server/utils/ascii.js +44 -0
  249. package/lib/server/utils/comparators.js +139 -0
  250. package/lib/server/utils/crypto.js +216 -0
  251. package/lib/server/utils/debug.js +42 -0
  252. package/lib/server/utils/debugLogger.js +122 -0
  253. package/lib/server/utils/env.js +73 -0
  254. package/lib/server/utils/eventsHelper.js +39 -0
  255. package/lib/server/utils/expectUtils.js +123 -0
  256. package/lib/server/utils/fileUtils.js +191 -0
  257. package/lib/server/utils/happyEyeballs.js +207 -0
  258. package/lib/server/utils/hostPlatform.js +123 -0
  259. package/lib/server/utils/httpServer.js +203 -0
  260. package/lib/server/utils/imageUtils.js +141 -0
  261. package/lib/server/utils/image_tools/colorUtils.js +89 -0
  262. package/lib/server/utils/image_tools/compare.js +109 -0
  263. package/lib/server/utils/image_tools/imageChannel.js +78 -0
  264. package/lib/server/utils/image_tools/stats.js +102 -0
  265. package/lib/server/utils/linuxUtils.js +71 -0
  266. package/lib/server/utils/network.js +242 -0
  267. package/lib/server/utils/nodePlatform.js +154 -0
  268. package/lib/server/utils/pipeTransport.js +84 -0
  269. package/lib/server/utils/processLauncher.js +241 -0
  270. package/lib/server/utils/profiler.js +65 -0
  271. package/lib/server/utils/socksProxy.js +511 -0
  272. package/lib/server/utils/spawnAsync.js +41 -0
  273. package/lib/server/utils/task.js +51 -0
  274. package/lib/server/utils/userAgent.js +98 -0
  275. package/lib/server/utils/wsServer.js +121 -0
  276. package/lib/server/utils/zipFile.js +74 -0
  277. package/lib/server/utils/zones.js +57 -0
  278. package/lib/server/videoRecorder.js +124 -0
  279. package/lib/server/webkit/protocol.d.js +16 -0
  280. package/lib/server/webkit/webkit.js +108 -0
  281. package/lib/server/webkit/wkBrowser.js +335 -0
  282. package/lib/server/webkit/wkConnection.js +144 -0
  283. package/lib/server/webkit/wkExecutionContext.js +154 -0
  284. package/lib/server/webkit/wkInput.js +181 -0
  285. package/lib/server/webkit/wkInterceptableRequest.js +197 -0
  286. package/lib/server/webkit/wkPage.js +1158 -0
  287. package/lib/server/webkit/wkProvisionalPage.js +83 -0
  288. package/lib/server/webkit/wkWorkers.js +105 -0
  289. package/lib/third_party/pixelmatch.js +255 -0
  290. package/lib/utils/isomorphic/ariaSnapshot.js +455 -0
  291. package/lib/utils/isomorphic/assert.js +31 -0
  292. package/lib/utils/isomorphic/colors.js +72 -0
  293. package/lib/utils/isomorphic/cssParser.js +245 -0
  294. package/lib/utils/isomorphic/cssTokenizer.js +1051 -0
  295. package/lib/utils/isomorphic/headers.js +53 -0
  296. package/lib/utils/isomorphic/locatorGenerators.js +689 -0
  297. package/lib/utils/isomorphic/locatorParser.js +176 -0
  298. package/lib/utils/isomorphic/locatorUtils.js +81 -0
  299. package/lib/utils/isomorphic/lruCache.js +51 -0
  300. package/lib/utils/isomorphic/manualPromise.js +114 -0
  301. package/lib/utils/isomorphic/mimeType.js +459 -0
  302. package/lib/utils/isomorphic/multimap.js +80 -0
  303. package/lib/utils/isomorphic/protocolFormatter.js +81 -0
  304. package/lib/utils/isomorphic/protocolMetainfo.js +330 -0
  305. package/lib/utils/isomorphic/rtti.js +43 -0
  306. package/lib/utils/isomorphic/selectorParser.js +386 -0
  307. package/lib/utils/isomorphic/semaphore.js +54 -0
  308. package/lib/utils/isomorphic/stackTrace.js +158 -0
  309. package/lib/utils/isomorphic/stringUtils.js +204 -0
  310. package/lib/utils/isomorphic/time.js +49 -0
  311. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  312. package/lib/utils/isomorphic/trace/entries.js +16 -0
  313. package/lib/utils/isomorphic/trace/snapshotRenderer.js +499 -0
  314. package/lib/utils/isomorphic/trace/snapshotServer.js +120 -0
  315. package/lib/utils/isomorphic/trace/snapshotStorage.js +89 -0
  316. package/lib/utils/isomorphic/trace/traceLoader.js +131 -0
  317. package/lib/utils/isomorphic/trace/traceModel.js +365 -0
  318. package/lib/utils/isomorphic/trace/traceModernizer.js +400 -0
  319. package/lib/utils/isomorphic/trace/versions/traceV3.js +16 -0
  320. package/lib/utils/isomorphic/trace/versions/traceV4.js +16 -0
  321. package/lib/utils/isomorphic/trace/versions/traceV5.js +16 -0
  322. package/lib/utils/isomorphic/trace/versions/traceV6.js +16 -0
  323. package/lib/utils/isomorphic/trace/versions/traceV7.js +16 -0
  324. package/lib/utils/isomorphic/trace/versions/traceV8.js +16 -0
  325. package/lib/utils/isomorphic/traceUtils.js +58 -0
  326. package/lib/utils/isomorphic/types.js +16 -0
  327. package/lib/utils/isomorphic/urlMatch.js +190 -0
  328. package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
  329. package/lib/utils/isomorphic/yaml.js +84 -0
  330. package/lib/utils.js +111 -0
  331. package/lib/utilsBundle.js +112 -0
  332. package/lib/utilsBundleImpl/index.js +218 -0
  333. package/lib/utilsBundleImpl/xdg-open +1066 -0
  334. package/lib/vite/htmlReport/index.html +84 -0
  335. package/lib/vite/recorder/assets/codeMirrorModule-DYBRYzYX.css +1 -0
  336. package/lib/vite/recorder/assets/codeMirrorModule-DadYNm1I.js +32 -0
  337. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  338. package/lib/vite/recorder/assets/index-BSjZa4pk.css +1 -0
  339. package/lib/vite/recorder/assets/index-BhTWtUlo.js +193 -0
  340. package/lib/vite/recorder/index.html +29 -0
  341. package/lib/vite/recorder/playwright-logo.svg +9 -0
  342. package/lib/vite/traceViewer/assets/codeMirrorModule-a5XoALAZ.js +32 -0
  343. package/lib/vite/traceViewer/assets/defaultSettingsView-CJSZINFr.js +266 -0
  344. package/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  345. package/lib/vite/traceViewer/codeMirrorModule.DYBRYzYX.css +1 -0
  346. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  347. package/lib/vite/traceViewer/defaultSettingsView.7ch9cixO.css +1 -0
  348. package/lib/vite/traceViewer/index.BVu7tZDe.css +1 -0
  349. package/lib/vite/traceViewer/index.Dd9jebqr.js +2 -0
  350. package/lib/vite/traceViewer/index.html +43 -0
  351. package/lib/vite/traceViewer/manifest.webmanifest +16 -0
  352. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  353. package/lib/vite/traceViewer/snapshot.html +21 -0
  354. package/lib/vite/traceViewer/sw.bundle.js +5 -0
  355. package/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
  356. package/lib/vite/traceViewer/uiMode.CQJ9SCIQ.js +5 -0
  357. package/lib/vite/traceViewer/uiMode.html +17 -0
  358. package/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  359. package/lib/zipBundle.js +34 -0
  360. package/lib/zipBundleImpl.js +5 -0
  361. package/package.json +43 -0
  362. package/types/protocol.d.ts +23824 -0
  363. package/types/structs.d.ts +45 -0
  364. package/types/types.d.ts +23170 -0
@@ -0,0 +1,84 @@
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 fileUploadUtils_exports = {};
30
+ __export(fileUploadUtils_exports, {
31
+ fileUploadSizeLimit: () => fileUploadSizeLimit,
32
+ prepareFilesForUpload: () => prepareFilesForUpload
33
+ });
34
+ module.exports = __toCommonJS(fileUploadUtils_exports);
35
+ var import_fs = __toESM(require("fs"));
36
+ var import_path = __toESM(require("path"));
37
+ var import_assert = require("../utils/isomorphic/assert");
38
+ var import_utilsBundle = require("../utilsBundle");
39
+ const fileUploadSizeLimit = 50 * 1024 * 1024;
40
+ async function filesExceedUploadLimit(files) {
41
+ const sizes = await Promise.all(files.map(async (file) => (await import_fs.default.promises.stat(file)).size));
42
+ return sizes.reduce((total, size) => total + size, 0) >= fileUploadSizeLimit;
43
+ }
44
+ async function prepareFilesForUpload(frame, params) {
45
+ const { payloads, streams, directoryStream } = params;
46
+ let { localPaths, localDirectory } = params;
47
+ if ([payloads, localPaths, localDirectory, streams, directoryStream].filter(Boolean).length !== 1)
48
+ throw new Error("Exactly one of payloads, localPaths and streams must be provided");
49
+ if (streams)
50
+ localPaths = streams.map((c) => c.path());
51
+ if (directoryStream)
52
+ localDirectory = directoryStream.path();
53
+ if (localPaths) {
54
+ for (const p of localPaths)
55
+ (0, import_assert.assert)(import_path.default.isAbsolute(p) && import_path.default.resolve(p) === p, "Paths provided to localPaths must be absolute and fully resolved.");
56
+ }
57
+ let fileBuffers = payloads;
58
+ if (!frame._page.browserContext._browser._isCollocatedWithServer) {
59
+ if (localPaths) {
60
+ if (await filesExceedUploadLimit(localPaths))
61
+ throw new Error("Cannot transfer files larger than 50Mb to a browser not co-located with the server");
62
+ fileBuffers = await Promise.all(localPaths.map(async (item) => {
63
+ return {
64
+ name: import_path.default.basename(item),
65
+ buffer: await import_fs.default.promises.readFile(item),
66
+ lastModifiedMs: (await import_fs.default.promises.stat(item)).mtimeMs
67
+ };
68
+ }));
69
+ localPaths = void 0;
70
+ }
71
+ }
72
+ const filePayloads = fileBuffers?.map((payload) => ({
73
+ name: payload.name,
74
+ mimeType: payload.mimeType || import_utilsBundle.mime.getType(payload.name) || "application/octet-stream",
75
+ buffer: payload.buffer.toString("base64"),
76
+ lastModifiedMs: payload.lastModifiedMs
77
+ }));
78
+ return { localPaths, localDirectory, filePayloads };
79
+ }
80
+ // Annotate the CommonJS export names for ESM import in node:
81
+ 0 && (module.exports = {
82
+ fileUploadSizeLimit,
83
+ prepareFilesForUpload
84
+ });
@@ -0,0 +1,418 @@
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 ffBrowser_exports = {};
30
+ __export(ffBrowser_exports, {
31
+ FFBrowser: () => FFBrowser,
32
+ FFBrowserContext: () => FFBrowserContext
33
+ });
34
+ module.exports = __toCommonJS(ffBrowser_exports);
35
+ var import_utils = require("../../utils");
36
+ var import_browser = require("../browser");
37
+ var import_browserContext = require("../browserContext");
38
+ var import_errors = require("../errors");
39
+ var network = __toESM(require("../network"));
40
+ var import_ffConnection = require("./ffConnection");
41
+ var import_ffPage = require("./ffPage");
42
+ var import_page = require("../page");
43
+ class FFBrowser extends import_browser.Browser {
44
+ constructor(parent, connection, options) {
45
+ super(parent, options);
46
+ this._version = "";
47
+ this._userAgent = "";
48
+ this._connection = connection;
49
+ this.session = connection.rootSession;
50
+ this._ffPages = /* @__PURE__ */ new Map();
51
+ this._contexts = /* @__PURE__ */ new Map();
52
+ this._connection.on(import_ffConnection.ConnectionEvents.Disconnected, () => this._onDisconnect());
53
+ this.session.on("Browser.attachedToTarget", this._onAttachedToTarget.bind(this));
54
+ this.session.on("Browser.detachedFromTarget", this._onDetachedFromTarget.bind(this));
55
+ this.session.on("Browser.downloadCreated", this._onDownloadCreated.bind(this));
56
+ this.session.on("Browser.downloadFinished", this._onDownloadFinished.bind(this));
57
+ }
58
+ static async connect(parent, transport, options) {
59
+ const connection = new import_ffConnection.FFConnection(transport, options.protocolLogger, options.browserLogsCollector);
60
+ const browser = new FFBrowser(parent, connection, options);
61
+ if (options.__testHookOnConnectToBrowser)
62
+ await options.__testHookOnConnectToBrowser();
63
+ let firefoxUserPrefs = options.originalLaunchOptions.firefoxUserPrefs ?? {};
64
+ if (Object.keys(kBandaidFirefoxUserPrefs).length)
65
+ firefoxUserPrefs = { ...kBandaidFirefoxUserPrefs, ...firefoxUserPrefs };
66
+ const promises = [
67
+ browser.session.send("Browser.enable", {
68
+ attachToDefaultContext: !!options.persistent,
69
+ userPrefs: Object.entries(firefoxUserPrefs).map(([name, value]) => ({ name, value }))
70
+ }),
71
+ browser._initVersion()
72
+ ];
73
+ if (options.persistent) {
74
+ browser._defaultContext = new FFBrowserContext(browser, void 0, options.persistent);
75
+ promises.push(browser._defaultContext._initialize());
76
+ }
77
+ const proxy = options.originalLaunchOptions.proxyOverride || options.proxy;
78
+ if (proxy)
79
+ promises.push(browser.session.send("Browser.setBrowserProxy", toJugglerProxyOptions(proxy)));
80
+ await Promise.all(promises);
81
+ return browser;
82
+ }
83
+ async _initVersion() {
84
+ const result = await this.session.send("Browser.getInfo");
85
+ this._version = result.version.substring(result.version.indexOf("/") + 1);
86
+ this._userAgent = result.userAgent;
87
+ }
88
+ isConnected() {
89
+ return !this._connection._closed;
90
+ }
91
+ async doCreateNewContext(options) {
92
+ if (options.isMobile)
93
+ throw new Error("options.isMobile is not supported in Firefox");
94
+ const { browserContextId } = await this.session.send("Browser.createBrowserContext", { removeOnDetach: true });
95
+ const context = new FFBrowserContext(this, browserContextId, options);
96
+ await context._initialize();
97
+ this._contexts.set(browserContextId, context);
98
+ return context;
99
+ }
100
+ contexts() {
101
+ return Array.from(this._contexts.values());
102
+ }
103
+ version() {
104
+ return this._version;
105
+ }
106
+ userAgent() {
107
+ return this._userAgent;
108
+ }
109
+ _onDetachedFromTarget(payload) {
110
+ const ffPage = this._ffPages.get(payload.targetId);
111
+ this._ffPages.delete(payload.targetId);
112
+ ffPage.didClose();
113
+ }
114
+ _onAttachedToTarget(payload) {
115
+ const { targetId, browserContextId, openerId, type } = payload.targetInfo;
116
+ (0, import_utils.assert)(type === "page");
117
+ const context = browserContextId ? this._contexts.get(browserContextId) : this._defaultContext;
118
+ (0, import_utils.assert)(context, `Unknown context id:${browserContextId}, _defaultContext: ${this._defaultContext}`);
119
+ const session = this._connection.createSession(payload.sessionId);
120
+ const opener = openerId ? this._ffPages.get(openerId) : null;
121
+ const ffPage = new import_ffPage.FFPage(session, context, opener);
122
+ this._ffPages.set(targetId, ffPage);
123
+ }
124
+ _onDownloadCreated(payload) {
125
+ const ffPage = this._ffPages.get(payload.pageTargetId);
126
+ if (!ffPage)
127
+ return;
128
+ ffPage._page.frameManager.frameAbortedNavigation(payload.frameId, "Download is starting");
129
+ let originPage = ffPage._page.initializedOrUndefined();
130
+ if (!originPage) {
131
+ ffPage._markAsError(new Error("Starting new page download"));
132
+ if (ffPage._opener)
133
+ originPage = ffPage._opener._page.initializedOrUndefined();
134
+ }
135
+ if (!originPage)
136
+ return;
137
+ this._downloadCreated(originPage, payload.uuid, payload.url, payload.suggestedFileName);
138
+ }
139
+ _onDownloadFinished(payload) {
140
+ const error = payload.canceled ? "canceled" : payload.error;
141
+ this._downloadFinished(payload.uuid, error);
142
+ }
143
+ _onDisconnect() {
144
+ for (const video of this._idToVideo.values())
145
+ video.artifact.reportFinished(new import_errors.TargetClosedError(this.closeReason()));
146
+ this._idToVideo.clear();
147
+ for (const ffPage of this._ffPages.values())
148
+ ffPage.didClose();
149
+ this._ffPages.clear();
150
+ this._didClose();
151
+ }
152
+ }
153
+ class FFBrowserContext extends import_browserContext.BrowserContext {
154
+ constructor(browser, browserContextId, options) {
155
+ super(browser, options, browserContextId);
156
+ }
157
+ async _initialize() {
158
+ (0, import_utils.assert)(!this._ffPages().length);
159
+ const browserContextId = this._browserContextId;
160
+ const promises = [
161
+ super._initialize(),
162
+ this._updateInitScripts()
163
+ ];
164
+ if (this._options.acceptDownloads !== "internal-browser-default") {
165
+ promises.push(this._browser.session.send("Browser.setDownloadOptions", {
166
+ browserContextId,
167
+ downloadOptions: {
168
+ behavior: this._options.acceptDownloads === "accept" ? "saveToDisk" : "cancel",
169
+ downloadsDir: this._browser.options.downloadsPath
170
+ }
171
+ }));
172
+ }
173
+ promises.push(this.doUpdateDefaultViewport());
174
+ if (this._options.hasTouch)
175
+ promises.push(this._browser.session.send("Browser.setTouchOverride", { browserContextId, hasTouch: true }));
176
+ if (this._options.userAgent)
177
+ promises.push(this._browser.session.send("Browser.setUserAgentOverride", { browserContextId, userAgent: this._options.userAgent }));
178
+ if (this._options.bypassCSP)
179
+ promises.push(this._browser.session.send("Browser.setBypassCSP", { browserContextId, bypassCSP: true }));
180
+ if (this._options.ignoreHTTPSErrors || this._options.internalIgnoreHTTPSErrors)
181
+ promises.push(this._browser.session.send("Browser.setIgnoreHTTPSErrors", { browserContextId, ignoreHTTPSErrors: true }));
182
+ if (this._options.javaScriptEnabled === false)
183
+ promises.push(this._browser.session.send("Browser.setJavaScriptDisabled", { browserContextId, javaScriptDisabled: true }));
184
+ if (this._options.locale)
185
+ promises.push(this._browser.session.send("Browser.setLocaleOverride", { browserContextId, locale: this._options.locale }));
186
+ if (this._options.timezoneId)
187
+ promises.push(this._browser.session.send("Browser.setTimezoneOverride", { browserContextId, timezoneId: this._options.timezoneId }));
188
+ if (this._options.extraHTTPHeaders || this._options.locale)
189
+ promises.push(this.doUpdateExtraHTTPHeaders());
190
+ if (this._options.httpCredentials)
191
+ promises.push(this.setHTTPCredentials(this._options.httpCredentials));
192
+ if (this._options.geolocation)
193
+ promises.push(this.setGeolocation(this._options.geolocation));
194
+ if (this._options.offline)
195
+ promises.push(this.doUpdateOffline());
196
+ promises.push(this.doUpdateDefaultEmulatedMedia());
197
+ if (this._options.recordVideo) {
198
+ promises.push(this._browser.session.send("Browser.setScreencastOptions", {
199
+ // validateBrowserContextOptions ensures correct video size.
200
+ options: {
201
+ ...this._options.recordVideo.size,
202
+ quality: 90
203
+ },
204
+ browserContextId: this._browserContextId
205
+ }));
206
+ }
207
+ const proxy = this._options.proxyOverride || this._options.proxy;
208
+ if (proxy) {
209
+ promises.push(this._browser.session.send("Browser.setContextProxy", {
210
+ browserContextId: this._browserContextId,
211
+ ...toJugglerProxyOptions(proxy)
212
+ }));
213
+ }
214
+ await Promise.all(promises);
215
+ }
216
+ _ffPages() {
217
+ return Array.from(this._browser._ffPages.values()).filter((ffPage) => ffPage._browserContext === this);
218
+ }
219
+ possiblyUninitializedPages() {
220
+ return this._ffPages().map((ffPage) => ffPage._page);
221
+ }
222
+ async doCreateNewPage() {
223
+ const { targetId } = await this._browser.session.send("Browser.newPage", {
224
+ browserContextId: this._browserContextId
225
+ }).catch((e) => {
226
+ if (e.message.includes("Failed to override timezone"))
227
+ throw new Error(`Invalid timezone ID: ${this._options.timezoneId}`);
228
+ throw e;
229
+ });
230
+ return this._browser._ffPages.get(targetId)._page;
231
+ }
232
+ async doGetCookies(urls) {
233
+ const { cookies } = await this._browser.session.send("Browser.getCookies", { browserContextId: this._browserContextId });
234
+ return network.filterCookies(cookies.map((c) => {
235
+ const { name, value, domain, path, expires, httpOnly, secure, sameSite } = c;
236
+ return {
237
+ name,
238
+ value,
239
+ domain,
240
+ path,
241
+ expires,
242
+ httpOnly,
243
+ secure,
244
+ sameSite
245
+ };
246
+ }), urls);
247
+ }
248
+ async addCookies(cookies) {
249
+ const cc = network.rewriteCookies(cookies).map((c) => {
250
+ const { name, value, url, domain, path, expires, httpOnly, secure, sameSite } = c;
251
+ return {
252
+ name,
253
+ value,
254
+ url,
255
+ domain,
256
+ path,
257
+ expires: expires === -1 ? void 0 : expires,
258
+ httpOnly,
259
+ secure,
260
+ sameSite
261
+ };
262
+ });
263
+ await this._browser.session.send("Browser.setCookies", { browserContextId: this._browserContextId, cookies: cc });
264
+ }
265
+ async doClearCookies() {
266
+ await this._browser.session.send("Browser.clearCookies", { browserContextId: this._browserContextId });
267
+ }
268
+ async doGrantPermissions(origin, permissions) {
269
+ const webPermissionToProtocol = /* @__PURE__ */ new Map([
270
+ ["geolocation", "geo"],
271
+ ["persistent-storage", "persistent-storage"],
272
+ ["push", "push"],
273
+ ["notifications", "desktop-notification"]
274
+ ]);
275
+ const filtered = permissions.map((permission) => {
276
+ const protocolPermission = webPermissionToProtocol.get(permission);
277
+ if (!protocolPermission)
278
+ throw new Error("Unknown permission: " + permission);
279
+ return protocolPermission;
280
+ });
281
+ await this._browser.session.send("Browser.grantPermissions", { origin, browserContextId: this._browserContextId, permissions: filtered });
282
+ }
283
+ async doClearPermissions() {
284
+ await this._browser.session.send("Browser.resetPermissions", { browserContextId: this._browserContextId });
285
+ }
286
+ async setGeolocation(geolocation) {
287
+ (0, import_browserContext.verifyGeolocation)(geolocation);
288
+ this._options.geolocation = geolocation;
289
+ await this._browser.session.send("Browser.setGeolocationOverride", { browserContextId: this._browserContextId, geolocation: geolocation || null });
290
+ }
291
+ async doUpdateExtraHTTPHeaders() {
292
+ let allHeaders = this._options.extraHTTPHeaders || [];
293
+ if (this._options.locale)
294
+ allHeaders = network.mergeHeaders([allHeaders, network.singleHeader("Accept-Language", this._options.locale)]);
295
+ await this._browser.session.send("Browser.setExtraHTTPHeaders", { browserContextId: this._browserContextId, headers: allHeaders });
296
+ }
297
+ async setUserAgent(userAgent) {
298
+ await this._browser.session.send("Browser.setUserAgentOverride", { browserContextId: this._browserContextId, userAgent: userAgent || null });
299
+ }
300
+ async doUpdateOffline() {
301
+ await this._browser.session.send("Browser.setOnlineOverride", { browserContextId: this._browserContextId, override: this._options.offline ? "offline" : "online" });
302
+ }
303
+ async doSetHTTPCredentials(httpCredentials) {
304
+ this._options.httpCredentials = httpCredentials;
305
+ let credentials = null;
306
+ if (httpCredentials) {
307
+ const { username, password, origin } = httpCredentials;
308
+ credentials = { username, password, origin };
309
+ }
310
+ await this._browser.session.send("Browser.setHTTPCredentials", { browserContextId: this._browserContextId, credentials });
311
+ }
312
+ async doAddInitScript(initScript) {
313
+ await this._updateInitScripts();
314
+ }
315
+ async doRemoveInitScripts(initScripts) {
316
+ await this._updateInitScripts();
317
+ }
318
+ async _updateInitScripts() {
319
+ const bindingScripts = [...this._pageBindings.values()].map((binding) => binding.initScript.source);
320
+ if (this.bindingsInitScript)
321
+ bindingScripts.unshift(this.bindingsInitScript.source);
322
+ const initScripts = this.initScripts.map((script) => script.source);
323
+ await this._browser.session.send("Browser.setInitScripts", { browserContextId: this._browserContextId, scripts: [...bindingScripts, ...initScripts].map((script) => ({ script })) });
324
+ }
325
+ async doUpdateRequestInterception() {
326
+ await Promise.all([
327
+ this._browser.session.send("Browser.setRequestInterception", { browserContextId: this._browserContextId, enabled: this.requestInterceptors.length > 0 }),
328
+ this._browser.session.send("Browser.setCacheDisabled", { browserContextId: this._browserContextId, cacheDisabled: this.requestInterceptors.length > 0 })
329
+ ]);
330
+ }
331
+ async doUpdateDefaultViewport() {
332
+ if (!this._options.viewport)
333
+ return;
334
+ const viewport = {
335
+ viewportSize: { width: this._options.viewport.width, height: this._options.viewport.height },
336
+ deviceScaleFactor: this._options.deviceScaleFactor || 1
337
+ };
338
+ await this._browser.session.send("Browser.setDefaultViewport", { browserContextId: this._browserContextId, viewport });
339
+ }
340
+ async doUpdateDefaultEmulatedMedia() {
341
+ if (this._options.colorScheme !== "no-override") {
342
+ await this._browser.session.send("Browser.setColorScheme", {
343
+ browserContextId: this._browserContextId,
344
+ colorScheme: this._options.colorScheme !== void 0 ? this._options.colorScheme : "light"
345
+ });
346
+ }
347
+ if (this._options.reducedMotion !== "no-override") {
348
+ await this._browser.session.send("Browser.setReducedMotion", {
349
+ browserContextId: this._browserContextId,
350
+ reducedMotion: this._options.reducedMotion !== void 0 ? this._options.reducedMotion : "no-preference"
351
+ });
352
+ }
353
+ if (this._options.forcedColors !== "no-override") {
354
+ await this._browser.session.send("Browser.setForcedColors", {
355
+ browserContextId: this._browserContextId,
356
+ forcedColors: this._options.forcedColors !== void 0 ? this._options.forcedColors : "none"
357
+ });
358
+ }
359
+ if (this._options.contrast !== "no-override") {
360
+ await this._browser.session.send("Browser.setContrast", {
361
+ browserContextId: this._browserContextId,
362
+ contrast: this._options.contrast !== void 0 ? this._options.contrast : "no-preference"
363
+ });
364
+ }
365
+ }
366
+ async doExposePlaywrightBinding() {
367
+ this._browser.session.send("Browser.addBinding", { browserContextId: this._browserContextId, name: import_page.PageBinding.kBindingName, script: "" });
368
+ }
369
+ onClosePersistent() {
370
+ }
371
+ async clearCache() {
372
+ await this._browser.session.send("Browser.clearCache");
373
+ }
374
+ async doClose(reason) {
375
+ if (!this._browserContextId) {
376
+ if (this._options.recordVideo)
377
+ await Promise.all(this._ffPages().map((ffPage) => ffPage._page.screencast.stopVideoRecording()));
378
+ await this._browser.close({ reason });
379
+ } else {
380
+ await this._browser.session.send("Browser.removeBrowserContext", { browserContextId: this._browserContextId });
381
+ this._browser._contexts.delete(this._browserContextId);
382
+ }
383
+ }
384
+ async cancelDownload(uuid) {
385
+ await this._browser.session.send("Browser.cancelDownload", { uuid });
386
+ }
387
+ }
388
+ function toJugglerProxyOptions(proxy) {
389
+ const proxyServer = new URL(proxy.server);
390
+ let port = parseInt(proxyServer.port, 10);
391
+ let type = "http";
392
+ if (proxyServer.protocol === "socks5:")
393
+ type = "socks";
394
+ else if (proxyServer.protocol === "socks4:")
395
+ type = "socks4";
396
+ else if (proxyServer.protocol === "https:")
397
+ type = "https";
398
+ if (proxyServer.port === "") {
399
+ if (proxyServer.protocol === "http:")
400
+ port = 80;
401
+ else if (proxyServer.protocol === "https:")
402
+ port = 443;
403
+ }
404
+ return {
405
+ type,
406
+ bypass: proxy.bypass ? proxy.bypass.split(",").map((domain) => domain.trim()) : [],
407
+ host: proxyServer.hostname,
408
+ port,
409
+ username: proxy.username,
410
+ password: proxy.password
411
+ };
412
+ }
413
+ const kBandaidFirefoxUserPrefs = {};
414
+ // Annotate the CommonJS export names for ESM import in node:
415
+ 0 && (module.exports = {
416
+ FFBrowser,
417
+ FFBrowserContext
418
+ });
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ffConnection_exports = {};
20
+ __export(ffConnection_exports, {
21
+ ConnectionEvents: () => ConnectionEvents,
22
+ FFConnection: () => FFConnection,
23
+ FFSession: () => FFSession,
24
+ kBrowserCloseMessageId: () => kBrowserCloseMessageId
25
+ });
26
+ module.exports = __toCommonJS(ffConnection_exports);
27
+ var import_events = require("events");
28
+ var import_debugLogger = require("../utils/debugLogger");
29
+ var import_helper = require("../helper");
30
+ var import_protocolError = require("../protocolError");
31
+ const ConnectionEvents = {
32
+ Disconnected: Symbol("Disconnected")
33
+ };
34
+ const kBrowserCloseMessageId = -9999;
35
+ class FFConnection extends import_events.EventEmitter {
36
+ constructor(transport, protocolLogger, browserLogsCollector) {
37
+ super();
38
+ this.setMaxListeners(0);
39
+ this._transport = transport;
40
+ this._protocolLogger = protocolLogger;
41
+ this._browserLogsCollector = browserLogsCollector;
42
+ this._lastId = 0;
43
+ this._sessions = /* @__PURE__ */ new Map();
44
+ this._closed = false;
45
+ this.rootSession = new FFSession(this, "", (message) => this._rawSend(message));
46
+ this._sessions.set("", this.rootSession);
47
+ this._transport.onmessage = this._onMessage.bind(this);
48
+ this._transport.onclose = this._onClose.bind(this);
49
+ }
50
+ nextMessageId() {
51
+ return ++this._lastId;
52
+ }
53
+ _rawSend(message) {
54
+ this._protocolLogger("send", message);
55
+ this._transport.send(message);
56
+ }
57
+ async _onMessage(message) {
58
+ this._protocolLogger("receive", message);
59
+ if (message.id === kBrowserCloseMessageId)
60
+ return;
61
+ const session = this._sessions.get(message.sessionId || "");
62
+ if (session)
63
+ session.dispatchMessage(message);
64
+ }
65
+ _onClose(reason) {
66
+ this._closed = true;
67
+ this._transport.onmessage = void 0;
68
+ this._transport.onclose = void 0;
69
+ this._browserDisconnectedLogs = import_helper.helper.formatBrowserLogs(this._browserLogsCollector.recentLogs(), reason);
70
+ this.rootSession.dispose();
71
+ Promise.resolve().then(() => this.emit(ConnectionEvents.Disconnected));
72
+ }
73
+ close() {
74
+ if (!this._closed)
75
+ this._transport.close();
76
+ }
77
+ createSession(sessionId) {
78
+ const session = new FFSession(this, sessionId, (message) => this._rawSend({ ...message, sessionId }));
79
+ this._sessions.set(sessionId, session);
80
+ return session;
81
+ }
82
+ }
83
+ class FFSession extends import_events.EventEmitter {
84
+ constructor(connection, sessionId, rawSend) {
85
+ super();
86
+ this._disposed = false;
87
+ this._crashed = false;
88
+ this.setMaxListeners(0);
89
+ this._callbacks = /* @__PURE__ */ new Map();
90
+ this._connection = connection;
91
+ this._sessionId = sessionId;
92
+ this._rawSend = rawSend;
93
+ }
94
+ markAsCrashed() {
95
+ this._crashed = true;
96
+ }
97
+ async send(method, params) {
98
+ if (this._crashed || this._disposed || this._connection._closed || this._connection._browserDisconnectedLogs)
99
+ throw new import_protocolError.ProtocolError(this._crashed ? "crashed" : "closed", void 0, this._connection._browserDisconnectedLogs);
100
+ const id = this._connection.nextMessageId();
101
+ this._rawSend({ method, params, id });
102
+ return new Promise((resolve, reject) => {
103
+ this._callbacks.set(id, { resolve, reject, error: new import_protocolError.ProtocolError("error", method) });
104
+ });
105
+ }
106
+ sendMayFail(method, params) {
107
+ return this.send(method, params).catch((error) => import_debugLogger.debugLogger.log("error", error));
108
+ }
109
+ dispatchMessage(object) {
110
+ if (object.id) {
111
+ const callback = this._callbacks.get(object.id);
112
+ if (callback) {
113
+ this._callbacks.delete(object.id);
114
+ if (object.error) {
115
+ callback.error.setMessage(object.error.message);
116
+ callback.reject(callback.error);
117
+ } else {
118
+ callback.resolve(object.result);
119
+ }
120
+ }
121
+ } else {
122
+ Promise.resolve().then(() => this.emit(object.method, object.params));
123
+ }
124
+ }
125
+ dispose() {
126
+ this._disposed = true;
127
+ this._connection._sessions.delete(this._sessionId);
128
+ for (const callback of this._callbacks.values()) {
129
+ callback.error.type = this._crashed ? "crashed" : "closed";
130
+ callback.error.logs = this._connection._browserDisconnectedLogs;
131
+ callback.reject(callback.error);
132
+ }
133
+ this._callbacks.clear();
134
+ }
135
+ }
136
+ // Annotate the CommonJS export names for ESM import in node:
137
+ 0 && (module.exports = {
138
+ ConnectionEvents,
139
+ FFConnection,
140
+ FFSession,
141
+ kBrowserCloseMessageId
142
+ });