@holydeck/cli 2026.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +234 -0
- package/dist/BrowserWebSocketTransport-H3D6MINS.js +12 -0
- package/dist/BrowserWebSocketTransport-H3D6MINS.js.map +1 -0
- package/dist/LaunchOptions-42ZS55HH.js +12 -0
- package/dist/LaunchOptions-42ZS55HH.js.map +1 -0
- package/dist/NodeWebSocketTransport-BXHQGXRM.js +15 -0
- package/dist/NodeWebSocketTransport-BXHQGXRM.js.map +1 -0
- package/dist/bidi-25S23FWJ.js +18358 -0
- package/dist/bidi-25S23FWJ.js.map +1 -0
- package/dist/chunk-2BLOYUSF.js +795 -0
- package/dist/chunk-2BLOYUSF.js.map +1 -0
- package/dist/chunk-43CZTS57.js +38 -0
- package/dist/chunk-43CZTS57.js.map +1 -0
- package/dist/chunk-DIBLSFAG.js +34 -0
- package/dist/chunk-DIBLSFAG.js.map +1 -0
- package/dist/chunk-IEJ3OX3N.js +52 -0
- package/dist/chunk-IEJ3OX3N.js.map +1 -0
- package/dist/chunk-JM4YIWBN.js +3796 -0
- package/dist/chunk-JM4YIWBN.js.map +1 -0
- package/dist/chunk-NP3DTWF7.js +23282 -0
- package/dist/chunk-NP3DTWF7.js.map +1 -0
- package/dist/chunk-SWG4X375.js +51 -0
- package/dist/chunk-SWG4X375.js.map +1 -0
- package/dist/chunk-UC6TFXMD.js +2821 -0
- package/dist/chunk-UC6TFXMD.js.map +1 -0
- package/dist/chunk-V4BIHFVZ.js +2287 -0
- package/dist/chunk-V4BIHFVZ.js.map +1 -0
- package/dist/chunk-V77AQPDK.js +20 -0
- package/dist/chunk-V77AQPDK.js.map +1 -0
- package/dist/chunk-XAENXL52.js +101 -0
- package/dist/chunk-XAENXL52.js.map +1 -0
- package/dist/cli.js +64101 -0
- package/dist/cli.js.map +1 -0
- package/dist/dist-3ZE2HBJQ.js +20447 -0
- package/dist/dist-3ZE2HBJQ.js.map +1 -0
- package/dist/dist-575AQY5L.js +1161 -0
- package/dist/dist-575AQY5L.js.map +1 -0
- package/dist/dist-DL5M2SDJ.js +117 -0
- package/dist/dist-DL5M2SDJ.js.map +1 -0
- package/dist/dist-OMWR53J4.js +4713 -0
- package/dist/dist-OMWR53J4.js.map +1 -0
- package/dist/dist-UT6HKKCD.js +281 -0
- package/dist/dist-UT6HKKCD.js.map +1 -0
- package/dist/fs-P6GYHPGZ.js +1685 -0
- package/dist/fs-P6GYHPGZ.js.map +1 -0
- package/dist/helpers-64DWIL6C.js +21 -0
- package/dist/helpers-64DWIL6C.js.map +1 -0
- package/dist/main-IQ64YDOJ.js +61 -0
- package/dist/main-IQ64YDOJ.js.map +1 -0
- package/dist/puppeteer-RDWY6FSG.js +2386 -0
- package/dist/puppeteer-RDWY6FSG.js.map +1 -0
- package/dist/yargs-KMQWKLG6.js +3264 -0
- package/dist/yargs-KMQWKLG6.js.map +1 -0
- package/dist/yauzl-7KG7KPPF.js +1355 -0
- package/dist/yauzl-7KG7KPPF.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/disposable.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/lib/third_party/mitt/mitt.js","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/EventEmitter.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/assert.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/Errors.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/PDFOptions.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/lib/third_party/rxjs/rxjs.js","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/encoding.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/util.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/Browser.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/Deferred.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/Mutex.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/BrowserContext.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/CDPSession.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/DeviceRequestPrompt.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/Dialog.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/AsyncIterableUtil.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/ErrorLike.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/HandleIterator.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/LazyArg.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/ElementHandleSymbol.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/Function.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/QueryHandler.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/AriaQueryHandler.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/generated/injected.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/ScriptInjector.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/CustomQueryHandler.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/PierceQueryHandler.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/PQueryHandler.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/lib/third_party/parsel-js/parsel-js.js","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/PSelectorParser.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/TextQueryHandler.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/XPathQueryHandler.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/CSSQueryHandler.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/GetQueryHandler.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/decorators.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/JSHandle.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/locators/locators.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/ElementHandle.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/Extension.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/Frame.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/HTTPRequest.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/HTTPResponse.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/incremental-id-generator.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/Input.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/TimeoutSettings.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/Page.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/WaitTask.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/Realm.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/ScreenRecording.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/Target.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/api/WebWorker.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Accessibility.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Binding.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/BluetoothEmulation.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/ConsoleMessage.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/FileChooser.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/NetworkManagerEvents.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/CallbackRegistry.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/CdpSession.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Connection.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Coverage.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Dialog.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/EmulationManager.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/CdpPreloadScript.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/DeviceRequestPrompt.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/utils.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/JSHandle.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/ElementHandle.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/ExecutionContext.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/FrameManagerEvents.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/IsolatedWorlds.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/IsolatedWorld.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/WebWorker.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/LifecycleWatcher.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Frame.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/FrameTree.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/HTTPRequest.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/SecurityDetails.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/util/httpUtils.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/HTTPResponse.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/NetworkEventManager.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/NetworkManager.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/CdpIssue.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/FrameManager.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/USKeyboardLayout.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Input.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/ScreenRecording.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Tracing.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/WebMCP.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Page.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/BrowserContext.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Target.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/lib/third_party/urlpattern-polyfill/urlpattern-polyfill.js","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/TargetManager.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Extension.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/Browser.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/BrowserConnector.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/ExtensionTransport.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/cdp/PredefinedNetworkConditions.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/Device.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/bidi/BrowserConnector.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/BrowserConnector.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/Puppeteer.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/common/TaskQueue.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/revisions.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\ndeclare global {\n interface SymbolConstructor {\n /**\n * A method that is used to release resources held by an object. Called by\n * the semantics of the `using` statement.\n */\n readonly dispose: unique symbol;\n\n /**\n * A method that is used to asynchronously release resources held by an\n * object. Called by the semantics of the `await using` statement.\n */\n readonly asyncDispose: unique symbol;\n }\n\n interface Disposable {\n [Symbol.dispose](): void;\n }\n\n interface AsyncDisposable {\n [Symbol.asyncDispose](): PromiseLike<void>;\n }\n}\n\n(Symbol as any).dispose ??= Symbol('dispose');\n(Symbol as any).asyncDispose ??= Symbol('asyncDispose');\n\n/**\n * @public\n */\nexport const disposeSymbol: typeof Symbol.dispose = Symbol.dispose;\n\n/**\n * @public\n */\nexport const asyncDisposeSymbol: typeof Symbol.asyncDispose =\n Symbol.asyncDispose;\n\n/**\n * @internal\n */\nexport class DisposableStackPolyfill {\n #disposed = false;\n #stack: Disposable[] = [];\n\n /**\n * Returns a value indicating whether the stack has been disposed.\n */\n get disposed(): boolean {\n return this.#disposed;\n }\n\n /**\n * Alias for `[Symbol.dispose]()`.\n */\n dispose(): void {\n this[disposeSymbol]();\n }\n\n /**\n * Adds a disposable resource to the top of stack, returning the resource.\n * Has no effect if provided `null` or `undefined`.\n *\n * @param value - A `Disposable` object, `null`, or `undefined`.\n * `null` and `undefined` will not be added, but will be returned.\n * @returns The provided `value`.\n */\n use<T extends Disposable | null | undefined>(value: T): T {\n if (value && typeof value[disposeSymbol] === 'function') {\n this.#stack.push(value);\n }\n return value;\n }\n\n /**\n * Adds a non-disposable resource and a disposal callback to the top of the stack.\n *\n * @param value - A resource to be disposed.\n * @param onDispose - A callback invoked to dispose the provided value.\n * Will be invoked with `value` as the first parameter.\n * @returns The provided `value`.\n */\n adopt<T>(value: T, onDispose: (value: T) => void): T {\n this.#stack.push({\n [disposeSymbol]() {\n onDispose(value);\n },\n });\n return value;\n }\n\n /**\n * Add a disposal callback to the top of the stack to be invoked when stack is disposed.\n * @param onDispose - A callback to invoke when this object is disposed.\n */\n defer(onDispose: () => void): void {\n this.#stack.push({\n [disposeSymbol]() {\n onDispose();\n },\n });\n }\n\n /**\n * Move all resources out of this stack and into a new `DisposableStack`, and\n * marks this stack as disposed.\n * @returns The new `DisposableStack`.\n *\n * @example\n *\n * ```ts\n * class C {\n * #res1: Disposable;\n * #res2: Disposable;\n * #disposables: DisposableStack;\n * constructor() {\n * // stack will be disposed when exiting constructor for any reason\n * using stack = new DisposableStack();\n *\n * // get first resource\n * this.#res1 = stack.use(getResource1());\n *\n * // get second resource. If this fails, both `stack` and `#res1` will be disposed.\n * this.#res2 = stack.use(getResource2());\n *\n * // all operations succeeded, move resources out of `stack` so that\n * // they aren't disposed when constructor exits\n * this.#disposables = stack.move();\n * }\n *\n * [disposeSymbol]() {\n * this.#disposables.dispose();\n * }\n * }\n * ```\n */\n move(): DisposableStackPolyfill {\n if (this.#disposed) {\n throw new ReferenceError('A disposed stack can not use anything new');\n }\n const stack = new DisposableStackPolyfill();\n stack.#stack = this.#stack;\n this.#stack = [];\n this.#disposed = true;\n return stack;\n }\n\n /**\n * Disposes each resource in the stack in last-in-first-out (LIFO) manner.\n */\n [disposeSymbol](): void {\n if (this.#disposed) {\n return;\n }\n this.#disposed = true;\n const errors: unknown[] = [];\n for (const resource of this.#stack.reverse()) {\n try {\n resource[disposeSymbol]();\n } catch (e) {\n errors.push(e);\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n } else if (errors.length > 1) {\n let suppressed = null;\n for (const error of errors) {\n if (suppressed === null) {\n suppressed = error;\n } else {\n suppressed = new SuppressedErrorPolyfill(error, suppressed);\n }\n }\n throw suppressed;\n }\n }\n\n readonly [Symbol.toStringTag] = 'DisposableStack';\n}\n\n/**\n * @internal\n */\nexport const DisposableStack: typeof DisposableStackPolyfill =\n (globalThis.DisposableStack as any) ?? DisposableStackPolyfill;\n\n/**\n * @internal\n */\nexport class AsyncDisposableStackPolyfill {\n #disposed = false;\n #stack: AsyncDisposable[] = [];\n\n /**\n * Returns a value indicating whether the stack has been disposed.\n */\n get disposed(): boolean {\n return this.#disposed;\n }\n\n /**\n * Alias for `[Symbol.asyncDispose]()`.\n */\n async disposeAsync(): Promise<void> {\n await this[asyncDisposeSymbol]();\n }\n\n /**\n * Adds a AsyncDisposable resource to the top of stack, returning the resource.\n * Has no effect if provided `null` or `undefined`.\n *\n * @param value - A `AsyncDisposable` object, `null`, or `undefined`.\n * `null` and `undefined` will not be added, but will be returned.\n * @returns The provided `value`.\n */\n use<T extends AsyncDisposable | Disposable | null | undefined>(value: T): T {\n if (value) {\n const asyncDispose = (value as AsyncDisposable)[asyncDisposeSymbol];\n const dispose = (value as Disposable)[disposeSymbol];\n\n if (typeof asyncDispose === 'function') {\n this.#stack.push(value as AsyncDisposable);\n } else if (typeof dispose === 'function') {\n this.#stack.push({\n [asyncDisposeSymbol]: async () => {\n (value as Disposable)[disposeSymbol]();\n },\n });\n }\n }\n\n return value;\n }\n\n /**\n * Adds a non-disposable resource and a disposal callback to the top of the stack.\n *\n * @param value - A resource to be disposed.\n * @param onDispose - A callback invoked to dispose the provided value.\n * Will be invoked with `value` as the first parameter.\n * @returns The provided `value`.\n */\n adopt<T>(value: T, onDispose: (value: T) => Promise<void>): T {\n this.#stack.push({\n [asyncDisposeSymbol]() {\n return onDispose(value);\n },\n });\n return value;\n }\n\n /**\n * Add a disposal callback to the top of the stack to be invoked when stack is disposed.\n * @param onDispose - A callback to invoke when this object is disposed.\n */\n defer(onDispose: () => Promise<void>): void {\n this.#stack.push({\n [asyncDisposeSymbol]() {\n return onDispose();\n },\n });\n }\n\n /**\n * Move all resources out of this stack and into a new `DisposableStack`, and\n * marks this stack as disposed.\n * @returns The new `AsyncDisposableStack`.\n *\n * @example\n *\n * ```ts\n * class C {\n * #res1: Disposable;\n * #res2: Disposable;\n * #disposables: DisposableStack;\n * constructor() {\n * // stack will be disposed when exiting constructor for any reason\n * using stack = new DisposableStack();\n *\n * // get first resource\n * this.#res1 = stack.use(getResource1());\n *\n * // get second resource. If this fails, both `stack` and `#res1` will be disposed.\n * this.#res2 = stack.use(getResource2());\n *\n * // all operations succeeded, move resources out of `stack` so that\n * // they aren't disposed when constructor exits\n * this.#disposables = stack.move();\n * }\n *\n * [disposeSymbol]() {\n * this.#disposables.dispose();\n * }\n * }\n * ```\n */\n move(): AsyncDisposableStackPolyfill {\n if (this.#disposed) {\n throw new ReferenceError('A disposed stack can not use anything new');\n }\n const stack = new AsyncDisposableStackPolyfill();\n stack.#stack = this.#stack;\n this.#stack = [];\n this.#disposed = true;\n return stack;\n }\n\n /**\n * Disposes each resource in the stack in last-in-first-out (LIFO) manner.\n */\n async [asyncDisposeSymbol](): Promise<void> {\n if (this.#disposed) {\n return;\n }\n this.#disposed = true;\n const errors: unknown[] = [];\n for (const resource of this.#stack.reverse()) {\n try {\n await resource[asyncDisposeSymbol]();\n } catch (e) {\n errors.push(e);\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n } else if (errors.length > 1) {\n let suppressed = null;\n for (const error of errors) {\n if (suppressed === null) {\n suppressed = error;\n } else {\n suppressed = new SuppressedErrorPolyfill(error, suppressed);\n }\n }\n throw suppressed;\n }\n }\n\n readonly [Symbol.toStringTag] = 'AsyncDisposableStack';\n}\n\n/**\n * @internal\n */\nexport const AsyncDisposableStack: typeof AsyncDisposableStackPolyfill =\n (globalThis.AsyncDisposableStack as any) ?? AsyncDisposableStackPolyfill;\n\n/**\n * @internal\n * Represents an error that occurs when multiple errors are thrown during\n * the disposal of resources. This class encapsulates the primary error and\n * any suppressed errors that occurred subsequently.\n */\nclass SuppressedErrorPolyfill extends Error {\n #error: unknown;\n #suppressed: unknown;\n\n constructor(\n error: unknown,\n suppressed: unknown,\n message = 'An error was suppressed during disposal',\n ) {\n super(message);\n this.name = 'SuppressedError';\n this.#error = error;\n this.#suppressed = suppressed;\n }\n\n /**\n * The primary error that occurred during disposal.\n */\n get error(): unknown {\n return this.#error;\n }\n\n /**\n * The suppressed error i.e. the error that was suppressed\n * because it occurred later in the flow after the original error.\n */\n get suppressed(): unknown {\n return this.#suppressed;\n }\n}\n\n/**\n * @internal\n */\nexport const SuppressedError: typeof SuppressedErrorPolyfill =\n (globalThis.SuppressedError as any) ?? SuppressedErrorPolyfill;\n","/**\nMIT License\n\nCopyright (c) 2021 Jason Miller\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n// node_modules/mitt/dist/mitt.mjs\nfunction mitt_default(n) {\n return { all: n = n || /* @__PURE__ */ new Map(), on: function(t, e) {\n var i = n.get(t);\n i ? i.push(e) : n.set(t, [e]);\n }, off: function(t, e) {\n var i = n.get(t);\n i && (e ? i.splice(i.indexOf(e) >>> 0, 1) : n.set(t, []));\n }, emit: function(t, e) {\n var i = n.get(t);\n i && i.slice().map(function(n2) {\n n2(e);\n }), (i = n.get(\"*\")) && i.slice().map(function(n2) {\n n2(t, e);\n });\n } };\n}\nexport {\n mitt_default as default\n};\n","/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport mitt, {type Emitter} from '../../third_party/mitt/mitt.js';\nimport {asyncDisposeSymbol, disposeSymbol} from '../util/disposable.js';\n\nimport {DEBUG_PREFIXES, type Logger} from './Debug.js';\n\n/**\n * @public\n */\nexport type EventType = string | symbol;\n\n/**\n * @public\n */\nexport type Handler<T = unknown> = (event: T) => void;\n\n/**\n * @public\n */\nexport interface CommonEventEmitter<Events extends Record<EventType, unknown>> {\n on<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>): this;\n off<Key extends keyof Events>(\n type: Key,\n handler?: Handler<Events[Key]>,\n ): this;\n emit<Key extends keyof Events>(type: Key, event: Events[Key]): boolean;\n once<Key extends keyof Events>(\n type: Key,\n handler: Handler<Events[Key]>,\n ): this;\n listenerCount(event: keyof Events): number;\n\n removeAllListeners(event?: keyof Events): this;\n}\n\n/**\n * @public\n */\nexport type EventsWithWildcard<Events extends Record<EventType, unknown>> =\n Events & {\n '*': Events[keyof Events];\n };\n\n/**\n * The EventEmitter class that many Puppeteer classes extend.\n *\n * @remarks\n *\n * This allows you to listen to events that Puppeteer classes fire and act\n * accordingly. Therefore you'll mostly use {@link EventEmitter.on | on} and\n * {@link EventEmitter.off | off} to bind\n * and unbind to event listeners.\n *\n * @public\n */\nexport class EventEmitter<\n Events extends Record<EventType, unknown>,\n> implements CommonEventEmitter<EventsWithWildcard<Events>> {\n #emitter: Emitter<EventsWithWildcard<Events>> | EventEmitter<Events>;\n #handlers = new Map<keyof Events | '*', Array<Handler<any>>>();\n #logger?: Logger;\n\n /**\n * If you pass an emitter, the returned emitter will wrap the passed emitter.\n *\n * @internal\n */\n constructor(\n emitter: Emitter<EventsWithWildcard<Events>> | EventEmitter<Events> = mitt(\n new Map(),\n ),\n logger?: Logger,\n ) {\n this.#emitter = emitter;\n this.#logger = logger;\n }\n\n /**\n * Bind an event listener to fire when an event occurs.\n * @param type - the event type you'd like to listen to. Can be a string or symbol.\n * @param handler - the function to be called when the event occurs.\n * @returns `this` to enable you to chain method calls.\n */\n on<Key extends keyof EventsWithWildcard<Events>>(\n type: Key,\n handler: Handler<EventsWithWildcard<Events>[Key]>,\n ): this {\n const handlers = this.#handlers.get(type);\n if (handlers === undefined) {\n this.#handlers.set(type, [handler]);\n } else {\n handlers.push(handler);\n }\n\n this.#emitter.on(type, handler);\n return this;\n }\n\n /**\n * Remove an event listener from firing.\n * @param type - the event type you'd like to stop listening to.\n * @param handler - the function that should be removed.\n * @returns `this` to enable you to chain method calls.\n */\n off<Key extends keyof EventsWithWildcard<Events>>(\n type: Key,\n handler?: Handler<EventsWithWildcard<Events>[Key]>,\n ): this {\n const handlers = this.#handlers.get(type) ?? [];\n if (handler === undefined) {\n for (const handler of handlers) {\n this.#emitter.off(type, handler);\n }\n this.#handlers.delete(type);\n return this;\n }\n const index = handlers.lastIndexOf(handler);\n if (index > -1) {\n this.#emitter.off(type, ...handlers.splice(index, 1));\n }\n return this;\n }\n\n /**\n * Emit an event and call any associated listeners.\n *\n * @param type - the event you'd like to emit\n * @param eventData - any data you'd like to emit with the event\n * @returns `true` if there are any listeners, `false` if there are not.\n */\n emit<Key extends keyof EventsWithWildcard<Events>>(\n type: Key,\n event: EventsWithWildcard<Events>[Key],\n ): boolean {\n this.#emitter.emit(type, event);\n return this.listenerCount(type) > 0;\n }\n\n /**\n * Like `on` but the listener will only be fired once and then it will be removed.\n * @param type - the event you'd like to listen to\n * @param handler - the handler function to run when the event occurs\n * @returns `this` to enable you to chain method calls.\n */\n once<Key extends keyof EventsWithWildcard<Events>>(\n type: Key,\n handler: Handler<EventsWithWildcard<Events>[Key]>,\n ): this {\n const onceHandler: Handler<EventsWithWildcard<Events>[Key]> = eventData => {\n handler(eventData);\n this.off(type, onceHandler);\n };\n\n return this.on(type, onceHandler);\n }\n\n /**\n * Gets the number of listeners for a given event.\n *\n * @param type - the event to get the listener count for\n * @returns the number of listeners bound to the given event\n */\n listenerCount(type: keyof EventsWithWildcard<Events>): number {\n return this.#handlers.get(type)?.length || 0;\n }\n\n /**\n * Removes all listeners. If given an event argument, it will remove only\n * listeners for that event.\n *\n * @param type - the event to remove listeners for.\n * @returns `this` to enable you to chain method calls.\n */\n removeAllListeners(type?: keyof EventsWithWildcard<Events>): this {\n if (type !== undefined) {\n return this.off(type);\n }\n this[disposeSymbol]();\n return this;\n }\n\n [disposeSymbol](): void {\n return void this[asyncDisposeSymbol]().catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }\n\n async [asyncDisposeSymbol](): Promise<void> {\n for (const [type, handlers] of this.#handlers) {\n for (const handler of handlers) {\n this.#emitter.off(type, handler);\n }\n }\n this.#handlers.clear();\n }\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Asserts that the given value is truthy.\n * @param value - some conditional statement\n * @param message - the error message to throw if the value is not truthy.\n *\n * @internal\n */\nexport const assert: (value: unknown, message?: string) => asserts value = (\n value,\n message,\n) => {\n if (!value) {\n throw new Error(message);\n }\n};\n","/**\n * @license\n * Copyright 2018 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * The base class for all Puppeteer-specific errors\n *\n * @public\n */\nexport class PuppeteerError extends Error {\n /**\n * @internal\n */\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options);\n this.name = this.constructor.name;\n }\n\n /**\n * @internal\n */\n get [Symbol.toStringTag](): string {\n return this.constructor.name;\n }\n}\n\n/**\n * TimeoutError is emitted whenever certain operations are terminated due to\n * timeout.\n *\n * @remarks\n * Example operations are {@link Page.waitForSelector | page.waitForSelector} or\n * {@link PuppeteerNode.launch | puppeteer.launch}.\n *\n * @public\n */\nexport class TimeoutError extends PuppeteerError {}\n\n/**\n * TouchError is thrown when an attempt is made to move or end a touch that does\n * not exist.\n * @public\n */\nexport class TouchError extends PuppeteerError {}\n\n/**\n * ProtocolError is emitted whenever there is an error from the protocol.\n *\n * @public\n */\nexport class ProtocolError extends PuppeteerError {\n #code?: number;\n #originalMessage = '';\n\n set code(code: number | undefined) {\n this.#code = code;\n }\n /**\n * @readonly\n * @public\n */\n get code(): number | undefined {\n return this.#code;\n }\n\n set originalMessage(originalMessage: string) {\n this.#originalMessage = originalMessage;\n }\n /**\n * @readonly\n * @public\n */\n get originalMessage(): string {\n return this.#originalMessage;\n }\n}\n\n/**\n * Puppeteer will throw this error if a method is not\n * supported by the currently used protocol\n *\n * @public\n */\nexport class UnsupportedOperation extends PuppeteerError {}\n\n/**\n * @internal\n */\nexport class TargetCloseError extends ProtocolError {}\n\n/**\n * Thrown if underlying protocol connection has been closed.\n *\n * @public\n */\nexport class ConnectionClosedError extends ProtocolError {}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @public\n */\nexport interface PDFMargin {\n top?: string | number;\n bottom?: string | number;\n left?: string | number;\n right?: string | number;\n}\n\n/**\n * @public\n */\nexport type LowerCasePaperFormat =\n | 'letter'\n | 'legal'\n | 'tabloid'\n | 'ledger'\n | 'a0'\n | 'a1'\n | 'a2'\n | 'a3'\n | 'a4'\n | 'a5'\n | 'a6';\n\n/**\n * All the valid paper format types when printing a PDF.\n *\n * @remarks\n *\n * The sizes of each format are as follows:\n *\n * - `Letter`: 8.5in x 11in / 21.59cm x 27.94cm\n *\n * - `Legal`: 8.5in x 14in / 21.59cm x 35.56cm\n *\n * - `Tabloid`: 11in x 17in / 27.94cm x 43.18cm\n *\n * - `Ledger`: 17in x 11in / 43.18cm x 27.94cm\n *\n * - `A0`: 33.1102in x 46.811in / 84.1cm x 118.9cm\n *\n * - `A1`: 23.3858in x 33.1102in / 59.4cm x 84.1cm\n *\n * - `A2`: 16.5354in x 23.3858in / 42cm x 59.4cm\n *\n * - `A3`: 11.6929in x 16.5354in / 29.7cm x 42cm\n *\n * - `A4`: 8.2677in x 11.6929in / 21cm x 29.7cm\n *\n * - `A5`: 5.8268in x 8.2677in / 14.8cm x 21cm\n *\n * - `A6`: 4.1339in x 5.8268in / 10.5cm x 14.8cm\n *\n * @public\n */\nexport type PaperFormat =\n | Uppercase<LowerCasePaperFormat>\n | Capitalize<LowerCasePaperFormat>\n | LowerCasePaperFormat;\n\n/**\n * Valid options to configure PDF generation via {@link Page.pdf}.\n * @public\n */\nexport interface PDFOptions {\n /**\n * Scales the rendering of the web page. Amount must be between `0.1` and `2`.\n * @defaultValue `1`\n */\n scale?: number;\n /**\n * Whether to show the header and footer.\n * @defaultValue `false`\n */\n displayHeaderFooter?: boolean;\n /**\n * HTML template for the print header. Should be valid HTML with the following\n * classes used to inject values into them:\n *\n * - `date` formatted print date\n *\n * - `title` document title\n *\n * - `url` document location\n *\n * - `pageNumber` current page number\n *\n * - `totalPages` total pages in the document\n */\n headerTemplate?: string;\n /**\n * HTML template for the print footer. Has the same constraints and support\n * for special classes as {@link PDFOptions.headerTemplate}.\n */\n footerTemplate?: string;\n /**\n * Set to `true` to print background graphics.\n * @defaultValue `false`\n */\n printBackground?: boolean;\n /**\n * Whether to print in landscape orientation.\n * @defaultValue `false`\n */\n landscape?: boolean;\n /**\n * Paper ranges to print, e.g. `1-5, 8, 11-13`.\n * @defaultValue The empty string, which means all pages are printed.\n */\n pageRanges?: string;\n /**\n * @remarks\n * If set, this takes priority over the `width` and `height` options.\n * @defaultValue `letter`.\n */\n format?: PaperFormat;\n /**\n * Sets the width of paper. You can pass in a number or a string with a unit.\n */\n width?: string | number;\n /**\n * Sets the height of paper. You can pass in a number or a string with a unit.\n */\n height?: string | number;\n /**\n * Give any CSS `@page` size declared in the page priority over what is\n * declared in the `width` or `height` or `format` option.\n * @defaultValue `false`, which will scale the content to fit the paper size.\n */\n preferCSSPageSize?: boolean;\n /**\n * Set the PDF margins.\n * @defaultValue `undefined` no margins are set.\n */\n margin?: PDFMargin;\n /**\n * The path to save the file to.\n *\n * @remarks\n *\n * If the path is relative, it's resolved relative to the current working directory.\n *\n * @defaultValue `undefined`, which means the PDF will not be written to disk.\n */\n path?: string;\n /**\n * Hides default white background and allows generating pdfs with transparency.\n * @defaultValue `false`\n */\n omitBackground?: boolean;\n /**\n * Generate tagged (accessible) PDF.\n *\n * @defaultValue `true`\n * @experimental\n */\n tagged?: boolean;\n /**\n * Generate document outline.\n *\n * @defaultValue `false`\n * @experimental\n */\n outline?: boolean;\n /**\n * Timeout in milliseconds. Pass `0` to disable timeout.\n *\n * The default value can be changed by using {@link Page.setDefaultTimeout}\n *\n * @defaultValue `30_000`\n */\n timeout?: number;\n /**\n * If true, waits for `document.fonts.ready` to resolve. This might require\n * activating the page using {@link Page.bringToFront} if the page is in the\n * background.\n *\n * @defaultValue `true`\n */\n waitForFonts?: boolean;\n}\n\n/**\n * @internal\n */\nexport interface PaperFormatDimensions {\n width: number;\n height: number;\n}\n\n/**\n * @internal\n */\nexport interface ParsedPDFOptionsInterface {\n width: number;\n height: number;\n margin: {\n top: number;\n bottom: number;\n left: number;\n right: number;\n };\n}\n\n/**\n * @internal\n */\nexport type ParsedPDFOptions = Required<\n Omit<PDFOptions, 'path' | 'format' | 'timeout'> & ParsedPDFOptionsInterface\n>;\n\n/**\n * @internal\n *\n * @remarks All A series paper format sizes in inches are calculated from centimeters\n * rounded mathematically to four decimal places.\n */\nexport const paperFormats: Record<\n LowerCasePaperFormat,\n Record<'cm' | 'in', PaperFormatDimensions>\n> = {\n letter: {\n cm: {width: 21.59, height: 27.94},\n in: {width: 8.5, height: 11},\n },\n legal: {\n cm: {width: 21.59, height: 35.56},\n in: {width: 8.5, height: 14},\n },\n tabloid: {\n cm: {width: 27.94, height: 43.18},\n in: {width: 11, height: 17},\n },\n ledger: {\n cm: {width: 43.18, height: 27.94},\n in: {width: 17, height: 11},\n },\n a0: {\n cm: {width: 84.1, height: 118.9},\n in: {width: 33.1102, height: 46.811},\n },\n a1: {\n cm: {width: 59.4, height: 84.1},\n in: {width: 23.3858, height: 33.1102},\n },\n a2: {\n cm: {width: 42, height: 59.4},\n in: {width: 16.5354, height: 23.3858},\n },\n a3: {\n cm: {width: 29.7, height: 42},\n in: {width: 11.6929, height: 16.5354},\n },\n a4: {\n cm: {width: 21, height: 29.7},\n in: {width: 8.2677, height: 11.6929},\n },\n a5: {\n cm: {width: 14.8, height: 21},\n in: {width: 5.8268, height: 8.2677},\n },\n a6: {\n cm: {width: 10.5, height: 14.8},\n in: {width: 4.1339, height: 5.8268},\n },\n} as const;\n","/**\n Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n \n\n*/\n// node_modules/rxjs/node_modules/tslib/tslib.es6.mjs\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];\n };\n return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction __generator(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function() {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = { error };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\nfunction __spreadArray(to, from2, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from2.length, ar; i < l; i++) {\n if (ar || !(i in from2)) {\n if (!ar) ar = Array.prototype.slice.call(from2, 0, i);\n ar[i] = from2[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from2));\n}\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function() {\n return this;\n }, i;\n function awaitReturn(f) {\n return function(v) {\n return Promise.resolve(v).then(f, reject);\n };\n }\n function verb(n, f) {\n if (g[n]) {\n i[n] = function(v) {\n return new Promise(function(a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n if (f) i[n] = f(i[n]);\n }\n }\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n function fulfill(value) {\n resume(\"next\", value);\n }\n function reject(value) {\n resume(\"throw\", value);\n }\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function() {\n return this;\n }, i);\n function verb(n) {\n i[n] = o[n] && function(v) {\n return new Promise(function(resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function(v2) {\n resolve({ value: v2, done: d });\n }, reject);\n }\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/isFunction.js\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js\nfunction createErrorClass(createImpl) {\n var _super = function(instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js\nvar UnsubscriptionError = createErrorClass(function(_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function(err, i) {\n return i + 1 + \") \" + err.toString();\n }).join(\"\\n \") : \"\";\n this.name = \"UnsubscriptionError\";\n this.errors = errors;\n };\n});\n\n// node_modules/rxjs/dist/esm5/internal/util/arrRemove.js\nfunction arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n\n// node_modules/rxjs/dist/esm5/internal/Subscription.js\nvar Subscription = (function() {\n function Subscription2(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription2.prototype.unsubscribe = function() {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n } catch (e_1_1) {\n e_1 = { error: e_1_1 };\n } finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n } else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n } else {\n errors.push(err);\n }\n }\n }\n } catch (e_2_1) {\n e_2 = { error: e_2_1 };\n } finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription2.prototype.add = function(teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription2) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription2.prototype._hasParent = function(parent) {\n var _parentage = this._parentage;\n return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);\n };\n Subscription2.prototype._addParent = function(parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription2.prototype._removeParent = function(parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription2.prototype.remove = function(teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription2) {\n teardown._removeParent(this);\n }\n };\n Subscription2.EMPTY = (function() {\n var empty = new Subscription2();\n empty.closed = true;\n return empty;\n })();\n return Subscription2;\n})();\nvar EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nfunction isSubscription(value) {\n return value instanceof Subscription || value && \"closed\" in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe);\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n\n// node_modules/rxjs/dist/esm5/internal/config.js\nvar config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: void 0,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false\n};\n\n// node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js\nvar timeoutProvider = {\n setTimeout: function(handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function(handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: void 0\n};\n\n// node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js\nfunction reportUnhandledError(err) {\n timeoutProvider.setTimeout(function() {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n } else {\n throw err;\n }\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/noop.js\nfunction noop() {\n}\n\n// node_modules/rxjs/dist/esm5/internal/NotificationFactories.js\nvar COMPLETE_NOTIFICATION = (function() {\n return createNotification(\"C\", void 0, void 0);\n})();\nfunction errorNotification(error) {\n return createNotification(\"E\", void 0, error);\n}\nfunction nextNotification(value) {\n return createNotification(\"N\", value, void 0);\n}\nfunction createNotification(kind, value, error) {\n return {\n kind,\n value,\n error\n };\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/errorContext.js\nvar context = null;\nfunction errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n cb();\n }\n}\nfunction captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n\n// node_modules/rxjs/dist/esm5/internal/Subscriber.js\nvar Subscriber = (function(_super) {\n __extends(Subscriber2, _super);\n function Subscriber2(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n } else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber2.create = function(next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber2.prototype.next = function(value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value);\n }\n };\n Subscriber2.prototype.error = function(err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber2.prototype.complete = function() {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber2.prototype.unsubscribe = function() {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber2.prototype._next = function(value) {\n this.destination.next(value);\n };\n Subscriber2.prototype._error = function(err) {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n };\n Subscriber2.prototype._complete = function() {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n };\n return Subscriber2;\n})(Subscription);\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function() {\n function ConsumerObserver2(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver2.prototype.next = function(value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver2.prototype.error = function(err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver2.prototype.complete = function() {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver2;\n})();\nvar SafeSubscriber = (function(_super) {\n __extends(SafeSubscriber2, _super);\n function SafeSubscriber2(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : void 0,\n error: error !== null && error !== void 0 ? error : void 0,\n complete: complete !== null && complete !== void 0 ? complete : void 0\n };\n } else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function() {\n return _this.unsubscribe();\n };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1)\n };\n } else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber2;\n})(Subscriber);\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function() {\n return onStoppedNotification(notification, subscriber);\n });\n}\nvar EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop\n};\n\n// node_modules/rxjs/dist/esm5/internal/symbol/observable.js\nvar observable = (function() {\n return typeof Symbol === \"function\" && Symbol.observable || \"@@observable\";\n})();\n\n// node_modules/rxjs/dist/esm5/internal/util/identity.js\nfunction identity(x) {\n return x;\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/pipe.js\nfunction pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nfunction pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function(prev, fn) {\n return fn(prev);\n }, input);\n };\n}\n\n// node_modules/rxjs/dist/esm5/internal/Observable.js\nvar Observable = (function() {\n function Observable2(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable2.prototype.lift = function(operator) {\n var observable2 = new Observable2();\n observable2.source = this;\n observable2.operator = operator;\n return observable2;\n };\n Observable2.prototype.subscribe = function(observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function() {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable2.prototype._trySubscribe = function(sink) {\n try {\n return this._subscribe(sink);\n } catch (err) {\n sink.error(err);\n }\n };\n Observable2.prototype.forEach = function(next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function(resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function(value) {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n _this.subscribe(subscriber);\n });\n };\n Observable2.prototype._subscribe = function(subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable2.prototype[observable] = function() {\n return this;\n };\n Observable2.prototype.pipe = function() {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable2.prototype.toPromise = function(promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function(resolve, reject) {\n var value;\n _this.subscribe(function(x) {\n return value = x;\n }, function(err) {\n return reject(err);\n }, function() {\n return resolve(value);\n });\n });\n };\n Observable2.create = function(subscribe) {\n return new Observable2(subscribe);\n };\n return Observable2;\n})();\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return value && value instanceof Subscriber || isObserver(value) && isSubscription(value);\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/lift.js\nfunction hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nfunction operate(init) {\n return function(source) {\n if (hasLift(source)) {\n return source.lift(function(liftedSource) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError(\"Unable to lift unknown Observable type\");\n };\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js\nfunction createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function(_super) {\n __extends(OperatorSubscriber2, _super);\n function OperatorSubscriber2(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n var _this = _super.call(this, destination) || this;\n _this.onFinalize = onFinalize;\n _this.shouldUnsubscribe = shouldUnsubscribe;\n _this._next = onNext ? function(value) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n } : _super.prototype._next;\n _this._error = onError ? function(err) {\n try {\n onError(err);\n } catch (err2) {\n destination.error(err2);\n } finally {\n this.unsubscribe();\n }\n } : _super.prototype._error;\n _this._complete = onComplete ? function() {\n try {\n onComplete();\n } catch (err) {\n destination.error(err);\n } finally {\n this.unsubscribe();\n }\n } : _super.prototype._complete;\n return _this;\n }\n OperatorSubscriber2.prototype.unsubscribe = function() {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n var closed_1 = this.closed;\n _super.prototype.unsubscribe.call(this);\n !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n };\n return OperatorSubscriber2;\n})(Subscriber);\n\n// node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js\nvar ObjectUnsubscribedError = createErrorClass(function(_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = \"ObjectUnsubscribedError\";\n this.message = \"object unsubscribed\";\n };\n});\n\n// node_modules/rxjs/dist/esm5/internal/Subject.js\nvar Subject = (function(_super) {\n __extends(Subject2, _super);\n function Subject2() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject2.prototype.lift = function(operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject2.prototype._throwIfClosed = function() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject2.prototype.next = function(value) {\n var _this = this;\n errorContext(function() {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n } catch (e_1_1) {\n e_1 = { error: e_1_1 };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n }\n });\n };\n Subject2.prototype.error = function(err) {\n var _this = this;\n errorContext(function() {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject2.prototype.complete = function() {\n var _this = this;\n errorContext(function() {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject2.prototype.unsubscribe = function() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject2.prototype, \"observed\", {\n get: function() {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject2.prototype._trySubscribe = function(subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject2.prototype._subscribe = function(subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject2.prototype._innerSubscribe = function(subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function() {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject2.prototype._checkFinalizedStatuses = function(subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject2.prototype.asObservable = function() {\n var observable2 = new Observable();\n observable2.source = this;\n return observable2;\n };\n Subject2.create = function(destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject2;\n})(Observable);\nvar AnonymousSubject = (function(_super) {\n __extends(AnonymousSubject2, _super);\n function AnonymousSubject2(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject2.prototype.next = function(value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject2.prototype.error = function(err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject2.prototype.complete = function() {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject2.prototype._subscribe = function(subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject2;\n})(Subject);\n\n// node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js\nvar dateTimestampProvider = {\n now: function() {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: void 0\n};\n\n// node_modules/rxjs/dist/esm5/internal/ReplaySubject.js\nvar ReplaySubject = (function(_super) {\n __extends(ReplaySubject2, _super);\n function ReplaySubject2(_bufferSize, _windowTime, _timestampProvider) {\n if (_bufferSize === void 0) {\n _bufferSize = Infinity;\n }\n if (_windowTime === void 0) {\n _windowTime = Infinity;\n }\n if (_timestampProvider === void 0) {\n _timestampProvider = dateTimestampProvider;\n }\n var _this = _super.call(this) || this;\n _this._bufferSize = _bufferSize;\n _this._windowTime = _windowTime;\n _this._timestampProvider = _timestampProvider;\n _this._buffer = [];\n _this._infiniteTimeWindow = true;\n _this._infiniteTimeWindow = _windowTime === Infinity;\n _this._bufferSize = Math.max(1, _bufferSize);\n _this._windowTime = Math.max(1, _windowTime);\n return _this;\n }\n ReplaySubject2.prototype.next = function(value) {\n var _a = this, isStopped = _a.isStopped, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow, _timestampProvider = _a._timestampProvider, _windowTime = _a._windowTime;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n _super.prototype.next.call(this, value);\n };\n ReplaySubject2.prototype._subscribe = function(subscriber) {\n this._throwIfClosed();\n this._trimBuffer();\n var subscription = this._innerSubscribe(subscriber);\n var _a = this, _infiniteTimeWindow = _a._infiniteTimeWindow, _buffer = _a._buffer;\n var copy = _buffer.slice();\n for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i]);\n }\n this._checkFinalizedStatuses(subscriber);\n return subscription;\n };\n ReplaySubject2.prototype._trimBuffer = function() {\n var _a = this, _bufferSize = _a._bufferSize, _timestampProvider = _a._timestampProvider, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow;\n var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n if (!_infiniteTimeWindow) {\n var now = _timestampProvider.now();\n var last2 = 0;\n for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {\n last2 = i;\n }\n last2 && _buffer.splice(0, last2 + 1);\n }\n };\n return ReplaySubject2;\n})(Subject);\n\n// node_modules/rxjs/dist/esm5/internal/scheduler/Action.js\nvar Action = (function(_super) {\n __extends(Action2, _super);\n function Action2(scheduler, work) {\n return _super.call(this) || this;\n }\n Action2.prototype.schedule = function(state, delay2) {\n if (delay2 === void 0) {\n delay2 = 0;\n }\n return this;\n };\n return Action2;\n})(Subscription);\n\n// node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js\nvar intervalProvider = {\n setInterval: function(handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = intervalProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearInterval: function(handle) {\n var delegate = intervalProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n },\n delegate: void 0\n};\n\n// node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js\nvar AsyncAction = (function(_super) {\n __extends(AsyncAction2, _super);\n function AsyncAction2(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction2.prototype.schedule = function(state, delay2) {\n var _a;\n if (delay2 === void 0) {\n delay2 = 0;\n }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay2);\n }\n this.pending = true;\n this.delay = delay2;\n this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay2);\n return this;\n };\n AsyncAction2.prototype.requestAsyncId = function(scheduler, _id, delay2) {\n if (delay2 === void 0) {\n delay2 = 0;\n }\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay2);\n };\n AsyncAction2.prototype.recycleAsyncId = function(_scheduler, id, delay2) {\n if (delay2 === void 0) {\n delay2 = 0;\n }\n if (delay2 != null && this.delay === delay2 && this.pending === false) {\n return id;\n }\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n return void 0;\n };\n AsyncAction2.prototype.execute = function(state, delay2) {\n if (this.closed) {\n return new Error(\"executing a cancelled action\");\n }\n this.pending = false;\n var error = this._execute(state, delay2);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction2.prototype._execute = function(state, _delay) {\n var errored = false;\n var errorValue;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n errorValue = e ? e : new Error(\"Scheduled action threw falsy error\");\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction2.prototype.unsubscribe = function() {\n if (!this.closed) {\n var _a = this, id = _a.id, scheduler = _a.scheduler;\n var actions = scheduler.actions;\n this.work = this.state = this.scheduler = null;\n this.pending = false;\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n _super.prototype.unsubscribe.call(this);\n }\n };\n return AsyncAction2;\n})(Action);\n\n// node_modules/rxjs/dist/esm5/internal/Scheduler.js\nvar Scheduler = (function() {\n function Scheduler2(schedulerActionCtor, now) {\n if (now === void 0) {\n now = Scheduler2.now;\n }\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n Scheduler2.prototype.schedule = function(work, delay2, state) {\n if (delay2 === void 0) {\n delay2 = 0;\n }\n return new this.schedulerActionCtor(this, work).schedule(state, delay2);\n };\n Scheduler2.now = dateTimestampProvider.now;\n return Scheduler2;\n})();\n\n// node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js\nvar AsyncScheduler = (function(_super) {\n __extends(AsyncScheduler2, _super);\n function AsyncScheduler2(SchedulerAction, now) {\n if (now === void 0) {\n now = Scheduler.now;\n }\n var _this = _super.call(this, SchedulerAction, now) || this;\n _this.actions = [];\n _this._active = false;\n return _this;\n }\n AsyncScheduler2.prototype.flush = function(action) {\n var actions = this.actions;\n if (this._active) {\n actions.push(action);\n return;\n }\n var error;\n this._active = true;\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (action = actions.shift());\n this._active = false;\n if (error) {\n while (action = actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler2;\n})(Scheduler);\n\n// node_modules/rxjs/dist/esm5/internal/scheduler/async.js\nvar asyncScheduler = new AsyncScheduler(AsyncAction);\nvar async = asyncScheduler;\n\n// node_modules/rxjs/dist/esm5/internal/observable/empty.js\nvar EMPTY = new Observable(function(subscriber) {\n return subscriber.complete();\n});\n\n// node_modules/rxjs/dist/esm5/internal/util/isScheduler.js\nfunction isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/args.js\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nfunction popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : void 0;\n}\nfunction popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : void 0;\n}\nfunction popNumber(args, defaultValue) {\n return typeof last(args) === \"number\" ? args.pop() : defaultValue;\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js\nvar isArrayLike = (function(x) {\n return x && typeof x.length === \"number\" && typeof x !== \"function\";\n});\n\n// node_modules/rxjs/dist/esm5/internal/util/isPromise.js\nfunction isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js\nfunction isInteropObservable(input) {\n return isFunction(input[observable]);\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js\nfunction isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js\nfunction createInvalidObservableTypeError(input) {\n return new TypeError(\"You provided \" + (input !== null && typeof input === \"object\" ? \"an invalid object\" : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n\n// node_modules/rxjs/dist/esm5/internal/symbol/iterator.js\nfunction getSymbolIterator() {\n if (typeof Symbol !== \"function\" || !Symbol.iterator) {\n return \"@@iterator\";\n }\n return Symbol.iterator;\n}\nvar iterator = getSymbolIterator();\n\n// node_modules/rxjs/dist/esm5/internal/util/isIterable.js\nfunction isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[iterator]);\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js\nfunction readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n var reader, _a, value, done;\n return __generator(this, function(_b) {\n switch (_b.label) {\n case 0:\n reader = readableStream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (false) return [3, 8];\n return [4, __await(reader.read())];\n case 3:\n _a = _b.sent(), value = _a.value, done = _a.done;\n if (!done) return [3, 5];\n return [4, __await(void 0)];\n case 4:\n return [2, _b.sent()];\n case 5:\n return [4, __await(value)];\n case 6:\n return [4, _b.sent()];\n case 7:\n _b.sent();\n return [3, 2];\n case 8:\n return [3, 10];\n case 9:\n reader.releaseLock();\n return [7];\n case 10:\n return [2];\n }\n });\n });\n}\nfunction isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js\nfunction innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nfunction fromInteropObservable(obj) {\n return new Observable(function(subscriber) {\n var obs = obj[observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError(\"Provided object does not correctly implement Symbol.observable\");\n });\n}\nfunction fromArrayLike(array) {\n return new Observable(function(subscriber) {\n for (var i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nfunction fromPromise(promise) {\n return new Observable(function(subscriber) {\n promise.then(function(value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function(err) {\n return subscriber.error(err);\n }).then(null, reportUnhandledError);\n });\n}\nfunction fromIterable(iterable) {\n return new Observable(function(subscriber) {\n var e_1, _a;\n try {\n for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n var value = iterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n } catch (e_1_1) {\n e_1 = { error: e_1_1 };\n } finally {\n try {\n if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n subscriber.complete();\n });\n}\nfunction fromAsyncIterable(asyncIterable) {\n return new Observable(function(subscriber) {\n process(asyncIterable, subscriber).catch(function(err) {\n return subscriber.error(err);\n });\n });\n}\nfunction fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_2, _a;\n return __awaiter(this, void 0, void 0, function() {\n var value, e_2_1;\n return __generator(this, function(_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 11]);\n asyncIterable_1 = __asyncValues(asyncIterable);\n _b.label = 1;\n case 1:\n return [4, asyncIterable_1.next()];\n case 2:\n if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return [2];\n }\n _b.label = 3;\n case 3:\n return [3, 1];\n case 4:\n return [3, 11];\n case 5:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3, 11];\n case 6:\n _b.trys.push([6, , 9, 10]);\n if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n return [4, _a.call(asyncIterable_1)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n return [3, 10];\n case 9:\n if (e_2) throw e_2.error;\n return [7];\n case 10:\n return [7];\n case 11:\n subscriber.complete();\n return [2];\n }\n });\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js\nfunction executeSchedule(parentSubscription, scheduler, work, delay2, repeat) {\n if (delay2 === void 0) {\n delay2 = 0;\n }\n if (repeat === void 0) {\n repeat = false;\n }\n var scheduleSubscription = scheduler.schedule(function() {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay2));\n } else {\n this.unsubscribe();\n }\n }, delay2);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/observeOn.js\nfunction observeOn(scheduler, delay2) {\n if (delay2 === void 0) {\n delay2 = 0;\n }\n return operate(function(source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n return executeSchedule(subscriber, scheduler, function() {\n return subscriber.next(value);\n }, delay2);\n }, function() {\n return executeSchedule(subscriber, scheduler, function() {\n return subscriber.complete();\n }, delay2);\n }, function(err) {\n return executeSchedule(subscriber, scheduler, function() {\n return subscriber.error(err);\n }, delay2);\n }));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js\nfunction subscribeOn(scheduler, delay2) {\n if (delay2 === void 0) {\n delay2 = 0;\n }\n return operate(function(source, subscriber) {\n subscriber.add(scheduler.schedule(function() {\n return source.subscribe(subscriber);\n }, delay2));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js\nfunction scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n\n// node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js\nfunction schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n\n// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js\nfunction scheduleArray(input, scheduler) {\n return new Observable(function(subscriber) {\n var i = 0;\n return scheduler.schedule(function() {\n if (i === input.length) {\n subscriber.complete();\n } else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js\nfunction scheduleIterable(input, scheduler) {\n return new Observable(function(subscriber) {\n var iterator2;\n executeSchedule(subscriber, scheduler, function() {\n iterator2 = input[iterator]();\n executeSchedule(subscriber, scheduler, function() {\n var _a;\n var value;\n var done;\n try {\n _a = iterator2.next(), value = _a.value, done = _a.done;\n } catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n } else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return function() {\n return isFunction(iterator2 === null || iterator2 === void 0 ? void 0 : iterator2.return) && iterator2.return();\n };\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js\nfunction scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error(\"Iterable cannot be null\");\n }\n return new Observable(function(subscriber) {\n executeSchedule(subscriber, scheduler, function() {\n var iterator2 = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, function() {\n iterator2.next().then(function(result) {\n if (result.done) {\n subscriber.complete();\n } else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js\nfunction scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n\n// node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js\nfunction scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/from.js\nfunction from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/of.js\nfunction of() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n return from(args, scheduler);\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/EmptyError.js\nvar EmptyError = createErrorClass(function(_super) {\n return function EmptyErrorImpl() {\n _super(this);\n this.name = \"EmptyError\";\n this.message = \"no elements in sequence\";\n };\n});\n\n// node_modules/rxjs/dist/esm5/internal/lastValueFrom.js\nfunction lastValueFrom(source, config2) {\n var hasConfig = typeof config2 === \"object\";\n return new Promise(function(resolve, reject) {\n var _hasValue = false;\n var _value;\n source.subscribe({\n next: function(value) {\n _value = value;\n _hasValue = true;\n },\n error: reject,\n complete: function() {\n if (_hasValue) {\n resolve(_value);\n } else if (hasConfig) {\n resolve(config2.defaultValue);\n } else {\n reject(new EmptyError());\n }\n }\n });\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/firstValueFrom.js\nfunction firstValueFrom(source, config2) {\n var hasConfig = typeof config2 === \"object\";\n return new Promise(function(resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function(value) {\n resolve(value);\n subscriber.unsubscribe();\n },\n error: reject,\n complete: function() {\n if (hasConfig) {\n resolve(config2.defaultValue);\n } else {\n reject(new EmptyError());\n }\n }\n });\n source.subscribe(subscriber);\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/isDate.js\nfunction isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/map.js\nfunction map(project, thisArg) {\n return operate(function(source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nfunction mapOneOrManyArgs(fn) {\n return map(function(args) {\n return callOrApply(fn, args);\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/argsArgArrayOrObject.js\nvar isArray2 = Array.isArray;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectProto = Object.prototype;\nvar getKeys = Object.keys;\nfunction argsArgArrayOrObject(args) {\n if (args.length === 1) {\n var first_1 = args[0];\n if (isArray2(first_1)) {\n return { args: first_1, keys: null };\n }\n if (isPOJO(first_1)) {\n var keys = getKeys(first_1);\n return {\n args: keys.map(function(key) {\n return first_1[key];\n }),\n keys\n };\n }\n }\n return { args, keys: null };\n}\nfunction isPOJO(obj) {\n return obj && typeof obj === \"object\" && getPrototypeOf(obj) === objectProto;\n}\n\n// node_modules/rxjs/dist/esm5/internal/util/createObject.js\nfunction createObject(keys, values) {\n return keys.reduce(function(result, key, i) {\n return result[key] = values[i], result;\n }, {});\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js\nfunction combineLatest() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n var resultSelector = popResultSelector(args);\n var _a = argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys;\n if (observables.length === 0) {\n return from([], scheduler);\n }\n var result = new Observable(combineLatestInit(observables, scheduler, keys ? function(values) {\n return createObject(keys, values);\n } : identity));\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\nfunction combineLatestInit(observables, scheduler, valueTransform) {\n if (valueTransform === void 0) {\n valueTransform = identity;\n }\n return function(subscriber) {\n maybeSchedule(scheduler, function() {\n var length = observables.length;\n var values = new Array(length);\n var active = length;\n var remainingFirstValues = length;\n var _loop_1 = function(i2) {\n maybeSchedule(scheduler, function() {\n var source = from(observables[i2], scheduler);\n var hasFirstValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n values[i2] = value;\n if (!hasFirstValue) {\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n subscriber.next(valueTransform(values.slice()));\n }\n }, function() {\n if (!--active) {\n subscriber.complete();\n }\n }));\n }, subscriber);\n };\n for (var i = 0; i < length; i++) {\n _loop_1(i);\n }\n }, subscriber);\n };\n}\nfunction maybeSchedule(scheduler, execute, subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n } else {\n execute();\n }\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js\nfunction mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n var buffer = [];\n var active = 0;\n var index = 0;\n var isComplete = false;\n var checkComplete = function() {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n var outerNext = function(value) {\n return active < concurrent ? doInnerSub(value) : buffer.push(value);\n };\n var doInnerSub = function(value) {\n expand && subscriber.next(value);\n active++;\n var innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function(innerValue) {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n } else {\n subscriber.next(innerValue);\n }\n }, function() {\n innerComplete = true;\n }, void 0, function() {\n if (innerComplete) {\n try {\n active--;\n var _loop_1 = function() {\n var bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, function() {\n return doInnerSub(bufferedValue);\n });\n } else {\n doInnerSub(bufferedValue);\n }\n };\n while (buffer.length && active < concurrent) {\n _loop_1();\n }\n checkComplete();\n } catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, function() {\n isComplete = true;\n checkComplete();\n }));\n return function() {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js\nfunction mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) {\n concurrent = Infinity;\n }\n if (isFunction(resultSelector)) {\n return mergeMap(function(a, i) {\n return map(function(b, ii) {\n return resultSelector(a, b, i, ii);\n })(innerFrom(project(a, i)));\n }, concurrent);\n } else if (typeof resultSelector === \"number\") {\n concurrent = resultSelector;\n }\n return operate(function(source, subscriber) {\n return mergeInternals(source, subscriber, project, concurrent);\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js\nfunction mergeAll(concurrent) {\n if (concurrent === void 0) {\n concurrent = Infinity;\n }\n return mergeMap(identity, concurrent);\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/concatAll.js\nfunction concatAll() {\n return mergeAll(1);\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/concat.js\nfunction concat() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return concatAll()(from(args, popScheduler(args)));\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/defer.js\nfunction defer(observableFactory) {\n return new Observable(function(subscriber) {\n innerFrom(observableFactory()).subscribe(subscriber);\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/forkJoin.js\nfunction forkJoin() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var resultSelector = popResultSelector(args);\n var _a = argsArgArrayOrObject(args), sources = _a.args, keys = _a.keys;\n var result = new Observable(function(subscriber) {\n var length = sources.length;\n if (!length) {\n subscriber.complete();\n return;\n }\n var values = new Array(length);\n var remainingCompletions = length;\n var remainingEmissions = length;\n var _loop_1 = function(sourceIndex2) {\n var hasValue = false;\n innerFrom(sources[sourceIndex2]).subscribe(createOperatorSubscriber(subscriber, function(value) {\n if (!hasValue) {\n hasValue = true;\n remainingEmissions--;\n }\n values[sourceIndex2] = value;\n }, function() {\n return remainingCompletions--;\n }, void 0, function() {\n if (!remainingCompletions || !hasValue) {\n if (!remainingEmissions) {\n subscriber.next(keys ? createObject(keys, values) : values);\n }\n subscriber.complete();\n }\n }));\n };\n for (var sourceIndex = 0; sourceIndex < length; sourceIndex++) {\n _loop_1(sourceIndex);\n }\n });\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js\nvar nodeEventEmitterMethods = [\"addListener\", \"removeListener\"];\nvar eventTargetMethods = [\"addEventListener\", \"removeEventListener\"];\nvar jqueryMethods = [\"on\", \"off\"];\nfunction fromEvent(target, eventName, options, resultSelector) {\n if (isFunction(options)) {\n resultSelector = options;\n options = void 0;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector));\n }\n var _a = __read(isEventTarget(target) ? eventTargetMethods.map(function(methodName) {\n return function(handler) {\n return target[methodName](eventName, handler, options);\n };\n }) : isNodeStyleEventEmitter(target) ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) : isJQueryStyleEventEmitter(target) ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) : [], 2), add = _a[0], remove = _a[1];\n if (!add) {\n if (isArrayLike(target)) {\n return mergeMap(function(subTarget) {\n return fromEvent(subTarget, eventName, options);\n })(innerFrom(target));\n }\n }\n if (!add) {\n throw new TypeError(\"Invalid event target\");\n }\n return new Observable(function(subscriber) {\n var handler = function() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return subscriber.next(1 < args.length ? args : args[0]);\n };\n add(handler);\n return function() {\n return remove(handler);\n };\n });\n}\nfunction toCommonHandlerRegistry(target, eventName) {\n return function(methodName) {\n return function(handler) {\n return target[methodName](eventName, handler);\n };\n };\n}\nfunction isNodeStyleEventEmitter(target) {\n return isFunction(target.addListener) && isFunction(target.removeListener);\n}\nfunction isJQueryStyleEventEmitter(target) {\n return isFunction(target.on) && isFunction(target.off);\n}\nfunction isEventTarget(target) {\n return isFunction(target.addEventListener) && isFunction(target.removeEventListener);\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/timer.js\nfunction timer(dueTime, intervalOrScheduler, scheduler) {\n if (dueTime === void 0) {\n dueTime = 0;\n }\n if (scheduler === void 0) {\n scheduler = async;\n }\n var intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n } else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable(function(subscriber) {\n var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n var n = 0;\n return scheduler.schedule(function() {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(void 0, intervalDuration);\n } else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/merge.js\nfunction merge() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n var concurrent = popNumber(args, Infinity);\n var sources = args;\n return !sources.length ? EMPTY : sources.length === 1 ? innerFrom(sources[0]) : mergeAll(concurrent)(from(sources, scheduler));\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/never.js\nvar NEVER = new Observable(noop);\n\n// node_modules/rxjs/dist/esm5/internal/util/argsOrArgArray.js\nvar isArray3 = Array.isArray;\nfunction argsOrArgArray(args) {\n return args.length === 1 && isArray3(args[0]) ? args[0] : args;\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/filter.js\nfunction filter(predicate, thisArg) {\n return operate(function(source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n return predicate.call(thisArg, value, index++) && subscriber.next(value);\n }));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/race.js\nfunction race() {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n sources = argsOrArgArray(sources);\n return sources.length === 1 ? innerFrom(sources[0]) : new Observable(raceInit(sources));\n}\nfunction raceInit(sources) {\n return function(subscriber) {\n var subscriptions = [];\n var _loop_1 = function(i2) {\n subscriptions.push(innerFrom(sources[i2]).subscribe(createOperatorSubscriber(subscriber, function(value) {\n if (subscriptions) {\n for (var s = 0; s < subscriptions.length; s++) {\n s !== i2 && subscriptions[s].unsubscribe();\n }\n subscriptions = null;\n }\n subscriber.next(value);\n })));\n };\n for (var i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) {\n _loop_1(i);\n }\n };\n}\n\n// node_modules/rxjs/dist/esm5/internal/observable/zip.js\nfunction zip() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var resultSelector = popResultSelector(args);\n var sources = argsOrArgArray(args);\n return sources.length ? new Observable(function(subscriber) {\n var buffers = sources.map(function() {\n return [];\n });\n var completed = sources.map(function() {\n return false;\n });\n subscriber.add(function() {\n buffers = completed = null;\n });\n var _loop_1 = function(sourceIndex2) {\n innerFrom(sources[sourceIndex2]).subscribe(createOperatorSubscriber(subscriber, function(value) {\n buffers[sourceIndex2].push(value);\n if (buffers.every(function(buffer) {\n return buffer.length;\n })) {\n var result = buffers.map(function(buffer) {\n return buffer.shift();\n });\n subscriber.next(resultSelector ? resultSelector.apply(void 0, __spreadArray([], __read(result))) : result);\n if (buffers.some(function(buffer, i) {\n return !buffer.length && completed[i];\n })) {\n subscriber.complete();\n }\n }\n }, function() {\n completed[sourceIndex2] = true;\n !buffers[sourceIndex2].length && subscriber.complete();\n }));\n };\n for (var sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) {\n _loop_1(sourceIndex);\n }\n return function() {\n buffers = completed = null;\n };\n }) : EMPTY;\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/bufferCount.js\nfunction bufferCount(bufferSize, startBufferEvery) {\n if (startBufferEvery === void 0) {\n startBufferEvery = null;\n }\n startBufferEvery = startBufferEvery !== null && startBufferEvery !== void 0 ? startBufferEvery : bufferSize;\n return operate(function(source, subscriber) {\n var buffers = [];\n var count = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n var e_1, _a, e_2, _b;\n var toEmit = null;\n if (count++ % startBufferEvery === 0) {\n buffers.push([]);\n }\n try {\n for (var buffers_1 = __values(buffers), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) {\n var buffer = buffers_1_1.value;\n buffer.push(value);\n if (bufferSize <= buffer.length) {\n toEmit = toEmit !== null && toEmit !== void 0 ? toEmit : [];\n toEmit.push(buffer);\n }\n }\n } catch (e_1_1) {\n e_1 = { error: e_1_1 };\n } finally {\n try {\n if (buffers_1_1 && !buffers_1_1.done && (_a = buffers_1.return)) _a.call(buffers_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n if (toEmit) {\n try {\n for (var toEmit_1 = __values(toEmit), toEmit_1_1 = toEmit_1.next(); !toEmit_1_1.done; toEmit_1_1 = toEmit_1.next()) {\n var buffer = toEmit_1_1.value;\n arrRemove(buffers, buffer);\n subscriber.next(buffer);\n }\n } catch (e_2_1) {\n e_2 = { error: e_2_1 };\n } finally {\n try {\n if (toEmit_1_1 && !toEmit_1_1.done && (_b = toEmit_1.return)) _b.call(toEmit_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n }\n }, function() {\n var e_3, _a;\n try {\n for (var buffers_2 = __values(buffers), buffers_2_1 = buffers_2.next(); !buffers_2_1.done; buffers_2_1 = buffers_2.next()) {\n var buffer = buffers_2_1.value;\n subscriber.next(buffer);\n }\n } catch (e_3_1) {\n e_3 = { error: e_3_1 };\n } finally {\n try {\n if (buffers_2_1 && !buffers_2_1.done && (_a = buffers_2.return)) _a.call(buffers_2);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n subscriber.complete();\n }, void 0, function() {\n buffers = null;\n }));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/catchError.js\nfunction catchError(selector) {\n return operate(function(source, subscriber) {\n var innerSub = null;\n var syncUnsub = false;\n var handledResult;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, void 0, void 0, function(err) {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n } else {\n syncUnsub = true;\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/concatMap.js\nfunction concatMap(project, resultSelector) {\n return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/debounceTime.js\nfunction debounceTime(dueTime, scheduler) {\n if (scheduler === void 0) {\n scheduler = asyncScheduler;\n }\n return operate(function(source, subscriber) {\n var activeTask = null;\n var lastValue = null;\n var lastTime = null;\n var emit = function() {\n if (activeTask) {\n activeTask.unsubscribe();\n activeTask = null;\n var value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n };\n function emitWhenIdle() {\n var targetTime = lastTime + dueTime;\n var now = scheduler.now();\n if (now < targetTime) {\n activeTask = this.schedule(void 0, targetTime - now);\n subscriber.add(activeTask);\n return;\n }\n emit();\n }\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n lastValue = value;\n lastTime = scheduler.now();\n if (!activeTask) {\n activeTask = scheduler.schedule(emitWhenIdle, dueTime);\n subscriber.add(activeTask);\n }\n }, function() {\n emit();\n subscriber.complete();\n }, void 0, function() {\n lastValue = activeTask = null;\n }));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/defaultIfEmpty.js\nfunction defaultIfEmpty(defaultValue) {\n return operate(function(source, subscriber) {\n var hasValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n hasValue = true;\n subscriber.next(value);\n }, function() {\n if (!hasValue) {\n subscriber.next(defaultValue);\n }\n subscriber.complete();\n }));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/take.js\nfunction take(count) {\n return count <= 0 ? function() {\n return EMPTY;\n } : operate(function(source, subscriber) {\n var seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/ignoreElements.js\nfunction ignoreElements() {\n return operate(function(source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, noop));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/mapTo.js\nfunction mapTo(value) {\n return map(function() {\n return value;\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/delayWhen.js\nfunction delayWhen(delayDurationSelector, subscriptionDelay) {\n if (subscriptionDelay) {\n return function(source) {\n return concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n };\n }\n return mergeMap(function(value, index) {\n return innerFrom(delayDurationSelector(value, index)).pipe(take(1), mapTo(value));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/delay.js\nfunction delay(due, scheduler) {\n if (scheduler === void 0) {\n scheduler = asyncScheduler;\n }\n var duration = timer(due, scheduler);\n return delayWhen(function() {\n return duration;\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js\nfunction distinctUntilChanged(comparator, keySelector) {\n if (keySelector === void 0) {\n keySelector = identity;\n }\n comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n return operate(function(source, subscriber) {\n var previousKey;\n var first2 = true;\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n var currentKey = keySelector(value);\n if (first2 || !comparator(previousKey, currentKey)) {\n first2 = false;\n previousKey = currentKey;\n subscriber.next(value);\n }\n }));\n });\n}\nfunction defaultCompare(a, b) {\n return a === b;\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/throwIfEmpty.js\nfunction throwIfEmpty(errorFactory) {\n if (errorFactory === void 0) {\n errorFactory = defaultErrorFactory;\n }\n return operate(function(source, subscriber) {\n var hasValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n hasValue = true;\n subscriber.next(value);\n }, function() {\n return hasValue ? subscriber.complete() : subscriber.error(errorFactory());\n }));\n });\n}\nfunction defaultErrorFactory() {\n return new EmptyError();\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/first.js\nfunction first(predicate, defaultValue) {\n var hasDefaultValue = arguments.length >= 2;\n return function(source) {\n return source.pipe(predicate ? filter(function(v, i) {\n return predicate(v, i, source);\n }) : identity, take(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(function() {\n return new EmptyError();\n }));\n };\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/mergeScan.js\nfunction mergeScan(accumulator, seed, concurrent) {\n if (concurrent === void 0) {\n concurrent = Infinity;\n }\n return operate(function(source, subscriber) {\n var state = seed;\n return mergeInternals(source, subscriber, function(value, index) {\n return accumulator(state, value, index);\n }, concurrent, function(value) {\n state = value;\n }, false, void 0, function() {\n return state = null;\n });\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/raceWith.js\nfunction raceWith() {\n var otherSources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n otherSources[_i] = arguments[_i];\n }\n return !otherSources.length ? identity : operate(function(source, subscriber) {\n raceInit(__spreadArray([source], __read(otherSources)))(subscriber);\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/retry.js\nfunction retry(configOrCount) {\n if (configOrCount === void 0) {\n configOrCount = Infinity;\n }\n var config2;\n if (configOrCount && typeof configOrCount === \"object\") {\n config2 = configOrCount;\n } else {\n config2 = {\n count: configOrCount\n };\n }\n var _a = config2.count, count = _a === void 0 ? Infinity : _a, delay2 = config2.delay, _b = config2.resetOnSuccess, resetOnSuccess = _b === void 0 ? false : _b;\n return count <= 0 ? identity : operate(function(source, subscriber) {\n var soFar = 0;\n var innerSub;\n var subscribeForRetry = function() {\n var syncUnsub = false;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n if (resetOnSuccess) {\n soFar = 0;\n }\n subscriber.next(value);\n }, void 0, function(err) {\n if (soFar++ < count) {\n var resub_1 = function() {\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n } else {\n syncUnsub = true;\n }\n };\n if (delay2 != null) {\n var notifier = typeof delay2 === \"number\" ? timer(delay2) : innerFrom(delay2(err, soFar));\n var notifierSubscriber_1 = createOperatorSubscriber(subscriber, function() {\n notifierSubscriber_1.unsubscribe();\n resub_1();\n }, function() {\n subscriber.complete();\n });\n notifier.subscribe(notifierSubscriber_1);\n } else {\n resub_1();\n }\n } else {\n subscriber.error(err);\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n }\n };\n subscribeForRetry();\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/startWith.js\nfunction startWith() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var scheduler = popScheduler(values);\n return operate(function(source, subscriber) {\n (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/switchMap.js\nfunction switchMap(project, resultSelector) {\n return operate(function(source, subscriber) {\n var innerSubscriber = null;\n var index = 0;\n var isComplete = false;\n var checkComplete = function() {\n return isComplete && !innerSubscriber && subscriber.complete();\n };\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n var innerIndex = 0;\n var outerIndex = index++;\n innerFrom(project(value, outerIndex)).subscribe(innerSubscriber = createOperatorSubscriber(subscriber, function(innerValue) {\n return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue);\n }, function() {\n innerSubscriber = null;\n checkComplete();\n }));\n }, function() {\n isComplete = true;\n checkComplete();\n }));\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/takeUntil.js\nfunction takeUntil(notifier) {\n return operate(function(source, subscriber) {\n innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, function() {\n return subscriber.complete();\n }, noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n\n// node_modules/rxjs/dist/esm5/internal/operators/tap.js\nfunction tap(observerOrNext, error, complete) {\n var tapObserver = isFunction(observerOrNext) || error || complete ? { next: observerOrNext, error, complete } : observerOrNext;\n return tapObserver ? operate(function(source, subscriber) {\n var _a;\n (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n var isUnsub = true;\n source.subscribe(createOperatorSubscriber(subscriber, function(value) {\n var _a2;\n (_a2 = tapObserver.next) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver, value);\n subscriber.next(value);\n }, function() {\n var _a2;\n isUnsub = false;\n (_a2 = tapObserver.complete) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver);\n subscriber.complete();\n }, function(err) {\n var _a2;\n isUnsub = false;\n (_a2 = tapObserver.error) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver, err);\n subscriber.error(err);\n }, function() {\n var _a2, _b;\n if (isUnsub) {\n (_a2 = tapObserver.unsubscribe) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver);\n }\n (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);\n }));\n }) : identity;\n}\nexport {\n EMPTY,\n NEVER,\n Observable,\n ReplaySubject,\n bufferCount,\n catchError,\n combineLatest,\n concat,\n concatMap,\n debounceTime,\n defaultIfEmpty,\n defer,\n delay,\n delayWhen,\n distinctUntilChanged,\n filter,\n first,\n firstValueFrom,\n forkJoin,\n from,\n fromEvent,\n identity,\n ignoreElements,\n lastValueFrom,\n map,\n merge,\n mergeMap,\n mergeScan,\n noop,\n of,\n pipe,\n race,\n raceWith,\n retry,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n throwIfEmpty,\n timer,\n zip\n};\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @internal\n */\nexport function stringToTypedArray(\n string: string,\n base64Encoded = false,\n): Uint8Array {\n if (base64Encoded) {\n if ('fromBase64' in Uint8Array) {\n // @ts-expect-error fromBase64 is newer than the types we use.\n return Uint8Array.fromBase64(string);\n }\n // TODO: remove Buffer in v26 when it becomes LTS.\n if (typeof Buffer === 'function') {\n return Buffer.from(string, 'base64');\n }\n return Uint8Array.from(atob(string), m => {\n return m.codePointAt(0)!;\n });\n }\n return new TextEncoder().encode(string);\n}\n\n/**\n * @internal\n */\nexport function stringToBase64(str: string): string {\n return typedArrayToBase64(new TextEncoder().encode(str));\n}\n\n/**\n * @internal\n */\nexport function typedArrayToBase64(typedArray: Uint8Array): string {\n // chunkSize should be less V8 limit on number of arguments!\n // https://github.com/v8/v8/blob/d3de848bea727518aee94dd2fd42ba0b62037a27/src/objects/code.h#L444\n const chunkSize = 65534;\n const chunks = [];\n\n for (let i = 0; i < typedArray.length; i += chunkSize) {\n const chunk = typedArray.subarray(i, i + chunkSize);\n chunks.push(String.fromCodePoint.apply(null, chunk as unknown as number[]));\n }\n\n const binaryString = chunks.join('');\n return btoa(binaryString);\n}\n\n/**\n * @internal\n */\nexport function mergeUint8Arrays(items: Uint8Array[]): Uint8Array {\n let length = 0;\n for (const item of items) {\n length += item.length;\n }\n\n // Create a new array with total length and merge all source arrays.\n const result = new Uint8Array(length);\n let offset = 0;\n for (const item of items) {\n result.set(item, offset);\n offset += item.length;\n }\n\n return result;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {OperatorFunction} from '../../third_party/rxjs/rxjs.js';\nimport {\n filter,\n from,\n fromEvent,\n map,\n mergeMap,\n NEVER,\n Observable,\n timer,\n} from '../../third_party/rxjs/rxjs.js';\nimport type {CDPSession} from '../api/CDPSession.js';\nimport {environment} from '../environment.js';\nimport {assert} from '../util/assert.js';\nimport {mergeUint8Arrays, stringToTypedArray} from '../util/encoding.js';\nimport {packageVersion} from '../util/version.js';\n\nimport {DEBUG_PREFIXES, type Logger} from './Debug.js';\nimport {TimeoutError} from './Errors.js';\nimport type {EventEmitter, EventType} from './EventEmitter.js';\nimport type {\n LowerCasePaperFormat,\n ParsedPDFOptions,\n PDFOptions,\n} from './PDFOptions.js';\nimport {paperFormats} from './PDFOptions.js';\n\n/**\n * @internal\n */\nexport const DEFAULT_VIEWPORT = Object.freeze({width: 800, height: 600});\n\n/**\n * @internal\n */\nconst SOURCE_URL = Symbol('Source URL for Puppeteer evaluation scripts');\n\n/**\n * @internal\n */\nexport class PuppeteerURL {\n static INTERNAL_URL = 'pptr:internal';\n\n static fromCallSite(\n functionName: string,\n site: NodeJS.CallSite,\n ): PuppeteerURL {\n const url = new PuppeteerURL();\n url.#functionName = functionName;\n url.#siteString = site.toString();\n return url;\n }\n\n static parse = (url: string): PuppeteerURL => {\n url = url.slice('pptr:'.length);\n const [functionName = '', siteString = ''] = url.split(';');\n const puppeteerUrl = new PuppeteerURL();\n puppeteerUrl.#functionName = functionName;\n puppeteerUrl.#siteString = decodeURIComponent(siteString);\n return puppeteerUrl;\n };\n\n static isPuppeteerURL = (url: string): boolean => {\n return url.startsWith('pptr:');\n };\n\n #functionName!: string;\n #siteString!: string;\n\n get functionName(): string {\n return this.#functionName;\n }\n\n get siteString(): string {\n return this.#siteString;\n }\n\n toString(): string {\n return `pptr:${[\n this.#functionName,\n encodeURIComponent(this.#siteString),\n ].join(';')}`;\n }\n}\n\n/**\n * @internal\n */\nexport const withSourcePuppeteerURLIfNone = <T extends NonNullable<unknown>>(\n functionName: string,\n object: T,\n): T => {\n if (Object.prototype.hasOwnProperty.call(object, SOURCE_URL)) {\n return object;\n }\n const original = Error.prepareStackTrace;\n Error.prepareStackTrace = (_, stack) => {\n // First element is the function.\n // Second element is the caller of this function.\n // Third element is the caller of the caller of this function\n // which is precisely what we want.\n return stack[2];\n };\n const site = new Error().stack as unknown as NodeJS.CallSite;\n Error.prepareStackTrace = original;\n return Object.assign(object, {\n [SOURCE_URL]: PuppeteerURL.fromCallSite(functionName, site),\n });\n};\n\n/**\n * @internal\n */\nexport const getSourcePuppeteerURLIfAvailable = <\n T extends NonNullable<unknown>,\n>(\n object: T,\n): PuppeteerURL | undefined => {\n if (Object.prototype.hasOwnProperty.call(object, SOURCE_URL)) {\n return object[SOURCE_URL as keyof T] as PuppeteerURL;\n }\n return undefined;\n};\n\n/**\n * @internal\n */\nexport const isString = (obj: unknown): obj is string => {\n return typeof obj === 'string' || obj instanceof String;\n};\n\n/**\n * @internal\n */\nexport const isNumber = (obj: unknown): obj is number => {\n return typeof obj === 'number' || obj instanceof Number;\n};\n\n/**\n * @internal\n */\nexport const isPlainObject = (obj: unknown): obj is Record<any, unknown> => {\n return typeof obj === 'object' && obj?.constructor === Object;\n};\n\n/**\n * @internal\n */\nexport const isRegExp = (obj: unknown): obj is RegExp => {\n return typeof obj === 'object' && obj?.constructor === RegExp;\n};\n\n/**\n * @internal\n */\nexport const isDate = (obj: unknown): obj is Date => {\n return typeof obj === 'object' && obj?.constructor === Date;\n};\n\n/**\n * @internal\n */\nexport function evaluationString(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n fun: Function | string,\n ...args: unknown[]\n): string {\n if (isString(fun)) {\n assert(args.length === 0, 'Cannot evaluate a string with arguments');\n return fun;\n }\n\n function serializeArgument(arg: unknown): string {\n if (Object.is(arg, undefined)) {\n return 'undefined';\n }\n return JSON.stringify(arg);\n }\n\n return `(${fun})(${args.map(serializeArgument).join(',')})`;\n}\n\n/**\n * @internal\n */\nexport async function getReadableAsTypedArray(\n readable: ReadableStream<Uint8Array>,\n path: string | undefined,\n logger: Logger,\n): Promise<Uint8Array | null> {\n const buffers: Uint8Array[] = [];\n const reader = readable.getReader();\n if (path) {\n const fileHandle = await environment.value.openFileForWriting(path);\n try {\n while (true) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n buffers.push(value);\n await fileHandle.writeFile(value);\n }\n } finally {\n await fileHandle.close();\n }\n } else {\n while (true) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n buffers.push(value);\n }\n }\n try {\n const concat = mergeUint8Arrays(buffers);\n if (concat.length === 0) {\n return null;\n }\n return concat;\n } catch (error) {\n logger?.(DEBUG_PREFIXES.error)?.(error);\n return null;\n }\n}\n\n/**\n * @internal\n */\nexport async function getReadableFromProtocolStream(\n client: CDPSession,\n handle: string,\n): Promise<ReadableStream<Uint8Array>> {\n return new ReadableStream({\n async pull(controller) {\n const {data, base64Encoded, eof} = await client.send('IO.read', {\n handle,\n });\n\n controller.enqueue(stringToTypedArray(data, base64Encoded ?? false));\n if (eof) {\n await client.send('IO.close', {handle});\n controller.close();\n }\n },\n });\n}\n\nconst VALID_DIALOG_TYPES = new Set([\n 'alert',\n 'confirm',\n 'prompt',\n 'beforeunload',\n]);\n\n/**\n * @internal\n */\nexport function validateDialogType(\n type: string,\n): 'alert' | 'confirm' | 'prompt' | 'beforeunload' {\n let dialogType = null;\n\n if (VALID_DIALOG_TYPES.has(type)) {\n dialogType = type;\n }\n assert(dialogType, `Unknown javascript dialog type: ${type}`);\n return dialogType as 'alert' | 'confirm' | 'prompt' | 'beforeunload';\n}\n\n/**\n * @internal\n */\nexport function timeout(ms: number, cause?: Error): Observable<never> {\n return ms === 0\n ? NEVER\n : timer(ms).pipe(\n map(() => {\n throw new TimeoutError(`Timed out after waiting ${ms}ms`, {cause});\n }),\n );\n}\n\n/**\n * @internal\n */\nexport const UTILITY_WORLD_NAME =\n '__puppeteer_utility_world__' + packageVersion;\n\n/**\n * @internal\n */\nexport const SOURCE_URL_REGEX =\n /^[\\x20\\t]*\\/\\/[@#] sourceURL=\\s{0,10}(\\S*?)\\s{0,10}$/m;\n/**\n * @internal\n */\nexport function getSourceUrlComment(url: string): string {\n return `//# sourceURL=${url}`;\n}\n\n/**\n * @internal\n */\nexport const NETWORK_IDLE_TIME = 500;\n\n/**\n * @internal\n */\nexport function parsePDFOptions(\n options: PDFOptions = {},\n lengthUnit: 'in' | 'cm' = 'in',\n): ParsedPDFOptions {\n const defaults: Omit<ParsedPDFOptions, 'width' | 'height' | 'margin'> = {\n scale: 1,\n displayHeaderFooter: false,\n headerTemplate: '',\n footerTemplate: '',\n printBackground: false,\n landscape: false,\n pageRanges: '',\n preferCSSPageSize: false,\n omitBackground: false,\n outline: false,\n tagged: true,\n waitForFonts: true,\n };\n\n let width = 8.5;\n let height = 11;\n if (options.format) {\n const format =\n paperFormats[options.format.toLowerCase() as LowerCasePaperFormat][\n lengthUnit\n ];\n assert(format, 'Unknown paper format: ' + options.format);\n width = format.width;\n height = format.height;\n } else {\n width = convertPrintParameterToInches(options.width, lengthUnit) ?? width;\n height =\n convertPrintParameterToInches(options.height, lengthUnit) ?? height;\n }\n\n const margin = {\n top: convertPrintParameterToInches(options.margin?.top, lengthUnit) || 0,\n left: convertPrintParameterToInches(options.margin?.left, lengthUnit) || 0,\n bottom:\n convertPrintParameterToInches(options.margin?.bottom, lengthUnit) || 0,\n right:\n convertPrintParameterToInches(options.margin?.right, lengthUnit) || 0,\n };\n\n // Quirk https://bugs.chromium.org/p/chromium/issues/detail?id=840455#c44\n if (options.outline) {\n options.tagged = true;\n }\n\n return {\n ...defaults,\n ...options,\n width,\n height,\n margin,\n };\n}\n\n/**\n * @internal\n */\nexport const unitToPixels = {\n px: 1,\n in: 96,\n cm: 37.8,\n mm: 3.78,\n};\n\nfunction convertPrintParameterToInches(\n parameter?: string | number,\n lengthUnit: 'in' | 'cm' = 'in',\n): number | undefined {\n if (typeof parameter === 'undefined') {\n return undefined;\n }\n let pixels;\n if (isNumber(parameter)) {\n // Treat numbers as pixel values to be aligned with phantom's paperSize.\n pixels = parameter;\n } else if (isString(parameter)) {\n const text = parameter;\n let unit = text.substring(text.length - 2).toLowerCase();\n let valueText = '';\n if (unit in unitToPixels) {\n valueText = text.substring(0, text.length - 2);\n } else {\n // In case of unknown unit try to parse the whole parameter as number of pixels.\n // This is consistent with phantom's paperSize behavior.\n unit = 'px';\n valueText = text;\n }\n const value = Number(valueText);\n assert(!isNaN(value), 'Failed to parse parameter value: ' + text);\n pixels = value * unitToPixels[unit as keyof typeof unitToPixels];\n } else {\n throw new Error(\n 'page.pdf() Cannot handle parameter type: ' + typeof parameter,\n );\n }\n return pixels / unitToPixels[lengthUnit];\n}\n\n/**\n * @internal\n */\nexport function fromEmitterEvent<\n Events extends Record<EventType, unknown>,\n Event extends keyof Events,\n>(emitter: EventEmitter<Events>, eventName: Event): Observable<Events[Event]> {\n return new Observable(subscriber => {\n const listener = (event: Events[Event]) => {\n subscriber.next(event);\n };\n emitter.on(eventName, listener);\n return () => {\n emitter.off(eventName, listener);\n };\n });\n}\n\n/**\n * @internal\n */\nexport function fromAbortSignal(\n signal?: AbortSignal,\n cause?: Error,\n): Observable<never> {\n return signal\n ? fromEvent(signal, 'abort').pipe(\n map(() => {\n if (signal.reason instanceof Error) {\n signal.reason.cause = cause;\n throw signal.reason;\n }\n\n throw new Error(signal.reason, {cause});\n }),\n )\n : NEVER;\n}\n\n/**\n * @internal\n */\nexport function filterAsync<T>(\n predicate: (value: T) => boolean | PromiseLike<boolean>,\n): OperatorFunction<T, T> {\n return mergeMap<T, Observable<T>>((value): Observable<T> => {\n return from(Promise.resolve(predicate(value))).pipe(\n filter(isMatch => {\n return isMatch;\n }),\n map(() => {\n return value;\n }),\n );\n });\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n/// <reference types=\"node\" preserve=\"true\"/>\nimport type {ChildProcess} from 'node:child_process';\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {\n firstValueFrom,\n from,\n merge,\n raceWith,\n} from '../../third_party/rxjs/rxjs.js';\nimport type {ProtocolType} from '../common/ConnectOptions.js';\nimport type {\n Cookie,\n CookieData,\n DeleteCookiesRequest,\n} from '../common/Cookie.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport type {DownloadBehavior} from '../common/DownloadBehavior.js';\nimport {EventEmitter, type EventType} from '../common/EventEmitter.js';\nimport {\n fromEmitterEvent,\n filterAsync,\n timeout,\n fromAbortSignal,\n} from '../common/util.js';\nimport {asyncDisposeSymbol, disposeSymbol} from '../util/disposable.js';\n\nimport type {BrowserContext} from './BrowserContext.js';\nimport type {Extension} from './Extension.js';\nimport type {Page} from './Page.js';\nimport type {Target} from './Target.js';\n/**\n * @public\n */\nexport interface BrowserContextOptions {\n /**\n * Proxy server with optional port to use for all requests.\n * Username and password can be set in `Page.authenticate`.\n */\n proxyServer?: string;\n /**\n * Bypass the proxy for the given list of hosts.\n */\n proxyBypassList?: string[];\n /**\n * Behavior definition for when downloading a file.\n *\n * @remarks\n * If not set, the default behavior will be used.\n */\n downloadBehavior?: DownloadBehavior;\n}\n\n/**\n * @internal\n */\nexport type BrowserCloseCallback = () => Promise<void> | void;\n\n/**\n * @public\n */\nexport type TargetFilterCallback = (target: Target) => boolean;\n\n/**\n * @internal\n */\nexport type IsPageTargetCallback = (target: Target) => boolean;\n\n/**\n * @internal\n */\nexport const WEB_PERMISSION_TO_PROTOCOL_PERMISSION = new Map<\n Permission,\n Protocol.Browser.PermissionType\n>([\n ['accelerometer', 'sensors'],\n ['ambient-light-sensor', 'sensors'],\n ['background-sync', 'backgroundSync'],\n ['camera', 'videoCapture'],\n ['clipboard-read', 'clipboardReadWrite'],\n ['clipboard-sanitized-write', 'clipboardSanitizedWrite'],\n ['clipboard-write', 'clipboardReadWrite'],\n ['geolocation', 'geolocation'],\n ['gyroscope', 'sensors'],\n ['idle-detection', 'idleDetection'],\n ['keyboard-lock', 'keyboardLock'],\n ['magnetometer', 'sensors'],\n ['microphone', 'audioCapture'],\n ['midi', 'midi'],\n ['notifications', 'notifications'],\n ['payment-handler', 'paymentHandler'],\n ['persistent-storage', 'durableStorage'],\n ['pointer-lock', 'pointerLock'],\n // chrome-specific permissions we have.\n ['midi-sysex', 'midiSysex'],\n]);\n\n/**\n * @public\n * @deprecated in favor of {@link PermissionDescriptor}.\n */\nexport type Permission =\n | 'accelerometer'\n | 'ambient-light-sensor'\n | 'background-sync'\n | 'camera'\n | 'clipboard-read'\n | 'clipboard-sanitized-write'\n | 'clipboard-write'\n | 'geolocation'\n | 'gyroscope'\n | 'idle-detection'\n | 'keyboard-lock'\n | 'magnetometer'\n | 'microphone'\n | 'midi-sysex'\n | 'midi'\n | 'notifications'\n | 'payment-handler'\n | 'persistent-storage'\n | 'pointer-lock';\n\n/**\n * @public\n */\nexport interface PermissionDescriptor {\n name: string;\n userVisibleOnly?: boolean;\n sysex?: boolean;\n panTiltZoom?: boolean;\n allowWithoutSanitization?: boolean;\n}\n\n/**\n * @public\n */\nexport type PermissionState = 'granted' | 'denied' | 'prompt';\n\n/**\n * @public\n */\nexport interface WaitForTargetOptions {\n /**\n * Maximum wait time in milliseconds. Pass `0` to disable the timeout.\n *\n * @defaultValue `30_000`\n */\n timeout?: number;\n\n /**\n * A signal object that allows you to cancel a waitFor call.\n */\n signal?: AbortSignal;\n}\n\n/**\n * All the events a {@link Browser | browser instance} may emit.\n *\n * @public\n */\nexport const enum BrowserEvent {\n /**\n * Emitted when Puppeteer gets disconnected from the browser instance. This\n * might happen because either:\n *\n * - The browser closes/crashes or\n * - {@link Browser.disconnect} was called.\n */\n Disconnected = 'disconnected',\n /**\n * Emitted when the URL of a target changes. Contains a {@link Target}\n * instance.\n *\n * @remarks Note that this includes target changes in all browser\n * contexts.\n */\n TargetChanged = 'targetchanged',\n /**\n * Emitted when a target is created, for example when a new page is opened by\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/open | window.open}\n * or by {@link Browser.newPage | browser.newPage}\n *\n * Contains a {@link Target} instance.\n *\n * @remarks Note that this includes target creations in all browser\n * contexts.\n */\n TargetCreated = 'targetcreated',\n /**\n * Emitted when a target is destroyed, for example when a page is closed.\n * Contains a {@link Target} instance.\n *\n * @remarks Note that this includes target destructions in all browser\n * contexts.\n */\n TargetDestroyed = 'targetdestroyed',\n /**\n * @internal\n */\n TargetDiscovered = 'targetdiscovered',\n}\n\n/**\n * @public\n */\nexport interface BrowserEvents extends Record<EventType, unknown> {\n [BrowserEvent.Disconnected]: undefined;\n [BrowserEvent.TargetCreated]: Target;\n [BrowserEvent.TargetDestroyed]: Target;\n [BrowserEvent.TargetChanged]: Target;\n /**\n * @internal\n */\n [BrowserEvent.TargetDiscovered]: Protocol.Target.TargetInfo;\n}\n\n/**\n * @public\n * @experimental\n */\nexport interface DebugInfo {\n pendingProtocolErrors: Error[];\n}\n\n/**\n * @public\n */\nexport type WindowState = 'normal' | 'minimized' | 'maximized' | 'fullscreen';\n\n/**\n * @public\n */\nexport interface WindowBounds {\n left?: number;\n top?: number;\n width?: number;\n height?: number;\n windowState?: WindowState;\n}\n\n/**\n * @public\n */\nexport type WindowId = string;\n\n/**\n * @public\n */\nexport type CreatePageOptions = (\n | {\n type?: 'tab';\n }\n | {\n type: 'window';\n windowBounds?: WindowBounds;\n }\n) & {\n /**\n * Whether to create the page in the background.\n *\n * @defaultValue `false`\n */\n background?: boolean;\n};\n\n/**\n * @public\n */\nexport interface ScreenOrientation {\n angle: number;\n type: string;\n}\n\n/**\n * @public\n */\nexport interface ScreenInfo {\n left: number;\n top: number;\n width: number;\n height: number;\n availLeft: number;\n availTop: number;\n availWidth: number;\n availHeight: number;\n devicePixelRatio: number;\n colorDepth: number;\n orientation: ScreenOrientation;\n isExtended: boolean;\n isInternal: boolean;\n isPrimary: boolean;\n label: string;\n id: string;\n}\n\n/**\n * @public\n */\nexport interface WorkAreaInsets {\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\n/**\n * @public\n */\nexport interface AddScreenParams {\n left: number;\n top: number;\n width: number;\n height: number;\n workAreaInsets?: WorkAreaInsets;\n devicePixelRatio?: number;\n rotation?: number;\n colorDepth?: number;\n label?: string;\n isInternal?: boolean;\n}\n/**\n * @public\n */\nexport interface ExtensionInstallOptions {\n /**\n * Whether to enable the extension in Incognito or OTR profiles in Chrome.\n */\n enabledInIncognito: boolean;\n}\n\n/**\n * If the user prefers opening an installed web app in a standalone window or in\n * a browser tab.\n *\n * @public\n */\nexport type PWADisplayMode = 'standalone' | 'browser';\n\n/**\n * Options for {@link Browser.installPWA}.\n *\n * @public\n */\nexport interface InstallPWAOptions {\n /**\n * The id from the web app's manifest file, commonly the URL of the site\n * installing the web app. See\n * {@link https://web.dev/learn/pwa/web-app-manifest | Web app manifest}.\n */\n manifestId: string;\n /**\n * The URL used to install the app, or the URL of its signed web bundle.\n *\n * This is required because the browser-scoped CDP session has no associated\n * page from which Chromium could derive an install URL.\n */\n installUrlOrBundleUrl: string;\n /**\n * Whether the app should open in a standalone window or a browser tab.\n *\n * @remarks\n *\n * `PWA.install` alone leaves the app at Chromium's default display mode\n * (`browser`); setting this chains a `PWA.changeAppUserSettings` call to apply\n * the preference.\n */\n displayMode?: PWADisplayMode;\n}\n\n/**\n * Options for {@link Browser.uninstallPWA}.\n *\n * @public\n */\nexport interface UninstallPWAOptions {\n /**\n * The id from the web app's manifest file.\n */\n manifestId: string;\n}\n\n/**\n * Options for {@link Browser.launchPWA}.\n *\n * @public\n */\nexport interface LaunchPWAOptions {\n /**\n * The id from the web app's manifest file.\n */\n manifestId: string;\n /**\n * An optional URL within the app's scope to launch. Defaults to the app's\n * start URL.\n */\n url?: string;\n /**\n * Maximum time in milliseconds to wait for the app's page target to appear.\n * Defaults to 30 seconds. Pass `0` to disable the timeout.\n */\n timeout?: number;\n}\n\n/**\n * Options for {@link Browser.getPWAState}.\n *\n * @public\n */\nexport interface GetPWAStateOptions {\n /**\n * The id from the web app's manifest file.\n */\n manifestId: string;\n}\n\n/**\n * The OS-integration state of an installed web app, returned by\n * {@link Browser.getPWAState}.\n *\n * @public\n */\nexport interface PWAState {\n /**\n * The current badge count shown on the app icon.\n */\n badgeCount: number;\n /**\n * The file handlers registered by the app with the OS.\n */\n fileHandlers: Protocol.PWA.FileHandler[];\n}\n\n/**\n * {@link Browser} represents a browser instance that is either:\n *\n * - connected to via {@link Puppeteer.connect} or\n * - launched by {@link PuppeteerNode.launch}.\n *\n * {@link Browser} {@link EventEmitter.emit | emits} various events which are\n * documented in the {@link BrowserEvent} enum.\n *\n * @example Using a {@link Browser} to create a {@link Page}:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.goto('https://example.com');\n * await browser.close();\n * ```\n *\n * @example Disconnecting from and reconnecting to a {@link Browser}:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * // Store the endpoint to be able to reconnect to the browser.\n * const browserWSEndpoint = browser.wsEndpoint();\n * // Disconnect puppeteer from the browser.\n * await browser.disconnect();\n *\n * // Use the endpoint to reestablish a connection\n * const browser2 = await puppeteer.connect({browserWSEndpoint});\n * // Close the browser.\n * await browser2.close();\n * ```\n *\n * @public\n */\nexport abstract class Browser extends EventEmitter<BrowserEvents> {\n #logger: Logger;\n\n /**\n * @internal\n */\n constructor(logger: Logger) {\n super(undefined, logger);\n this.#logger = logger;\n }\n\n /**\n * @internal\n */\n protected get logger(): Logger {\n return this.#logger;\n }\n\n /**\n * Gets the associated\n * {@link https://nodejs.org/api/child_process.html#class-childprocess | ChildProcess}.\n *\n * @returns `null` if this instance was connected to via\n * {@link Puppeteer.connect}.\n */\n abstract process(): ChildProcess | null;\n\n /**\n * Creates a new {@link BrowserContext | browser context}.\n *\n * This won't share cookies/cache with other {@link BrowserContext | browser contexts}.\n *\n * @example\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * // Create a new browser context.\n * const context = await browser.createBrowserContext();\n * // Create a new page in a pristine context.\n * const page = await context.newPage();\n * // Do stuff\n * await page.goto('https://example.com');\n * ```\n */\n abstract createBrowserContext(\n options?: BrowserContextOptions,\n ): Promise<BrowserContext>;\n\n /**\n * Gets a list of open {@link BrowserContext | browser contexts}.\n *\n * In a newly-created {@link Browser | browser}, this will return a single\n * instance of {@link BrowserContext}.\n */\n abstract browserContexts(): BrowserContext[];\n\n /**\n * Gets the default {@link BrowserContext | browser context}.\n *\n * @remarks The default {@link BrowserContext | browser context} cannot be\n * closed.\n */\n abstract defaultBrowserContext(): BrowserContext;\n\n /**\n * Gets the WebSocket URL to connect to this {@link Browser | browser}.\n *\n * This is usually used with {@link Puppeteer.connect}.\n *\n * You can find the debugger URL (`webSocketDebuggerUrl`) from\n * `http://HOST:PORT/json/version`.\n *\n * See {@link https://chromedevtools.github.io/devtools-protocol/#how-do-i-access-the-browser-target | browser endpoint}\n * for more information.\n *\n * @remarks The format is always `ws://HOST:PORT/devtools/browser/<id>`.\n */\n abstract wsEndpoint(): string;\n\n /**\n * Creates a new {@link Page | page} in the\n * {@link Browser.defaultBrowserContext | default browser context}.\n */\n abstract newPage(options?: CreatePageOptions): Promise<Page>;\n\n /**\n * Gets the specified window {@link WindowBounds | bounds}.\n */\n abstract getWindowBounds(windowId: WindowId): Promise<WindowBounds>;\n\n /**\n * Sets the specified window {@link WindowBounds | bounds}.\n */\n abstract setWindowBounds(\n windowId: WindowId,\n windowBounds: WindowBounds,\n ): Promise<void>;\n\n /**\n * Gets all active {@link Target | targets}.\n *\n * In case of multiple {@link BrowserContext | browser contexts}, this returns\n * all {@link Target | targets} in all\n * {@link BrowserContext | browser contexts}.\n */\n abstract targets(): Target[];\n\n /**\n * Gets the {@link Target | target} associated with the\n * {@link Browser.defaultBrowserContext | default browser context}).\n */\n abstract target(): Target;\n\n /**\n * Waits until a {@link Target | target} matching the given `predicate`\n * appears and returns it.\n *\n * This will look all open {@link BrowserContext | browser contexts}.\n *\n * @example Finding a target for a page opened via `window.open`:\n *\n * ```ts\n * await page.evaluate(() => window.open('https://www.example.com/'));\n * const newWindowTarget = await browser.waitForTarget(\n * target => target.url() === 'https://www.example.com/',\n * );\n * ```\n */\n async waitForTarget(\n predicate: (x: Target) => boolean | Promise<boolean>,\n options: WaitForTargetOptions = {},\n ): Promise<Target> {\n const {timeout: ms = 30000, signal} = options;\n return await firstValueFrom(\n merge(\n fromEmitterEvent(this, BrowserEvent.TargetCreated),\n fromEmitterEvent(this, BrowserEvent.TargetChanged),\n from(this.targets()),\n ).pipe(\n filterAsync(predicate),\n raceWith(fromAbortSignal(signal), timeout(ms)),\n ),\n );\n }\n\n /**\n * Gets a list of all open {@link Page | pages} inside this {@link Browser}.\n *\n * If there are multiple {@link BrowserContext | browser contexts}, this\n * returns all {@link Page | pages} in all\n * {@link BrowserContext | browser contexts}.\n *\n * @param includeAll - experimental, setting to true includes all kinds of pages.\n *\n * @remarks Non-visible {@link Page | pages}, such as `\"background_page\"`,\n * will not be listed here. You can find them using {@link Target.page}.\n */\n async pages(includeAll = false): Promise<Page[]> {\n const contextPages = await Promise.all(\n this.browserContexts().map(context => {\n return context.pages(includeAll);\n }),\n );\n // Flatten array.\n return contextPages.reduce((acc, x) => {\n return acc.concat(x);\n }, []);\n }\n\n /**\n * Gets a string representing this {@link Browser | browser's} name and\n * version.\n *\n * For headless browser, this is similar to `\"HeadlessChrome/61.0.3153.0\"`. For\n * non-headless or new-headless, this is similar to `\"Chrome/61.0.3153.0\"`. For\n * Firefox, it is similar to `\"Firefox/116.0a1\"`.\n *\n * The format of {@link Browser.version} might change with future releases of\n * browsers.\n */\n abstract version(): Promise<string>;\n\n /**\n * Gets this {@link Browser | browser's} original user agent.\n *\n * {@link Page | Pages} can override the user agent with\n * {@link Page.(setUserAgent:2) }.\n *\n */\n abstract userAgent(): Promise<string>;\n\n /**\n * Closes this {@link Browser | browser} and all associated\n * {@link Page | pages}.\n */\n abstract close(): Promise<void>;\n\n /**\n * Disconnects Puppeteer from this {@link Browser | browser}, but leaves the\n * process running.\n */\n abstract disconnect(): Promise<void>;\n\n /**\n * Returns all cookies in the default {@link BrowserContext}.\n *\n * @remarks\n *\n * Shortcut for\n * {@link BrowserContext.cookies | browser.defaultBrowserContext().cookies()}.\n */\n async cookies(): Promise<Cookie[]> {\n return await this.defaultBrowserContext().cookies();\n }\n\n /**\n * Sets cookies in the default {@link BrowserContext}.\n *\n * @remarks\n *\n * Shortcut for\n * {@link BrowserContext.setCookie | browser.defaultBrowserContext().setCookie()}.\n */\n async setCookie(...cookies: CookieData[]): Promise<void> {\n return await this.defaultBrowserContext().setCookie(...cookies);\n }\n\n /**\n * Removes cookies from the default {@link BrowserContext}.\n *\n * @remarks\n *\n * Shortcut for\n * {@link BrowserContext.deleteCookie | browser.defaultBrowserContext().deleteCookie()}.\n */\n async deleteCookie(...cookies: Cookie[]): Promise<void> {\n return await this.defaultBrowserContext().deleteCookie(...cookies);\n }\n\n /**\n * Deletes cookies matching the provided filters from the default\n * {@link BrowserContext}.\n *\n * @remarks\n *\n * Shortcut for\n * {@link BrowserContext.deleteMatchingCookies |\n * browser.defaultBrowserContext().deleteMatchingCookies()}.\n */\n async deleteMatchingCookies(\n ...filters: DeleteCookiesRequest[]\n ): Promise<void> {\n return await this.defaultBrowserContext().deleteMatchingCookies(...filters);\n }\n\n /**\n * Sets the permission for a specific origin in the default\n * {@link BrowserContext}.\n *\n * @remarks\n *\n * Shortcut for\n * {@link BrowserContext.setPermission |\n * browser.defaultBrowserContext().setPermission()}.\n *\n * @param origin - The origin to set the permission for.\n * @param permission - The permission descriptor.\n * @param state - The state of the permission.\n *\n * @public\n */\n async setPermission(\n origin: string,\n ...permissions: Array<{\n permission: PermissionDescriptor;\n state: PermissionState;\n }>\n ): Promise<void> {\n return await this.defaultBrowserContext().setPermission(\n origin,\n ...permissions,\n );\n }\n\n /**\n * Installs an extension and returns the ID.\n */\n abstract installExtension(\n path: string,\n options?: ExtensionInstallOptions,\n ): Promise<string>;\n\n /**\n * Uninstalls an extension.\n */\n abstract uninstallExtension(id: string): Promise<void>;\n\n /**\n * Installs a Progressive Web App (PWA) and returns its manifest id.\n *\n * @remarks\n *\n * Only available when connected to the browser over a pipe connection. Set\n * `pipe: true` in {@link PuppeteerNode.launch | puppeteer.launch}; the launch\n * option defaults to `false`. The underlying `PWA` CDP domain is not exposed\n * over a WebSocket connection.\n *\n * The returned manifest id echoes {@link InstallPWAOptions.manifestId}, so it\n * can be passed directly to {@link Browser.launchPWA},\n * {@link Browser.getPWAState}, or {@link Browser.uninstallPWA}.\n */\n abstract installPWA(options: InstallPWAOptions): Promise<string>;\n\n /**\n * Uninstalls a previously installed Progressive Web App (PWA).\n *\n * @remarks\n *\n * Only available over a pipe connection. See {@link Browser.installPWA}.\n */\n abstract uninstallPWA(options: UninstallPWAOptions): Promise<void>;\n\n /**\n * Launches an installed Progressive Web App (PWA) and resolves with the\n * {@link Page | page} backing the app window.\n *\n * @remarks\n *\n * Only available over a pipe connection. See {@link Browser.installPWA}.\n *\n * `PWA.launch` resolves with the id of the launched _tab_ target. Puppeteer\n * does not expose tab targets through {@link Browser.targets}; this method\n * instead resolves with the tab's child page target (the app's web contents).\n * If Chromium focuses an existing app window, this returns that window's\n * existing page.\n */\n abstract launchPWA(options: LaunchPWAOptions): Promise<Page>;\n\n /**\n * Returns the OS-integration state of an installed Progressive Web App (PWA),\n * such as its badge count and registered file handlers.\n *\n * @remarks\n *\n * Only available over a pipe connection. See {@link Browser.installPWA}.\n * Meaningful only for an app that is currently installed; querying an\n * unknown manifest id rejects.\n */\n abstract getPWAState(options: GetPWAStateOptions): Promise<PWAState>;\n\n /**\n * Gets a list of {@link ScreenInfo | screen information objects}.\n */\n abstract screens(): Promise<ScreenInfo[]>;\n\n /**\n * Adds a new screen, returns the added {@link ScreenInfo | screen information object}.\n *\n * @remarks\n *\n * Only supported in headless mode.\n */\n abstract addScreen(params: AddScreenParams): Promise<ScreenInfo>;\n\n /**\n * Removes a screen.\n *\n * @remarks\n *\n * Only supported in headless mode. Fails if the primary screen id is specified.\n */\n abstract removeScreen(screenId: string): Promise<void>;\n\n /**\n * Whether Puppeteer is connected to this {@link Browser | browser}.\n */\n abstract get connected(): boolean;\n\n override [disposeSymbol](): void {\n return void this[asyncDisposeSymbol]().catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }\n\n override async [asyncDisposeSymbol](): Promise<void> {\n if (this.process()) {\n await this.close();\n } else {\n await this.disconnect();\n }\n await super[asyncDisposeSymbol]();\n }\n\n /**\n * @internal\n */\n abstract get protocol(): ProtocolType;\n\n /**\n * Get debug information from Puppeteer.\n *\n * @remarks\n *\n * Currently, includes pending protocol calls. In the future, we might add more info.\n *\n * @public\n * @experimental\n */\n abstract get debugInfo(): DebugInfo;\n\n /**\n * @internal\n */\n abstract isNetworkEnabled(): boolean;\n\n /**\n * Retrieves a map of all extensions installed in the browser, where the keys\n * are extension IDs and the values are the corresponding {@link Extension} instances.\n *\n * @public\n */\n abstract extensions(): Promise<Map<string, Extension>>;\n /**\n * @internal\n */\n abstract isIssuesEnabled(): boolean;\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {TimeoutError} from '../common/Errors.js';\n\n/**\n * @internal\n */\nexport interface DeferredOptions {\n message: string;\n timeout: number;\n}\n\n/**\n * Creates and returns a deferred object along with the resolve/reject functions.\n *\n * If the deferred has not been resolved/rejected within the `timeout` period,\n * the deferred gets resolves with a timeout error. `timeout` has to be greater than 0 or\n * it is ignored.\n *\n * @internal\n */\nexport class Deferred<T, V extends Error = Error> {\n static create<R, X extends Error = Error>(\n opts?: DeferredOptions,\n ): Deferred<R, X> {\n return new Deferred<R, X>(opts);\n }\n\n static async race<R>(\n awaitables: Array<Promise<R> | Deferred<R>>,\n ): Promise<R> {\n const deferredWithTimeout = new Set<Deferred<R>>();\n try {\n const promises = awaitables.map(value => {\n if (value instanceof Deferred) {\n if (value.#timeoutId) {\n deferredWithTimeout.add(value);\n }\n\n return value.valueOrThrow();\n }\n\n return value;\n });\n // eslint-disable-next-line no-restricted-syntax\n return await Promise.race(promises);\n } finally {\n for (const deferred of deferredWithTimeout) {\n // We need to stop the timeout else\n // Node.JS will keep running the event loop till the\n // timer executes\n deferred.reject(new Error('Timeout cleared'));\n }\n }\n }\n\n #isResolved = false;\n #isRejected = false;\n #value: T | V | TimeoutError | undefined;\n // SAFETY: This is ensured by #taskPromise.\n #resolve!: (value: void) => void;\n // TODO: Switch to Promise.withResolvers with Node 22\n #taskPromise = new Promise<void>(resolve => {\n this.#resolve = resolve;\n });\n #timeoutId: ReturnType<typeof setTimeout> | undefined;\n #timeoutError: TimeoutError | undefined;\n\n constructor(opts?: DeferredOptions) {\n if (opts && opts.timeout > 0) {\n this.#timeoutError = new TimeoutError(opts.message);\n this.#timeoutId = setTimeout(() => {\n this.reject(this.#timeoutError!);\n }, opts.timeout);\n }\n }\n\n #finish(value: T | V | TimeoutError) {\n clearTimeout(this.#timeoutId);\n this.#value = value;\n this.#resolve();\n }\n\n resolve(value: T): void {\n if (this.#isRejected || this.#isResolved) {\n return;\n }\n this.#isResolved = true;\n this.#finish(value);\n }\n\n reject(error: V | TimeoutError): void {\n if (this.#isRejected || this.#isResolved) {\n return;\n }\n this.#isRejected = true;\n this.#finish(error);\n }\n\n resolved(): boolean {\n return this.#isResolved;\n }\n\n finished(): boolean {\n return this.#isResolved || this.#isRejected;\n }\n\n value(): T | V | TimeoutError | undefined {\n return this.#value;\n }\n\n #promise: Promise<T> | undefined;\n valueOrThrow(): Promise<T> {\n if (!this.#promise) {\n this.#promise = (async () => {\n await this.#taskPromise;\n if (this.#isRejected) {\n throw this.#value;\n }\n return this.#value as T;\n })();\n }\n return this.#promise;\n }\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {Deferred} from './Deferred.js';\nimport {disposeSymbol} from './disposable.js';\n\n/**\n * @internal\n */\nclass MutexGuard {\n #mutex: Mutex;\n #onRelease?: () => void;\n constructor(mutex: Mutex, onRelease?: () => void) {\n this.#mutex = mutex;\n this.#onRelease = onRelease;\n }\n [disposeSymbol](): void {\n this.#onRelease?.();\n return this.#mutex.release();\n }\n}\n\n/**\n * @internal\n */\nexport class Mutex {\n static Guard = MutexGuard;\n\n #locked = false;\n #acquirers: Array<() => void> = [];\n\n // This is FIFO.\n async acquire(\n onRelease?: () => void,\n ): Promise<InstanceType<typeof Mutex.Guard>> {\n if (!this.#locked) {\n this.#locked = true;\n return new Mutex.Guard(this, onRelease);\n }\n const deferred = Deferred.create<void>();\n this.#acquirers.push(deferred.resolve.bind(deferred));\n await deferred.valueOrThrow();\n return new Mutex.Guard(this, onRelease);\n }\n\n release(): void {\n const resolve = this.#acquirers.shift();\n if (!resolve) {\n this.#locked = false;\n return;\n }\n resolve();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n firstValueFrom,\n from,\n merge,\n raceWith,\n} from '../../third_party/rxjs/rxjs.js';\nimport type {\n Cookie,\n CookieData,\n DeleteCookiesRequest,\n} from '../common/Cookie.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {EventEmitter, type EventType} from '../common/EventEmitter.js';\nimport {fromEmitterEvent, filterAsync, timeout} from '../common/util.js';\nimport {asyncDisposeSymbol, disposeSymbol} from '../util/disposable.js';\nimport {Mutex} from '../util/Mutex.js';\n\nimport type {\n Browser,\n CreatePageOptions,\n Permission,\n PermissionDescriptor,\n PermissionState,\n WaitForTargetOptions,\n} from './Browser.js';\nimport type {Page} from './Page.js';\nimport type {Target} from './Target.js';\n\n/**\n * @public\n */\nexport const enum BrowserContextEvent {\n /**\n * Emitted when the url of a target inside the browser context changes.\n * Contains a {@link Target} instance.\n */\n TargetChanged = 'targetchanged',\n\n /**\n * Emitted when a target is created within the browser context, for example\n * when a new page is opened by\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/open | window.open}\n * or by {@link BrowserContext.newPage | browserContext.newPage}\n *\n * Contains a {@link Target} instance.\n */\n TargetCreated = 'targetcreated',\n /**\n * Emitted when a target is destroyed within the browser context, for example\n * when a page is closed. Contains a {@link Target} instance.\n */\n TargetDestroyed = 'targetdestroyed',\n}\n\n/**\n * @public\n */\nexport interface BrowserContextEvents extends Record<EventType, unknown> {\n [BrowserContextEvent.TargetChanged]: Target;\n [BrowserContextEvent.TargetCreated]: Target;\n [BrowserContextEvent.TargetDestroyed]: Target;\n}\n\n/**\n * {@link BrowserContext} represents individual user contexts within a\n * {@link Browser | browser}.\n *\n * When a {@link Browser | browser} is launched, it has at least one default\n * {@link BrowserContext | browser context}. Others can be created\n * using {@link Browser.createBrowserContext}. Each context has isolated storage\n * (cookies/localStorage/etc.)\n *\n * {@link BrowserContext} {@link EventEmitter | emits} various events which are\n * documented in the {@link BrowserContextEvent} enum.\n *\n * If a {@link Page | page} opens another {@link Page | page}, e.g. using\n * `window.open`, the popup will belong to the parent {@link Page.browserContext\n * | page's browser context}.\n *\n * @example Creating a new {@link BrowserContext | browser context}:\n *\n * ```ts\n * // Create a new browser context\n * const context = await browser.createBrowserContext();\n * // Create a new page inside context.\n * const page = await context.newPage();\n * // ... do stuff with page ...\n * await page.goto('https://example.com');\n * // Dispose context once it's no longer needed.\n * await context.close();\n * ```\n *\n * @remarks\n *\n * In Chrome all non-default contexts are incognito,\n * and {@link Browser.defaultBrowserContext | default browser context}\n * might be incognito if you provide the `--incognito` argument when launching\n * the browser.\n *\n * @public\n */\n\nexport abstract class BrowserContext extends EventEmitter<BrowserContextEvents> {\n #logger: Logger;\n\n /**\n * @internal\n */\n constructor(logger: Logger) {\n super(undefined, logger);\n this.#logger = logger;\n }\n\n /**\n * @internal\n */\n protected get logger(): Logger {\n return this.#logger;\n }\n\n /**\n * Gets all active {@link Target | targets} inside this\n * {@link BrowserContext | browser context}.\n */\n abstract targets(): Target[];\n\n /**\n * If defined, indicates an ongoing screenshot operation.\n */\n #pageScreenshotMutex?: Mutex;\n #screenshotOperationsCount = 0;\n\n /**\n * @internal\n */\n startScreenshot(): Promise<InstanceType<typeof Mutex.Guard>> {\n const mutex = this.#pageScreenshotMutex || new Mutex();\n this.#pageScreenshotMutex = mutex;\n this.#screenshotOperationsCount++;\n return mutex.acquire(() => {\n this.#screenshotOperationsCount--;\n if (this.#screenshotOperationsCount === 0) {\n // Remove the mutex to indicate no ongoing screenshot operation.\n this.#pageScreenshotMutex = undefined;\n }\n });\n }\n\n /**\n * @internal\n */\n waitForScreenshotOperations():\n Promise<InstanceType<typeof Mutex.Guard>> | undefined {\n return this.#pageScreenshotMutex?.acquire();\n }\n\n /**\n * Waits until a {@link Target | target} matching the given `predicate`\n * appears and returns it.\n *\n * This will look all open {@link BrowserContext | browser contexts}.\n *\n * @example Finding a target for a page opened via `window.open`:\n *\n * ```ts\n * await page.evaluate(() => window.open('https://www.example.com/'));\n * const newWindowTarget = await browserContext.waitForTarget(\n * target => target.url() === 'https://www.example.com/',\n * );\n * ```\n */\n async waitForTarget(\n predicate: (x: Target) => boolean | Promise<boolean>,\n options: WaitForTargetOptions = {},\n ): Promise<Target> {\n const {timeout: ms = 30000} = options;\n return await firstValueFrom(\n merge(\n fromEmitterEvent(this, BrowserContextEvent.TargetCreated),\n fromEmitterEvent(this, BrowserContextEvent.TargetChanged),\n from(this.targets()),\n ).pipe(filterAsync(predicate), raceWith(timeout(ms))),\n );\n }\n\n /**\n * Gets a list of all open {@link Page | pages} inside this\n * {@link BrowserContext | browser context}.\n *\n * @param includeAll - experimental, setting to true includes all kinds of pages.\n *\n * @remarks Non-visible {@link Page | pages}, such as `\"background_page\"`,\n * will not be listed here. You can find them using {@link Target.page}.\n */\n abstract pages(includeAll?: boolean): Promise<Page[]>;\n\n /**\n * Grants this {@link BrowserContext | browser context} the given\n * `permissions` within the given `origin`.\n *\n * @example Overriding permissions in the\n * {@link Browser.defaultBrowserContext | default browser context}:\n *\n * ```ts\n * const context = browser.defaultBrowserContext();\n * await context.overridePermissions('https://html5demos.com', [\n * 'geolocation',\n * ]);\n * ```\n *\n * @param origin - The origin to grant permissions to, e.g.\n * \"https://example.com\".\n * @param permissions - An array of permissions to grant. All permissions that\n * are not listed here will be automatically denied.\n *\n * @deprecated in favor of {@link BrowserContext.setPermission}.\n */\n abstract overridePermissions(\n origin: string,\n permissions: Permission[],\n ): Promise<void>;\n\n /**\n * Sets the permission for a specific origin.\n *\n * @param origin - The origin to set the permission for.\n * @param permission - The permission descriptor.\n * @param state - The state of the permission.\n *\n * @public\n */\n abstract setPermission(\n origin: string | '*',\n ...permissions: Array<{\n permission: PermissionDescriptor;\n state: PermissionState;\n }>\n ): Promise<void>;\n\n /**\n * Clears all permission overrides for this\n * {@link BrowserContext | browser context}.\n *\n * @example Clearing overridden permissions in the\n * {@link Browser.defaultBrowserContext | default browser context}:\n *\n * ```ts\n * const context = browser.defaultBrowserContext();\n * context.overridePermissions('https://example.com', ['clipboard-read']);\n * // do stuff ..\n * context.clearPermissionOverrides();\n * ```\n */\n abstract clearPermissionOverrides(): Promise<void>;\n\n /**\n * Creates a new {@link Page | page} in this\n * {@link BrowserContext | browser context}.\n */\n abstract newPage(options?: CreatePageOptions): Promise<Page>;\n\n /**\n * Gets the {@link Browser | browser} associated with this\n * {@link BrowserContext | browser context}.\n */\n abstract browser(): Browser;\n\n /**\n * Closes this {@link BrowserContext | browser context} and all associated\n * {@link Page | pages}.\n *\n * @remarks The\n * {@link Browser.defaultBrowserContext | default browser context} cannot be\n * closed.\n */\n abstract close(): Promise<void>;\n\n /**\n * Gets all cookies in the browser context.\n */\n abstract cookies(): Promise<Cookie[]>;\n\n /**\n * Sets a cookie in the browser context.\n */\n abstract setCookie(...cookies: CookieData[]): Promise<void>;\n\n /**\n * Removes cookie in this browser context.\n *\n * @param cookies - Complete {@link Cookie | cookie} object to be removed.\n */\n async deleteCookie(...cookies: Cookie[]): Promise<void> {\n return await this.setCookie(\n ...cookies.map(cookie => {\n return {\n ...cookie,\n expires: 1,\n };\n }),\n );\n }\n\n /**\n * Deletes cookies matching the provided filters in this browser context.\n *\n * @param filters - {@link DeleteCookiesRequest}\n */\n async deleteMatchingCookies(\n ...filters: DeleteCookiesRequest[]\n ): Promise<void> {\n const cookies = await this.cookies();\n const cookiesToDelete = cookies.filter(cookie => {\n return filters.some(filter => {\n if (filter.name === cookie.name) {\n if (filter.domain !== undefined && filter.domain === cookie.domain) {\n return true;\n }\n\n if (filter.path !== undefined && filter.path === cookie.path) {\n return true;\n }\n if (\n filter.partitionKey !== undefined &&\n cookie.partitionKey !== undefined\n ) {\n if (typeof cookie.partitionKey !== 'object') {\n throw new Error('Unexpected string partition key');\n }\n if (typeof filter.partitionKey === 'string') {\n if (filter.partitionKey === cookie.partitionKey?.sourceOrigin) {\n return true;\n }\n } else {\n if (\n filter.partitionKey.sourceOrigin ===\n cookie.partitionKey?.sourceOrigin\n ) {\n return true;\n }\n }\n }\n if (filter.url !== undefined) {\n const url = new URL(filter.url);\n if (\n url.hostname === cookie.domain &&\n url.pathname === cookie.path\n ) {\n return true;\n }\n }\n return true;\n }\n return false;\n });\n });\n await this.deleteCookie(...cookiesToDelete);\n }\n\n /**\n * Whether this {@link BrowserContext | browser context} is closed.\n */\n get closed(): boolean {\n return !this.browser().browserContexts().includes(this);\n }\n\n /**\n * Identifier for this {@link BrowserContext | browser context}.\n */\n get id(): string | undefined {\n return undefined;\n }\n\n override [disposeSymbol](): void {\n return void this[asyncDisposeSymbol]().catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }\n\n override async [asyncDisposeSymbol](): Promise<void> {\n await this.close();\n await super[asyncDisposeSymbol]();\n }\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {ProtocolMapping} from 'devtools-protocol/types/protocol-mapping.js';\n\nimport type {Connection} from '../cdp/Connection.js';\nimport {EventEmitter, type EventType} from '../common/EventEmitter.js';\n\n/**\n * @public\n */\nexport type CDPEvents = {\n [\n Property in keyof ProtocolMapping.Events\n ]: ProtocolMapping.Events[Property][0];\n};\n\n/**\n * Events that the CDPSession class emits.\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace CDPSessionEvent {\n /** @internal */\n export const Disconnected = Symbol('CDPSession.Disconnected');\n /** @internal */\n export const Swapped = Symbol('CDPSession.Swapped');\n /**\n * Emitted when the session is ready to be configured during the auto-attach\n * process. Right after the event is handled, the session will be resumed.\n *\n * @internal\n */\n export const Ready = Symbol('CDPSession.Ready');\n export const SessionAttached = 'sessionattached' as const;\n export const SessionDetached = 'sessiondetached' as const;\n}\n\n/**\n * @public\n */\nexport interface CDPSessionEvents\n extends CDPEvents, Record<EventType, unknown> {\n /** @internal */\n [CDPSessionEvent.Disconnected]: undefined;\n /** @internal */\n [CDPSessionEvent.Swapped]: CDPSession;\n /** @internal */\n [CDPSessionEvent.Ready]: CDPSession;\n [CDPSessionEvent.SessionAttached]: CDPSession;\n [CDPSessionEvent.SessionDetached]: CDPSession;\n}\n\n/**\n * @public\n */\nexport interface CommandOptions {\n timeout: number;\n}\n\n/**\n * The `CDPSession` instances are used to talk raw Chrome Devtools Protocol.\n *\n * @remarks\n *\n * Protocol methods can be called with {@link CDPSession.send} method and protocol\n * events can be subscribed to with `CDPSession.on` method.\n *\n * Useful links: {@link https://chromedevtools.github.io/devtools-protocol/ | DevTools Protocol Viewer}\n * and {@link https://github.com/aslushnikov/getting-started-with-cdp/blob/HEAD/README.md | Getting Started with DevTools Protocol}.\n *\n * @example\n *\n * ```ts\n * const client = await page.createCDPSession();\n * await client.send('Animation.enable');\n * client.on('Animation.animationCreated', () =>\n * console.log('Animation created!'),\n * );\n * const response = await client.send('Animation.getPlaybackRate');\n * console.log('playback rate is ' + response.playbackRate);\n * await client.send('Animation.setPlaybackRate', {\n * playbackRate: response.playbackRate / 2,\n * });\n * ```\n *\n * @public\n */\nexport abstract class CDPSession extends EventEmitter<CDPSessionEvents> {\n /**\n * @internal\n */\n constructor() {\n super();\n }\n\n /**\n * The underlying connection for this session, if any.\n *\n * @public\n */\n abstract connection(): Connection | undefined;\n\n /**\n * True if the session has been detached, false otherwise.\n *\n * @public\n */\n abstract get detached(): boolean;\n\n /**\n * Parent session in terms of CDP's auto-attach mechanism.\n *\n * @internal\n */\n parentSession(): CDPSession | undefined {\n return undefined;\n }\n\n abstract send<T extends keyof ProtocolMapping.Commands>(\n method: T,\n params?: ProtocolMapping.Commands[T]['paramsType'][0],\n options?: CommandOptions,\n ): Promise<ProtocolMapping.Commands[T]['returnType']>;\n\n /**\n * Detaches the cdpSession from the target. Once detached, the cdpSession object\n * won't emit any events and can't be used to send messages.\n */\n abstract detach(): Promise<void>;\n\n /**\n * Returns the session's id.\n */\n abstract id(): string;\n}\n","/**\n * @license\n * Copyright 2025 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {WaitTimeoutOptions} from './Page.js';\n\n/**\n * Device in a request prompt.\n *\n * @public\n */\nexport interface DeviceRequestPromptDevice {\n /**\n * Device id during a prompt.\n */\n id: string;\n\n /**\n * Device name as it appears in a prompt.\n */\n name: string;\n}\n\n/**\n * Device request prompts let you respond to the page requesting for a device\n * through an API like WebBluetooth.\n *\n * @remarks\n * `DeviceRequestPrompt` instances are returned via the\n * {@link Page.waitForDevicePrompt} method.\n *\n * @example\n *\n * ```ts\n * const [devicePrompt] = Promise.all([\n * page.waitForDevicePrompt(),\n * page.click('#connect-bluetooth'),\n * ]);\n * await devicePrompt.select(\n * await devicePrompt.waitForDevice(({name}) => name.includes('My Device')),\n * );\n * ```\n *\n * @public\n */\nexport abstract class DeviceRequestPrompt {\n /**\n * Current list of selectable devices.\n */\n readonly devices: DeviceRequestPromptDevice[] = [];\n\n /**\n * Resolve to the first device in the prompt matching a filter.\n */\n abstract waitForDevice(\n filter: (device: DeviceRequestPromptDevice) => boolean,\n options?: WaitTimeoutOptions,\n ): Promise<DeviceRequestPromptDevice>;\n\n /**\n * Select a device in the prompt's list.\n */\n abstract select(device: DeviceRequestPromptDevice): Promise<void>;\n\n /**\n * Cancel the prompt.\n */\n abstract cancel(): Promise<void>;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {assert} from '../util/assert.js';\n\n/**\n * Dialog instances are dispatched by the {@link Page} via the `dialog` event.\n *\n * @remarks\n *\n * @example\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * page.on('dialog', async dialog => {\n * console.log(dialog.message());\n * await dialog.dismiss();\n * await browser.close();\n * });\n * await page.evaluate(() => alert('1'));\n * ```\n *\n * @public\n */\nexport abstract class Dialog {\n #type: Protocol.Page.DialogType;\n #message: string;\n #defaultValue: string;\n #handled = false;\n\n /**\n * A boolean value indicating whether the dialog has been handled.\n */\n public get handled(): boolean {\n return this.#handled;\n }\n\n protected set handled(handled: boolean) {\n this.#handled = handled;\n }\n\n /**\n * @internal\n */\n constructor(\n type: Protocol.Page.DialogType,\n message: string,\n defaultValue = '',\n ) {\n this.#type = type;\n this.#message = message;\n this.#defaultValue = defaultValue;\n }\n\n /**\n * The type of the dialog.\n */\n type(): Protocol.Page.DialogType {\n return this.#type;\n }\n\n /**\n * The message displayed in the dialog.\n */\n message(): string {\n return this.#message;\n }\n\n /**\n * The default value of the prompt, or an empty string if the dialog\n * is not a `prompt`.\n */\n defaultValue(): string {\n return this.#defaultValue;\n }\n\n /**\n * @internal\n */\n protected abstract handle(options: {\n accept: boolean;\n text?: string;\n }): Promise<void>;\n\n /**\n * A promise that resolves when the dialog has been accepted.\n *\n * @param promptText - optional text that will be entered in the dialog\n * prompt. Has no effect if the dialog's type is not `prompt`.\n *\n */\n async accept(promptText?: string): Promise<void> {\n assert(!this.handled, 'Cannot accept dialog which is already handled!');\n this.handled = true;\n await this.handle({\n accept: true,\n text: promptText,\n });\n }\n\n /**\n * A promise which will resolve once the dialog has been dismissed\n */\n async dismiss(): Promise<void> {\n assert(!this.handled, 'Cannot dismiss dialog which is already handled!');\n this.handled = true;\n await this.handle({\n accept: false,\n });\n }\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {AwaitableIterable} from '../common/types.js';\n\n/**\n * @internal\n */\nexport class AsyncIterableUtil {\n static async *map<T, U>(\n iterable: AwaitableIterable<T>,\n map: (item: T) => Promise<U>,\n ): AsyncIterable<U> {\n for await (const value of iterable) {\n yield await map(value);\n }\n }\n\n static async *flatMap<T, U>(\n iterable: AwaitableIterable<T>,\n map: (item: T) => AwaitableIterable<U>,\n ): AsyncIterable<U> {\n for await (const value of iterable) {\n yield* map(value);\n }\n }\n\n static async collect<T>(iterable: AwaitableIterable<T>): Promise<T[]> {\n const result = [];\n for await (const value of iterable) {\n result.push(value);\n }\n return result;\n }\n\n static async first<T>(\n iterable: AwaitableIterable<T>,\n ): Promise<T | undefined> {\n for await (const value of iterable) {\n return value;\n }\n return;\n }\n}\n","/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {ProtocolError} from '../common/Errors.js';\n\n/**\n * @internal\n */\nexport interface ErrorLike extends Error {\n name: string;\n message: string;\n}\n\n/**\n * @internal\n */\nexport function isErrorLike(obj: unknown): obj is ErrorLike {\n return (\n typeof obj === 'object' && obj !== null && 'name' in obj && 'message' in obj\n );\n}\n\n/**\n * @internal\n */\nexport function isErrnoException(obj: unknown): obj is NodeJS.ErrnoException {\n return (\n isErrorLike(obj) &&\n ('errno' in obj || 'code' in obj || 'path' in obj || 'syscall' in obj)\n );\n}\n\n/**\n * @internal\n */\nexport function rewriteError(\n error: ProtocolError,\n message: string,\n originalMessage?: string,\n): Error {\n error.message = message;\n error.originalMessage = originalMessage ?? error.originalMessage;\n return error;\n}\n\n/**\n * @internal\n */\nexport function createProtocolErrorMessage(object: {\n error: {message: string; data: any; code: number};\n}): string {\n let message = object.error.message;\n // TODO: remove the type checks when we stop connecting to BiDi with a CDP\n // client.\n if (\n object.error &&\n typeof object.error === 'object' &&\n 'data' in object.error\n ) {\n message += ` ${object.error.data}`;\n }\n return message;\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {JSHandle} from '../api/JSHandle.js';\nimport {DisposableStack, disposeSymbol} from '../util/disposable.js';\n\nimport type {AwaitableIterable, HandleFor} from './types.js';\n\nconst DEFAULT_BATCH_SIZE = 20;\n\n/**\n * This will transpose an iterator JSHandle into a fast, Puppeteer-side iterator\n * of JSHandles.\n *\n * @param size - The number of elements to transpose. This should be something\n * reasonable.\n */\nasync function* fastTransposeIteratorHandle<T>(\n iterator: JSHandle<AwaitableIterator<T>>,\n size: number,\n) {\n using array = await iterator.evaluateHandle(async (iterator, size) => {\n const results = [];\n while (results.length < size) {\n const result = await iterator.next();\n if (result.done) {\n break;\n }\n results.push(result.value);\n }\n return results;\n }, size);\n const properties = (await array.getProperties()) as Map<string, HandleFor<T>>;\n const handles = properties.values();\n using stack = new DisposableStack();\n stack.defer(() => {\n for (using handle of handles) {\n handle[disposeSymbol]();\n }\n });\n yield* handles;\n return properties.size === 0;\n}\n\n/**\n * This will transpose an iterator JSHandle in batches based on the default size\n * of {@link fastTransposeIteratorHandle}.\n */\n\nasync function* transposeIteratorHandle<T>(\n iterator: JSHandle<AwaitableIterator<T>>,\n) {\n let size = DEFAULT_BATCH_SIZE;\n while (!(yield* fastTransposeIteratorHandle(iterator, size))) {\n size <<= 1;\n }\n}\n\ntype AwaitableIterator<T> = Iterator<T> | AsyncIterator<T>;\n\n/**\n * @internal\n */\nexport async function* transposeIterableHandle<T>(\n handle: JSHandle<AwaitableIterable<T>>,\n): AsyncIterableIterator<HandleFor<T>> {\n using generatorHandle = await handle.evaluateHandle(iterable => {\n return (async function* () {\n yield* iterable;\n })();\n });\n yield* transposeIteratorHandle(generatorHandle);\n}\n","/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {JSHandle} from '../api/JSHandle.js';\nimport type {PuppeteerInjectedUtil} from '../injected/injected.js';\n\n/**\n * @internal\n */\nexport interface PuppeteerUtilWrapper {\n puppeteerUtil: Promise<JSHandle<PuppeteerInjectedUtil>>;\n}\n\n/**\n * @internal\n */\nexport class LazyArg<T, Context = PuppeteerUtilWrapper> {\n static create = <T>(\n get: (context: PuppeteerUtilWrapper) => Promise<T> | T,\n ): T => {\n // We don't want to introduce LazyArg to the type system, otherwise we would\n // have to make it public.\n return new LazyArg(get) as unknown as T;\n };\n\n #get: (context: Context) => Promise<T> | T;\n private constructor(get: (context: Context) => Promise<T> | T) {\n this.#get = get;\n }\n\n async get(context: Context): Promise<T> {\n return await this.#get(context);\n }\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @internal\n */\nexport const _isElementHandle = Symbol('_isElementHandle');\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nconst createdFunctions = new Map<string, (...args: unknown[]) => unknown>();\n\n/**\n * Creates a function from a string.\n *\n * @internal\n */\nexport const createFunction = (\n functionValue: string,\n): ((...args: unknown[]) => unknown) => {\n let fn = createdFunctions.get(functionValue);\n if (fn) {\n return fn;\n }\n fn = new Function(`return ${functionValue}`)() as (\n ...args: unknown[]\n ) => unknown;\n createdFunctions.set(functionValue, fn);\n return fn;\n};\n\n/**\n * @internal\n */\nexport function stringifyFunction(fn: (...args: never) => unknown): string {\n let value = fn.toString();\n if (\n value.match(/^(async )*function(\\(|\\s)/) ||\n value.match(/^(async )*function\\s*\\*\\s*/)\n ) {\n return value;\n }\n const isArrow =\n value.startsWith('(') ||\n value.match(/^async\\s*\\(/) ||\n value.match(\n /^(async)*\\s*(?:[$_\\p{ID_Start}])(?:[$\\u200C\\u200D\\p{ID_Continue}])*\\s*=>/u,\n );\n if (isArrow) {\n return value;\n }\n // This means we might have a function shorthand (e.g. `test(){}`). Let's\n // try prefixing.\n let prefix = 'function ';\n if (value.startsWith('async ')) {\n prefix = `async ${prefix}`;\n value = value.substring('async '.length);\n }\n return `${prefix}${value}`;\n}\n\n/**\n * Replaces `PLACEHOLDER`s with the given replacements.\n *\n * All replacements must be valid JS code.\n *\n * @example\n *\n * ```ts\n * interpolateFunction(() => PLACEHOLDER('test'), {test: 'void 0'});\n * // Equivalent to () => void 0\n * ```\n *\n * @internal\n */\nexport const interpolateFunction = <T extends (...args: never[]) => unknown>(\n fn: T,\n replacements: Record<string, string>,\n): T => {\n let value = stringifyFunction(fn);\n for (const [name, jsValue] of Object.entries(replacements)) {\n value = value.replace(\n new RegExp(`PLACEHOLDER\\\\(\\\\s*(?:'${name}'|\"${name}\")\\\\s*\\\\)`, 'g'),\n // Wrapping this ensures tersers that accidentally inline PLACEHOLDER calls\n // are still valid. Without, we may get calls like ()=>{...}() which is\n // not valid.\n `(${jsValue})`,\n );\n }\n return createFunction(value) as unknown as T;\n};\n\ndeclare global {\n /**\n * Used for interpolation with {@link interpolateFunction}.\n *\n * @internal\n */\n function PLACEHOLDER<T>(name: string): T;\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {ElementHandle} from '../api/ElementHandle.js';\nimport {_isElementHandle} from '../api/ElementHandleSymbol.js';\nimport type {Frame} from '../api/Frame.js';\nimport type {WaitForSelectorOptions} from '../api/Page.js';\nimport type {PuppeteerInjectedUtil} from '../injected/injected.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\nimport {interpolateFunction, stringifyFunction} from '../util/Function.js';\n\nimport {TimeoutError} from './Errors.js';\nimport {transposeIterableHandle} from './HandleIterator.js';\nimport {LazyArg} from './LazyArg.js';\nimport type {Awaitable, AwaitableIterable} from './types.js';\n\n/**\n * @internal\n */\nexport type QuerySelectorAll = (\n node: Node,\n selector: string,\n PuppeteerUtil: PuppeteerInjectedUtil,\n) => AwaitableIterable<Node>;\n\n/**\n * @internal\n */\nexport type QuerySelector = (\n node: Node,\n selector: string,\n PuppeteerUtil: PuppeteerInjectedUtil,\n) => Awaitable<Node | null>;\n\n/**\n * @internal\n */\nexport const enum PollingOptions {\n RAF = 'raf',\n MUTATION = 'mutation',\n}\n\n/**\n * @internal\n */\nexport class QueryHandler {\n // Either one of these may be implemented, but at least one must be.\n static querySelectorAll?: QuerySelectorAll;\n static querySelector?: QuerySelector;\n\n static get _querySelector(): QuerySelector {\n if (this.querySelector) {\n return this.querySelector;\n }\n if (!this.querySelectorAll) {\n throw new Error('Cannot create default `querySelector`.');\n }\n\n return (this.querySelector = interpolateFunction(\n async (node, selector, PuppeteerUtil) => {\n const querySelectorAll: QuerySelectorAll =\n PLACEHOLDER('querySelectorAll');\n const results = querySelectorAll(node, selector, PuppeteerUtil);\n for await (const result of results) {\n return result;\n }\n return null;\n },\n {\n querySelectorAll: stringifyFunction(this.querySelectorAll),\n },\n ));\n }\n\n static get _querySelectorAll(): QuerySelectorAll {\n if (this.querySelectorAll) {\n return this.querySelectorAll;\n }\n if (!this.querySelector) {\n throw new Error('Cannot create default `querySelectorAll`.');\n }\n\n return (this.querySelectorAll = interpolateFunction(\n async function* (node, selector, PuppeteerUtil) {\n const querySelector: QuerySelector = PLACEHOLDER('querySelector');\n const result = await querySelector(node, selector, PuppeteerUtil);\n if (result) {\n yield result;\n }\n },\n {\n querySelector: stringifyFunction(this.querySelector),\n },\n ));\n }\n\n /**\n * Queries for multiple nodes given a selector and {@link ElementHandle}.\n *\n * Akin to {@link https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll | Document.querySelectorAll()}.\n */\n static async *queryAll(\n element: ElementHandle<Node>,\n selector: string,\n ): AwaitableIterable<ElementHandle<Node>> {\n using handle = await element.evaluateHandle(\n this._querySelectorAll,\n selector,\n LazyArg.create(context => {\n return context.puppeteerUtil;\n }),\n );\n yield* transposeIterableHandle(handle);\n }\n\n /**\n * Queries for a single node given a selector and {@link ElementHandle}.\n *\n * Akin to {@link https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector}.\n */\n static async queryOne(\n element: ElementHandle<Node>,\n selector: string,\n ): Promise<ElementHandle<Node> | null> {\n using result = await element.evaluateHandle(\n this._querySelector,\n selector,\n LazyArg.create(context => {\n return context.puppeteerUtil;\n }),\n );\n if (!(_isElementHandle in result)) {\n return null;\n }\n return result.move();\n }\n\n /**\n * Waits until a single node appears for a given selector and\n * {@link ElementHandle}.\n *\n * This will always query the handle in the Puppeteer world and migrate the\n * result to the main world.\n */\n static async waitFor(\n elementOrFrame: ElementHandle<Node> | Frame,\n selector: string,\n options: WaitForSelectorOptions & {\n polling?: PollingOptions;\n },\n ): Promise<ElementHandle<Node> | null> {\n let frame!: Frame;\n using element = await (async () => {\n if (!(_isElementHandle in elementOrFrame)) {\n frame = elementOrFrame;\n return;\n }\n frame = elementOrFrame.frame;\n return await frame.isolatedRealm().adoptHandle(elementOrFrame);\n })();\n\n const {visible = false, hidden = false, timeout, signal} = options;\n const polling = visible || hidden ? PollingOptions.RAF : options.polling;\n\n try {\n signal?.throwIfAborted();\n\n using handle = await frame.isolatedRealm().waitForFunction(\n async (PuppeteerUtil, query, selector, root, visible) => {\n const querySelector = PuppeteerUtil.createFunction(\n query,\n ) as QuerySelector;\n const node = await querySelector(\n root ?? document,\n selector,\n PuppeteerUtil,\n );\n return PuppeteerUtil.checkVisibility(node, visible);\n },\n {\n polling,\n root: element,\n timeout,\n signal,\n },\n LazyArg.create(context => {\n return context.puppeteerUtil;\n }),\n stringifyFunction(this._querySelector),\n selector,\n element,\n visible ? true : hidden ? false : undefined,\n );\n\n if (signal?.aborted) {\n throw signal.reason;\n }\n\n if (!(_isElementHandle in handle)) {\n return null;\n }\n return await frame.mainRealm().transferHandle(handle);\n } catch (error) {\n if (!isErrorLike(error)) {\n throw error;\n }\n if (error.name === 'AbortError') {\n throw error;\n }\n const waitForSelectorError = new (\n error instanceof TimeoutError ? TimeoutError : Error\n )(`Waiting for selector \\`${selector}\\` failed`);\n waitForSelectorError.cause = error;\n throw waitForSelectorError;\n }\n }\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {ElementHandle} from '../api/ElementHandle.js';\nimport {assert} from '../util/assert.js';\nimport {AsyncIterableUtil} from '../util/AsyncIterableUtil.js';\n\nimport {QueryHandler, type QuerySelector} from './QueryHandler.js';\nimport type {AwaitableIterable} from './types.js';\n\ninterface ARIASelector {\n name?: string;\n role?: string;\n}\n\nconst isKnownAttribute = (\n attribute: string,\n): attribute is keyof ARIASelector => {\n return ['name', 'role'].includes(attribute);\n};\n\n/**\n * The selectors consist of an accessible name to query for and optionally\n * further aria attributes on the form `[<attribute>=<value>]`.\n * Currently, we only support the `name` and `role` attribute.\n * The following examples showcase how the syntax works wrt. querying:\n *\n * - 'title[role=\"heading\"]' queries for elements with name 'title' and role 'heading'.\n * - '[role=\"image\"]' queries for elements with role 'image' and any name.\n * - 'label' queries for elements with name 'label' and any role.\n * - '[name=\"\"][role=\"button\"]' queries for elements with no name and role 'button'.\n */\nconst ATTRIBUTE_REGEXP =\n /\\[\\s*(?<attribute>\\w+)\\s*=\\s*(?<quote>\"|')(?<value>\\\\.|.*?(?=\\k<quote>))\\k<quote>\\s*\\]/g;\nconst parseARIASelector = (selector: string): ARIASelector => {\n if (selector.length > 10_000) {\n throw new Error(`Selector ${selector} is too long`);\n }\n\n const queryOptions: ARIASelector = {};\n const defaultName = selector.replace(\n ATTRIBUTE_REGEXP,\n (_, attribute, __, value) => {\n assert(\n isKnownAttribute(attribute),\n `Unknown aria attribute \"${attribute}\" in selector`,\n );\n queryOptions[attribute] = value;\n return '';\n },\n );\n if (defaultName && !queryOptions.name) {\n queryOptions.name = defaultName;\n }\n return queryOptions;\n};\n\n/**\n * @internal\n */\nexport class ARIAQueryHandler extends QueryHandler {\n static override querySelector: QuerySelector = async (\n node,\n selector,\n {ariaQuerySelector},\n ) => {\n return await ariaQuerySelector(node, selector);\n };\n\n static override async *queryAll(\n element: ElementHandle<Node>,\n selector: string,\n ): AwaitableIterable<ElementHandle<Node>> {\n const {name, role} = parseARIASelector(selector);\n yield* element.queryAXTree(name, role);\n }\n\n static override queryOne = async (\n element: ElementHandle<Node>,\n selector: string,\n ): Promise<ElementHandle<Node> | null> => {\n return (\n (await AsyncIterableUtil.first(this.queryAll(element, selector))) ?? null\n );\n };\n}\n","/**\n * JavaScript code that provides the puppeteer utilities. See the\n * [README](https://github.com/puppeteer/puppeteer/blob/main/src/injected/README.md)\n * for injection for more information.\n *\n * @internal\n */\nexport const source = \"\\\"use strict\\\";var g=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)g(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e==\\\"object\\\"||typeof e==\\\"function\\\")for(let n of Y(e))!G.call(t,n)&&n!==r&&g(t,n,{get:()=>e[n],enumerable:!(o=X(e,n))||o.enumerable});return t};var z=t=>J(g({},\\\"__esModule\\\",{value:!0}),t);var Se={};l(Se,{default:()=>Te});module.exports=z(Se);var b=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends b{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(n=>n instanceof t?(n.#s&&r.add(n),n.valueOrThrow()):n);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\\\"Timeout cleared\\\"))}}#e=!1;#r=!1;#t;#o;#n=new Promise(e=>{this.#o=e});#s;#l;constructor(e){e&&e.timeout>0&&(this.#l=new p(e.message),this.#s=setTimeout(()=>{this.reject(this.#l)},e.timeout))}#i(e){clearTimeout(this.#s),this.#t=e,this.#o()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#i(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#i(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#t}#a;valueOrThrow(){return this.#a||(this.#a=(async()=>{if(await this.#n,this.#r)throw this.#t;return this.#t})()),this.#a}};var W=new Map,F=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var E={};l(E,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var v={};l(v,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(n,i)=>{for(let s of o(n,i))return s;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(n,i)=>{let s=o(n,i);return s?[s]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\\\"At least one query method must be defined.\\\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new y;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(t,e)=>{let r=null,o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&!r&&s.matches(e)&&(r=s)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},re=(t,e)=>{let r=[],o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&s.matches(e)&&r.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var oe={childList:!0,subtree:!0,attributes:!0};function ne(t){return t.nodeType===Node.ELEMENT_NODE||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function se(t){return t.parentNode??t.host??null}function ie(t,e){let r=t,o;for(;o=se(r);){if(e.has(o))return!0;r=o}return!1}var w=class{#e;#r;#t;#o=new WeakSet;#n;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#n=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new WeakSet,this.#t=new MutationObserver(async o=>{this.#l(o);let n=await this.#e();n&&(e.resolve(n),await this.stop())}),this.#s(this.#r)}#s(e){!this.#t||this.#o.has(e)||(this.#o.add(e),this.#t.observe(e,oe),this.#i(e))}#l(e){let r=new Set;for(let o of e)for(let n of o.addedNodes)ne(n)&&r.add(n);for(let o of r)ie(o,r)||this.#i(o)}#i(e){let r=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT);do{let{shadowRoot:o}=r.currentNode;o&&this.#s(o)}while(r.nextNode())}async stop(){u(this.#n,\\\"Polling never started.\\\"),this.#n.finished()||this.#n.reject(new Error(\\\"Polling stopped\\\")),this.#t&&(this.#t.disconnect(),this.#t=void 0)}result(){return u(this.#n,\\\"Polling never started.\\\"),this.#n.valueOrThrow()}},N=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let n=await this.#e();if(!n){window.requestAnimationFrame(o);return}e.resolve(n),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\\\"Polling never started.\\\"),this.#r.finished()||this.#r.reject(new Error(\\\"Polling stopped\\\"))}result(){return u(this.#r,\\\"Polling never started.\\\"),this.#r.valueOrThrow()}},T=class{#e;#r;#t;#o;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#o=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#t=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#o,\\\"Polling never started.\\\"),this.#o.finished()||this.#o.reject(new Error(\\\"Polling stopped\\\")),this.#t&&(clearInterval(this.#t),this.#t=void 0)}result(){return u(this.#o,\\\"Polling never started.\\\"),this.#o.valueOrThrow()}};var L={};l(L,{PCombinator:()=>V,pQuerySelector:()=>we,pQuerySelectorAll:()=>B});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var C={};l(C,{textQuerySelectorAll:()=>m});var le=new Set([\\\"checkbox\\\",\\\"image\\\",\\\"radio\\\"]),ae=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!le.has(t.type),ce=new Set([\\\"SCRIPT\\\",\\\"STYLE\\\"]),f=t=>!ce.has(t.nodeName)&&!document.head?.contains(t),O=new WeakMap,H=t=>{for(;t;)O.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},j=new WeakSet,I,ue=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error(\\\"MutationObserver is not available in this environment.\\\");return I||(I=new t(e=>{for(let r of e)H(r.target)})),I},d=t=>{let e=O.get(t);if(e||(e={full:\\\"\\\",immediate:[]},!f(t)))return e;let r=\\\"\\\";if(ae(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\\\"input\\\",o=>{H(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\\\"\\\",r+=o.nodeValue??\\\"\\\";continue}r&&e.immediate.push(r),r=\\\"\\\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),j.has(t)||(ue().observe(t,{childList:!0,characterData:!0,subtree:!0}),j.add(t))}return O.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let n;o.shadowRoot?n=m(o.shadowRoot,e):n=m(o,e);for(let i of n)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var k={};l(k,{checkVisibility:()=>fe,pierce:()=>S,pierceAll:()=>M});var de=[\\\"hidden\\\",\\\"collapse\\\"],fe=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t;if(!r)return e===!1;let o=window.getComputedStyle(r),n=o&&!de.includes(o.visibility)&&!me(r);return e===n?t:!1};function me(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var he=t=>\\\"shadowRoot\\\"in t&&t.shadowRoot instanceof ShadowRoot;function*S(t){he(t)?yield t.shadowRoot:yield t}function*M(t){t=S(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var _={};l(_,{xpathQuerySelectorAll:()=>D});var D=function*(t,e,r=-1){let n=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],s;for(;(s=n.iterateNext())&&(i.push(s),!(r&&i.length===r)););for(let h=0;h<i.length;h++)s=i[h],yield s,i[h]=null};var pe=/[-\\\\w\\\\P{ASCII}*]/u,V=(r=>(r.Descendent=\\\">>>\\\",r.Child=\\\">>>>\\\",r))(V||{}),U=t=>\\\"querySelectorAll\\\"in t,q=class{#e;#r=[];#t=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#o()}async run(){for(typeof this.#t==\\\"string\\\"&&this.#t.trimStart()===\\\":scope\\\"&&this.#o();this.#t!==void 0;this.#o()){let e=this.#t;typeof e==\\\"string\\\"?e[0]&&pe.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){U(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!U(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let n of r.parentElement.children)if(++o,n===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\\\"text\\\":yield*m(r,e.value);break;case\\\"xpath\\\":yield*D(r,e.value);break;case\\\"aria\\\":yield*x(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#o(){if(this.#r.length!==0){this.#t=this.#r.shift();return}if(this.#e.length===0){this.#t=void 0;return}let e=this.#e.shift();switch(e){case\\\">>>>\\\":{this.elements=a.flatMap(this.elements,S),this.#o();break}case\\\">>>\\\":{this.elements=a.flatMap(this.elements,M),this.#o();break}default:this.#r=e,this.#o();break}}},Q=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let n=0;for(let s=e.previousSibling;s;s=s.previousSibling)++n;let i=this.calculate(e.parentNode,[n]);return this.#e.set(e,i),[...i,...r]}},$=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?$(o,i):r<n?-1:1},ye=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new Q;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>$(o,n)).map(([o])=>o)},B=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let n=0;return o.some(i=>(typeof i==\\\"string\\\"?++n:n=0,n>1))}))throw new Error(\\\"Multiple deep combinators found in sequence.\\\");return ye(a.flatMap(r,o=>{let n=new q(t,o);return n.run(),n.elements}))},we=async function(t,e){for await(let r of B(t,e))return r;return null};var Ne=Object.freeze({...E,...A,...R,...L,...C,...k,..._,...v,Deferred:c,createFunction:F,createTextContent:d,IntervalPoller:T,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:N}),Te=Ne;\\n\";\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {source as injectedSource} from '../generated/injected.js';\n\n/**\n * @internal\n */\nexport class ScriptInjector {\n #updated = false;\n #amendments = new Set<string>();\n\n // Appends a statement of the form `(PuppeteerUtil) => {...}`.\n append(statement: string): void {\n this.#update(() => {\n this.#amendments.add(statement);\n });\n }\n\n pop(statement: string): void {\n this.#update(() => {\n this.#amendments.delete(statement);\n });\n }\n\n inject(inject: (script: string) => void, force = false): void {\n if (this.#updated || force) {\n inject(this.#get());\n }\n this.#updated = false;\n }\n\n #update(callback: () => void): void {\n callback();\n this.#updated = true;\n }\n\n #get(): string {\n return `(() => {\n const module = {};\n ${injectedSource}\n ${[...this.#amendments]\n .map(statement => {\n return `(${statement})(module.exports.default);`;\n })\n .join('')}\n return module.exports.default;\n })()`;\n }\n}\n\n/**\n * @internal\n */\nexport const scriptInjector = new ScriptInjector();\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {PuppeteerInjectedUtil} from '../injected/injected.js';\nimport {assert} from '../util/assert.js';\nimport {interpolateFunction, stringifyFunction} from '../util/Function.js';\n\nimport {\n QueryHandler,\n type QuerySelector,\n type QuerySelectorAll,\n} from './QueryHandler.js';\nimport {scriptInjector} from './ScriptInjector.js';\n\n/**\n * @public\n */\nexport interface CustomQueryHandler {\n /**\n * Searches for a {@link https://developer.mozilla.org/en-US/docs/Web/API/Node | Node} matching the given `selector` from {@link https://developer.mozilla.org/en-US/docs/Web/API/Node | node}.\n */\n queryOne?: (node: Node, selector: string) => Node | null;\n /**\n * Searches for some {@link https://developer.mozilla.org/en-US/docs/Web/API/Node | Nodes} matching the given `selector` from {@link https://developer.mozilla.org/en-US/docs/Web/API/Node | node}.\n */\n queryAll?: (node: Node, selector: string) => Iterable<Node>;\n}\n\n/**\n * The registry of {@link CustomQueryHandler | custom query handlers}.\n *\n * @example\n *\n * ```ts\n * Puppeteer.customQueryHandlers.register('lit', { … });\n * const aHandle = await page.$('lit/…');\n * ```\n *\n * @internal\n */\nexport class CustomQueryHandlerRegistry {\n #handlers = new Map<\n string,\n [registerScript: string, Handler: typeof QueryHandler]\n >();\n\n get(name: string): typeof QueryHandler | undefined {\n const handler = this.#handlers.get(name);\n return handler ? handler[1] : undefined;\n }\n\n /**\n * Registers a {@link CustomQueryHandler | custom query handler}.\n *\n * @remarks\n * After registration, the handler can be used everywhere where a selector is\n * expected by prepending the selection string with `<name>/`. The name is\n * only allowed to consist of lower- and upper case latin letters.\n *\n * @example\n *\n * ```ts\n * Puppeteer.customQueryHandlers.register('lit', { … });\n * const aHandle = await page.$('lit/…');\n * ```\n *\n * @param name - Name to register under.\n * @param queryHandler - {@link CustomQueryHandler | Custom query handler} to\n * register.\n */\n register(name: string, handler: CustomQueryHandler): void {\n assert(\n !this.#handlers.has(name),\n `Cannot register over existing handler: ${name}`,\n );\n assert(\n /^[a-zA-Z]+$/.test(name),\n `Custom query handler names may only contain [a-zA-Z]`,\n );\n assert(\n handler.queryAll || handler.queryOne,\n `At least one query method must be implemented.`,\n );\n\n const Handler = class extends QueryHandler {\n static override querySelectorAll: QuerySelectorAll = interpolateFunction(\n (node, selector, PuppeteerUtil) => {\n return PuppeteerUtil.customQuerySelectors\n .get(PLACEHOLDER('name'))!\n .querySelectorAll(node, selector);\n },\n {name: JSON.stringify(name)},\n );\n static override querySelector: QuerySelector = interpolateFunction(\n (node, selector, PuppeteerUtil) => {\n return PuppeteerUtil.customQuerySelectors\n .get(PLACEHOLDER('name'))!\n .querySelector(node, selector);\n },\n {name: JSON.stringify(name)},\n );\n };\n const registerScript = interpolateFunction(\n (PuppeteerUtil: PuppeteerInjectedUtil) => {\n PuppeteerUtil.customQuerySelectors.register(PLACEHOLDER('name'), {\n queryAll: PLACEHOLDER('queryAll'),\n queryOne: PLACEHOLDER('queryOne'),\n });\n },\n {\n name: JSON.stringify(name),\n queryAll: handler.queryAll\n ? stringifyFunction(handler.queryAll)\n : String(undefined),\n queryOne: handler.queryOne\n ? stringifyFunction(handler.queryOne)\n : String(undefined),\n },\n ).toString();\n\n this.#handlers.set(name, [registerScript, Handler]);\n scriptInjector.append(registerScript);\n }\n\n /**\n * Unregisters the {@link CustomQueryHandler | custom query handler} for the\n * given name.\n *\n * @throws `Error` if there is no handler under the given name.\n */\n unregister(name: string): void {\n const handler = this.#handlers.get(name);\n if (!handler) {\n throw new Error(`Cannot unregister unknown handler: ${name}`);\n }\n scriptInjector.pop(handler[0]);\n this.#handlers.delete(name);\n }\n\n /**\n * Gets the names of all {@link CustomQueryHandler | custom query handlers}.\n */\n names(): string[] {\n return [...this.#handlers.keys()];\n }\n\n /**\n * Unregisters all custom query handlers.\n */\n clear(): void {\n for (const [registerScript] of this.#handlers) {\n scriptInjector.pop(registerScript);\n }\n this.#handlers.clear();\n }\n}\n\n/**\n * @internal\n */\nexport const customQueryHandlers = new CustomQueryHandlerRegistry();\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {PuppeteerInjectedUtil} from '../injected/injected.js';\n\nimport {QueryHandler} from './QueryHandler.js';\n\n/**\n * @internal\n */\nexport class PierceQueryHandler extends QueryHandler {\n static override querySelector = (\n element: Node,\n selector: string,\n {pierceQuerySelector}: PuppeteerInjectedUtil,\n ): Node | null => {\n return pierceQuerySelector(element, selector);\n };\n static override querySelectorAll = (\n element: Node,\n selector: string,\n {pierceQuerySelectorAll}: PuppeteerInjectedUtil,\n ): Iterable<Node> => {\n return pierceQuerySelectorAll(element, selector);\n };\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n QueryHandler,\n type QuerySelector,\n type QuerySelectorAll,\n} from './QueryHandler.js';\n\n/**\n * @internal\n */\nexport class PQueryHandler extends QueryHandler {\n static override querySelectorAll: QuerySelectorAll = (\n element,\n selector,\n {pQuerySelectorAll},\n ) => {\n return pQuerySelectorAll(element, selector);\n };\n static override querySelector: QuerySelector = (\n element,\n selector,\n {pQuerySelector},\n ) => {\n return pQuerySelector(element, selector);\n };\n}\n","/**\nMIT License\n\nCopyright (c) 2020 Lea Verou\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n// node_modules/parsel-js/dist/parsel.js\nvar TOKENS = {\n attribute: /\\[\\s*(?:(?<namespace>\\*|[-\\w\\P{ASCII}]*)\\|)?(?<name>[-\\w\\P{ASCII}]+)\\s*(?:(?<operator>\\W?=)\\s*(?<value>.+?)\\s*(\\s(?<caseSensitive>[iIsS]))?\\s*)?\\]/gu,\n id: /#(?<name>[-\\w\\P{ASCII}]+)/gu,\n class: /\\.(?<name>[-\\w\\P{ASCII}]+)/gu,\n comma: /\\s*,\\s*/g,\n combinator: /\\s*[\\s>+~]\\s*/g,\n \"pseudo-element\": /::(?<name>[-\\w\\P{ASCII}]+)(?:\\((?<argument>¶*)\\))?/gu,\n \"pseudo-class\": /:(?<name>[-\\w\\P{ASCII}]+)(?:\\((?<argument>¶*)\\))?/gu,\n universal: /(?:(?<namespace>\\*|[-\\w\\P{ASCII}]*)\\|)?\\*/gu,\n type: /(?:(?<namespace>\\*|[-\\w\\P{ASCII}]*)\\|)?(?<name>[-\\w\\P{ASCII}]+)/gu\n // this must be last\n};\nvar TRIM_TOKENS = /* @__PURE__ */ new Set([\"combinator\", \"comma\"]);\nvar getArgumentPatternByType = (type) => {\n switch (type) {\n case \"pseudo-element\":\n case \"pseudo-class\":\n return new RegExp(TOKENS[type].source.replace(\"(?<argument>\\xB6*)\", \"(?<argument>.*)\"), \"gu\");\n default:\n return TOKENS[type];\n }\n};\nfunction gobbleParens(text, offset) {\n let nesting = 0;\n let result = \"\";\n for (; offset < text.length; offset++) {\n const char = text[offset];\n switch (char) {\n case \"(\":\n ++nesting;\n break;\n case \")\":\n --nesting;\n break;\n }\n result += char;\n if (nesting === 0) {\n return result;\n }\n }\n return result;\n}\nfunction tokenizeBy(text, grammar = TOKENS) {\n if (!text) {\n return [];\n }\n const tokens = [text];\n for (const [type, pattern] of Object.entries(grammar)) {\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (typeof token !== \"string\") {\n continue;\n }\n pattern.lastIndex = 0;\n const match = pattern.exec(token);\n if (!match) {\n continue;\n }\n const from = match.index - 1;\n const args = [];\n const content = match[0];\n const before = token.slice(0, from + 1);\n if (before) {\n args.push(before);\n }\n args.push({\n ...match.groups,\n type,\n content\n });\n const after = token.slice(from + content.length + 1);\n if (after) {\n args.push(after);\n }\n tokens.splice(i, 1, ...args);\n }\n }\n let offset = 0;\n for (const token of tokens) {\n switch (typeof token) {\n case \"string\":\n throw new Error(`Unexpected sequence ${token} found at index ${offset}`);\n case \"object\":\n offset += token.content.length;\n token.pos = [offset - token.content.length, offset];\n if (TRIM_TOKENS.has(token.type)) {\n token.content = token.content.trim() || \" \";\n }\n break;\n }\n }\n return tokens;\n}\nvar STRING_PATTERN = /(['\"])([^\\\\\\n]*?)\\1/g;\nvar ESCAPE_PATTERN = /\\\\./g;\nfunction tokenize(selector, grammar = TOKENS) {\n selector = selector.trim();\n if (selector === \"\") {\n return [];\n }\n const replacements = [];\n selector = selector.replace(ESCAPE_PATTERN, (value, offset) => {\n replacements.push({ value, offset });\n return \"\\uE000\".repeat(value.length);\n });\n selector = selector.replace(STRING_PATTERN, (value, quote, content, offset) => {\n replacements.push({ value, offset });\n return `${quote}${\"\\uE001\".repeat(content.length)}${quote}`;\n });\n {\n let pos = 0;\n let offset;\n while ((offset = selector.indexOf(\"(\", pos)) > -1) {\n const value = gobbleParens(selector, offset);\n replacements.push({ value, offset });\n selector = `${selector.substring(0, offset)}(${\"\\xB6\".repeat(value.length - 2)})${selector.substring(offset + value.length)}`;\n pos = offset + value.length;\n }\n }\n const tokens = tokenizeBy(selector, grammar);\n const changedTokens = /* @__PURE__ */ new Set();\n for (const replacement of replacements.reverse()) {\n for (const token of tokens) {\n const { offset, value } = replacement;\n if (!(token.pos[0] <= offset && offset + value.length <= token.pos[1])) {\n continue;\n }\n const { content } = token;\n const tokenOffset = offset - token.pos[0];\n token.content = content.slice(0, tokenOffset) + value + content.slice(tokenOffset + value.length);\n if (token.content !== content) {\n changedTokens.add(token);\n }\n }\n }\n for (const token of changedTokens) {\n const pattern = getArgumentPatternByType(token.type);\n if (!pattern) {\n throw new Error(`Unknown token type: ${token.type}`);\n }\n pattern.lastIndex = 0;\n const match = pattern.exec(token.content);\n if (!match) {\n throw new Error(`Unable to parse content for ${token.type}: ${token.content}`);\n }\n Object.assign(token, match.groups);\n }\n return tokens;\n}\nfunction stringify(listOrNode) {\n if (Array.isArray(listOrNode)) {\n return listOrNode.map((token) => token.content).join(\"\");\n }\n switch (listOrNode.type) {\n case \"list\":\n return listOrNode.list.map(stringify).join(\",\");\n case \"relative\":\n return listOrNode.combinator + stringify(listOrNode.right);\n case \"complex\":\n return stringify(listOrNode.left) + listOrNode.combinator + stringify(listOrNode.right);\n case \"compound\":\n return listOrNode.list.map(stringify).join(\"\");\n default:\n return listOrNode.content;\n }\n}\nexport {\n TOKENS,\n stringify,\n tokenize\n};\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type Token,\n tokenize,\n TOKENS,\n stringify,\n} from '../../third_party/parsel-js/parsel-js.js';\nimport type {\n ComplexPSelector,\n ComplexPSelectorList,\n CompoundPSelector,\n} from '../injected/PQuerySelector.js';\nimport {PCombinator} from '../injected/PQuerySelector.js';\n\nTOKENS['nesting'] = /&/g;\nTOKENS['combinator'] = /\\s*(>>>>?|[\\s>+~])\\s*/g;\n\nconst ESCAPE_REGEXP = /\\\\[\\s\\S]/g;\nconst unquote = (text: string): string => {\n if (text.length <= 1) {\n return text;\n }\n if ((text[0] === '\"' || text[0] === \"'\") && text.endsWith(text[0])) {\n text = text.slice(1, -1);\n }\n return text.replace(ESCAPE_REGEXP, match => {\n return match[1] as string;\n });\n};\n\n/**\n * @internal\n */\nexport function parsePSelectors(\n selector: string,\n): [\n selector: ComplexPSelectorList,\n isPureCSS: boolean,\n hasPseudoClasses: boolean,\n hasAria: boolean,\n] {\n let isPureCSS = true;\n let hasAria = false;\n let hasPseudoClasses = false;\n const tokens = tokenize(selector);\n if (tokens.length === 0) {\n return [[], isPureCSS, hasPseudoClasses, false];\n }\n let compoundSelector: CompoundPSelector = [];\n let complexSelector: ComplexPSelector = [compoundSelector];\n const selectors: ComplexPSelectorList = [complexSelector];\n const storage: Token[] = [];\n for (const token of tokens) {\n switch (token.type) {\n case 'combinator':\n switch (token.content) {\n case PCombinator.Descendent:\n isPureCSS = false;\n if (storage.length) {\n compoundSelector.push(stringify(storage));\n storage.splice(0);\n }\n compoundSelector = [];\n complexSelector.push(PCombinator.Descendent);\n complexSelector.push(compoundSelector);\n continue;\n case PCombinator.Child:\n isPureCSS = false;\n if (storage.length) {\n compoundSelector.push(stringify(storage));\n storage.splice(0);\n }\n compoundSelector = [];\n complexSelector.push(PCombinator.Child);\n complexSelector.push(compoundSelector);\n continue;\n }\n break;\n case 'pseudo-element':\n if (!token.name.startsWith('-p-')) {\n break;\n }\n isPureCSS = false;\n if (storage.length) {\n compoundSelector.push(stringify(storage));\n storage.splice(0);\n }\n const name = token.name.slice(3);\n if (name === 'aria') {\n hasAria = true;\n }\n compoundSelector.push({\n name,\n value: unquote(token.argument ?? ''),\n });\n continue;\n case 'pseudo-class':\n hasPseudoClasses = true;\n break;\n case 'comma':\n if (storage.length) {\n compoundSelector.push(stringify(storage));\n storage.splice(0);\n }\n compoundSelector = [];\n complexSelector = [compoundSelector];\n selectors.push(complexSelector);\n continue;\n }\n storage.push(token);\n }\n if (storage.length) {\n compoundSelector.push(stringify(storage));\n }\n return [selectors, isPureCSS, hasPseudoClasses, hasAria];\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {QueryHandler, type QuerySelectorAll} from './QueryHandler.js';\n\n/**\n * @internal\n */\nexport class TextQueryHandler extends QueryHandler {\n static override querySelectorAll: QuerySelectorAll = (\n element,\n selector,\n {textQuerySelectorAll},\n ) => {\n return textQuerySelectorAll(element, selector);\n };\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n QueryHandler,\n type QuerySelectorAll,\n type QuerySelector,\n} from './QueryHandler.js';\n\n/**\n * @internal\n */\nexport class XPathQueryHandler extends QueryHandler {\n static override querySelectorAll: QuerySelectorAll = (\n element,\n selector,\n {xpathQuerySelectorAll},\n ) => {\n return xpathQuerySelectorAll(element, selector);\n };\n\n static override querySelector: QuerySelector = (\n element: Node,\n selector: string,\n {xpathQuerySelectorAll},\n ) => {\n for (const result of xpathQuerySelectorAll(element, selector, 1)) {\n return result;\n }\n return null;\n };\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {PuppeteerInjectedUtil} from '../injected/injected.js';\n\nimport {QueryHandler} from './QueryHandler.js';\n\n/**\n * @internal\n */\nexport class CSSQueryHandler extends QueryHandler {\n static override querySelector = (\n element: Node,\n selector: string,\n {cssQuerySelector}: PuppeteerInjectedUtil,\n ): Node | null => {\n return cssQuerySelector(element, selector);\n };\n static override querySelectorAll = (\n element: Node,\n selector: string,\n {cssQuerySelectorAll}: PuppeteerInjectedUtil,\n ): Iterable<Node> => {\n return cssQuerySelectorAll(element, selector);\n };\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {ARIAQueryHandler} from './AriaQueryHandler.js';\nimport {CSSQueryHandler} from './CSSQueryHandler.js';\nimport {customQueryHandlers} from './CustomQueryHandler.js';\nimport {PierceQueryHandler} from './PierceQueryHandler.js';\nimport {PQueryHandler} from './PQueryHandler.js';\nimport {parsePSelectors} from './PSelectorParser.js';\nimport type {QueryHandler} from './QueryHandler.js';\nimport {PollingOptions} from './QueryHandler.js';\nimport {TextQueryHandler} from './TextQueryHandler.js';\nimport {XPathQueryHandler} from './XPathQueryHandler.js';\n\nconst BUILTIN_QUERY_HANDLERS = {\n aria: ARIAQueryHandler,\n pierce: PierceQueryHandler,\n xpath: XPathQueryHandler,\n text: TextQueryHandler,\n} as const;\n\nconst QUERY_SEPARATORS = ['=', '/'];\n\n/**\n * @internal\n */\nexport function getQueryHandlerAndSelector(selector: string): {\n updatedSelector: string;\n polling: PollingOptions;\n QueryHandler: typeof QueryHandler;\n} {\n for (const handlerMap of [\n customQueryHandlers.names().map(name => {\n return [name, customQueryHandlers.get(name)!] as const;\n }),\n Object.entries(BUILTIN_QUERY_HANDLERS),\n ]) {\n for (const [name, QueryHandler] of handlerMap) {\n for (const separator of QUERY_SEPARATORS) {\n const prefix = `${name}${separator}`;\n if (selector.startsWith(prefix)) {\n selector = selector.slice(prefix.length);\n return {\n updatedSelector: selector,\n polling:\n name === 'aria' ? PollingOptions.RAF : PollingOptions.MUTATION,\n QueryHandler,\n };\n }\n }\n }\n }\n try {\n const [pSelector, isPureCSS, hasPseudoClasses, hasAria] =\n parsePSelectors(selector);\n if (isPureCSS) {\n return {\n updatedSelector: selector,\n polling: hasPseudoClasses\n ? PollingOptions.RAF\n : PollingOptions.MUTATION,\n QueryHandler: CSSQueryHandler,\n };\n }\n return {\n updatedSelector: JSON.stringify(pSelector),\n polling: hasAria ? PollingOptions.RAF : PollingOptions.MUTATION,\n QueryHandler: PQueryHandler,\n };\n } catch {\n return {\n updatedSelector: selector,\n polling: PollingOptions.MUTATION,\n QueryHandler: CSSQueryHandler,\n };\n }\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {EventType} from '../common/EventEmitter.js';\nimport type {EventEmitter} from '../common/EventEmitter.js';\nimport type {Disposed, Moveable} from '../common/types.js';\n\nimport {asyncDisposeSymbol, disposeSymbol} from './disposable.js';\nimport {Mutex} from './Mutex.js';\n\nconst instances = new WeakSet<object>();\n\nexport function moveable<\n Class extends abstract new (...args: never[]) => Moveable,\n>(Class: Class, _: ClassDecoratorContext<Class>): Class {\n let hasDispose = false;\n if (Class.prototype[disposeSymbol]) {\n const dispose = Class.prototype[disposeSymbol];\n Class.prototype[disposeSymbol] = function (this: InstanceType<Class>) {\n if (instances.has(this)) {\n instances.delete(this);\n return;\n }\n return dispose.call(this);\n };\n hasDispose = true;\n }\n if (Class.prototype[asyncDisposeSymbol]) {\n const asyncDispose = Class.prototype[asyncDisposeSymbol];\n Class.prototype[asyncDisposeSymbol] = function (this: InstanceType<Class>) {\n if (instances.has(this)) {\n instances.delete(this);\n return;\n }\n return asyncDispose.call(this);\n };\n hasDispose = true;\n }\n if (hasDispose) {\n Class.prototype.move = function (\n this: InstanceType<Class>,\n ): InstanceType<Class> {\n instances.add(this);\n return this;\n };\n }\n return Class;\n}\n\nexport function throwIfDisposed<This extends Disposed>(\n message: (value: This) => string = value => {\n return `Attempted to use disposed ${value.constructor.name}.`;\n },\n) {\n return (target: (this: This, ...args: any[]) => any, _: unknown) => {\n return function (this: This, ...args: any[]): any {\n if (this.disposed) {\n throw new Error(message(this));\n }\n return target.call(this, ...args);\n };\n };\n}\n\nexport function inertIfDisposed<This extends Disposed>(\n target: (this: This, ...args: any[]) => any,\n _: unknown,\n) {\n return function (this: This, ...args: any[]): any {\n if (this.disposed) {\n return;\n }\n return target.call(this, ...args);\n };\n}\n\n/**\n * The decorator only invokes the target if the target has not been invoked with\n * the same arguments before. The decorated method throws an error if it's\n * invoked with a different number of elements: if you decorate a method, it\n * should have the same number of arguments\n *\n * @internal\n */\nexport function invokeAtMostOnceForArguments(\n target: (this: unknown, ...args: any[]) => any,\n _: unknown,\n): typeof target {\n const cache = new WeakMap();\n let cacheDepth = -1;\n return function (this: unknown, ...args: unknown[]) {\n if (cacheDepth === -1) {\n cacheDepth = args.length;\n }\n if (cacheDepth !== args.length) {\n throw new Error(\n 'Memoized method was called with the wrong number of arguments',\n );\n }\n let freshArguments = false;\n let cacheIterator = cache;\n for (const arg of args) {\n if (cacheIterator.has(arg as object)) {\n cacheIterator = cacheIterator.get(arg as object)!;\n } else {\n freshArguments = true;\n cacheIterator.set(arg as object, new WeakMap());\n cacheIterator = cacheIterator.get(arg as object)!;\n }\n }\n if (!freshArguments) {\n return;\n }\n return target.call(this, ...args);\n };\n}\n\nexport function guarded<T extends object>(\n getKey = function (this: T): object {\n return this;\n },\n) {\n return (\n target: (this: T, ...args: any[]) => Promise<any>,\n _: ClassMethodDecoratorContext<T>,\n ): typeof target => {\n const mutexes = new WeakMap<object, Mutex>();\n return async function (...args) {\n const key = getKey.call(this);\n let mutex = mutexes.get(key);\n if (!mutex) {\n mutex = new Mutex();\n mutexes.set(key, mutex);\n }\n await using _ = await mutex.acquire();\n return await target.call(this, ...args);\n };\n };\n}\n\nconst bubbleHandlers = new WeakMap<object, Map<any, any>>();\nconst bubbleInitializer = function <\n T extends EventType[],\n This extends EventEmitter<any>,\n>(this: This, events?: T) {\n const handlers = bubbleHandlers.get(this) ?? new Map();\n if (handlers.has(events)) {\n return;\n }\n\n const handler =\n events !== undefined\n ? (type: EventType, event: unknown) => {\n if (events.includes(type)) {\n this.emit(type, event);\n }\n }\n : (type: EventType, event: unknown) => {\n this.emit(type, event);\n };\n\n handlers.set(events, handler);\n bubbleHandlers.set(this, handlers);\n};\n/**\n * Event emitter fields marked with `bubble` will have their events bubble up\n * the field owner.\n */\n// The type is too complicated to type.\nexport function bubble<T extends EventType[]>(events?: T) {\n return <This extends EventEmitter<any>, Value extends EventEmitter<any>>(\n {set, get}: ClassAccessorDecoratorTarget<This, Value>,\n context: ClassAccessorDecoratorContext<This, Value>,\n ): ClassAccessorDecoratorResult<This, Value> => {\n context.addInitializer(function () {\n return bubbleInitializer.apply(this, [events]);\n });\n return {\n set(emitter) {\n const handler = bubbleHandlers.get(this)!.get(events)!;\n\n // In case we are re-setting.\n const oldEmitter = get.call(this);\n if (oldEmitter !== undefined) {\n oldEmitter.off('*', handler);\n }\n\n if (emitter === undefined) {\n return;\n }\n emitter.on('*', handler);\n set.call(this, emitter);\n },\n init(emitter) {\n if (emitter === undefined) {\n return emitter;\n }\n\n bubbleInitializer.apply(this, [events]);\n\n const handler = bubbleHandlers.get(this)!.get(events)!;\n emitter.on('*', handler as any);\n return emitter;\n },\n };\n };\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type Protocol from 'devtools-protocol';\n\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport type {EvaluateFuncWith, HandleFor, HandleOr} from '../common/types.js';\nimport {withSourcePuppeteerURLIfNone} from '../common/util.js';\nimport {moveable, throwIfDisposed} from '../util/decorators.js';\nimport {disposeSymbol, asyncDisposeSymbol} from '../util/disposable.js';\n\nimport type {ElementHandle} from './ElementHandle.js';\nimport type {Realm} from './Realm.js';\n\n/**\n * Represents a reference to a JavaScript object. Instances can be created using\n * {@link Page.evaluateHandle}.\n *\n * Handles prevent the referenced JavaScript object from being garbage-collected\n * unless the handle is purposely {@link JSHandle.dispose | disposed}. JSHandles\n * are auto-disposed when their associated frame is navigated away or the parent\n * context gets destroyed.\n *\n * Handles can be used as arguments for any evaluation function such as\n * {@link Page.$eval}, {@link Page.evaluate}, and {@link Page.evaluateHandle}.\n * They are resolved to their referenced object.\n *\n * @example\n *\n * ```ts\n * const windowHandle = await page.evaluateHandle(() => window);\n * ```\n *\n * @public\n */\n@moveable\nexport abstract class JSHandle<T = unknown> {\n declare move: () => this;\n\n /**\n * Used for nominally typing {@link JSHandle}.\n */\n declare _?: T;\n\n #logger: Logger;\n\n /**\n * @internal\n */\n constructor(logger: Logger) {\n this.#logger = logger;\n }\n\n /**\n * @internal\n */\n protected get logger(): Logger {\n return this.#logger;\n }\n\n /**\n * @internal\n */\n abstract get realm(): Realm;\n\n /**\n * @internal\n */\n abstract get disposed(): boolean;\n\n /**\n * Evaluates the given function with the current handle as its first argument.\n */\n async evaluate<\n Params extends unknown[],\n Func extends EvaluateFuncWith<T, Params> = EvaluateFuncWith<T, Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(\n this.evaluate.name,\n pageFunction,\n );\n return await this.realm.evaluate(pageFunction, this, ...args);\n }\n\n /**\n * Evaluates the given function with the current handle as its first argument.\n *\n */\n async evaluateHandle<\n Params extends unknown[],\n Func extends EvaluateFuncWith<T, Params> = EvaluateFuncWith<T, Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n pageFunction = withSourcePuppeteerURLIfNone(\n this.evaluateHandle.name,\n pageFunction,\n );\n return await this.realm.evaluateHandle(pageFunction, this, ...args);\n }\n\n /**\n * Fetches a single property from the referenced object.\n */\n getProperty<K extends keyof T>(\n propertyName: HandleOr<K>,\n ): Promise<HandleFor<T[K]>>;\n getProperty(propertyName: string): Promise<JSHandle<unknown>>;\n\n /**\n * @internal\n */\n @throwIfDisposed()\n async getProperty<K extends keyof T>(\n propertyName: HandleOr<K>,\n ): Promise<HandleFor<T[K]>> {\n return await this.evaluateHandle((object, propertyName) => {\n return object[propertyName as K];\n }, propertyName);\n }\n\n /**\n * Gets a map of handles representing the properties of the current handle.\n *\n * @example\n *\n * ```ts\n * const listHandle = await page.evaluateHandle(() => document.body.children);\n * const properties = await listHandle.getProperties();\n * const children = [];\n * for (const property of properties.values()) {\n * const element = property.asElement();\n * if (element) {\n * children.push(element);\n * }\n * }\n * children; // holds elementHandles to all children of document.body\n * ```\n */\n @throwIfDisposed()\n async getProperties(): Promise<Map<string, JSHandle>> {\n const propertyNames = await this.evaluate(object => {\n return Object.keys(object ?? {});\n });\n const map = new Map<string, JSHandle>();\n const results = await Promise.all(\n propertyNames.map(key => {\n return this.getProperty(key);\n }),\n );\n for (const [key, value] of Object.entries(propertyNames)) {\n using handle = results[key as any];\n if (handle) {\n map.set(value, handle.move());\n }\n }\n return map;\n }\n\n /**\n * A vanilla object representing the serializable portions of the\n * referenced object.\n * @throws Throws if the object cannot be serialized due to circularity.\n *\n * @remarks\n * If the object has a `toJSON` function, it **will not** be called.\n */\n abstract jsonValue(): Promise<T>;\n\n /**\n * Either `null` or the handle itself if the handle is an\n * instance of {@link ElementHandle}.\n */\n abstract asElement(): ElementHandle<Node> | null;\n\n /**\n * Releases the object referenced by the handle for garbage collection.\n */\n abstract dispose(): Promise<void>;\n\n /**\n * Returns a string representation of the JSHandle.\n *\n * @remarks\n * Useful during debugging.\n */\n abstract toString(): string;\n\n /**\n * @internal\n */\n abstract get id(): string | undefined;\n\n /**\n * Provides access to the\n * {@link https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-RemoteObject | Protocol.Runtime.RemoteObject}\n * backing this handle.\n */\n abstract remoteObject(): Protocol.Runtime.RemoteObject;\n\n [disposeSymbol](): void {\n return void this[asyncDisposeSymbol]().catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }\n\n [asyncDisposeSymbol](): Promise<void> {\n return this.dispose();\n }\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {\n Observable,\n OperatorFunction,\n} from '../../../third_party/rxjs/rxjs.js';\nimport {\n EMPTY,\n catchError,\n defaultIfEmpty,\n defer,\n filter,\n first,\n firstValueFrom,\n from,\n identity,\n ignoreElements,\n map,\n merge,\n mergeMap,\n noop,\n of,\n pipe,\n race,\n raceWith,\n retry,\n tap,\n throwIfEmpty,\n} from '../../../third_party/rxjs/rxjs.js';\nimport {DEBUG_PREFIXES, type Logger} from '../../common/Debug.js';\nimport type {EventType} from '../../common/EventEmitter.js';\nimport {EventEmitter} from '../../common/EventEmitter.js';\nimport type {Awaitable, HandleFor, NodeFor} from '../../common/types.js';\nimport {fromAbortSignal, timeout} from '../../common/util.js';\nimport type {\n BoundingBox,\n ClickOptions,\n ElementHandle,\n} from '../ElementHandle.js';\nimport type {Frame} from '../Frame.js';\nimport type {Page} from '../Page.js';\n\n/**\n * Whether to wait for the element to be\n * {@link ElementHandle.isVisible | visible} or\n * {@link ElementHandle.isHidden | hidden}.\n * `null` to disable visibility checks.\n *\n * @public\n */\nexport type VisibilityOption = 'hidden' | 'visible' | null;\n\n/**\n * @public\n */\nexport interface ActionOptions {\n /**\n * A signal to abort the locator action.\n */\n signal?: AbortSignal;\n}\n/**\n * @public\n */\nexport type LocatorClickOptions = ClickOptions & ActionOptions;\n/**\n * @public\n */\nexport interface LocatorFillOptions extends ActionOptions {\n /**\n * The number of characters to type before switching to a faster fill-out\n * method.\n *\n * @defaultValue `100`\n */\n typingThreshold?: number;\n}\n/**\n * @public\n */\nexport interface LocatorScrollOptions extends ActionOptions {\n scrollTop?: number;\n scrollLeft?: number;\n}\n/**\n * All the events that a locator instance may emit.\n *\n * @public\n */\nexport enum LocatorEvent {\n /**\n * Emitted every time before the locator performs an action on the located element(s).\n */\n Action = 'action',\n}\n\n/**\n * @public\n */\nexport interface LocatorEvents extends Record<EventType, unknown> {\n [LocatorEvent.Action]: undefined;\n}\n\n/**\n * Locators describe a strategy of locating objects and performing an action on\n * them. If the action fails because the object is not ready for the action, the\n * whole operation is retried. Various preconditions for a successful action are\n * checked automatically.\n *\n * See {@link https://pptr.dev/guides/page-interactions#locators} for details.\n *\n * @public\n */\nexport abstract class Locator<T> extends EventEmitter<LocatorEvents> {\n #logger: Logger;\n\n /**\n * @internal\n */\n constructor(logger: Logger) {\n super(undefined, logger);\n this.#logger = logger;\n }\n\n /**\n * @internal\n */\n get logger(): Logger {\n return this.#logger;\n }\n /**\n * Creates a race between multiple locators trying to locate elements in\n * parallel but ensures that only a single element receives the action.\n *\n * @public\n */\n static race<Locators extends readonly unknown[] | []>(\n locators: Locators,\n ): Locator<AwaitedLocator<Locators[number]>> {\n return RaceLocator.create(locators);\n }\n\n /**\n * Used for nominally typing {@link Locator}.\n */\n declare _?: T;\n\n /**\n * @internal\n */\n protected visibility: VisibilityOption = null;\n /**\n * @internal\n */\n protected _timeout = 30000;\n #ensureElementIsInTheViewport = true;\n #waitForEnabled = true;\n #waitForStableBoundingBox = true;\n\n /**\n * @internal\n */\n protected operators = {\n conditions: (\n conditions: Array<Action<T, never>>,\n signal?: AbortSignal,\n ): OperatorFunction<HandleFor<T>, HandleFor<T>> => {\n return mergeMap((handle: HandleFor<T>) => {\n return merge(\n ...conditions.map(condition => {\n return condition(handle, signal);\n }),\n ).pipe(defaultIfEmpty(handle));\n });\n },\n retryAndRaceWithSignalAndTimer: <T>(\n signal?: AbortSignal,\n cause?: Error,\n ): OperatorFunction<T, T> => {\n const candidates = [];\n if (signal) {\n candidates.push(fromAbortSignal(signal, cause));\n }\n candidates.push(timeout(this._timeout, cause));\n return pipe(\n retry({delay: RETRY_DELAY}),\n raceWith<T, never[]>(...candidates),\n );\n },\n };\n\n // Determines when the locator will timeout for actions.\n get timeout(): number {\n return this._timeout;\n }\n\n /**\n * Creates a new locator instance by cloning the current locator and setting\n * the total timeout for the locator actions.\n *\n * Pass `0` to disable timeout.\n *\n * @defaultValue `Page.getDefaultTimeout()`\n */\n setTimeout(timeout: number): Locator<T> {\n const locator = this._clone();\n locator._timeout = timeout;\n return locator;\n }\n\n /**\n * Creates a new locator instance by cloning the current locator with the\n * visibility property changed to the specified value.\n */\n setVisibility<NodeType extends Node>(\n this: Locator<NodeType>,\n visibility: VisibilityOption,\n ): Locator<NodeType> {\n const locator = this._clone();\n locator.visibility = visibility;\n return locator;\n }\n\n /**\n * Creates a new locator instance by cloning the current locator and\n * specifying whether to wait for input elements to become enabled before the\n * action. Applicable to `click` and `fill` actions.\n *\n * @defaultValue `true`\n */\n setWaitForEnabled<NodeType extends Node>(\n this: Locator<NodeType>,\n value: boolean,\n ): Locator<NodeType> {\n const locator = this._clone();\n locator.#waitForEnabled = value;\n return locator;\n }\n\n /**\n * Creates a new locator instance by cloning the current locator and\n * specifying whether the locator should scroll the element into viewport if\n * it is not in the viewport already.\n *\n * @defaultValue `true`\n */\n setEnsureElementIsInTheViewport<ElementType extends Element>(\n this: Locator<ElementType>,\n value: boolean,\n ): Locator<ElementType> {\n const locator = this._clone();\n locator.#ensureElementIsInTheViewport = value;\n return locator;\n }\n\n /**\n * Creates a new locator instance by cloning the current locator and\n * specifying whether the locator has to wait for the element's bounding box\n * to be same between two consecutive animation frames.\n *\n * @defaultValue `true`\n */\n setWaitForStableBoundingBox<ElementType extends Element>(\n this: Locator<ElementType>,\n value: boolean,\n ): Locator<ElementType> {\n const locator = this._clone();\n locator.#waitForStableBoundingBox = value;\n return locator;\n }\n\n /**\n * @internal\n */\n copyOptions<T>(locator: Locator<T>): this {\n this._timeout = locator._timeout;\n this.visibility = locator.visibility;\n this.#waitForEnabled = locator.#waitForEnabled;\n this.#ensureElementIsInTheViewport = locator.#ensureElementIsInTheViewport;\n this.#waitForStableBoundingBox = locator.#waitForStableBoundingBox;\n return this;\n }\n\n /**\n * If the element has a \"disabled\" property, wait for the element to be\n * enabled.\n */\n #waitForEnabledIfNeeded = <ElementType extends Node>(\n handle: HandleFor<ElementType>,\n signal?: AbortSignal,\n ): Observable<never> => {\n if (!this.#waitForEnabled) {\n return EMPTY;\n }\n return from(\n handle.frame.waitForFunction(\n element => {\n if (!(element instanceof HTMLElement)) {\n return true;\n }\n const isNativeFormControl = [\n 'BUTTON',\n 'INPUT',\n 'SELECT',\n 'TEXTAREA',\n 'OPTION',\n 'OPTGROUP',\n ].includes(element.nodeName);\n return !isNativeFormControl || !element.hasAttribute('disabled');\n },\n {\n timeout: this._timeout,\n signal,\n },\n handle,\n ),\n ).pipe(ignoreElements());\n };\n\n /**\n * Compares the bounding box of the element for two consecutive animation\n * frames and waits till they are the same.\n */\n #waitForStableBoundingBoxIfNeeded = <ElementType extends Element>(\n handle: HandleFor<ElementType>,\n ): Observable<never> => {\n if (!this.#waitForStableBoundingBox) {\n return EMPTY;\n }\n return defer(() => {\n // Note we don't use waitForFunction because that relies on RAF.\n return from(\n handle.evaluate(element => {\n return new Promise<[BoundingBox, BoundingBox]>(resolve => {\n window.requestAnimationFrame(() => {\n const rect1 = element.getBoundingClientRect();\n window.requestAnimationFrame(() => {\n const rect2 = element.getBoundingClientRect();\n resolve([\n {\n x: rect1.x,\n y: rect1.y,\n width: rect1.width,\n height: rect1.height,\n },\n {\n x: rect2.x,\n y: rect2.y,\n width: rect2.width,\n height: rect2.height,\n },\n ]);\n });\n });\n });\n }),\n );\n }).pipe(\n first(([rect1, rect2]) => {\n return (\n rect1.x === rect2.x &&\n rect1.y === rect2.y &&\n rect1.width === rect2.width &&\n rect1.height === rect2.height\n );\n }),\n retry({delay: RETRY_DELAY}),\n ignoreElements(),\n );\n };\n\n /**\n * Checks if the element is in the viewport and auto-scrolls it if it is not.\n */\n #ensureElementIsInTheViewportIfNeeded = <ElementType extends Element>(\n handle: HandleFor<ElementType>,\n ): Observable<never> => {\n if (!this.#ensureElementIsInTheViewport) {\n return EMPTY;\n }\n return from(handle.isIntersectingViewport({threshold: 0})).pipe(\n filter(isIntersectingViewport => {\n return !isIntersectingViewport;\n }),\n mergeMap(() => {\n return from(handle.scrollIntoView());\n }),\n mergeMap(() => {\n return defer(() => {\n return from(handle.isIntersectingViewport({threshold: 0}));\n }).pipe(first(identity), retry({delay: RETRY_DELAY}), ignoreElements());\n }),\n );\n };\n\n #click<ElementType extends Element>(\n this: Locator<ElementType>,\n options?: Readonly<LocatorClickOptions>,\n ): Observable<void> {\n const signal = options?.signal;\n const cause = new Error('Locator.click');\n return this._wait(options).pipe(\n this.operators.conditions(\n [\n this.#ensureElementIsInTheViewportIfNeeded,\n this.#waitForStableBoundingBoxIfNeeded,\n this.#waitForEnabledIfNeeded,\n ],\n signal,\n ),\n tap(() => {\n return this.emit(LocatorEvent.Action, undefined);\n }),\n mergeMap(handle => {\n return from(handle.click(options)).pipe(\n catchError(err => {\n void handle.dispose().catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n throw err;\n }),\n );\n }),\n this.operators.retryAndRaceWithSignalAndTimer(signal, cause),\n );\n }\n\n #fill<ElementType extends Element>(\n this: Locator<ElementType>,\n value: string | boolean,\n options?: Readonly<LocatorFillOptions>,\n ): Observable<void> {\n const signal = options?.signal;\n const typingThreshold = options?.typingThreshold ?? 100;\n const cause = new Error('Locator.fill');\n return this._wait(options).pipe(\n this.operators.conditions(\n [\n this.#ensureElementIsInTheViewportIfNeeded,\n this.#waitForStableBoundingBoxIfNeeded,\n this.#waitForEnabledIfNeeded,\n ],\n signal,\n ),\n tap(() => {\n return this.emit(LocatorEvent.Action, undefined);\n }),\n mergeMap(handle => {\n return from(\n (handle as unknown as ElementHandle<HTMLElement>).evaluate(el => {\n if (el instanceof HTMLSelectElement) {\n return 'select';\n }\n if (el instanceof HTMLTextAreaElement) {\n return 'typeable-input';\n }\n if (el instanceof HTMLInputElement) {\n switch (el.type) {\n case 'checkbox':\n case 'radio':\n return 'checkable-input';\n case 'text':\n case 'url':\n case 'tel':\n case 'search':\n case 'password':\n case 'number':\n case 'email':\n return 'typeable-input';\n default:\n return 'other-input';\n }\n }\n\n switch (el.getAttribute('role')) {\n case 'checkbox':\n case 'radio':\n case 'switch':\n return 'checkable-input';\n }\n\n if (el.isContentEditable) {\n return 'contenteditable';\n }\n\n return 'unknown';\n }),\n )\n .pipe(\n mergeMap(inputType => {\n const fillDirectly = (): Observable<void> => {\n return from(handle.focus()).pipe(\n mergeMap(() => {\n return from(\n handle.evaluate((input, newValue) => {\n const element = input as HTMLElement;\n const valString = String(newValue);\n const currentValue = element.isContentEditable\n ? element.innerText\n : (element as HTMLInputElement).value;\n if (currentValue === valString) {\n return;\n }\n if (element.isContentEditable) {\n element.innerText = valString;\n } else {\n (element as HTMLInputElement).value = valString;\n }\n element.dispatchEvent(\n new Event('input', {bubbles: true}),\n );\n element.dispatchEvent(\n new Event('change', {bubbles: true}),\n );\n }, value),\n );\n }),\n );\n };\n\n const toggleIfNeeded = (): Observable<void> => {\n return from(\n handle.evaluate(toggleEl => {\n if (\n (toggleEl as HTMLInputElement).indeterminate ||\n toggleEl.getAttribute('aria-checked') === 'mixed'\n ) {\n return 'mixed';\n }\n return (\n (toggleEl as HTMLInputElement).checked ||\n toggleEl.getAttribute('aria-checked') === 'true'\n );\n }),\n ).pipe(\n mergeMap(currentState => {\n if (currentState === 'mixed' || currentState !== !!value) {\n return from(handle.click());\n }\n return of(undefined);\n }),\n );\n };\n\n switch (inputType) {\n case 'checkable-input':\n return toggleIfNeeded();\n case 'select':\n return from(handle.select(value as string).then(noop));\n case 'contenteditable':\n case 'typeable-input':\n if (\n typeof value === 'string' &&\n value.length < typingThreshold\n ) {\n return from(\n (\n handle as unknown as ElementHandle<HTMLInputElement>\n ).evaluate((input, newValue) => {\n const element = input as HTMLElement;\n const valString = String(newValue);\n const currentValue = element.isContentEditable\n ? element.innerText\n : (input as HTMLInputElement).value;\n\n if (currentValue === valString) {\n return '';\n }\n\n // Clear the input if the current value does not match the filled\n // out value.\n if (\n !valString.startsWith(currentValue) ||\n !currentValue\n ) {\n if (element.isContentEditable) {\n element.innerText = '';\n } else {\n (input as HTMLInputElement).value = '';\n }\n return valString;\n }\n\n // If the value is partially filled out, only type the rest. Move\n // cursor to the end of the common prefix.\n if (element.isContentEditable) {\n element.innerText = '';\n element.innerText = currentValue;\n } else {\n (input as HTMLInputElement).value = '';\n (input as HTMLInputElement).value = currentValue;\n }\n return valString.substring(currentValue.length);\n }, value),\n ).pipe(\n mergeMap(textToType => {\n if (!textToType) {\n return of(undefined);\n }\n return from(handle.type(textToType));\n }),\n );\n }\n return fillDirectly();\n case 'other-input':\n return fillDirectly();\n case 'unknown':\n throw new Error(`Element cannot be filled out.`);\n }\n }),\n )\n .pipe(\n catchError(err => {\n void handle.dispose().catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n throw err;\n }),\n );\n }),\n this.operators.retryAndRaceWithSignalAndTimer(signal, cause),\n );\n }\n\n #hover<ElementType extends Element>(\n this: Locator<ElementType>,\n options?: Readonly<ActionOptions>,\n ): Observable<void> {\n const signal = options?.signal;\n const cause = new Error('Locator.hover');\n return this._wait(options).pipe(\n this.operators.conditions(\n [\n this.#ensureElementIsInTheViewportIfNeeded,\n this.#waitForStableBoundingBoxIfNeeded,\n ],\n signal,\n ),\n tap(() => {\n return this.emit(LocatorEvent.Action, undefined);\n }),\n mergeMap(handle => {\n return from(handle.hover()).pipe(\n catchError(err => {\n void handle.dispose().catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n throw err;\n }),\n );\n }),\n this.operators.retryAndRaceWithSignalAndTimer(signal, cause),\n );\n }\n\n #scroll<ElementType extends Element>(\n this: Locator<ElementType>,\n options?: Readonly<LocatorScrollOptions>,\n ): Observable<void> {\n const signal = options?.signal;\n const cause = new Error('Locator.scroll');\n return this._wait(options).pipe(\n this.operators.conditions(\n [\n this.#ensureElementIsInTheViewportIfNeeded,\n this.#waitForStableBoundingBoxIfNeeded,\n ],\n signal,\n ),\n tap(() => {\n return this.emit(LocatorEvent.Action, undefined);\n }),\n mergeMap(handle => {\n return from(\n handle.evaluate(\n (el, scrollTop, scrollLeft) => {\n if (scrollTop !== undefined) {\n el.scrollTop = scrollTop;\n }\n if (scrollLeft !== undefined) {\n el.scrollLeft = scrollLeft;\n }\n },\n options?.scrollTop,\n options?.scrollLeft,\n ),\n ).pipe(\n catchError(err => {\n void handle.dispose().catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n throw err;\n }),\n );\n }),\n this.operators.retryAndRaceWithSignalAndTimer(signal, cause),\n );\n }\n\n /**\n * @internal\n */\n abstract _clone(): Locator<T>;\n\n /**\n * @internal\n */\n abstract _wait(options?: Readonly<ActionOptions>): Observable<HandleFor<T>>;\n\n /**\n * Clones the locator.\n */\n clone(): Locator<T> {\n return this._clone();\n }\n\n /**\n * Waits for the locator to get a handle from the page.\n *\n * @public\n */\n async waitHandle(options?: Readonly<ActionOptions>): Promise<HandleFor<T>> {\n const cause = new Error('Locator.waitHandle');\n return await firstValueFrom(\n this._wait(options).pipe(\n this.operators.retryAndRaceWithSignalAndTimer(options?.signal, cause),\n ),\n );\n }\n\n /**\n * Waits for the locator to get the serialized value from the page.\n *\n * Note this requires the value to be JSON-serializable.\n *\n * @public\n */\n async wait(options?: Readonly<ActionOptions>): Promise<T> {\n using handle = await this.waitHandle(options);\n return await handle.jsonValue();\n }\n\n /**\n * Maps the locator using the provided mapper.\n *\n * @public\n */\n map<To>(mapper: Mapper<T, To>): Locator<To> {\n return new MappedLocator(this._clone(), handle => {\n // SAFETY: TypeScript cannot deduce the type.\n return (handle as any).evaluateHandle(mapper);\n });\n }\n\n /**\n * Creates an expectation that is evaluated against located values.\n *\n * If the expectations do not match, then the locator will retry.\n *\n * @public\n */\n filter<S extends T>(predicate: Predicate<T, S>): Locator<S> {\n return new FilteredLocator(this._clone(), async (handle, signal) => {\n await (handle as ElementHandle<Node>).frame.waitForFunction(\n predicate,\n {signal, timeout: this._timeout},\n handle,\n );\n return true;\n });\n }\n\n /**\n * Creates an expectation that is evaluated against located handles.\n *\n * If the expectations do not match, then the locator will retry.\n *\n * @internal\n */\n filterHandle<S extends T>(\n predicate: Predicate<HandleFor<T>, HandleFor<S>>,\n ): Locator<S> {\n return new FilteredLocator(this._clone(), predicate);\n }\n\n /**\n * Maps the locator using the provided mapper.\n *\n * @internal\n */\n mapHandle<To>(mapper: HandleMapper<T, To>): Locator<To> {\n return new MappedLocator(this._clone(), mapper);\n }\n\n /**\n * Clicks the located element.\n */\n click<ElementType extends Element>(\n this: Locator<ElementType>,\n options?: Readonly<LocatorClickOptions>,\n ): Promise<void> {\n return firstValueFrom(this.#click(options));\n }\n\n /**\n * Fills out the input identified by the locator using the provided value. The\n * type of the input is determined at runtime and the appropriate fill-out\n * method is chosen based on the type. `contenteditable`, select, textarea and\n * input elements are supported. For checkboxes, radio buttons and switches\n * specify a boolean value.\n */\n fill<ElementType extends Element>(\n this: Locator<ElementType>,\n value: string | boolean,\n options?: Readonly<LocatorFillOptions>,\n ): Promise<void> {\n return firstValueFrom(this.#fill(value, options));\n }\n\n /**\n * Hovers over the located element.\n */\n hover<ElementType extends Element>(\n this: Locator<ElementType>,\n options?: Readonly<ActionOptions>,\n ): Promise<void> {\n return firstValueFrom(this.#hover(options));\n }\n\n /**\n * Scrolls the located element.\n */\n scroll<ElementType extends Element>(\n this: Locator<ElementType>,\n options?: Readonly<LocatorScrollOptions>,\n ): Promise<void> {\n return firstValueFrom(this.#scroll(options));\n }\n}\n\n/**\n * @internal\n */\nexport class FunctionLocator<T> extends Locator<T> {\n static create<Ret>(\n pageOrFrame: Page | Frame,\n func: () => Awaitable<Ret>,\n ): Locator<Ret> {\n return new FunctionLocator<Ret>(pageOrFrame, func).setTimeout(\n 'getDefaultTimeout' in pageOrFrame\n ? pageOrFrame.getDefaultTimeout()\n : pageOrFrame.page().getDefaultTimeout(),\n );\n }\n\n #pageOrFrame: Page | Frame;\n #func: () => Awaitable<T>;\n\n private constructor(pageOrFrame: Page | Frame, func: () => Awaitable<T>) {\n super(pageOrFrame.logger);\n\n this.#pageOrFrame = pageOrFrame;\n this.#func = func;\n }\n\n override _clone(): FunctionLocator<T> {\n return new FunctionLocator(this.#pageOrFrame, this.#func);\n }\n\n _wait(options?: Readonly<ActionOptions>): Observable<HandleFor<T>> {\n const signal = options?.signal;\n return defer(() => {\n return from(\n this.#pageOrFrame.waitForFunction(this.#func, {\n timeout: this.timeout,\n signal,\n }),\n );\n }).pipe(throwIfEmpty());\n }\n}\n\n/**\n * @public\n */\nexport type Predicate<From, To extends From = From> =\n ((value: From) => value is To) | ((value: From) => Awaitable<boolean>);\n/**\n * @internal\n */\nexport type HandlePredicate<From, To extends From = From> =\n | ((value: HandleFor<From>, signal?: AbortSignal) => value is HandleFor<To>)\n | ((value: HandleFor<From>, signal?: AbortSignal) => Awaitable<boolean>);\n\n/**\n * @internal\n */\nexport abstract class DelegatedLocator<T, U> extends Locator<U> {\n #delegate: Locator<T>;\n\n constructor(delegate: Locator<T>) {\n super(delegate.logger);\n\n this.#delegate = delegate;\n this.copyOptions(this.#delegate);\n }\n\n protected get delegate(): Locator<T> {\n return this.#delegate;\n }\n\n override setTimeout(timeout: number): DelegatedLocator<T, U> {\n const locator = super.setTimeout(timeout) as DelegatedLocator<T, U>;\n locator.#delegate = this.#delegate.setTimeout(timeout);\n return locator;\n }\n\n override setVisibility<ValueType extends Node, NodeType extends Node>(\n this: DelegatedLocator<ValueType, NodeType>,\n visibility: VisibilityOption,\n ): DelegatedLocator<ValueType, NodeType> {\n const locator = super.setVisibility<NodeType>(\n visibility,\n ) as DelegatedLocator<ValueType, NodeType>;\n locator.#delegate = locator.#delegate.setVisibility<ValueType>(visibility);\n return locator;\n }\n\n override setWaitForEnabled<ValueType extends Node, NodeType extends Node>(\n this: DelegatedLocator<ValueType, NodeType>,\n value: boolean,\n ): DelegatedLocator<ValueType, NodeType> {\n const locator = super.setWaitForEnabled<NodeType>(\n value,\n ) as DelegatedLocator<ValueType, NodeType>;\n locator.#delegate = this.#delegate.setWaitForEnabled(value);\n return locator;\n }\n\n override setEnsureElementIsInTheViewport<\n ValueType extends Element,\n ElementType extends Element,\n >(\n this: DelegatedLocator<ValueType, ElementType>,\n value: boolean,\n ): DelegatedLocator<ValueType, ElementType> {\n const locator = super.setEnsureElementIsInTheViewport<ElementType>(\n value,\n ) as DelegatedLocator<ValueType, ElementType>;\n locator.#delegate = this.#delegate.setEnsureElementIsInTheViewport(value);\n return locator;\n }\n\n override setWaitForStableBoundingBox<\n ValueType extends Element,\n ElementType extends Element,\n >(\n this: DelegatedLocator<ValueType, ElementType>,\n value: boolean,\n ): DelegatedLocator<ValueType, ElementType> {\n const locator = super.setWaitForStableBoundingBox<ElementType>(\n value,\n ) as DelegatedLocator<ValueType, ElementType>;\n locator.#delegate = this.#delegate.setWaitForStableBoundingBox(value);\n return locator;\n }\n\n abstract override _clone(): DelegatedLocator<T, U>;\n abstract override _wait(): Observable<HandleFor<U>>;\n}\n\n/**\n * @internal\n */\nexport class FilteredLocator<From, To extends From> extends DelegatedLocator<\n From,\n To\n> {\n #predicate: HandlePredicate<From, To>;\n\n constructor(base: Locator<From>, predicate: HandlePredicate<From, To>) {\n super(base);\n this.#predicate = predicate;\n }\n\n override _clone(): FilteredLocator<From, To> {\n return new FilteredLocator(\n this.delegate.clone(),\n this.#predicate,\n ).copyOptions(this);\n }\n\n override _wait(options?: Readonly<ActionOptions>): Observable<HandleFor<To>> {\n return this.delegate._wait(options).pipe(\n mergeMap(handle => {\n return from(\n Promise.resolve(this.#predicate(handle, options?.signal)),\n ).pipe(\n filter(value => {\n return value;\n }),\n map(() => {\n // SAFETY: It passed the predicate, so this is correct.\n return handle as HandleFor<To>;\n }),\n );\n }),\n throwIfEmpty(),\n );\n }\n}\n\n/**\n * @public\n */\nexport type Mapper<From, To> = (value: From) => Awaitable<To>;\n/**\n * @internal\n */\nexport type HandleMapper<From, To> = (\n value: HandleFor<From>,\n signal?: AbortSignal,\n) => Awaitable<HandleFor<To>>;\n/**\n * @internal\n */\nexport class MappedLocator<From, To> extends DelegatedLocator<From, To> {\n #mapper: HandleMapper<From, To>;\n\n constructor(base: Locator<From>, mapper: HandleMapper<From, To>) {\n super(base);\n this.#mapper = mapper;\n }\n\n override _clone(): MappedLocator<From, To> {\n return new MappedLocator(this.delegate.clone(), this.#mapper).copyOptions(\n this,\n );\n }\n\n override _wait(options?: Readonly<ActionOptions>): Observable<HandleFor<To>> {\n return this.delegate._wait(options).pipe(\n mergeMap(handle => {\n return from(Promise.resolve(this.#mapper(handle, options?.signal)));\n }),\n );\n }\n}\n\n/**\n * @internal\n */\nexport type Action<T, U> = (\n element: HandleFor<T>,\n signal?: AbortSignal,\n) => Observable<U>;\n/**\n * @internal\n */\nexport class NodeLocator<T extends Node> extends Locator<T> {\n static create<Selector extends string>(\n pageOrFrame: Page | Frame,\n selector: Selector,\n ): Locator<NodeFor<Selector>> {\n return new NodeLocator<NodeFor<Selector>>(pageOrFrame, selector).setTimeout(\n 'getDefaultTimeout' in pageOrFrame\n ? pageOrFrame.getDefaultTimeout()\n : pageOrFrame.page().getDefaultTimeout(),\n );\n }\n\n static createFromHandle<T extends Node>(\n pageOrFrame: Page | Frame,\n handle: ElementHandle<T>,\n ): Locator<T> {\n return new NodeLocator<T>(pageOrFrame, handle).setTimeout(\n 'getDefaultTimeout' in pageOrFrame\n ? pageOrFrame.getDefaultTimeout()\n : pageOrFrame.page().getDefaultTimeout(),\n );\n }\n\n #pageOrFrame: Page | Frame;\n #selectorOrHandle: string | ElementHandle<T>;\n\n private constructor(pageOrFrame: Page | Frame, selector: string);\n private constructor(pageOrFrame: Page | Frame, handle: ElementHandle<T>);\n private constructor(\n pageOrFrame: Page | Frame,\n selectorOrHandle: string | ElementHandle<T>,\n ) {\n super(pageOrFrame.logger);\n this.#pageOrFrame = pageOrFrame;\n this.#selectorOrHandle = selectorOrHandle;\n }\n\n /**\n * Waits for the element to become visible or hidden. visibility === 'visible'\n * means that the element has a computed style, the visibility property other\n * than 'hidden' or 'collapse' and non-empty bounding box. visibility ===\n * 'hidden' means the opposite of that.\n */\n #waitForVisibilityIfNeeded = (handle: HandleFor<T>): Observable<never> => {\n if (!this.visibility) {\n return EMPTY;\n }\n\n return (() => {\n switch (this.visibility) {\n case 'hidden':\n return defer(() => {\n return from(handle.isHidden());\n });\n case 'visible':\n return defer(() => {\n return from(handle.isVisible());\n });\n }\n })().pipe(first(identity), retry({delay: RETRY_DELAY}), ignoreElements());\n };\n\n override _clone(): NodeLocator<T> {\n return new NodeLocator<T>(\n this.#pageOrFrame,\n // @ts-expect-error TSC does cannot parse private overloads.\n this.#selectorOrHandle,\n ).copyOptions(this);\n }\n\n override _wait(options?: Readonly<ActionOptions>): Observable<HandleFor<T>> {\n const signal = options?.signal;\n return defer(() => {\n if (typeof this.#selectorOrHandle === 'string') {\n return from(\n this.#pageOrFrame.waitForSelector(this.#selectorOrHandle, {\n visible: false,\n timeout: this._timeout,\n signal,\n }) as Promise<HandleFor<T> | null>,\n );\n } else {\n return of(this.#selectorOrHandle as HandleFor<T>);\n }\n }).pipe(\n filter((value): value is NonNullable<typeof value> => {\n return value !== null;\n }),\n throwIfEmpty(),\n this.operators.conditions([this.#waitForVisibilityIfNeeded], signal),\n );\n }\n}\n\n/**\n * @public\n */\nexport type AwaitedLocator<T> = T extends Locator<infer S> ? S : never;\nfunction checkLocatorArray<T extends readonly unknown[] | []>(\n locators: T,\n): ReadonlyArray<Locator<AwaitedLocator<T[number]>>> {\n for (const locator of locators) {\n if (!(locator instanceof Locator)) {\n throw new Error('Unknown locator for race candidate');\n }\n }\n return locators as ReadonlyArray<Locator<AwaitedLocator<T[number]>>>;\n}\n/**\n * @internal\n */\nexport class RaceLocator<T> extends Locator<T> {\n static create<T extends readonly unknown[]>(\n locators: T,\n ): Locator<AwaitedLocator<T[number]>> {\n const array = checkLocatorArray(locators);\n return new RaceLocator(array);\n }\n\n #locators: ReadonlyArray<Locator<T>>;\n\n constructor(locators: ReadonlyArray<Locator<T>>) {\n super(\n locators[0]?.logger ??\n (() => {\n return undefined;\n }),\n );\n this.#locators = locators;\n }\n\n override _clone(): RaceLocator<T> {\n return new RaceLocator<T>(\n this.#locators.map(locator => {\n return locator.clone();\n }),\n ).copyOptions(this);\n }\n\n override _wait(options?: Readonly<ActionOptions>): Observable<HandleFor<T>> {\n return race(\n ...this.#locators.map(locator => {\n return locator._wait(options);\n }),\n );\n }\n}\n\n/**\n * For observables coming from promises, a delay is needed, otherwise RxJS will\n * never yield in a permanent failure for a promise.\n *\n * We also don't want RxJS to do promise operations to often, so we bump the\n * delay up to 100ms.\n *\n * @internal\n */\nexport const RETRY_DELAY = 100;\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {Frame} from '../api/Frame.js';\nimport type {Logger} from '../common/Debug.js';\nimport {getQueryHandlerAndSelector} from '../common/GetQueryHandler.js';\nimport {LazyArg} from '../common/LazyArg.js';\nimport type {\n AwaitableIterable,\n ElementFor,\n EvaluateFuncWith,\n HandleFor,\n HandleOr,\n NodeFor,\n} from '../common/types.js';\nimport type {KeyInput} from '../common/USKeyboardLayout.js';\nimport {isString, withSourcePuppeteerURLIfNone} from '../common/util.js';\nimport {assert} from '../util/assert.js';\nimport {AsyncIterableUtil} from '../util/AsyncIterableUtil.js';\nimport {throwIfDisposed} from '../util/decorators.js';\n\nimport {_isElementHandle} from './ElementHandleSymbol.js';\nimport type {\n KeyboardTypeOptions,\n KeyPressOptions,\n MouseClickOptions,\n TouchHandle,\n} from './Input.js';\nimport {JSHandle} from './JSHandle.js';\nimport type {Locator} from './locators/locators.js';\nimport {NodeLocator} from './locators/locators.js';\nimport type {\n QueryOptions,\n ScreenshotOptions,\n WaitForSelectorOptions,\n} from './Page.js';\n\n/**\n * @public\n */\nexport type Quad = [Point, Point, Point, Point];\n\n/**\n * @public\n */\nexport interface BoxModel {\n content: Quad;\n padding: Quad;\n border: Quad;\n margin: Quad;\n width: number;\n height: number;\n}\n\n/**\n * @public\n */\nexport interface BoundingBox extends Point {\n /**\n * the width of the element in pixels.\n */\n width: number;\n /**\n * the height of the element in pixels.\n */\n height: number;\n}\n\n/**\n * @public\n */\nexport interface Offset {\n /**\n * x-offset for the clickable point relative to the top-left corner of the border box.\n */\n x: number;\n /**\n * y-offset for the clickable point relative to the top-left corner of the border box.\n */\n y: number;\n}\n\n/**\n * @public\n */\nexport interface ClickOptions extends MouseClickOptions {\n /**\n * Offset for the clickable point relative to the top-left corner of the border box.\n */\n offset?: Offset;\n /**\n * An experimental debugging feature. If true, inserts an element into the\n * page to highlight the click location for 10 seconds. Might not work on all\n * pages and does not persist across navigations.\n *\n * @experimental\n */\n debugHighlight?: boolean;\n}\n\n/**\n * @public\n */\nexport interface Point {\n x: number;\n y: number;\n}\n\n/**\n * @public\n */\nexport interface ElementScreenshotOptions extends ScreenshotOptions {\n /**\n * @defaultValue `true`\n */\n scrollIntoView?: boolean;\n}\n\n/**\n * A given method will have it's `this` replaced with an isolated version of\n * `this` when decorated with this decorator.\n *\n * All changes of isolated `this` are reflected on the actual `this`.\n *\n * @internal\n */\nexport function bindIsolatedHandle<This extends ElementHandle<Node>>(\n target: (this: This, ...args: any[]) => Promise<any>,\n _: unknown,\n): typeof target {\n return async function (...args) {\n // If the handle is already isolated, then we don't need to adopt it\n // again.\n if (this.realm === this.frame.isolatedRealm()) {\n return await target.call(this, ...args);\n }\n let adoptedThis: This;\n if (this['isolatedHandle']) {\n adoptedThis = this['isolatedHandle'];\n } else {\n this['isolatedHandle'] = adoptedThis = await this.frame\n .isolatedRealm()\n .adoptHandle(this);\n }\n const result = await target.call(adoptedThis, ...args);\n // If the function returns `adoptedThis`, then we return `this`.\n if (result === adoptedThis) {\n return this;\n }\n // If the function returns a handle, transfer it into the current realm.\n if (result instanceof JSHandle) {\n return await this.realm.transferHandle(result);\n }\n // If the function returns an array of handlers, transfer them into the\n // current realm.\n if (Array.isArray(result)) {\n await Promise.all(\n result.map(async (item, index, result) => {\n if (item instanceof JSHandle) {\n result[index] = await this.realm.transferHandle(item);\n }\n }),\n );\n }\n if (result instanceof Map) {\n await Promise.all(\n [...result.entries()].map(async ([key, value]) => {\n if (value instanceof JSHandle) {\n result.set(key, await this.realm.transferHandle(value));\n }\n }),\n );\n }\n return result;\n };\n}\n\n/**\n * ElementHandle represents an in-page DOM element.\n *\n * @remarks\n * ElementHandles can be created with the {@link Page.$} method.\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.goto('https://example.com');\n * const hrefElement = await page.$('a');\n * await hrefElement.click();\n * // ...\n * ```\n *\n * ElementHandle prevents the DOM element from being garbage-collected unless the\n * handle is {@link JSHandle.dispose | disposed}. ElementHandles are auto-disposed\n * when their associated frame is navigated away or the parent\n * context gets destroyed.\n *\n * ElementHandle instances can be used as arguments in {@link Page.$eval} and\n * {@link Page.evaluate} methods.\n *\n * If you're using TypeScript, ElementHandle takes a generic argument that\n * denotes the type of element the handle is holding within. For example, if you\n * have a handle to a `<select>` element, you can type it as\n * `ElementHandle<HTMLSelectElement>` and you get some nicer type checks.\n *\n * @public\n */\nexport abstract class ElementHandle<\n ElementType extends Node = Element,\n> extends JSHandle<ElementType> {\n /**\n * @internal\n */\n declare [_isElementHandle]: boolean;\n\n /**\n * @internal\n * Cached isolatedHandle to prevent\n * trying to adopt it multiple times\n */\n isolatedHandle?: typeof this;\n\n /**\n * @internal\n */\n protected readonly handle;\n\n /**\n * @internal\n */\n constructor(handle: JSHandle<ElementType>, logger: Logger) {\n super(logger);\n this.handle = handle;\n this[_isElementHandle] = true;\n }\n\n /**\n * @internal\n */\n override get id(): string | undefined {\n return this.handle.id;\n }\n\n /**\n * @internal\n */\n override get disposed(): boolean {\n return this.handle.disposed;\n }\n\n /**\n * @internal\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n override async getProperty<K extends keyof ElementType>(\n propertyName: HandleOr<K>,\n ): Promise<HandleFor<ElementType[K]>> {\n return await this.handle.getProperty(propertyName);\n }\n\n /**\n * @internal\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n override async getProperties(): Promise<Map<string, JSHandle>> {\n return await this.handle.getProperties();\n }\n\n /**\n * @internal\n */\n override async evaluate<\n Params extends unknown[],\n Func extends EvaluateFuncWith<ElementType, Params> = EvaluateFuncWith<\n ElementType,\n Params\n >,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(\n this.evaluate.name,\n pageFunction,\n );\n return await this.handle.evaluate(pageFunction, ...args);\n }\n\n /**\n * @internal\n */\n override async evaluateHandle<\n Params extends unknown[],\n Func extends EvaluateFuncWith<ElementType, Params> = EvaluateFuncWith<\n ElementType,\n Params\n >,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n pageFunction = withSourcePuppeteerURLIfNone(\n this.evaluateHandle.name,\n pageFunction,\n );\n return await this.handle.evaluateHandle(pageFunction, ...args);\n }\n\n /**\n * @internal\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n override async jsonValue(): Promise<ElementType> {\n return await this.handle.jsonValue();\n }\n\n /**\n * @internal\n */\n override toString(): string {\n return this.handle.toString();\n }\n\n /**\n * @internal\n */\n override remoteObject(): Protocol.Runtime.RemoteObject {\n return this.handle.remoteObject();\n }\n\n /**\n * @internal\n */\n override async dispose(): Promise<void> {\n await Promise.all([this.handle.dispose(), this.isolatedHandle?.dispose()]);\n }\n\n /**\n * @internal\n */\n override asElement(): ElementHandle<ElementType> {\n return this;\n }\n\n /**\n * Frame corresponding to the current handle.\n */\n abstract get frame(): Frame;\n\n /**\n * Queries the current element for an element matching the given selector.\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @returns A {@link ElementHandle | element handle} to the first element\n * matching the given selector. Otherwise, `null`.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async $<Selector extends string>(\n selector: Selector,\n ): Promise<ElementHandle<NodeFor<Selector>> | null> {\n const {updatedSelector, QueryHandler} =\n getQueryHandlerAndSelector(selector);\n return (await QueryHandler.queryOne(\n this,\n updatedSelector,\n )) as ElementHandle<NodeFor<Selector>> | null;\n }\n\n /**\n * Queries the current element for all elements matching the given selector.\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @returns An array of {@link ElementHandle | element handles} that point to\n * elements matching the given selector.\n */\n @throwIfDisposed()\n async $$<Selector extends string>(\n selector: Selector,\n options?: QueryOptions,\n ): Promise<Array<ElementHandle<NodeFor<Selector>>>> {\n if (options?.isolate === false) {\n return await this.#$$impl(selector);\n }\n return await this.#$$(selector);\n }\n\n /**\n * Isolates {@link ElementHandle.$$} if needed.\n *\n * @internal\n */\n @bindIsolatedHandle\n async #$$<Selector extends string>(\n selector: Selector,\n ): Promise<Array<ElementHandle<NodeFor<Selector>>>> {\n return await this.#$$impl(selector);\n }\n\n /**\n * Implementation for {@link ElementHandle.$$}.\n *\n * @internal\n */\n async #$$impl<Selector extends string>(\n selector: Selector,\n ): Promise<Array<ElementHandle<NodeFor<Selector>>>> {\n const {updatedSelector, QueryHandler} =\n getQueryHandlerAndSelector(selector);\n return await (AsyncIterableUtil.collect(\n QueryHandler.queryAll(this, updatedSelector),\n ) as Promise<Array<ElementHandle<NodeFor<Selector>>>>);\n }\n\n /**\n * Runs the given function on the first element matching the given selector in\n * the current element.\n *\n * If the given function returns a promise, then this method will wait till\n * the promise resolves.\n *\n * @example\n *\n * ```ts\n * const tweetHandle = await page.$('.tweet');\n * expect(await tweetHandle.$eval('.like', node => node.innerText)).toBe(\n * '100',\n * );\n * expect(await tweetHandle.$eval('.retweets', node => node.innerText)).toBe(\n * '10',\n * );\n * ```\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @param pageFunction - The function to be evaluated in this element's page's\n * context. The first element matching the selector will be passed in as the\n * first argument.\n * @param args - Additional arguments to pass to `pageFunction`.\n * @returns A promise to the result of the function.\n */\n async $eval<\n Selector extends string,\n Params extends unknown[],\n Func extends EvaluateFuncWith<NodeFor<Selector>, Params> = EvaluateFuncWith<\n NodeFor<Selector>,\n Params\n >,\n >(\n selector: Selector,\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(this.$eval.name, pageFunction);\n using elementHandle = await this.$(selector);\n if (!elementHandle) {\n throw new Error(\n `Error: failed to find element matching selector \"${selector}\"`,\n );\n }\n return await elementHandle.evaluate(pageFunction, ...args);\n }\n\n /**\n * Runs the given function on an array of elements matching the given selector\n * in the current element.\n *\n * If the given function returns a promise, then this method will wait till\n * the promise resolves.\n *\n * @example\n * HTML:\n *\n * ```html\n * <div class=\"feed\">\n * <div class=\"tweet\">Hello!</div>\n * <div class=\"tweet\">Hi!</div>\n * </div>\n * ```\n *\n * JavaScript:\n *\n * ```ts\n * const feedHandle = await page.$('.feed');\n *\n * const listOfTweets = await feedHandle.$$eval('.tweet', nodes =>\n * nodes.map(n => n.innerText),\n * );\n * ```\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @param pageFunction - The function to be evaluated in the element's page's\n * context. An array of elements matching the given selector will be passed to\n * the function as its first argument.\n * @param args - Additional arguments to pass to `pageFunction`.\n * @returns A promise to the result of the function.\n */\n async $$eval<\n Selector extends string,\n Params extends unknown[],\n Func extends EvaluateFuncWith<Array<NodeFor<Selector>>, Params> =\n EvaluateFuncWith<Array<NodeFor<Selector>>, Params>,\n >(\n selector: Selector,\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(this.$$eval.name, pageFunction);\n const results = await this.$$(selector);\n using elements = await this.evaluateHandle(\n (_, ...elements) => {\n return elements;\n },\n ...results,\n );\n const [result] = await Promise.all([\n elements.evaluate(pageFunction, ...args),\n ...results.map(results => {\n return results.dispose();\n }),\n ]);\n return result;\n }\n\n /**\n * Wait for an element matching the given selector to appear in the current\n * element.\n *\n * Unlike {@link Frame.waitForSelector}, this method does not work across\n * navigations or if the element is detached from DOM.\n *\n * @example\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * let currentURL;\n * page\n * .mainFrame()\n * .waitForSelector('img')\n * .then(() => console.log('First URL with image: ' + currentURL));\n *\n * for (currentURL of [\n * 'https://example.com',\n * 'https://google.com',\n * 'https://bbc.com',\n * ]) {\n * await page.goto(currentURL);\n * }\n * await browser.close();\n * ```\n *\n * @param selector - The selector to query and wait for.\n * @param options - Options for customizing waiting behavior.\n * @returns An element matching the given selector.\n * @throws Throws if an element matching the given selector doesn't appear.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async waitForSelector<Selector extends string>(\n selector: Selector,\n options: WaitForSelectorOptions = {},\n ): Promise<ElementHandle<NodeFor<Selector>> | null> {\n const {updatedSelector, QueryHandler, polling} =\n getQueryHandlerAndSelector(selector);\n return (await QueryHandler.waitFor(this, updatedSelector, {\n polling,\n ...options,\n })) as ElementHandle<NodeFor<Selector>> | null;\n }\n\n async #checkVisibility(visibility: boolean): Promise<boolean> {\n return await this.evaluate(\n async (element, PuppeteerUtil, visibility) => {\n return Boolean(PuppeteerUtil.checkVisibility(element, visibility));\n },\n LazyArg.create(context => {\n return context.puppeteerUtil;\n }),\n visibility,\n );\n }\n\n /**\n * An element is considered to be visible if all of the following is\n * true:\n *\n * - the element has\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle | computed styles}.\n *\n * - the element has a non-empty\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect | bounding client rect}.\n *\n * - the element's {@link https://developer.mozilla.org/en-US/docs/Web/CSS/visibility | visibility}\n * is not `hidden` or `collapse`.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async isVisible(): Promise<boolean> {\n return await this.#checkVisibility(true);\n }\n\n /**\n * An element is considered to be hidden if at least one of the following is true:\n *\n * - the element has no\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle | computed styles}.\n *\n * - the element has an empty\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect | bounding client rect}.\n *\n * - the element's {@link https://developer.mozilla.org/en-US/docs/Web/CSS/visibility | visibility}\n * is `hidden` or `collapse`.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async isHidden(): Promise<boolean> {\n return await this.#checkVisibility(false);\n }\n\n /**\n * Converts the current handle to the given element type.\n *\n * @example\n *\n * ```ts\n * const element: ElementHandle<Element> = await page.$(\n * '.class-name-of-anchor',\n * );\n * // DO NOT DISPOSE `element`, this will be always be the same handle.\n * const anchor: ElementHandle<HTMLAnchorElement> =\n * await element.toElement('a');\n * ```\n *\n * @param tagName - The tag name of the desired element type.\n * @throws An error if the handle does not match. **The handle will not be\n * automatically disposed.**\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async toElement<\n K extends keyof HTMLElementTagNameMap | keyof SVGElementTagNameMap,\n >(tagName: K): Promise<HandleFor<ElementFor<K>>> {\n const isMatchingTagName = await this.evaluate((node, tagName) => {\n return node.nodeName === tagName.toUpperCase();\n }, tagName);\n if (!isMatchingTagName) {\n throw new Error(`Element is not a(n) \\`${tagName}\\` element`);\n }\n return this as unknown as HandleFor<ElementFor<K>>;\n }\n\n /**\n * Resolves the frame associated with the element, if any. Always exists for\n * HTMLIFrameElements.\n */\n abstract contentFrame(this: ElementHandle<HTMLIFrameElement>): Promise<Frame>;\n abstract contentFrame(): Promise<Frame | null>;\n\n /**\n * Returns the middle point within an element unless a specific offset is provided.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async clickablePoint(offset?: Offset): Promise<Point> {\n const box = await this.#clickableBox();\n if (!box) {\n throw new Error('Node is either not clickable or not an Element');\n }\n if (offset !== undefined) {\n return {\n x: box.x + offset.x,\n y: box.y + offset.y,\n };\n }\n return {\n x: box.x + box.width / 2,\n y: box.y + box.height / 2,\n };\n }\n\n /**\n * This method scrolls element into view if needed, and then\n * uses {@link Page.mouse} to hover over the center of the element.\n * If the element is detached from DOM, the method throws an error.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async hover(this: ElementHandle<Element>): Promise<void> {\n await this.scrollIntoViewIfNeeded();\n const {x, y} = await this.clickablePoint();\n await this.frame.page().mouse.move(x, y);\n }\n\n /**\n * This method scrolls element into view if needed, and then\n * uses {@link Page.mouse} to click in the center of the element.\n * If the element is detached from DOM, the method throws an error.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async click(\n this: ElementHandle<Element>,\n options: Readonly<ClickOptions> = {},\n ): Promise<void> {\n await this.scrollIntoViewIfNeeded();\n const {x, y} = await this.clickablePoint(options.offset);\n try {\n await this.frame.page().mouse.click(x, y, options);\n } finally {\n if (options.debugHighlight) {\n await this.frame.page().evaluate(\n (x, y) => {\n const highlight = document.createElement('div');\n highlight.innerHTML = `<style>\n @scope {\n :scope {\n position: fixed;\n left: ${x}px;\n top: ${y}px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n animation: colorChange 10s 1 normal;\n animation-fill-mode: forwards;\n }\n\n @keyframes colorChange {\n from {\n background-color: red;\n }\n to {\n background-color: #FADADD00;\n }\n }\n }\n </style>`;\n highlight.addEventListener(\n 'animationend',\n () => {\n highlight.remove();\n },\n {once: true},\n );\n document.body.append(highlight);\n },\n x,\n y,\n );\n }\n }\n }\n\n /**\n * Drags an element over the given element or point.\n *\n * @returns DEPRECATED. When drag interception is enabled, the drag payload is\n * returned.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async drag(\n this: ElementHandle<Element>,\n target: Point | ElementHandle<Element>,\n ): Promise<Protocol.Input.DragData | void> {\n await this.scrollIntoViewIfNeeded();\n const page = this.frame.page();\n if (page.isDragInterceptionEnabled()) {\n const source = await this.clickablePoint();\n if (target instanceof ElementHandle) {\n target = await target.clickablePoint();\n }\n return await page.mouse.drag(source, target);\n }\n try {\n if (!page._isDragging) {\n page._isDragging = true;\n await this.hover();\n await page.mouse.down();\n }\n if (target instanceof ElementHandle) {\n await target.hover();\n } else {\n await page.mouse.move(target.x, target.y);\n }\n } catch (error) {\n page._isDragging = false;\n throw error;\n }\n }\n\n /**\n * @deprecated Do not use. `dragenter` will automatically be performed during dragging.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async dragEnter(\n this: ElementHandle<Element>,\n data: Protocol.Input.DragData = {items: [], dragOperationsMask: 1},\n ): Promise<void> {\n const page = this.frame.page();\n await this.scrollIntoViewIfNeeded();\n const target = await this.clickablePoint();\n await page.mouse.dragEnter(target, data);\n }\n\n /**\n * @deprecated Do not use. `dragover` will automatically be performed during dragging.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async dragOver(\n this: ElementHandle<Element>,\n data: Protocol.Input.DragData = {items: [], dragOperationsMask: 1},\n ): Promise<void> {\n const page = this.frame.page();\n await this.scrollIntoViewIfNeeded();\n const target = await this.clickablePoint();\n await page.mouse.dragOver(target, data);\n }\n\n /**\n * Drops the given element onto the current one.\n */\n async drop(\n this: ElementHandle<Element>,\n element: ElementHandle<Element>,\n ): Promise<void>;\n\n /**\n * @deprecated No longer supported.\n */\n async drop(\n this: ElementHandle<Element>,\n data?: Protocol.Input.DragData,\n ): Promise<void>;\n\n /**\n * @internal\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async drop(\n this: ElementHandle<Element>,\n dataOrElement: ElementHandle<Element> | Protocol.Input.DragData = {\n items: [],\n dragOperationsMask: 1,\n },\n ): Promise<void> {\n const page = this.frame.page();\n if ('items' in dataOrElement) {\n await this.scrollIntoViewIfNeeded();\n const destination = await this.clickablePoint();\n await page.mouse.drop(destination, dataOrElement);\n } else {\n // Note if the rest errors, we still want dragging off because the errors\n // is most likely something implying the mouse is no longer dragging.\n await dataOrElement.drag(this);\n page._isDragging = false;\n await page.mouse.up();\n }\n }\n\n /**\n * @deprecated Use `ElementHandle.drop` instead.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async dragAndDrop(\n this: ElementHandle<Element>,\n target: ElementHandle<Node>,\n options?: {delay: number},\n ): Promise<void> {\n const page = this.frame.page();\n assert(\n page.isDragInterceptionEnabled(),\n 'Drag Interception is not enabled!',\n );\n await this.scrollIntoViewIfNeeded();\n const startPoint = await this.clickablePoint();\n const targetPoint = await target.clickablePoint();\n await page.mouse.dragAndDrop(startPoint, targetPoint, options);\n }\n\n /**\n * Triggers a `change` and `input` event once all the provided options have been\n * selected. If there's no `<select>` element matching `selector`, the method\n * throws an error.\n *\n * @example\n *\n * ```ts\n * handle.select('blue'); // single selection\n * handle.select('red', 'green', 'blue'); // multiple selections\n * ```\n *\n * @param values - Values of options to select. If the `<select>` has the\n * `multiple` attribute, all values are considered, otherwise only the first\n * one is taken into account.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async select(...values: string[]): Promise<string[]> {\n for (const value of values) {\n assert(\n isString(value),\n 'Values must be strings. Found value \"' +\n value +\n '\" of type \"' +\n typeof value +\n '\"',\n );\n }\n\n return await this.evaluate((element, vals): string[] => {\n const values = new Set(vals);\n if (!(element instanceof HTMLSelectElement)) {\n throw new Error('Element is not a <select> element.');\n }\n\n const selectedValues = new Set<string>();\n if (!element.multiple) {\n for (const option of element.options) {\n option.selected = false;\n }\n for (const option of element.options) {\n if (values.has(option.value)) {\n option.selected = true;\n selectedValues.add(option.value);\n break;\n }\n }\n } else {\n for (const option of element.options) {\n option.selected = values.has(option.value);\n if (option.selected) {\n selectedValues.add(option.value);\n }\n }\n }\n element.dispatchEvent(new Event('input', {bubbles: true}));\n element.dispatchEvent(new Event('change', {bubbles: true}));\n return [...selectedValues.values()];\n }, values);\n }\n\n /**\n * Sets the value of an\n * {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input | input element}\n * to the given file paths.\n *\n * @remarks This will not validate whether the file paths exists. Also, if a\n * path is relative, then it is resolved against the\n * {@link https://nodejs.org/api/process.html#process_process_cwd | current working directory}.\n * For locals script connecting to remote chrome environments, paths must be\n * absolute.\n */\n abstract uploadFile(\n this: ElementHandle<HTMLInputElement>,\n ...paths: string[]\n ): Promise<void>;\n\n /**\n * @internal\n */\n abstract queryAXTree(\n name?: string,\n role?: string,\n ): AwaitableIterable<ElementHandle<Node>>;\n\n /**\n * This method scrolls element into view if needed, and then uses\n * {@link Touchscreen.tap} to tap in the center of the element.\n * If the element is detached from DOM, the method throws an error.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async tap(this: ElementHandle<Element>): Promise<void> {\n await this.scrollIntoViewIfNeeded();\n const {x, y} = await this.clickablePoint();\n await this.frame.page().touchscreen.tap(x, y);\n }\n\n /**\n * This method scrolls the element into view if needed, and then\n * starts a touch in the center of the element.\n * @returns A {@link TouchHandle} representing the touch that was started\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async touchStart(this: ElementHandle<Element>): Promise<TouchHandle> {\n await this.scrollIntoViewIfNeeded();\n const {x, y} = await this.clickablePoint();\n return await this.frame.page().touchscreen.touchStart(x, y);\n }\n\n /**\n * This method scrolls the element into view if needed, and then\n * moves the touch to the center of the element.\n * @param touch - An optional {@link TouchHandle}. If provided, this touch\n * will be moved. If not provided, the first active touch will be moved.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async touchMove(\n this: ElementHandle<Element>,\n touch?: TouchHandle,\n ): Promise<void> {\n await this.scrollIntoViewIfNeeded();\n const {x, y} = await this.clickablePoint();\n if (touch) {\n return await touch.move(x, y);\n }\n await this.frame.page().touchscreen.touchMove(x, y);\n }\n\n @throwIfDisposed()\n @bindIsolatedHandle\n async touchEnd(this: ElementHandle<Element>): Promise<void> {\n await this.scrollIntoViewIfNeeded();\n await this.frame.page().touchscreen.touchEnd();\n }\n\n /**\n * Calls {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus | focus} on the element.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async focus(): Promise<void> {\n await this.evaluate(element => {\n if (!(element instanceof HTMLElement)) {\n throw new Error('Cannot focus non-HTMLElement');\n }\n return element.focus();\n });\n }\n\n /**\n * Focuses the element, and then sends a `keydown`, `keypress`/`input`, and\n * `keyup` event for each character in the text.\n *\n * To press a special key, like `Control` or `ArrowDown`,\n * use {@link ElementHandle.press}.\n *\n * @example\n *\n * ```ts\n * await elementHandle.type('Hello'); // Types instantly\n * await elementHandle.type('World', {delay: 100}); // Types slower, like a user\n * ```\n *\n * @example\n * An example of typing into a text field and then submitting the form:\n *\n * ```ts\n * const elementHandle = await page.$('input');\n * await elementHandle.type('some text');\n * await elementHandle.press('Enter');\n * ```\n *\n * @param options - Delay in milliseconds. Defaults to 0.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async type(\n text: string,\n options?: Readonly<KeyboardTypeOptions>,\n ): Promise<void> {\n await this.focus();\n await this.frame.page().keyboard.type(text, options);\n }\n\n /**\n * Focuses the element, and then uses {@link Keyboard.down} and {@link Keyboard.up}.\n *\n * @remarks\n * If `key` is a single character and no modifier keys besides `Shift`\n * are being held down, a `keypress`/`input` event will also be generated.\n * The `text` option can be specified to force an input event to be generated.\n *\n * **NOTE** Modifier keys DO affect `elementHandle.press`. Holding down `Shift`\n * will type the text in upper case.\n *\n * @param key - Name of key to press, such as `ArrowLeft`.\n * See {@link KeyInput} for a list of all key names.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async press(\n key: KeyInput,\n options?: Readonly<KeyPressOptions>,\n ): Promise<void> {\n await this.focus();\n await this.frame.page().keyboard.press(key, options);\n }\n\n async #clickableBox(): Promise<BoundingBox | null> {\n const boxes = await this.evaluate(element => {\n if (!(element instanceof Element)) {\n return null;\n }\n return [...element.getClientRects()].map(rect => {\n return {x: rect.x, y: rect.y, width: rect.width, height: rect.height};\n });\n });\n if (!boxes?.length) {\n return null;\n }\n await this.#intersectBoundingBoxesWithFrame(boxes);\n let frame = this.frame;\n let parentFrame: Frame | null | undefined;\n while ((parentFrame = frame?.parentFrame())) {\n using handle = await frame.frameElement();\n if (!handle) {\n throw new Error('Unsupported frame type');\n }\n const parentBox = await handle.evaluate(element => {\n // Element is not visible.\n if (element.getClientRects().length === 0) {\n return null;\n }\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n return {\n left:\n rect.left +\n parseInt(style.paddingLeft, 10) +\n parseInt(style.borderLeftWidth, 10),\n top:\n rect.top +\n parseInt(style.paddingTop, 10) +\n parseInt(style.borderTopWidth, 10),\n };\n });\n if (!parentBox) {\n return null;\n }\n for (const box of boxes) {\n box.x += parentBox.left;\n box.y += parentBox.top;\n }\n await handle.#intersectBoundingBoxesWithFrame(boxes);\n frame = parentFrame;\n }\n const box = boxes.find(box => {\n return box.width >= 1 && box.height >= 1;\n });\n if (!box) {\n return null;\n }\n return {\n x: box.x,\n y: box.y,\n height: box.height,\n width: box.width,\n };\n }\n\n async #intersectBoundingBoxesWithFrame(boxes: BoundingBox[]) {\n const {documentWidth, documentHeight} = await this.frame\n .isolatedRealm()\n .evaluate(() => {\n return {\n documentWidth: document.documentElement.clientWidth,\n documentHeight: document.documentElement.clientHeight,\n };\n });\n for (const box of boxes) {\n intersectBoundingBox(box, documentWidth, documentHeight);\n }\n }\n\n /**\n * This method returns the bounding box of the element (relative to the main frame),\n * or `null` if the element is {@link https://drafts.csswg.org/css-display-4/#box-generation | not part of the layout}\n * (example: `display: none`).\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async boundingBox(): Promise<BoundingBox | null> {\n const box = await this.evaluate(element => {\n if (!(element instanceof Element)) {\n return null;\n }\n // Element is not visible.\n if (element.getClientRects().length === 0) {\n return null;\n }\n const rect = element.getBoundingClientRect();\n return {x: rect.x, y: rect.y, width: rect.width, height: rect.height};\n });\n if (!box) {\n return null;\n }\n const offset = await this.#getTopLeftCornerOfFrame();\n if (!offset) {\n return null;\n }\n return {\n x: box.x + offset.x,\n y: box.y + offset.y,\n height: box.height,\n width: box.width,\n };\n }\n\n /**\n * This method returns boxes of the element,\n * or `null` if the element is {@link https://drafts.csswg.org/css-display-4/#box-generation | not part of the layout}\n * (example: `display: none`).\n *\n * @remarks\n *\n * Boxes are represented as an array of points;\n * Each Point is an object `{x, y}`. Box points are sorted clock-wise.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async boxModel(): Promise<BoxModel | null> {\n const model = await this.evaluate(element => {\n if (!(element instanceof Element)) {\n return null;\n }\n // Element is not visible.\n if (element.getClientRects().length === 0) {\n return null;\n }\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n const offsets = {\n padding: {\n left: parseInt(style.paddingLeft, 10),\n top: parseInt(style.paddingTop, 10),\n right: parseInt(style.paddingRight, 10),\n bottom: parseInt(style.paddingBottom, 10),\n },\n margin: {\n left: -parseInt(style.marginLeft, 10),\n top: -parseInt(style.marginTop, 10),\n right: -parseInt(style.marginRight, 10),\n bottom: -parseInt(style.marginBottom, 10),\n },\n border: {\n left: parseInt(style.borderLeft, 10),\n top: parseInt(style.borderTop, 10),\n right: parseInt(style.borderRight, 10),\n bottom: parseInt(style.borderBottom, 10),\n },\n };\n const border: Quad = [\n {x: rect.left, y: rect.top},\n {x: rect.left + rect.width, y: rect.top},\n {x: rect.left + rect.width, y: rect.top + rect.height},\n {x: rect.left, y: rect.top + rect.height},\n ];\n const padding = transformQuadWithOffsets(border, offsets.border);\n const content = transformQuadWithOffsets(padding, offsets.padding);\n const margin = transformQuadWithOffsets(border, offsets.margin);\n return {\n content,\n padding,\n border,\n margin,\n width: rect.width,\n height: rect.height,\n };\n\n function transformQuadWithOffsets(\n quad: Quad,\n offsets: {top: number; left: number; right: number; bottom: number},\n ): Quad {\n return [\n {\n x: quad[0].x + offsets.left,\n y: quad[0].y + offsets.top,\n },\n {\n x: quad[1].x - offsets.right,\n y: quad[1].y + offsets.top,\n },\n {\n x: quad[2].x - offsets.right,\n y: quad[2].y - offsets.bottom,\n },\n {\n x: quad[3].x + offsets.left,\n y: quad[3].y - offsets.bottom,\n },\n ];\n }\n });\n if (!model) {\n return null;\n }\n const offset = await this.#getTopLeftCornerOfFrame();\n if (!offset) {\n return null;\n }\n for (const attribute of [\n 'content',\n 'padding',\n 'border',\n 'margin',\n ] as const) {\n for (const point of model[attribute]) {\n point.x += offset.x;\n point.y += offset.y;\n }\n }\n return model;\n }\n\n async #getTopLeftCornerOfFrame() {\n const point = {x: 0, y: 0};\n let frame = this.frame;\n let parentFrame: Frame | null | undefined;\n while ((parentFrame = frame?.parentFrame())) {\n using handle = await frame.frameElement();\n if (!handle) {\n throw new Error('Unsupported frame type');\n }\n const parentBox = await handle.evaluate(element => {\n // Element is not visible.\n if (element.getClientRects().length === 0) {\n return null;\n }\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n return {\n left:\n rect.left +\n parseInt(style.paddingLeft, 10) +\n parseInt(style.borderLeftWidth, 10),\n top:\n rect.top +\n parseInt(style.paddingTop, 10) +\n parseInt(style.borderTopWidth, 10),\n };\n });\n if (!parentBox) {\n return null;\n }\n point.x += parentBox.left;\n point.y += parentBox.top;\n frame = parentFrame;\n }\n return point;\n }\n\n /**\n * This method scrolls element into view if needed, and then uses\n * {@link Page.(screenshot:2) } to take a screenshot of the element.\n * If the element is detached from DOM, the method throws an error.\n */\n async screenshot(\n options: Readonly<ScreenshotOptions> & {encoding: 'base64'},\n ): Promise<string>;\n async screenshot(options?: Readonly<ScreenshotOptions>): Promise<Uint8Array>;\n @throwIfDisposed()\n @bindIsolatedHandle\n async screenshot(\n this: ElementHandle<Element>,\n options: Readonly<ElementScreenshotOptions> = {},\n ): Promise<string | Uint8Array> {\n const {scrollIntoView = true, clip} = options;\n\n const page = this.frame.page();\n\n // Only scroll the element into view if the user wants it.\n if (scrollIntoView) {\n await this.scrollIntoViewIfNeeded();\n }\n const elementClip = await this.#nonEmptyVisibleBoundingBox();\n\n const [pageLeft, pageTop] = await this.evaluate(() => {\n if (!window.visualViewport) {\n throw new Error('window.visualViewport is not supported.');\n }\n return [\n window.visualViewport.pageLeft,\n window.visualViewport.pageTop,\n ] as const;\n });\n elementClip.x += pageLeft;\n elementClip.y += pageTop;\n if (clip) {\n elementClip.x += clip.x;\n elementClip.y += clip.y;\n elementClip.height = clip.height;\n elementClip.width = clip.width;\n }\n\n return await page.screenshot({...options, clip: elementClip});\n }\n\n async #nonEmptyVisibleBoundingBox() {\n const box = await this.boundingBox();\n assert(box, 'Node is either not visible or not an HTMLElement');\n assert(box.width !== 0, 'Node has 0 width.');\n assert(box.height !== 0, 'Node has 0 height.');\n return box;\n }\n\n /**\n * @internal\n */\n protected async assertConnectedElement(): Promise<void> {\n const error = await this.evaluate(async element => {\n if (!element.isConnected) {\n return 'Node is detached from document';\n }\n if (element.nodeType !== Node.ELEMENT_NODE) {\n return 'Node is not of type HTMLElement';\n }\n return;\n });\n\n if (error) {\n throw new Error(error);\n }\n }\n\n /**\n * @internal\n */\n protected async scrollIntoViewIfNeeded(\n this: ElementHandle<Element>,\n ): Promise<void> {\n if (\n await this.isIntersectingViewport({\n threshold: 1,\n })\n ) {\n return;\n }\n await this.scrollIntoView();\n }\n\n /**\n * Resolves to true if the element is visible in the current viewport. If an\n * element is an SVG, we check if the svg owner element is in the viewport\n * instead. See https://crbug.com/963246.\n *\n * @param options - Threshold for the intersection between 0 (no intersection) and 1\n * (full intersection). Defaults to 1.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async isIntersectingViewport(\n this: ElementHandle<Element>,\n options: {\n threshold?: number;\n } = {},\n ): Promise<boolean> {\n await this.assertConnectedElement();\n // eslint-disable-next-line @puppeteer/use-using -- Returns `this`.\n const handle = await this.#asSVGElementHandle();\n using target = handle && (await handle.#getOwnerSVGElement());\n return await ((target ?? this) as ElementHandle<Element>).evaluate(\n async (element, threshold) => {\n const visibleRatio = await new Promise<number>(resolve => {\n const observer = new IntersectionObserver(entries => {\n resolve(entries[0]!.intersectionRatio);\n observer.disconnect();\n });\n observer.observe(element);\n });\n return threshold === 1 ? visibleRatio === 1 : visibleRatio > threshold;\n },\n options.threshold ?? 0,\n );\n }\n\n /**\n * Scrolls the element into view using either the automation protocol client\n * or by calling element.scrollIntoView.\n */\n @throwIfDisposed()\n @bindIsolatedHandle\n async scrollIntoView(this: ElementHandle<Element>): Promise<void> {\n await this.assertConnectedElement();\n await this.evaluate(async (element): Promise<void> => {\n element.scrollIntoView({\n block: 'center',\n inline: 'center',\n behavior: 'instant',\n });\n });\n }\n\n /**\n * Creates a locator based on an ElementHandle. This would not allow\n * refreshing the element handle if it is stale but it allows re-using other\n * locator pre-conditions.\n */\n @throwIfDisposed()\n asLocator(this: ElementHandle<Element>): Locator<Element> {\n return NodeLocator.createFromHandle(this.frame, this);\n }\n\n /**\n * Returns true if an element is an SVGElement (included svg, path, rect\n * etc.).\n */\n async #asSVGElementHandle(\n this: ElementHandle<Element>,\n ): Promise<ElementHandle<SVGElement> | null> {\n if (\n await this.evaluate(element => {\n return element instanceof SVGElement;\n })\n ) {\n return this as ElementHandle<SVGElement>;\n } else {\n return null;\n }\n }\n\n async #getOwnerSVGElement(\n this: ElementHandle<SVGElement>,\n ): Promise<ElementHandle<SVGSVGElement>> {\n // SVGSVGElement.ownerSVGElement === null.\n return await this.evaluateHandle(element => {\n if (element instanceof SVGSVGElement) {\n return element;\n }\n return element.ownerSVGElement!;\n });\n }\n\n /**\n * If the element is a form input, you can use {@link ElementHandle.autofill}\n * to test if the form is compatible with the browser's autofill\n * implementation. Throws an error if the form cannot be autofilled.\n *\n * @remarks\n *\n * Currently, Puppeteer supports auto-filling credit card information only and\n * in Chrome in the new headless and headful modes only.\n *\n * ```ts\n * // Select an input on the credit card form.\n * const name = await page.waitForSelector('form #name');\n * // Trigger autofill with the desired data.\n * await name.autofill({\n * creditCard: {\n * number: '4444444444444444',\n * name: 'John Smith',\n * expiryMonth: '01',\n * expiryYear: '2030',\n * cvc: '123',\n * },\n * });\n * ```\n */\n abstract autofill(data: AutofillData): Promise<void>;\n\n /**\n * When connected using Chrome DevTools Protocol, it returns a\n * DOM.BackendNodeId for the element.\n */\n abstract backendNodeId(): Promise<number>;\n}\n\n/**\n * Supported autofill address field names.\n *\n * @public\n */\nexport const enum AutofillAddressField {\n NameFirst = 'NAME_FIRST',\n NameMiddle = 'NAME_MIDDLE',\n NameLast = 'NAME_LAST',\n NameFull = 'NAME_FULL',\n EmailAddress = 'EMAIL_ADDRESS',\n PhoneHomeNumber = 'PHONE_HOME_NUMBER',\n PhoneHomeCityAndNumber = 'PHONE_HOME_CITY_AND_NUMBER',\n PhoneHomeWholeNumber = 'PHONE_HOME_WHOLE_NUMBER',\n AddressHomeLine1 = 'ADDRESS_HOME_LINE1',\n AddressHomeLine2 = 'ADDRESS_HOME_LINE2',\n AddressHomeStreetAddress = 'ADDRESS_HOME_STREET_ADDRESS',\n AddressHomeCity = 'ADDRESS_HOME_CITY',\n AddressHomeState = 'ADDRESS_HOME_STATE',\n AddressHomeZip = 'ADDRESS_HOME_ZIP',\n AddressHomeCountry = 'ADDRESS_HOME_COUNTRY',\n}\n\n/**\n * @public\n */\nexport type AutofillData =\n | {\n /**\n * See {@link https://chromedevtools.github.io/devtools-protocol/tot/Autofill/#type-CreditCard | Autofill.CreditCard}.\n */\n creditCard: {\n number: string;\n name: string;\n expiryMonth: string;\n expiryYear: string;\n cvc: string;\n };\n address?: never;\n }\n | {\n /**\n * See {@link https://chromedevtools.github.io/devtools-protocol/tot/Autofill/#type-Address | Autofill.Address}.\n */\n address: {\n fields: Array<{\n /**\n * The field type.\n * See {@link https://source.chromium.org/chromium/chromium/src/+/main:components/autofill/core/browser/field_types.cc}\n * for the full list of supported fields.\n */\n name: AutofillAddressField | (string & Record<never, never>);\n value: string;\n }>;\n };\n creditCard?: never;\n };\n\nfunction intersectBoundingBox(\n box: BoundingBox,\n width: number,\n height: number,\n): void {\n box.width = Math.max(\n box.x >= 0\n ? Math.min(width - box.x, box.width)\n : Math.min(width, box.width + box.x),\n 0,\n );\n box.height = Math.max(\n box.y >= 0\n ? Math.min(height - box.y, box.height)\n : Math.min(height, box.height + box.y),\n 0,\n );\n box.x = Math.max(box.x, 0);\n box.y = Math.max(box.y, 0);\n}\n","/**\n * @license\n * Copyright 2026 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Page} from './Page.js';\nimport type {WebWorker} from './WebWorker.js';\n\n/**\n * {@link Extension} represents a browser extension installed in the browser.\n * It provides access to the extension's ID, name, and version, as well as\n * methods for interacting with the extension's background workers and pages.\n *\n * @example\n * To get all extensions installed in the browser:\n *\n * ```ts\n * const extensions = await browser.extensions();\n * for (const [id, extension] of extensions) {\n * console.log(extension.name, id);\n * }\n * ```\n *\n * @experimental\n * @public\n */\nexport abstract class Extension {\n #id: string;\n #version: string;\n #name: string;\n #path: string;\n #enabled: boolean;\n\n /**\n * @internal\n */\n constructor(\n id: string,\n version: string,\n name: string,\n path: string,\n enabled: boolean,\n ) {\n if (!id || !version) {\n throw new Error('Extension ID and version are required');\n }\n\n this.#id = id;\n this.#version = version;\n this.#name = name;\n this.#path = path;\n this.#enabled = enabled;\n }\n\n /**\n * Whether the extension is enabled.\n *\n * @public\n */\n get enabled(): boolean {\n return this.#enabled;\n }\n\n /**\n * The path in the file system where the extension is located.\n *\n * @public\n */\n get path(): string {\n return this.#path;\n }\n\n /**\n * The version of the extension as specified in its manifest.\n *\n * @public\n */\n get version(): string {\n return this.#version;\n }\n\n /**\n * The name of the extension as specified in its manifest.\n *\n * @public\n */\n get name(): string {\n return this.#name;\n }\n\n /**\n * The unique identifier of the extension.\n *\n * @public\n */\n get id(): string {\n return this.#id;\n }\n\n /**\n * Returns a list of the currently active service workers belonging\n * to the extension.\n *\n * @public\n */\n abstract workers(): Promise<WebWorker[]>;\n\n /**\n * Returns a list of the currently active and visible pages belonging\n * to the extension.\n *\n * @public\n */\n abstract pages(): Promise<Page[]>;\n\n /**\n * Triggers the default action of the extension for a specified page.\n * This typically simulates a user clicking the extension's action icon\n * in the browser toolbar, potentially opening a popup or executing an action script.\n *\n * @param page - The page to trigger the action on.\n * @public\n */\n abstract triggerAction(page: Page): Promise<void>;\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type Protocol from 'devtools-protocol';\n\nimport type {ClickOptions, ElementHandle} from '../api/ElementHandle.js';\nimport type {HTTPResponse} from '../api/HTTPResponse.js';\nimport type {\n Page,\n QueryOptions,\n WaitForSelectorOptions,\n WaitTimeoutOptions,\n} from '../api/Page.js';\nimport type {Accessibility} from '../cdp/Accessibility.js';\nimport type {PuppeteerLifeCycleEvent} from '../cdp/LifecycleWatcher.js';\nimport type {Logger} from '../common/Debug.js';\nimport {EventEmitter, type EventType} from '../common/EventEmitter.js';\nimport {getQueryHandlerAndSelector} from '../common/GetQueryHandler.js';\nimport {transposeIterableHandle} from '../common/HandleIterator.js';\nimport type {\n Awaitable,\n EvaluateFunc,\n EvaluateFuncWith,\n HandleFor,\n NodeFor,\n} from '../common/types.js';\nimport {withSourcePuppeteerURLIfNone} from '../common/util.js';\nimport {environment} from '../environment.js';\nimport {assert} from '../util/assert.js';\nimport {throwIfDisposed} from '../util/decorators.js';\n\nimport type {CDPSession} from './CDPSession.js';\nimport type {DeviceRequestPrompt} from './DeviceRequestPrompt.js';\nimport type {KeyboardTypeOptions} from './Input.js';\nimport {\n FunctionLocator,\n NodeLocator,\n type Locator,\n} from './locators/locators.js';\nimport type {Realm} from './Realm.js';\n\n/**\n * @public\n */\nexport interface WaitForOptions {\n /**\n * Maximum wait time in milliseconds. Pass 0 to disable the timeout.\n *\n * The default value can be changed by using the\n * {@link Page.setDefaultTimeout} or {@link Page.setDefaultNavigationTimeout}\n * methods.\n *\n * @defaultValue `30000`\n */\n timeout?: number;\n /**\n * When to consider waiting succeeds. Given an array of event strings, waiting\n * is considered to be successful after all events have been fired.\n *\n * @defaultValue `'load'`\n */\n waitUntil?: PuppeteerLifeCycleEvent | PuppeteerLifeCycleEvent[];\n /**\n * @internal\n */\n ignoreSameDocumentNavigation?: boolean;\n /**\n * A signal object that allows you to cancel the call.\n */\n signal?: AbortSignal;\n}\n\n/**\n * @public\n */\nexport interface GoToOptions extends WaitForOptions {\n /**\n * If provided, it will take preference over the referer header value set by\n * {@link Page.setExtraHTTPHeaders | page.setExtraHTTPHeaders()}.\n */\n referer?: string;\n /**\n * If provided, it will take preference over the referer-policy header value\n * set by {@link Page.setExtraHTTPHeaders | page.setExtraHTTPHeaders()}.\n */\n referrerPolicy?: string;\n}\n\n/**\n * @public\n */\nexport interface SetContentWaitForOptions extends WaitForOptions {\n /**\n * When to consider waiting succeeds. Given an array of event strings, waiting\n * is considered to be successful after all events have been fired.\n *\n * @defaultValue `'load'`\n */\n waitUntil?:\n | Exclude<PuppeteerLifeCycleEvent, 'networkidle0' | 'networkidle2'>\n | Array<Exclude<PuppeteerLifeCycleEvent, 'networkidle0' | 'networkidle2'>>;\n}\n\n/**\n * @public\n */\nexport interface FrameWaitForFunctionOptions {\n /**\n * An interval at which the `pageFunction` is executed, defaults to `raf`. If\n * `polling` is a number, then it is treated as an interval in milliseconds at\n * which the function would be executed. If `polling` is a string, then it can\n * be one of the following values:\n *\n * - `raf` - to constantly execute `pageFunction` in `requestAnimationFrame`\n * callback. This is the tightest polling mode which is suitable to observe\n * styling changes.\n *\n * - `mutation` - to execute `pageFunction` on every DOM mutation.\n */\n polling?: 'raf' | 'mutation' | number;\n /**\n * Maximum time to wait in milliseconds. Defaults to `30000` (30 seconds).\n * Pass `0` to disable the timeout. Puppeteer's default timeout can be changed\n * using {@link Page.setDefaultTimeout}.\n */\n timeout?: number;\n /**\n * A signal object that allows you to cancel a waitForFunction call.\n */\n signal?: AbortSignal;\n}\n\n/**\n * @public\n */\nexport interface FrameAddScriptTagOptions {\n /**\n * URL of the script to be added.\n */\n url?: string;\n /**\n * Path to a JavaScript file to be injected into the frame.\n *\n * @remarks\n * If `path` is a relative path, it is resolved relative to the current\n * working directory (`process.cwd()` in Node.js).\n */\n path?: string;\n /**\n * JavaScript to be injected into the frame.\n */\n content?: string;\n /**\n * Sets the `type` of the script. Use `module` in order to load an ES2015 module.\n */\n type?: string;\n /**\n * Sets the `id` of the script.\n */\n id?: string;\n}\n\n/**\n * @public\n */\nexport interface FrameAddStyleTagOptions {\n /**\n * the URL of the CSS file to be added.\n */\n url?: string;\n /**\n * The path to a CSS file to be injected into the frame.\n * @remarks\n * If `path` is a relative path, it is resolved relative to the current\n * working directory (`process.cwd()` in Node.js).\n */\n path?: string;\n /**\n * Raw CSS content to be injected into the frame.\n */\n content?: string;\n}\n\n/**\n * @public\n */\nexport interface FrameEvents extends Record<EventType, unknown> {\n /** @internal */\n [FrameEvent.FrameNavigated]: Protocol.Page.NavigationType;\n /** @internal */\n [FrameEvent.FrameSwapped]: undefined;\n /** @internal */\n [FrameEvent.LifecycleEvent]: undefined;\n /** @internal */\n [FrameEvent.FrameNavigatedWithinDocument]: undefined;\n /** @internal */\n [FrameEvent.FrameDetached]: Frame;\n /** @internal */\n [FrameEvent.FrameSwappedByActivation]: undefined;\n}\n\n/**\n * We use symbols to prevent external parties listening to these events.\n * They are internal to Puppeteer.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace FrameEvent {\n export const FrameNavigated = Symbol('Frame.FrameNavigated');\n export const FrameSwapped = Symbol('Frame.FrameSwapped');\n export const LifecycleEvent = Symbol('Frame.LifecycleEvent');\n export const FrameNavigatedWithinDocument = Symbol(\n 'Frame.FrameNavigatedWithinDocument',\n );\n export const FrameDetached = Symbol('Frame.FrameDetached');\n export const FrameSwappedByActivation = Symbol(\n 'Frame.FrameSwappedByActivation',\n );\n}\n\n/**\n * @internal\n */\nexport const throwIfDetached = throwIfDisposed<Frame>(frame => {\n return `Attempted to use detached Frame '${frame._id}'.`;\n});\n\n/**\n * Represents a DOM frame.\n *\n * To understand frames, you can think of frames as `<iframe>` elements. Just\n * like iframes, frames can be nested, and when JavaScript is executed in a\n * frame, the JavaScript does not affect frames inside the ambient frame the\n * JavaScript executes in.\n *\n * @example\n * At any point in time, {@link Page | pages} expose their current frame\n * tree via the {@link Page.mainFrame} and {@link Frame.childFrames} methods.\n *\n * @example\n * An example of dumping frame tree:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.goto('https://www.google.com/chrome/browser/canary.html');\n * dumpFrameTree(page.mainFrame(), '');\n * await browser.close();\n *\n * function dumpFrameTree(frame, indent) {\n * console.log(indent + frame.url());\n * for (const child of frame.childFrames()) {\n * dumpFrameTree(child, indent + ' ');\n * }\n * }\n * ```\n *\n * @example\n * An example of getting text from an iframe element:\n *\n * ```ts\n * const frames = page.frames();\n * let frame = null;\n * for (const currentFrame of frames) {\n * const frameElement = await currentFrame.frameElement();\n * const name = await frameElement.evaluate(el => el.getAttribute('name'));\n * if (name === 'myframe') {\n * frame = currentFrame;\n * break;\n * }\n * }\n * if (frame) {\n * const text = await frame.$eval(\n * '.selector',\n * element => element.textContent,\n * );\n * console.log(text);\n * } else {\n * console.error('Frame with name \"myframe\" not found.');\n * }\n * ```\n *\n * @remarks\n * Frame lifecycles are controlled by three events that are all dispatched on\n * the parent {@link Frame.page | page}:\n *\n * - {@link PageEvent.FrameAttached}\n * - {@link PageEvent.FrameNavigated}\n * - {@link PageEvent.FrameDetached}\n *\n * @public\n */\nexport abstract class Frame extends EventEmitter<FrameEvents> {\n /**\n * @internal\n */\n _id!: string;\n /**\n * @internal\n */\n _parentId?: string;\n\n /**\n * @internal\n */\n _name?: string;\n\n /**\n * @internal\n */\n _hasStartedLoading = false;\n\n /**\n * @internal\n */\n logger: Logger;\n\n /**\n * @internal\n */\n constructor(logger: Logger) {\n super(undefined, logger);\n this.logger = logger;\n }\n\n /**\n * The page associated with the frame.\n */\n abstract page(): Page;\n\n /**\n * Navigates the frame or page to the given `url`.\n *\n * @remarks\n * Navigation to `about:blank` or navigation to the same URL with a different\n * hash will succeed and return `null`.\n *\n * :::warning\n *\n * Headless shell mode doesn't support navigation to a PDF document. See the\n * {@link https://crbug.com/761295 | upstream issue}.\n *\n * :::\n *\n * In headless shell, this method will not throw an error when any valid HTTP\n * status code is returned by the remote server, including 404 \"Not Found\" and\n * 500 \"Internal Server Error\". The status code for such responses can be\n * retrieved by calling {@link HTTPResponse.status}.\n *\n * @param url - URL to navigate the frame to. The URL should include scheme,\n * e.g. `https://`\n * @param options - Options to configure waiting behavior.\n * @returns A promise which resolves to the main resource response. In case of\n * multiple redirects, the navigation will resolve with the response of the\n * last redirect.\n * @throws If:\n *\n * - there's an SSL error (e.g. in case of self-signed certificates).\n *\n * - target URL is invalid.\n *\n * - the timeout is exceeded during navigation.\n *\n * - the remote server does not respond or is unreachable.\n *\n * - the main resource failed to load.\n *\n * - the URL is blocked by blocklist/allowlist rules.\n */\n abstract goto(\n url: string,\n options?: GoToOptions,\n ): Promise<HTTPResponse | null>;\n\n /**\n * Waits for the frame to navigate. It is useful for when you run code which\n * will indirectly cause the frame to navigate.\n *\n * Usage of the\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/History_API | History API}\n * to change the URL is considered a navigation.\n *\n * @example\n *\n * ```ts\n * const [response] = await Promise.all([\n * // The navigation promise resolves after navigation has finished\n * frame.waitForNavigation(),\n * // Clicking the link will indirectly cause a navigation\n * frame.click('a.my-link'),\n * ]);\n * ```\n *\n * @param options - Options to configure waiting behavior.\n * @returns A promise which resolves to the main resource response.\n */\n abstract waitForNavigation(\n options?: WaitForOptions,\n ): Promise<HTTPResponse | null>;\n\n /**\n * @internal\n */\n abstract get client(): CDPSession;\n\n /**\n * @internal\n */\n abstract get accessibility(): Accessibility;\n\n /**\n * @internal\n */\n abstract mainRealm(): Realm;\n\n /**\n * @internal\n */\n abstract isolatedRealm(): Realm;\n\n #_document: Promise<ElementHandle<Document>> | undefined;\n\n /**\n * @internal\n */\n #document(): Promise<ElementHandle<Document>> {\n if (!this.#_document) {\n this.#_document = this.mainRealm().evaluateHandle(() => {\n return document;\n });\n }\n return this.#_document;\n }\n\n /**\n * Used to clear the document handle that has been destroyed.\n *\n * @internal\n */\n clearDocumentHandle(): void {\n this.#_document = undefined;\n }\n\n /**\n * @returns The frame element associated with this frame (if any).\n */\n @throwIfDetached\n async frameElement(): Promise<HandleFor<HTMLIFrameElement> | null> {\n const parentFrame = this.parentFrame();\n if (!parentFrame) {\n return null;\n }\n using list = await parentFrame.isolatedRealm().evaluateHandle(() => {\n return document.querySelectorAll('iframe,frame');\n });\n for await (using iframe of transposeIterableHandle(list)) {\n const frame = await iframe.contentFrame();\n if (frame?._id === this._id) {\n return (await parentFrame\n .mainRealm()\n .adoptHandle(iframe)) as HandleFor<HTMLIFrameElement>;\n }\n }\n return null;\n }\n\n /**\n * Behaves identically to {@link Page.evaluateHandle} except it's run within\n * the context of this frame.\n *\n * See {@link Page.evaluateHandle} for details.\n */\n @throwIfDetached\n async evaluateHandle<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n pageFunction = withSourcePuppeteerURLIfNone(\n this.evaluateHandle.name,\n pageFunction,\n );\n return await this.mainRealm().evaluateHandle(pageFunction, ...args);\n }\n\n /**\n * Behaves identically to {@link Page.evaluate} except it's run within\n * the context of this frame.\n *\n * See {@link Page.evaluate} for details.\n */\n @throwIfDetached\n async evaluate<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(\n this.evaluate.name,\n pageFunction,\n );\n return await this.mainRealm().evaluate(pageFunction, ...args);\n }\n\n /**\n * Creates a locator for the provided selector. See {@link Locator} for\n * details and supported actions.\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n */\n locator<Selector extends string>(\n selector: Selector,\n ): Locator<NodeFor<Selector>>;\n\n /**\n * Creates a locator for the provided function. See {@link Locator} for\n * details and supported actions.\n */\n locator<Ret>(func: () => Awaitable<Ret>): Locator<Ret>;\n\n /**\n * @internal\n */\n @throwIfDetached\n locator<Selector extends string, Ret, T extends Node>(\n input: Selector | (() => Awaitable<Ret>),\n ): Locator<NodeFor<Selector>> | Locator<Ret> | Locator<T> {\n if (typeof input === 'string') {\n return NodeLocator.create(this, input);\n } else {\n return FunctionLocator.create(this, input);\n }\n }\n /**\n * Queries the frame for an element matching the given selector.\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n *\n * @returns A {@link ElementHandle | element handle} to the first element\n * matching the given selector. Otherwise, `null`.\n */\n @throwIfDetached\n async $<Selector extends string>(\n selector: Selector,\n ): Promise<ElementHandle<NodeFor<Selector>> | null> {\n // eslint-disable-next-line @puppeteer/use-using -- This is cached.\n const document = await this.#document();\n return await document.$(selector);\n }\n\n /**\n * Queries the frame for all elements matching the given selector.\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n *\n * @returns An array of {@link ElementHandle | element handles} that point to\n * elements matching the given selector.\n */\n @throwIfDetached\n async $$<Selector extends string>(\n selector: Selector,\n options?: QueryOptions,\n ): Promise<Array<ElementHandle<NodeFor<Selector>>>> {\n // eslint-disable-next-line @puppeteer/use-using -- This is cached.\n const document = await this.#document();\n return await document.$$(selector, options);\n }\n\n /**\n * Runs the given function on the first element matching the given selector in\n * the frame.\n *\n * If the given function returns a promise, then this method will wait till\n * the promise resolves.\n *\n * @example\n *\n * ```ts\n * const searchValue = await frame.$eval('#search', el => el.value);\n * ```\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @param pageFunction - The function to be evaluated in the frame's context.\n * The first element matching the selector will be passed to the function as\n * its first argument.\n * @param args - Additional arguments to pass to `pageFunction`.\n * @returns A promise to the result of the function.\n */\n @throwIfDetached\n async $eval<\n Selector extends string,\n Params extends unknown[],\n Func extends EvaluateFuncWith<NodeFor<Selector>, Params> = EvaluateFuncWith<\n NodeFor<Selector>,\n Params\n >,\n >(\n selector: Selector,\n pageFunction: string | Func,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(this.$eval.name, pageFunction);\n // eslint-disable-next-line @puppeteer/use-using -- This is cached.\n const document = await this.#document();\n return await document.$eval(selector, pageFunction, ...args);\n }\n\n /**\n * Runs the given function on an array of elements matching the given selector\n * in the frame.\n *\n * If the given function returns a promise, then this method will wait till\n * the promise resolves.\n *\n * @example\n *\n * ```ts\n * const divsCounts = await frame.$$eval('div', divs => divs.length);\n * ```\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @param pageFunction - The function to be evaluated in the frame's context.\n * An array of elements matching the given selector will be passed to the\n * function as its first argument.\n * @param args - Additional arguments to pass to `pageFunction`.\n * @returns A promise to the result of the function.\n */\n @throwIfDetached\n async $$eval<\n Selector extends string,\n Params extends unknown[],\n Func extends EvaluateFuncWith<Array<NodeFor<Selector>>, Params> =\n EvaluateFuncWith<Array<NodeFor<Selector>>, Params>,\n >(\n selector: Selector,\n pageFunction: string | Func,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(this.$$eval.name, pageFunction);\n // eslint-disable-next-line @puppeteer/use-using -- This is cached.\n const document = await this.#document();\n return await document.$$eval(selector, pageFunction, ...args);\n }\n\n /**\n * Waits for an element matching the given selector to appear in the frame.\n *\n * This method works across navigations.\n *\n * @example\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * let currentURL;\n * page\n * .mainFrame()\n * .waitForSelector('img')\n * .then(() => console.log('First URL with image: ' + currentURL));\n *\n * for (currentURL of [\n * 'https://example.com',\n * 'https://google.com',\n * 'https://bbc.com',\n * ]) {\n * await page.goto(currentURL);\n * }\n * await browser.close();\n * ```\n *\n * @param selector - The selector to query and wait for.\n * @param options - Options for customizing waiting behavior.\n * @returns An element matching the given selector.\n * @throws Throws if an element matching the given selector doesn't appear.\n */\n @throwIfDetached\n async waitForSelector<Selector extends string>(\n selector: Selector,\n options: WaitForSelectorOptions = {},\n ): Promise<ElementHandle<NodeFor<Selector>> | null> {\n const {updatedSelector, QueryHandler, polling} =\n getQueryHandlerAndSelector(selector);\n return (await QueryHandler.waitFor(this, updatedSelector, {\n polling,\n ...options,\n })) as ElementHandle<NodeFor<Selector>> | null;\n }\n\n /**\n * @example\n * The `waitForFunction` can be used to observe viewport size change:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * const watchDog = page\n * .mainFrame()\n * .waitForFunction('window.innerWidth < 100');\n * page.setViewport({width: 50, height: 50});\n * await watchDog;\n * await browser.close();\n * ```\n *\n * To pass arguments from Node.js to the predicate of `page.waitForFunction` function:\n *\n * ```ts\n * const selector = '.foo';\n * await frame.waitForFunction(\n * selector => !!document.querySelector(selector),\n * {}, // empty options object\n * selector,\n * );\n * ```\n *\n * @param pageFunction - the function to evaluate in the frame context.\n * @param options - options to configure the polling method, timeout and signal.\n * @param args - arguments to pass to the `pageFunction`.\n * @returns the promise which resolve when the `pageFunction` returns a truthy value.\n */\n @throwIfDetached\n async waitForFunction<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n options: FrameWaitForFunctionOptions = {},\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n return await (this.mainRealm().waitForFunction(\n pageFunction,\n options,\n ...args,\n ) as Promise<HandleFor<Awaited<ReturnType<Func>>>>);\n }\n /**\n * The full HTML contents of the frame, including the DOCTYPE.\n */\n @throwIfDetached\n async content(): Promise<string> {\n return await this.evaluate(() => {\n let content = '';\n for (const node of document.childNodes) {\n switch (node) {\n case document.documentElement:\n content += document.documentElement.outerHTML;\n break;\n default:\n content += new XMLSerializer().serializeToString(node);\n break;\n }\n }\n\n return content;\n });\n }\n\n /**\n * Set the content of the frame.\n *\n * @param html - HTML markup to assign to the page.\n * @param options - Options to configure how long before timing out and at\n * what point to consider the content setting successful.\n */\n abstract setContent(\n html: string,\n options?: SetContentWaitForOptions,\n ): Promise<void>;\n\n /**\n * @internal\n */\n async setFrameContent(content: string): Promise<void> {\n return await this.evaluate(html => {\n document.open();\n document.write(html);\n document.close();\n }, content);\n }\n\n /**\n * The frame's `name` attribute as specified in the tag.\n *\n * @remarks\n * If the name is empty, it returns the `id` attribute instead.\n *\n * @remarks\n * This value is calculated once when the frame is created, and will not\n * update if the attribute is changed later.\n *\n * @deprecated Use\n *\n * ```ts\n * const element = await frame.frameElement();\n * const nameOrId = await element.evaluate(frame => frame.name ?? frame.id);\n * ```\n */\n name(): string {\n return this._name || '';\n }\n\n /**\n * The frame's URL.\n */\n abstract url(): string;\n\n /**\n * The parent frame, if any. Detached and main frames return `null`.\n */\n abstract parentFrame(): Frame | null;\n\n /**\n * An array of child frames.\n */\n abstract childFrames(): Frame[];\n\n /**\n * @returns `true` if the frame has detached. `false` otherwise.\n */\n abstract get detached(): boolean;\n\n /**\n * Is`true` if the frame has been detached. Otherwise, `false`.\n *\n * @deprecated Use the `detached` getter.\n */\n isDetached(): boolean {\n return this.detached;\n }\n\n /**\n * @internal\n */\n get disposed(): boolean {\n return this.detached;\n }\n\n /**\n * Adds a `<script>` tag into the page with the desired url or content.\n *\n * @param options - Options for the script.\n * @returns An {@link ElementHandle | element handle} to the injected\n * `<script>` element.\n */\n @throwIfDetached\n async addScriptTag(\n options: FrameAddScriptTagOptions,\n ): Promise<ElementHandle<HTMLScriptElement>> {\n let {content = '', type} = options;\n const {path} = options;\n if (+!!options.url + +!!path + +!!content !== 1) {\n throw new Error(\n 'Exactly one of `url`, `path`, or `content` must be specified.',\n );\n }\n\n if (path) {\n content = await environment.value.readFile(path, 'utf8');\n content += `//# sourceURL=${path.replace(/\\n/g, '')}`;\n }\n\n type = type ?? 'text/javascript';\n\n return await this.mainRealm().transferHandle(\n await this.isolatedRealm().evaluateHandle(\n async ({url, id, type, content}) => {\n return await new Promise<HTMLScriptElement>((resolve, reject) => {\n const script = document.createElement('script');\n script.type = type;\n script.text = content;\n script.addEventListener(\n 'error',\n event => {\n reject(new Error(event.message ?? 'Could not load script'));\n },\n {once: true},\n );\n if (id) {\n script.id = id;\n }\n if (url) {\n script.src = url;\n script.addEventListener(\n 'load',\n () => {\n resolve(script);\n },\n {once: true},\n );\n document.head.appendChild(script);\n } else {\n document.head.appendChild(script);\n resolve(script);\n }\n });\n },\n {...options, type, content},\n ),\n );\n }\n\n /**\n * Adds a `HTMLStyleElement` into the frame with the desired URL\n *\n * @returns An {@link ElementHandle | element handle} to the loaded `<style>`\n * element.\n */\n async addStyleTag(\n options: Omit<FrameAddStyleTagOptions, 'url'>,\n ): Promise<ElementHandle<HTMLStyleElement>>;\n\n /**\n * Adds a `HTMLLinkElement` into the frame with the desired URL\n *\n * @returns An {@link ElementHandle | element handle} to the loaded `<link>`\n * element.\n */\n async addStyleTag(\n options: FrameAddStyleTagOptions,\n ): Promise<ElementHandle<HTMLLinkElement>>;\n\n /**\n * @internal\n */\n @throwIfDetached\n async addStyleTag(\n options: FrameAddStyleTagOptions,\n ): Promise<ElementHandle<HTMLStyleElement | HTMLLinkElement>> {\n let {content = ''} = options;\n const {path} = options;\n if (+!!options.url + +!!path + +!!content !== 1) {\n throw new Error(\n 'Exactly one of `url`, `path`, or `content` must be specified.',\n );\n }\n\n if (path) {\n content = await environment.value.readFile(path, 'utf8');\n content += '/*# sourceURL=' + path.replace(/\\n/g, '') + '*/';\n options.content = content;\n }\n\n return await this.mainRealm().transferHandle(\n await this.isolatedRealm().evaluateHandle(async ({url, content}) => {\n return await new Promise<HTMLStyleElement | HTMLLinkElement>(\n (resolve, reject) => {\n let element: HTMLStyleElement | HTMLLinkElement;\n if (!url) {\n element = document.createElement('style');\n element.appendChild(document.createTextNode(content!));\n } else {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n element = link;\n }\n element.addEventListener(\n 'load',\n () => {\n resolve(element);\n },\n {once: true},\n );\n element.addEventListener(\n 'error',\n event => {\n reject(\n new Error(\n (event as ErrorEvent).message ?? 'Could not load style',\n ),\n );\n },\n {once: true},\n );\n document.head.appendChild(element);\n return element;\n },\n );\n }, options),\n );\n }\n\n /**\n * Clicks the first element found that matches `selector`.\n *\n * @remarks\n * If `click()` triggers a navigation event and there's a separate\n * `page.waitForNavigation()` promise to be resolved, you may end up with a\n * race condition that yields unexpected results. The correct pattern for\n * click and wait for navigation is the following:\n *\n * ```ts\n * const [response] = await Promise.all([\n * page.waitForNavigation(waitOptions),\n * frame.click(selector, clickOptions),\n * ]);\n * ```\n *\n * @param selector - The selector to query for.\n */\n @throwIfDetached\n async click(\n selector: string,\n options: Readonly<ClickOptions> = {},\n ): Promise<void> {\n using handle = await this.$(selector);\n assert(handle, `No element found for selector: ${selector}`);\n await handle.click(options);\n await handle.dispose();\n }\n\n /**\n * Focuses the first element that matches the `selector`.\n *\n * @param selector - The selector to query for.\n * @throws Throws if there's no element matching `selector`.\n */\n @throwIfDetached\n async focus(selector: string): Promise<void> {\n using handle = await this.$(selector);\n assert(handle, `No element found for selector: ${selector}`);\n await handle.focus();\n }\n\n /**\n * Hovers the pointer over the center of the first element that matches the\n * `selector`.\n *\n * @param selector - The selector to query for.\n * @throws Throws if there's no element matching `selector`.\n */\n @throwIfDetached\n async hover(selector: string): Promise<void> {\n using handle = await this.$(selector);\n assert(handle, `No element found for selector: ${selector}`);\n await handle.hover();\n }\n\n /**\n * Selects a set of value on the first `<select>` element that matches the\n * `selector`.\n *\n * @example\n *\n * ```ts\n * frame.select('select#colors', 'blue'); // single selection\n * frame.select('select#colors', 'red', 'green', 'blue'); // multiple selections\n * ```\n *\n * @param selector - The selector to query for.\n * @param values - The array of values to select. If the `<select>` has the\n * `multiple` attribute, all values are considered, otherwise only the first\n * one is taken into account.\n * @returns the list of values that were successfully selected.\n * @throws Throws if there's no `<select>` matching `selector`.\n */\n @throwIfDetached\n async select(selector: string, ...values: string[]): Promise<string[]> {\n using handle = await this.$(selector);\n assert(handle, `No element found for selector: ${selector}`);\n return await handle.select(...values);\n }\n\n /**\n * Taps the first element that matches the `selector`.\n *\n * @param selector - The selector to query for.\n * @throws Throws if there's no element matching `selector`.\n */\n @throwIfDetached\n async tap(selector: string): Promise<void> {\n using handle = await this.$(selector);\n assert(handle, `No element found for selector: ${selector}`);\n await handle.tap();\n }\n\n /**\n * Sends a `keydown`, `keypress`/`input`, and `keyup` event for each character\n * in the text.\n *\n * @remarks\n * To press a special key, like `Control` or `ArrowDown`, use\n * {@link Keyboard.press}.\n *\n * @example\n *\n * ```ts\n * await frame.type('#mytextarea', 'Hello'); // Types instantly\n * await frame.type('#mytextarea', 'World', {delay: 100}); // Types slower, like a user\n * ```\n *\n * @param selector - the selector for the element to type into. If there are\n * multiple the first will be used.\n * @param text - text to type into the element\n * @param options - takes one option, `delay`, which sets the time to wait\n * between key presses in milliseconds. Defaults to `0`.\n */\n @throwIfDetached\n async type(\n selector: string,\n text: string,\n options?: Readonly<KeyboardTypeOptions>,\n ): Promise<void> {\n using handle = await this.$(selector);\n assert(handle, `No element found for selector: ${selector}`);\n await handle.type(text, options);\n }\n\n /**\n * The frame's title.\n */\n @throwIfDetached\n async title(): Promise<string> {\n return await this.isolatedRealm().evaluate(() => {\n return document.title;\n });\n }\n\n /**\n * This method is typically coupled with an action that triggers a device\n * request from an api such as WebBluetooth.\n *\n * :::caution\n *\n * This must be called before the device request is made. It will not return a\n * currently active device prompt.\n *\n * :::\n *\n * @example\n *\n * ```ts\n * const [devicePrompt] = Promise.all([\n * frame.waitForDevicePrompt(),\n * frame.click('#connect-bluetooth'),\n * ]);\n * await devicePrompt.select(\n * await devicePrompt.waitForDevice(({name}) => name.includes('My Device')),\n * );\n * ```\n *\n * @internal\n */\n abstract waitForDevicePrompt(\n options?: WaitTimeoutOptions,\n ): Promise<DeviceRequestPrompt>;\n\n /**\n * Retrieves the list of extension execution realms associated with this frame.\n * Extension execution realms are created by extension content scripts injected\n * into the frame.\n *\n * @public\n */\n abstract extensionRealms(): Realm[];\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {Protocol} from 'devtools-protocol';\n\nimport {DEBUG_PREFIXES} from '../common/Debug.js';\nimport type {Logger} from '../common/Debug.js';\nimport type {ProtocolError} from '../common/Errors.js';\nimport {isString} from '../common/util.js';\nimport {assert} from '../util/assert.js';\nimport {typedArrayToBase64} from '../util/encoding.js';\n\nimport type {CDPSession} from './CDPSession.js';\nimport type {Frame} from './Frame.js';\nimport type {HTTPResponse} from './HTTPResponse.js';\n\n/**\n * @public\n */\nexport interface ContinueRequestOverrides {\n /**\n * If set, the request URL will change. This is not a redirect.\n */\n url?: string;\n method?: string;\n postData?: string;\n headers?: Record<string, string>;\n}\n\n/**\n * @public\n */\nexport interface InterceptResolutionState {\n action: InterceptResolutionAction;\n priority?: number;\n}\n\n/**\n * Required response data to fulfill a request with.\n *\n * @public\n */\nexport interface ResponseForRequest {\n status: number;\n /**\n * Optional response headers.\n *\n * The record values will be converted to string following:\n * Arrays' values will be mapped to String\n * (Used when you need multiple headers with the same name).\n * Non-arrays will be converted to String.\n */\n headers: Record<string, string | string[] | unknown>;\n contentType: string;\n body: string | Uint8Array;\n}\n\n/**\n * Resource types for HTTPRequests as perceived by the rendering engine.\n *\n * @public\n */\nexport type ResourceType = Lowercase<Protocol.Network.ResourceType>;\n\n/**\n * The default cooperative request interception resolution priority\n *\n * @public\n */\nexport const DEFAULT_INTERCEPT_RESOLUTION_PRIORITY = 0;\n\n/**\n * Represents an HTTP request sent by a page.\n * @remarks\n *\n * Whenever the page sends a request, such as for a network resource, the\n * following events are emitted by Puppeteer's `page`:\n *\n * - `request`: emitted when the request is issued by the page.\n *\n * - `requestfinished` - emitted when the response body is downloaded and the\n * request is complete.\n *\n * If request fails at some point, then instead of `requestfinished` event the\n * `requestfailed` event is emitted.\n *\n * All of these events provide an instance of `HTTPRequest` representing the\n * request that occurred:\n *\n * ```\n * page.on('request', request => ...)\n * ```\n *\n * NOTE: HTTP Error responses, such as 404 or 503, are still successful\n * responses from HTTP standpoint, so request will complete with\n * `requestfinished` event.\n *\n * If request gets a 'redirect' response, the request is successfully finished\n * with the `requestfinished` event, and a new request is issued to a\n * redirected url.\n *\n * @public\n */\nexport abstract class HTTPRequest {\n /**\n * @internal\n */\n abstract get id(): string;\n\n /**\n * @internal\n */\n _interceptionId: string | undefined;\n /**\n * @internal\n */\n _failureText: string | null = null;\n /**\n * @internal\n */\n _response: HTTPResponse | null = null;\n /**\n * @internal\n */\n _fromMemoryCache = false;\n /**\n * @internal\n */\n _redirectChain: HTTPRequest[] = [];\n\n /**\n * @internal\n */\n protected interception: {\n enabled: boolean;\n handled: boolean;\n handlers: Array<() => void | PromiseLike<any>>;\n resolutionState: InterceptResolutionState;\n requestOverrides: ContinueRequestOverrides;\n response: Partial<ResponseForRequest> | null;\n abortReason: Protocol.Network.ErrorReason | null;\n } = {\n enabled: false,\n handled: false,\n handlers: [],\n resolutionState: {\n action: InterceptResolutionAction.None,\n },\n requestOverrides: {},\n response: null,\n abortReason: null,\n };\n\n /**\n * Warning! Using this client can break Puppeteer. Use with caution.\n *\n * @experimental\n */\n abstract get client(): CDPSession;\n\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * The URL of the request\n */\n abstract url(): string;\n\n /**\n * The `ContinueRequestOverrides` that will be used\n * if the interception is allowed to continue (ie, `abort()` and\n * `respond()` aren't called).\n */\n continueRequestOverrides(): ContinueRequestOverrides {\n return this.interception.requestOverrides;\n }\n\n /**\n * The `ResponseForRequest` that gets used if the\n * interception is allowed to respond (ie, `abort()` is not called).\n */\n responseForRequest(): Partial<ResponseForRequest> | null {\n return this.interception.response;\n }\n\n /**\n * The most recent reason for aborting the request\n */\n abortErrorReason(): Protocol.Network.ErrorReason | null {\n return this.interception.abortReason;\n }\n\n /**\n * An InterceptResolutionState object describing the current resolution\n * action and priority.\n *\n * InterceptResolutionState contains:\n * action: InterceptResolutionAction\n * priority?: number\n *\n * InterceptResolutionAction is one of: `abort`, `respond`, `continue`,\n * `disabled`, `none`, or `already-handled`.\n */\n interceptResolutionState(): InterceptResolutionState {\n if (!this.interception.enabled) {\n return {action: InterceptResolutionAction.Disabled};\n }\n if (this.interception.handled) {\n return {action: InterceptResolutionAction.AlreadyHandled};\n }\n return {...this.interception.resolutionState};\n }\n\n /**\n * Is `true` if the intercept resolution has already been handled,\n * `false` otherwise.\n */\n isInterceptResolutionHandled(): boolean {\n return this.interception.handled;\n }\n\n /**\n * Adds an async request handler to the processing queue.\n * Deferred handlers are not guaranteed to execute in any particular order,\n * but they are guaranteed to resolve before the request interception\n * is finalized.\n */\n enqueueInterceptAction(\n pendingHandler: () => void | PromiseLike<unknown>,\n ): void {\n this.interception.handlers.push(pendingHandler);\n }\n\n /**\n * @internal\n */\n abstract _abort(\n errorReason: Protocol.Network.ErrorReason | null,\n ): Promise<void>;\n\n /**\n * @internal\n */\n abstract _respond(response: Partial<ResponseForRequest>): Promise<void>;\n\n /**\n * @internal\n */\n abstract _continue(overrides: ContinueRequestOverrides): Promise<void>;\n\n /**\n * Awaits pending interception handlers and then decides how to fulfill\n * the request interception.\n */\n async finalizeInterceptions(): Promise<void> {\n await this.interception.handlers.reduce((promiseChain, interceptAction) => {\n return promiseChain.then(interceptAction);\n }, Promise.resolve());\n this.interception.handlers = [];\n const {action} = this.interceptResolutionState();\n switch (action) {\n case 'abort':\n return await this._abort(this.interception.abortReason);\n case 'respond':\n if (this.interception.response === null) {\n throw new Error('Response is missing for the interception');\n }\n return await this._respond(this.interception.response);\n case 'continue':\n return await this._continue(this.interception.requestOverrides);\n }\n }\n\n /**\n * Contains the request's resource type as it was perceived by the rendering\n * engine.\n */\n abstract resourceType(): ResourceType;\n\n /**\n * The method used (`GET`, `POST`, etc.)\n */\n abstract method(): string;\n\n /**\n * @deprecated Use {@link HTTPRequest.fetchPostData}.\n */\n abstract postData(): string | undefined;\n\n /**\n * True when the request has POST data. Note that {@link HTTPRequest.postData}\n * might still be undefined when this flag is true when the data is too long\n * or not readily available in the decoded form. In that case, use\n * {@link HTTPRequest.fetchPostData}.\n */\n abstract hasPostData(): boolean;\n\n /**\n * Fetches the POST data for the request from the browser.\n */\n abstract fetchPostData(): Promise<string | undefined>;\n\n /**\n * An object with HTTP headers associated with the request. All\n * header names are lower-case.\n */\n abstract headers(): Record<string, string>;\n\n /**\n * A matching `HTTPResponse` object, or null if the response has not\n * been received yet.\n */\n abstract response(): HTTPResponse | null;\n\n /**\n * The frame that initiated the request, or null if navigating to\n * error pages.\n */\n abstract frame(): Frame | null;\n\n /**\n * True if the request is the driver of the current frame's navigation.\n */\n abstract isNavigationRequest(): boolean;\n\n /**\n * The initiator of the request.\n */\n abstract initiator(): Protocol.Network.Initiator | undefined;\n\n /**\n * A `redirectChain` is a chain of requests initiated to fetch a resource.\n * @remarks\n *\n * `redirectChain` is shared between all the requests of the same chain.\n *\n * For example, if the website `http://example.com` has a single redirect to\n * `https://example.com`, then the chain will contain one request:\n *\n * ```ts\n * const response = await page.goto('http://example.com');\n * const chain = response.request().redirectChain();\n * console.log(chain.length); // 1\n * console.log(chain[0].url()); // 'http://example.com'\n * ```\n *\n * If the website `https://google.com` has no redirects, then the chain will be empty:\n *\n * ```ts\n * const response = await page.goto('https://google.com');\n * const chain = response.request().redirectChain();\n * console.log(chain.length); // 0\n * ```\n *\n * @returns the chain of requests - if a server responds with at least a\n * single redirect, this chain will contain all requests that were redirected.\n */\n abstract redirectChain(): HTTPRequest[];\n\n /**\n * Access information about the request's failure.\n *\n * @remarks\n *\n * @example\n *\n * Example of logging all failed requests:\n *\n * ```ts\n * page.on('requestfailed', request => {\n * console.log(request.url() + ' ' + request.failure().errorText);\n * });\n * ```\n *\n * @returns `null` unless the request failed. If the request fails this can\n * return an object with `errorText` containing a human-readable error\n * message, e.g. `net::ERR_FAILED`. It is not guaranteed that there will be\n * failure text if the request fails.\n */\n abstract failure(): {errorText: string} | null;\n\n /**\n * @internal\n */\n protected verifyInterception(): void {\n assert(this.interception.enabled, 'Request Interception is not enabled!');\n assert(!this.interception.handled, 'Request is already handled!');\n }\n /**\n * @internal\n */\n protected abstract canBeIntercepted(): boolean;\n\n /**\n * Continues request with optional request overrides.\n *\n * @example\n *\n * ```ts\n * await page.setRequestInterception(true);\n * page.on('request', request => {\n * // Override headers\n * const headers = Object.assign({}, request.headers(), {\n * foo: 'bar', // set \"foo\" header\n * origin: undefined, // remove \"origin\" header\n * });\n * request.continue({headers});\n * });\n * ```\n *\n * @param overrides - optional overrides to apply to the request.\n * @param priority - If provided, intercept is resolved using cooperative\n * handling rules. Otherwise, intercept is resolved immediately.\n *\n * @remarks\n *\n * To use this, request interception should be enabled with\n * {@link Page.setRequestInterception}.\n *\n * Exception is immediately thrown if the request interception is not enabled.\n */\n async continue(\n overrides: ContinueRequestOverrides = {},\n priority?: number,\n ): Promise<void> {\n this.verifyInterception();\n if (!this.canBeIntercepted()) {\n return;\n }\n\n if (priority === undefined) {\n return await this._continue(overrides);\n }\n this.interception.requestOverrides = overrides;\n if (\n this.interception.resolutionState.priority === undefined ||\n priority > this.interception.resolutionState.priority\n ) {\n this.interception.resolutionState = {\n action: InterceptResolutionAction.Continue,\n priority,\n };\n return;\n }\n if (priority === this.interception.resolutionState.priority) {\n if (\n this.interception.resolutionState.action === 'abort' ||\n this.interception.resolutionState.action === 'respond'\n ) {\n return;\n }\n this.interception.resolutionState.action =\n InterceptResolutionAction.Continue;\n }\n return;\n }\n\n /**\n * Fulfills a request with the given response.\n *\n * @example\n * An example of fulfilling all requests with 404 responses:\n *\n * ```ts\n * await page.setRequestInterception(true);\n * page.on('request', request => {\n * request.respond({\n * status: 404,\n * contentType: 'text/plain',\n * body: 'Not Found!',\n * });\n * });\n * ```\n *\n * NOTE: Mocking responses for dataURL requests is not supported.\n * Calling `request.respond` for a dataURL request is a noop.\n *\n * @param response - the response to fulfill the request with.\n * @param priority - If provided, intercept is resolved using\n * cooperative handling rules. Otherwise, intercept is resolved\n * immediately.\n *\n * @remarks\n *\n * To use this, request\n * interception should be enabled with {@link Page.setRequestInterception}.\n *\n * Exception is immediately thrown if the request interception is not enabled.\n */\n async respond(\n response: Partial<ResponseForRequest>,\n priority?: number,\n ): Promise<void> {\n this.verifyInterception();\n if (!this.canBeIntercepted()) {\n return;\n }\n if (priority === undefined) {\n return await this._respond(response);\n }\n this.interception.response = response;\n if (\n this.interception.resolutionState.priority === undefined ||\n priority > this.interception.resolutionState.priority\n ) {\n this.interception.resolutionState = {\n action: InterceptResolutionAction.Respond,\n priority,\n };\n return;\n }\n if (priority === this.interception.resolutionState.priority) {\n if (this.interception.resolutionState.action === 'abort') {\n return;\n }\n this.interception.resolutionState.action =\n InterceptResolutionAction.Respond;\n }\n }\n\n /**\n * Aborts a request.\n *\n * @param errorCode - optional error code to provide.\n * @param priority - If provided, intercept is resolved using\n * cooperative handling rules. Otherwise, intercept is resolved\n * immediately.\n *\n * @remarks\n *\n * To use this, request interception should be enabled with\n * {@link Page.setRequestInterception}. If it is not enabled, this method will\n * throw an exception immediately.\n */\n async abort(\n errorCode: ErrorCode = 'failed',\n priority?: number,\n ): Promise<void> {\n this.verifyInterception();\n if (!this.canBeIntercepted()) {\n return;\n }\n const errorReason = errorReasons[errorCode];\n assert(errorReason, 'Unknown error code: ' + errorCode);\n if (priority === undefined) {\n return await this._abort(errorReason);\n }\n this.interception.abortReason = errorReason;\n if (\n this.interception.resolutionState.priority === undefined ||\n priority >= this.interception.resolutionState.priority\n ) {\n this.interception.resolutionState = {\n action: InterceptResolutionAction.Abort,\n priority,\n };\n return;\n }\n }\n\n /**\n * @internal\n */\n static getResponse(body: string | Uint8Array): {\n contentLength: number;\n base64: string;\n } {\n // Needed to get the correct byteLength\n const byteBody: Uint8Array = isString(body)\n ? new TextEncoder().encode(body)\n : body;\n\n return {\n contentLength: byteBody.byteLength,\n base64: typedArrayToBase64(byteBody),\n };\n }\n}\n\n/**\n * @public\n */\nexport enum InterceptResolutionAction {\n Abort = 'abort',\n Respond = 'respond',\n Continue = 'continue',\n Disabled = 'disabled',\n None = 'none',\n AlreadyHandled = 'already-handled',\n}\n\n/**\n * @public\n */\nexport type ErrorCode =\n | 'aborted'\n | 'accessdenied'\n | 'addressunreachable'\n | 'blockedbyclient'\n | 'blockedbyresponse'\n | 'connectionaborted'\n | 'connectionclosed'\n | 'connectionfailed'\n | 'connectionrefused'\n | 'connectionreset'\n | 'internetdisconnected'\n | 'namenotresolved'\n | 'timedout'\n | 'failed';\n\n/**\n * @public\n */\nexport type ActionResult = 'continue' | 'abort' | 'respond';\n\n/**\n * @internal\n */\nexport function headersArray(\n headers: Record<string, string | string[]>,\n): Array<{name: string; value: string}> {\n const result = [];\n for (const name of Object.keys(headers)) {\n const value = headers[name];\n\n if (value !== undefined) {\n if (Array.isArray(value)) {\n for (const v of value) {\n result.push({name, value: v + ''});\n }\n } else {\n result.push({name, value: value + ''});\n }\n }\n }\n return result;\n}\n\n/**\n * @internal\n *\n * @remarks\n * List taken from {@link https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml}\n * with extra 306 and 418 codes.\n */\nexport const STATUS_TEXTS: Record<string, string> = {\n '100': 'Continue',\n '101': 'Switching Protocols',\n '102': 'Processing',\n '103': 'Early Hints',\n '200': 'OK',\n '201': 'Created',\n '202': 'Accepted',\n '203': 'Non-Authoritative Information',\n '204': 'No Content',\n '205': 'Reset Content',\n '206': 'Partial Content',\n '207': 'Multi-Status',\n '208': 'Already Reported',\n '226': 'IM Used',\n '300': 'Multiple Choices',\n '301': 'Moved Permanently',\n '302': 'Found',\n '303': 'See Other',\n '304': 'Not Modified',\n '305': 'Use Proxy',\n '306': 'Switch Proxy',\n '307': 'Temporary Redirect',\n '308': 'Permanent Redirect',\n '400': 'Bad Request',\n '401': 'Unauthorized',\n '402': 'Payment Required',\n '403': 'Forbidden',\n '404': 'Not Found',\n '405': 'Method Not Allowed',\n '406': 'Not Acceptable',\n '407': 'Proxy Authentication Required',\n '408': 'Request Timeout',\n '409': 'Conflict',\n '410': 'Gone',\n '411': 'Length Required',\n '412': 'Precondition Failed',\n '413': 'Payload Too Large',\n '414': 'URI Too Long',\n '415': 'Unsupported Media Type',\n '416': 'Range Not Satisfiable',\n '417': 'Expectation Failed',\n '418': \"I'm a teapot\",\n '421': 'Misdirected Request',\n '422': 'Unprocessable Entity',\n '423': 'Locked',\n '424': 'Failed Dependency',\n '425': 'Too Early',\n '426': 'Upgrade Required',\n '428': 'Precondition Required',\n '429': 'Too Many Requests',\n '431': 'Request Header Fields Too Large',\n '451': 'Unavailable For Legal Reasons',\n '500': 'Internal Server Error',\n '501': 'Not Implemented',\n '502': 'Bad Gateway',\n '503': 'Service Unavailable',\n '504': 'Gateway Timeout',\n '505': 'HTTP Version Not Supported',\n '506': 'Variant Also Negotiates',\n '507': 'Insufficient Storage',\n '508': 'Loop Detected',\n '510': 'Not Extended',\n '511': 'Network Authentication Required',\n} as const;\n\nconst errorReasons: Record<ErrorCode, Protocol.Network.ErrorReason> = {\n aborted: 'Aborted',\n accessdenied: 'AccessDenied',\n addressunreachable: 'AddressUnreachable',\n blockedbyclient: 'BlockedByClient',\n blockedbyresponse: 'BlockedByResponse',\n connectionaborted: 'ConnectionAborted',\n connectionclosed: 'ConnectionClosed',\n connectionfailed: 'ConnectionFailed',\n connectionrefused: 'ConnectionRefused',\n connectionreset: 'ConnectionReset',\n internetdisconnected: 'InternetDisconnected',\n namenotresolved: 'NameNotResolved',\n timedout: 'TimedOut',\n failed: 'Failed',\n} as const;\n\n/**\n * @internal\n */\nexport function handleError(error: ProtocolError, logger: Logger): void {\n // Firefox throws an invalid argument error with a message starting with\n // 'Expected \"header\" [...]'.\n if (\n error.originalMessage.includes('Invalid header') ||\n error.originalMessage.includes('Unsafe header') ||\n error.originalMessage.includes('Expected \"header\"') ||\n // WebDriver BiDi error for invalid values, for example, headers.\n error.originalMessage.includes('invalid argument')\n ) {\n throw error;\n }\n // In certain cases, protocol will return error if the request was\n // already canceled or the page was closed. We should tolerate these\n // errors.\n logger?.(DEBUG_PREFIXES.error)?.(error);\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type Protocol from 'devtools-protocol';\n\nimport type {SecurityDetails} from '../common/SecurityDetails.js';\n\nimport type {Frame} from './Frame.js';\nimport type {HTTPRequest} from './HTTPRequest.js';\n\n/**\n * @public\n */\nexport interface RemoteAddress {\n ip?: string;\n port?: number;\n}\n\n/**\n * The HTTPResponse class represents responses which are received by the\n * {@link Page} class.\n *\n * @public\n */\nexport abstract class HTTPResponse {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * The IP address and port number used to connect to the remote\n * server.\n */\n abstract remoteAddress(): RemoteAddress;\n\n /**\n * The URL of the response.\n */\n abstract url(): string;\n\n /**\n * True if the response was successful (status in the range 200-299).\n */\n ok(): boolean {\n // TODO: document === 0 case?\n const status = this.status();\n return status === 0 || (status >= 200 && status <= 299);\n }\n\n /**\n * The status code of the response (e.g., 200 for a success).\n */\n abstract status(): number;\n\n /**\n * The status text of the response (e.g. usually an \"OK\" for a\n * success).\n */\n abstract statusText(): string;\n\n /**\n * An object with HTTP headers associated with the response. All header names\n * are lower-case. Duplicate header values are combined into a single\n * comma-separated list except for `Set-Cookie` that is separated by `\\n`.\n */\n abstract headers(): Record<string, string>;\n\n /**\n * {@link SecurityDetails} if the response was received over the\n * secure connection, or `null` otherwise.\n */\n abstract securityDetails(): SecurityDetails | null;\n\n /**\n * Timing information related to the response.\n */\n abstract timing(): Protocol.Network.ResourceTiming | null;\n\n /**\n * Promise which resolves to a buffer with response body.\n *\n * @remarks\n *\n * The buffer might be re-encoded by the browser\n * based on HTTP-headers or other heuristics. If the browser\n * failed to detect the correct encoding, the buffer might\n * be encoded incorrectly. See\n * https://github.com/puppeteer/puppeteer/issues/6478.\n */\n abstract content(): Promise<Uint8Array>;\n\n /**\n * {@inheritDoc HTTPResponse.content}\n */\n async buffer(): Promise<Buffer> {\n const content = await this.content();\n return Buffer.from(content);\n }\n /**\n * Promise which resolves to a text (utf8) representation of response body.\n *\n * @remarks\n *\n * This method will throw if the content is not utf-8 string\n */\n async text(): Promise<string> {\n const content = await this.content();\n return new TextDecoder('utf-8', {fatal: true}).decode(content);\n }\n\n /**\n * Promise which resolves to a JSON representation of response body.\n *\n * @remarks\n *\n * This method will throw if the response body is not parsable via\n * `JSON.parse`.\n */\n async json(): Promise<any> {\n const content = await this.text();\n return JSON.parse(content);\n }\n\n /**\n * A matching {@link HTTPRequest} object.\n */\n abstract request(): HTTPRequest;\n\n /**\n * True if the response was served from either the browser's disk\n * cache or memory cache.\n */\n abstract fromCache(): boolean;\n\n /**\n * True if the response was served by a service worker.\n */\n abstract fromServiceWorker(): boolean;\n\n /**\n * A {@link Frame} that initiated this response, or `null` if\n * navigating to error pages.\n */\n abstract frame(): Frame | null;\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @internal\n */\nexport function createIncrementalIdGenerator(): GetIdFn {\n let id = 0;\n return (): number => {\n if (id === Number.MAX_SAFE_INTEGER) {\n id = 0;\n }\n return ++id;\n };\n}\n\n/**\n * @internal\n */\nexport type GetIdFn = () => number;\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {TouchError} from '../common/Errors.js';\nimport type {KeyInput} from '../common/USKeyboardLayout.js';\nimport {createIncrementalIdGenerator} from '../util/incremental-id-generator.js';\n\nimport type {Point} from './ElementHandle.js';\n\n/**\n * @public\n */\nexport interface KeyDownOptions {\n /**\n * @deprecated Do not use. This is automatically handled.\n */\n text?: string;\n /**\n * @deprecated Do not use. This is automatically handled.\n */\n commands?: string[];\n}\n\n/**\n * @public\n */\nexport interface KeyboardTypeOptions {\n delay?: number;\n}\n\n/**\n * @public\n */\nexport type KeyPressOptions = KeyDownOptions & KeyboardTypeOptions;\n\n/**\n * Keyboard provides an api for managing a virtual keyboard.\n * The high level api is {@link Keyboard.\"type\"},\n * which takes raw characters and generates proper keydown, keypress/input,\n * and keyup events on your page.\n *\n * @remarks\n * For finer control, you can use {@link Keyboard.down},\n * {@link Keyboard.up}, and {@link Keyboard.sendCharacter}\n * to manually fire events as if they were generated from a real keyboard.\n *\n * On macOS, keyboard shortcuts like `⌘ A` -\\> Select All do not work.\n * See {@link https://github.com/puppeteer/puppeteer/issues/1313 | #1313}.\n *\n * @example\n * An example of holding down `Shift` in order to select and delete some text:\n *\n * ```ts\n * await page.keyboard.type('Hello World!');\n * await page.keyboard.press('ArrowLeft');\n *\n * await page.keyboard.down('Shift');\n * for (let i = 0; i < ' World'.length; i++)\n * await page.keyboard.press('ArrowLeft');\n * await page.keyboard.up('Shift');\n *\n * await page.keyboard.press('Backspace');\n * // Result text will end up saying 'Hello!'\n * ```\n *\n * @example\n * An example of pressing `A`\n *\n * ```ts\n * await page.keyboard.down('Shift');\n * await page.keyboard.press('KeyA');\n * await page.keyboard.up('Shift');\n * ```\n *\n * @public\n */\nexport abstract class Keyboard {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Dispatches a `keydown` event.\n *\n * @remarks\n * If `key` is a single character and no modifier keys besides `Shift`\n * are being held down, a `keypress`/`input` event will also generated.\n * The `text` option can be specified to force an input event to be generated.\n * If `key` is a modifier key, `Shift`, `Meta`, `Control`, or `Alt`,\n * subsequent key presses will be sent with that modifier active.\n * To release the modifier key, use {@link Keyboard.up}.\n *\n * After the key is pressed once, subsequent calls to\n * {@link Keyboard.down} will have\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat | repeat}\n * set to true. To release the key, use {@link Keyboard.up}.\n *\n * Modifier keys DO influence {@link Keyboard.down}.\n * Holding down `Shift` will type the text in upper case.\n *\n * @param key - Name of key to press, such as `ArrowLeft`.\n * See {@link KeyInput} for a list of all key names.\n *\n * @param options - An object of options. Accepts text which, if specified,\n * generates an input event with this text. Accepts commands which, if specified,\n * is the commands of keyboard shortcuts,\n * see {@link https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/editing/commands/editor_command_names.h | Chromium Source Code} for valid command names.\n */\n abstract down(\n key: KeyInput,\n options?: Readonly<KeyDownOptions>,\n ): Promise<void>;\n\n /**\n * Dispatches a `keyup` event.\n *\n * @param key - Name of key to release, such as `ArrowLeft`.\n * See {@link KeyInput | KeyInput}\n * for a list of all key names.\n */\n abstract up(key: KeyInput): Promise<void>;\n\n /**\n * Dispatches a `keypress` and `input` event.\n * This does not send a `keydown` or `keyup` event.\n *\n * @remarks\n * Modifier keys DO NOT effect {@link Keyboard.sendCharacter | Keyboard.sendCharacter}.\n * Holding down `Shift` will not type the text in upper case.\n *\n * @example\n *\n * ```ts\n * page.keyboard.sendCharacter('嗨');\n * ```\n *\n * @param char - Character to send into the page.\n */\n abstract sendCharacter(char: string): Promise<void>;\n\n /**\n * Sends a `keydown`, `keypress`/`input`,\n * and `keyup` event for each character in the text.\n *\n * @remarks\n * To press a special key, like `Control` or `ArrowDown`,\n * use {@link Keyboard.press}.\n *\n * Modifier keys DO NOT effect `keyboard.type`.\n * Holding down `Shift` will not type the text in upper case.\n *\n * @example\n *\n * ```ts\n * await page.keyboard.type('Hello'); // Types instantly\n * await page.keyboard.type('World', {delay: 100}); // Types slower, like a user\n * ```\n *\n * @param text - A text to type into a focused element.\n * @param options - An object of options. Accepts delay which,\n * if specified, is the time to wait between `keydown` and `keyup` in milliseconds.\n * Defaults to 0.\n */\n abstract type(\n text: string,\n options?: Readonly<KeyboardTypeOptions>,\n ): Promise<void>;\n\n /**\n * Shortcut for {@link Keyboard.down}\n * and {@link Keyboard.up}.\n *\n * @remarks\n * If `key` is a single character and no modifier keys besides `Shift`\n * are being held down, a `keypress`/`input` event will also generated.\n * The `text` option can be specified to force an input event to be generated.\n *\n * Modifier keys DO effect {@link Keyboard.press}.\n * Holding down `Shift` will type the text in upper case.\n *\n * @param key - Name of key to press, such as `ArrowLeft`.\n * See {@link KeyInput} for a list of all key names.\n *\n * @param options - An object of options. Accepts text which, if specified,\n * generates an input event with this text. Accepts delay which,\n * if specified, is the time to wait between `keydown` and `keyup` in milliseconds.\n * Defaults to 0. Accepts commands which, if specified,\n * is the commands of keyboard shortcuts,\n * see {@link https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/editing/commands/editor_command_names.h | Chromium Source Code} for valid command names.\n */\n abstract press(\n key: KeyInput,\n options?: Readonly<KeyPressOptions>,\n ): Promise<void>;\n}\n\n/**\n * @public\n */\nexport interface MouseOptions {\n /**\n * Determines which button will be pressed.\n *\n * @defaultValue `'left'`\n */\n button?: MouseButton;\n /**\n * @internal\n *\n * Determines the click count for the mouse event. This does not perform\n * multiple clicks.\n *\n * @defaultValue `1`\n */\n clickCount?: number;\n}\n\n/**\n * @public\n */\nexport interface MouseClickOptions extends MouseOptions {\n /**\n * Time (in ms) to delay the mouse release after the mouse press.\n */\n delay?: number;\n /**\n * Number of clicks to perform.\n *\n * @defaultValue `1`\n */\n count?: number;\n}\n\n/**\n * @public\n */\nexport interface MouseWheelOptions {\n deltaX?: number;\n deltaY?: number;\n}\n\n/**\n * @public\n */\nexport interface MouseMoveOptions {\n /**\n * Determines the number of movements to make from the current mouse position\n * to the new one.\n *\n * @defaultValue `1`\n */\n steps?: number;\n}\n\n/**\n * Enum of valid mouse buttons.\n *\n * @public\n */\nexport const MouseButton = Object.freeze({\n Left: 'left',\n Right: 'right',\n Middle: 'middle',\n Back: 'back',\n Forward: 'forward',\n}) satisfies Record<string, Protocol.Input.MouseButton>;\n\n/**\n * @public\n */\nexport type MouseButton = (typeof MouseButton)[keyof typeof MouseButton];\n\n/**\n * The Mouse class operates in main-frame CSS pixels\n * relative to the top-left corner of the viewport.\n *\n * @remarks\n * Every `page` object has its own Mouse, accessible with {@link Page.mouse}.\n *\n * @example\n *\n * ```ts\n * // Using ‘page.mouse’ to trace a 100x100 square.\n * await page.mouse.move(0, 0);\n * await page.mouse.down();\n * await page.mouse.move(0, 100);\n * await page.mouse.move(100, 100);\n * await page.mouse.move(100, 0);\n * await page.mouse.move(0, 0);\n * await page.mouse.up();\n * ```\n *\n * **Note**: The mouse events trigger synthetic `MouseEvent`s.\n * This means that it does not fully replicate the functionality of what a normal user\n * would be able to do with their mouse.\n *\n * For example, dragging and selecting text is not possible using `page.mouse`.\n * Instead, you can use the {@link https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/getSelection | `DocumentOrShadowRoot.getSelection()`} functionality implemented in the platform.\n *\n * @example\n * For example, if you want to select all content between nodes:\n *\n * ```ts\n * await page.evaluate(\n * (from, to) => {\n * const selection = from.getRootNode().getSelection();\n * const range = document.createRange();\n * range.setStartBefore(from);\n * range.setEndAfter(to);\n * selection.removeAllRanges();\n * selection.addRange(range);\n * },\n * fromJSHandle,\n * toJSHandle,\n * );\n * ```\n *\n * If you then would want to copy-paste your selection, you can use the clipboard api:\n *\n * ```ts\n * // The clipboard api does not allow you to copy, unless the tab is focused.\n * await page.bringToFront();\n * await page.evaluate(() => {\n * // Copy the selected content to the clipboard\n * document.execCommand('copy');\n * // Obtain the content of the clipboard as a string\n * return navigator.clipboard.readText();\n * });\n * ```\n *\n * **Note**: If you want access to the clipboard API,\n * you have to give it permission to do so:\n *\n * ```ts\n * await browser\n * .defaultBrowserContext()\n * .overridePermissions('<your origin>', [\n * 'clipboard-read',\n * 'clipboard-write',\n * ]);\n * ```\n *\n * @public\n */\nexport abstract class Mouse {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Resets the mouse to the default state: No buttons pressed; position at\n * (0,0).\n */\n abstract reset(): Promise<void>;\n\n /**\n * Moves the mouse to the given coordinate.\n *\n * @param x - Horizontal position of the mouse.\n * @param y - Vertical position of the mouse.\n * @param options - Options to configure behavior.\n */\n abstract move(\n x: number,\n y: number,\n options?: Readonly<MouseMoveOptions>,\n ): Promise<void>;\n\n /**\n * Presses the mouse.\n *\n * @param options - Options to configure behavior.\n */\n abstract down(options?: Readonly<MouseOptions>): Promise<void>;\n\n /**\n * Releases the mouse.\n *\n * @param options - Options to configure behavior.\n */\n abstract up(options?: Readonly<MouseOptions>): Promise<void>;\n\n /**\n * Shortcut for `mouse.move`, `mouse.down` and `mouse.up`.\n *\n * @param x - Horizontal position of the mouse.\n * @param y - Vertical position of the mouse.\n * @param options - Options to configure behavior.\n */\n abstract click(\n x: number,\n y: number,\n options?: Readonly<MouseClickOptions>,\n ): Promise<void>;\n\n /**\n * Dispatches a `mousewheel` event.\n * @param options - Optional: `MouseWheelOptions`.\n *\n * @example\n * An example of zooming into an element:\n *\n * ```ts\n * await page.goto(\n * 'https://mdn.mozillademos.org/en-US/docs/Web/API/Element/wheel_event$samples/Scaling_an_element_via_the_wheel?revision=1587366',\n * );\n *\n * const elem = await page.$('div');\n * const boundingBox = await elem.boundingBox();\n * await page.mouse.move(\n * boundingBox.x + boundingBox.width / 2,\n * boundingBox.y + boundingBox.height / 2,\n * );\n *\n * await page.mouse.wheel({deltaY: -100});\n * ```\n */\n abstract wheel(options?: Readonly<MouseWheelOptions>): Promise<void>;\n\n /**\n * Dispatches a `drag` event.\n * @param start - starting point for drag\n * @param target - point to drag to\n */\n abstract drag(start: Point, target: Point): Promise<Protocol.Input.DragData>;\n\n /**\n * Dispatches a `dragenter` event.\n * @param target - point for emitting `dragenter` event\n * @param data - drag data containing items and operations mask\n */\n abstract dragEnter(\n target: Point,\n data: Protocol.Input.DragData,\n ): Promise<void>;\n\n /**\n * Dispatches a `dragover` event.\n * @param target - point for emitting `dragover` event\n * @param data - drag data containing items and operations mask\n */\n abstract dragOver(\n target: Point,\n data: Protocol.Input.DragData,\n ): Promise<void>;\n\n /**\n * Performs a dragenter, dragover, and drop in sequence.\n * @param target - point to drop on\n * @param data - drag data containing items and operations mask\n */\n abstract drop(target: Point, data: Protocol.Input.DragData): Promise<void>;\n\n /**\n * Performs a drag, dragenter, dragover, and drop in sequence.\n * @param start - point to drag from\n * @param target - point to drop on\n * @param options - An object of options. Accepts delay which,\n * if specified, is the time to wait between `dragover` and `drop` in milliseconds.\n * Defaults to 0.\n */\n abstract dragAndDrop(\n start: Point,\n target: Point,\n options?: {delay?: number},\n ): Promise<void>;\n}\n/**\n * The TouchHandle interface exposes methods to manipulate touches that have been started\n * @public\n */\nexport interface TouchHandle {\n /**\n * Dispatches a `touchMove` event for this touch.\n * @param x - Horizontal position of the move.\n * @param y - Vertical position of the move.\n */\n move(x: number, y: number): Promise<void>;\n /**\n * Dispatches a `touchend` event for this touch.\n */\n end(): Promise<void>;\n}\n/**\n * The Touchscreen class exposes touchscreen events.\n * @public\n */\nexport abstract class Touchscreen {\n /**\n * @internal\n */\n idGenerator = createIncrementalIdGenerator();\n /**\n * @internal\n */\n touches: TouchHandle[] = [];\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * @internal\n */\n removeHandle(handle: TouchHandle): void {\n const index = this.touches.indexOf(handle);\n if (index === -1) {\n return;\n }\n this.touches.splice(index, 1);\n }\n\n /**\n * Dispatches a `touchstart` and `touchend` event.\n * @param x - Horizontal position of the tap.\n * @param y - Vertical position of the tap.\n */\n async tap(x: number, y: number): Promise<void> {\n const touch = await this.touchStart(x, y);\n await touch.end();\n }\n\n /**\n * Dispatches a `touchstart` event.\n * @param x - Horizontal position of the tap.\n * @param y - Vertical position of the tap.\n * @returns A handle for the touch that was started.\n */\n abstract touchStart(x: number, y: number): Promise<TouchHandle>;\n\n /**\n * Dispatches a `touchMove` event on the first touch that is active.\n * @param x - Horizontal position of the move.\n * @param y - Vertical position of the move.\n *\n * @remarks\n *\n * Not every `touchMove` call results in a `touchmove` event being emitted,\n * depending on the browser's optimizations. For example, Chrome\n * {@link https://developer.chrome.com/blog/a-more-compatible-smoother-touch/#chromes-new-model-the-throttled-async-touchmove-model | throttles}\n * touch move events.\n */\n async touchMove(x: number, y: number): Promise<void> {\n const touch = this.touches[0];\n if (!touch) {\n throw new TouchError('Must start a new Touch first');\n }\n return await touch.move(x, y);\n }\n\n /**\n * Dispatches a `touchend` event on the first touch that is active.\n */\n async touchEnd(): Promise<void> {\n const touch = this.touches.shift();\n if (!touch) {\n throw new TouchError('Must start a new Touch first');\n }\n await touch.end();\n }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nconst DEFAULT_TIMEOUT = 30000;\n\n/**\n * @internal\n */\nexport class TimeoutSettings {\n #defaultTimeout: number | null;\n #defaultNavigationTimeout: number | null;\n\n constructor() {\n this.#defaultTimeout = null;\n this.#defaultNavigationTimeout = null;\n }\n\n setDefaultTimeout(timeout: number): void {\n this.#defaultTimeout = timeout;\n }\n\n setDefaultNavigationTimeout(timeout: number): void {\n this.#defaultNavigationTimeout = timeout;\n }\n\n navigationTimeout(): number {\n if (this.#defaultNavigationTimeout !== null) {\n return this.#defaultNavigationTimeout;\n }\n if (this.#defaultTimeout !== null) {\n return this.#defaultTimeout;\n }\n return DEFAULT_TIMEOUT;\n }\n\n timeout(): number {\n if (this.#defaultTimeout !== null) {\n return this.#defaultTimeout;\n }\n return DEFAULT_TIMEOUT;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {\n concat,\n distinctUntilChanged,\n EMPTY,\n filter,\n first,\n firstValueFrom,\n from,\n map,\n merge,\n mergeMap,\n mergeScan,\n of,\n raceWith,\n ReplaySubject,\n startWith,\n switchMap,\n take,\n takeUntil,\n timer,\n type Observable,\n} from '../../third_party/rxjs/rxjs.js';\nimport type {HTTPRequest} from '../api/HTTPRequest.js';\nimport type {HTTPResponse} from '../api/HTTPResponse.js';\nimport type {Accessibility} from '../cdp/Accessibility.js';\nimport type {Coverage} from '../cdp/Coverage.js';\nimport type {NetworkConditions} from '../cdp/NetworkManager.js';\nimport type {Tracing} from '../cdp/Tracing.js';\nimport type {WebMCP} from '../cdp/WebMCP.js';\nimport type {ConsoleMessage} from '../common/ConsoleMessage.js';\nimport type {\n Cookie,\n CookieParam,\n DeleteCookiesRequest,\n} from '../common/Cookie.js';\nimport type {Logger} from '../common/Debug.js';\nimport {DEBUG_PREFIXES} from '../common/Debug.js';\nimport type {Device} from '../common/Device.js';\nimport {TargetCloseError} from '../common/Errors.js';\nimport {\n EventEmitter,\n type EventsWithWildcard,\n type EventType,\n type Handler,\n} from '../common/EventEmitter.js';\nimport type {FileChooser} from '../common/FileChooser.js';\nimport type {PDFOptions} from '../common/PDFOptions.js';\nimport {TimeoutSettings} from '../common/TimeoutSettings.js';\nimport type {\n Awaitable,\n AwaitablePredicate,\n EvaluateFunc,\n EvaluateFuncWith,\n HandleFor,\n NodeFor,\n} from '../common/types.js';\nimport {\n fromEmitterEvent,\n filterAsync,\n isString,\n NETWORK_IDLE_TIME,\n timeout,\n withSourcePuppeteerURLIfNone,\n fromAbortSignal,\n} from '../common/util.js';\nimport type {Viewport} from '../common/Viewport.js';\nimport {environment} from '../environment.js';\nimport type {ScreenRecorder} from '../node/ScreenRecorder.js';\nimport {guarded} from '../util/decorators.js';\nimport {\n AsyncDisposableStack,\n asyncDisposeSymbol,\n DisposableStack,\n disposeSymbol,\n} from '../util/disposable.js';\nimport {stringToTypedArray} from '../util/encoding.js';\n\nimport type {BluetoothEmulation} from './BluetoothEmulation.js';\nimport type {Browser, WindowId} from './Browser.js';\nimport type {BrowserContext} from './BrowserContext.js';\nimport type {CDPSession} from './CDPSession.js';\nimport type {DeviceRequestPrompt} from './DeviceRequestPrompt.js';\nimport type {Dialog} from './Dialog.js';\nimport type {\n BoundingBox,\n ClickOptions,\n ElementHandle,\n} from './ElementHandle.js';\nimport type {Extension} from './Extension.js';\nimport type {\n Frame,\n FrameAddScriptTagOptions,\n FrameAddStyleTagOptions,\n FrameWaitForFunctionOptions,\n GoToOptions,\n SetContentWaitForOptions,\n WaitForOptions,\n} from './Frame.js';\nimport type {\n Keyboard,\n KeyboardTypeOptions,\n Mouse,\n Touchscreen,\n} from './Input.js';\nimport type {Issue} from './Issue.js';\nimport type {JSHandle} from './JSHandle.js';\nimport {\n FunctionLocator,\n Locator,\n NodeLocator,\n type AwaitedLocator,\n} from './locators/locators.js';\nimport type {Realm} from './Realm.js';\nimport type {ScreenRecording} from './ScreenRecording.js';\nimport type {Target} from './Target.js';\nimport type {WebWorker} from './WebWorker.js';\n\n/**\n * @public\n */\nexport interface Metrics {\n /**\n * The timestamp when the metrics sample was taken, in monotonic time\n * (seconds since an arbitrary point in the past).\n */\n Timestamp?: number;\n /**\n * Number of documents in the page.\n */\n Documents?: number;\n /**\n * Number of frames in the page.\n */\n Frames?: number;\n /**\n * Number of events in the page.\n */\n JSEventListeners?: number;\n /**\n * Number of DOM nodes in the page.\n */\n Nodes?: number;\n /**\n * Total number of full or partial page layouts.\n */\n LayoutCount?: number;\n /**\n * Total number of page style recalculations.\n */\n RecalcStyleCount?: number;\n /**\n * Combined duration of all page layouts, in seconds.\n */\n LayoutDuration?: number;\n /**\n * Combined duration of all page style recalculations, in seconds.\n */\n RecalcStyleDuration?: number;\n /**\n * Combined duration of JavaScript execution, in seconds.\n */\n ScriptDuration?: number;\n /**\n * Combined duration of all tasks performed by the browser, in seconds.\n */\n TaskDuration?: number;\n /**\n * Used JavaScript heap size, in bytes.\n */\n JSHeapUsedSize?: number;\n /**\n * Total JavaScript heap size, in bytes.\n */\n JSHeapTotalSize?: number;\n}\n\n/**\n * @public\n */\nexport interface Credentials {\n username: string;\n password: string;\n}\n\n/**\n * @public\n */\nexport interface WaitForNetworkIdleOptions extends WaitTimeoutOptions {\n /**\n * Time (in milliseconds) the network should be idle.\n *\n * @defaultValue `500`\n */\n idleTime?: number;\n /**\n * Maximum number concurrent of network connections to be considered inactive.\n *\n * @defaultValue `0`\n */\n concurrency?: number;\n}\n\n/**\n * @public\n */\nexport interface WaitTimeoutOptions {\n /**\n * Maximum wait time in milliseconds. Pass 0 to disable the timeout.\n *\n * The default value can be changed by using the\n * {@link Page.setDefaultTimeout} method.\n *\n * @defaultValue `30_000`\n */\n timeout?: number;\n /**\n * A signal object that allows you to cancel a waitFor call.\n */\n signal?: AbortSignal;\n}\n\n/**\n * @public\n */\nexport interface WaitForSelectorOptions {\n /**\n * Wait for the selected element to be present in DOM and to be visible. See\n * {@link ElementHandle.isVisible} for the definition of element visibility.\n *\n * @defaultValue `false`\n */\n visible?: boolean;\n /**\n * Wait for the selected element to not be found in the DOM or to be hidden.\n * See {@link ElementHandle.isHidden} for the definition of element\n * invisibility.\n *\n * @defaultValue `false`\n */\n hidden?: boolean;\n /**\n * Maximum time to wait in milliseconds. Pass `0` to disable timeout.\n *\n * The default value can be changed by using {@link Page.setDefaultTimeout}\n *\n * @defaultValue `30_000` (30 seconds)\n */\n timeout?: number;\n /**\n * A signal object that allows you to cancel a waitForSelector call.\n */\n signal?: AbortSignal;\n}\n\n/**\n * @public\n */\nexport interface GeolocationOptions {\n /**\n * Latitude between `-90` and `90`.\n */\n longitude: number;\n /**\n * Longitude between `-180` and `180`.\n */\n latitude: number;\n /**\n * Optional non-negative accuracy value.\n */\n accuracy?: number;\n}\n\n/**\n * A media feature to emulate.\n *\n * @public\n */\nexport interface MediaFeature {\n /**\n * A name of the feature, for example, 'prefers-reduced-motion'.\n */\n name: string;\n /**\n * A value for the feature, for example, 'reduce'.\n */\n value: string;\n}\n\n/**\n * @public\n */\nexport interface ScreenshotClip extends BoundingBox {\n /**\n * @defaultValue `1`\n */\n scale?: number;\n}\n\n/**\n * @public\n */\nexport type ImageFormat = 'png' | 'jpeg' | 'webp';\n\n/**\n * @public\n */\nexport type VideoFormat = 'webm' | 'gif' | 'mp4';\n\n/**\n * @public\n */\nexport interface ScreenshotOptions {\n /**\n * @defaultValue `false`\n */\n optimizeForSpeed?: boolean;\n /**\n * @defaultValue `'png'`\n */\n type?: ImageFormat;\n /**\n * Quality of the image, between 0-100. Not applicable to `png` images.\n */\n quality?: number;\n /**\n * Capture the screenshot from the surface, rather than the view.\n *\n * @defaultValue `true`\n */\n fromSurface?: boolean;\n /**\n * When `true`, takes a screenshot of the full page.\n *\n * @defaultValue `false`\n */\n fullPage?: boolean;\n /**\n * Hides default white background and allows capturing screenshots with transparency.\n *\n * @defaultValue `false`\n */\n omitBackground?: boolean;\n /**\n * The file path to save the image to. The screenshot type will be inferred\n * from file extension. If path is a relative path, then it is resolved\n * relative to current working directory. If no path is provided, the image\n * won't be saved to the disk.\n */\n path?: string;\n /**\n * Specifies the region of the page/element to clip.\n */\n clip?: ScreenshotClip;\n /**\n * Encoding of the image.\n *\n * @defaultValue `'binary'`\n */\n encoding?: 'base64' | 'binary';\n /**\n * Capture the screenshot beyond the viewport.\n *\n * @defaultValue `false` if there is no `clip`. `true` otherwise.\n */\n captureBeyondViewport?: boolean;\n}\n\n/**\n * @public\n * @experimental\n */\nexport interface ScreencastOptions {\n /**\n * File path to save the screencast to.\n */\n path?: `${string}.${VideoFormat}`;\n /**\n * Specifies whether to overwrite output file,\n * or exit immediately if it already exists.\n *\n * @defaultValue `true`\n */\n overwrite?: boolean;\n /**\n * Specifies the output file format.\n *\n * @defaultValue `'webm'`\n */\n format?: VideoFormat;\n /**\n * Specifies the region of the viewport to crop.\n */\n crop?: BoundingBox;\n /**\n * Scales the output video.\n *\n * For example, `0.5` will shrink the width and height of the output video by\n * half. `2` will double the width and height of the output video.\n *\n * @defaultValue `1`\n */\n scale?: number;\n /**\n * Specifies the speed to record at.\n *\n * For example, `0.5` will slowdown the output video by 50%. `2` will double the\n * speed of the output video.\n *\n * @defaultValue `1`\n */\n speed?: number;\n /**\n * Specifies the frame rate in frames per second.\n *\n * @defaultValue `30` (`20` for GIF)\n */\n fps?: number;\n /**\n * Specifies the number of times to loop playback, from `0` to `Infinity`.\n * A value of `0` or `undefined` will disable looping.\n *\n * @defaultValue `undefined`\n */\n loop?: number;\n /**\n * Specifies the delay between iterations of a loop, in ms.\n * `-1` is a special value to re-use the previous delay.\n *\n * @defaultValue `-1`\n */\n delay?: number;\n /**\n * Specifies the recording\n * {@link https://trac.ffmpeg.org/wiki/Encode/VP9#constantq | quality}\n * Constant Rate Factor between `0`–`63`. Lower values mean better quality.\n *\n * @defaultValue `30`\n */\n quality?: number;\n /**\n * Specifies the maximum number of\n * {@link https://ffmpeg.org/ffmpeg-filters.html#palettegen | palette}\n * colors to quantize, with GIF limited to `256`.\n * Restrict the palette to only necessary colors to reduce output file size.\n *\n * @defaultValue `256`\n */\n colors?: number;\n /**\n * Path to the {@link https://ffmpeg.org/ | ffmpeg}.\n *\n * Required if `ffmpeg` is not in your PATH.\n *\n * @defaultValue `'ffmpeg'`\n */\n ffmpegPath?: string;\n}\n\n/**\n * @public\n * @experimental\n */\nexport interface RecordOptions {\n /**\n * File path to save the recording to.\n */\n path?: string;\n /**\n * Specifies whether to overwrite output file,\n * or exit immediately if it already exists.\n *\n * @defaultValue `true`\n */\n overwrite?: boolean;\n /**\n * Whether to record audio.\n *\n * @defaultValue `false`\n */\n audio?: boolean;\n /**\n * Maximum frame width in pixels.\n */\n maxWidth?: number;\n /**\n * Maximum frame height in pixels.\n */\n maxHeight?: number;\n /**\n * Maximum frame rate in frames per second.\n */\n frameRate?: number;\n /**\n * Frame rate in frames per second (alias for frameRate).\n */\n fps?: number;\n}\n\n/**\n * @public\n */\nexport interface QueryOptions {\n /**\n * Whether to run the query in isolation. When returning many elements\n * from {@link Page.$$} or similar methods, it might be useful to turn\n * off the isolation to improve performance. By default, the querying\n * code will be executed in a separate sandbox realm.\n *\n * @defaultValue `true`\n */\n isolate: boolean;\n}\n\n/**\n * All the events that a page instance may emit.\n *\n * @public\n */\nexport const enum PageEvent {\n /**\n * Emitted when the page closes.\n */\n Close = 'close',\n /**\n * Emitted when JavaScript within the page calls one of console API methods,\n * e.g. `console.log` or `console.dir`. Also emitted if the page throws an\n * error or a warning.\n *\n * @remarks\n * A `console` event provides a {@link ConsoleMessage} representing the\n * console message that was logged.\n *\n * @example\n * An example of handling `console` event:\n *\n * ```ts\n * page.on('console', msg => {\n * for (let i = 0; i < msg.args().length; ++i)\n * console.log(`${i}: ${msg.args()[i]}`);\n * });\n * page.evaluate(() => console.log('hello', 5, {foo: 'bar'}));\n * ```\n */\n Console = 'console',\n /**\n * Emitted when a JavaScript dialog appears, such as `alert`, `prompt`,\n * `confirm` or `beforeunload`. Puppeteer can respond to the dialog via\n * {@link Dialog.accept} or {@link Dialog.dismiss}.\n */\n Dialog = 'dialog',\n /**\n * Emitted when the JavaScript\n * {@link https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded | DOMContentLoaded }\n * event is dispatched.\n */\n DOMContentLoaded = 'domcontentloaded',\n /**\n * Emitted when a DevTools issue is reported.\n * @experimental\n */\n Issue = 'issue',\n /**\n * Emitted when the page crashes. Will contain an `Error`.\n */\n Error = 'error',\n /** Emitted when a frame is attached. Will contain a {@link Frame}. */\n FrameAttached = 'frameattached',\n /** Emitted when a frame is detached. Will contain a {@link Frame}. */\n FrameDetached = 'framedetached',\n /**\n * Emitted when a frame is navigated to a new URL. Will contain a\n * {@link Frame}.\n */\n FrameNavigated = 'framenavigated',\n /**\n * Emitted when the JavaScript\n * {@link https://developer.mozilla.org/en-US/docs/Web/Events/load | load}\n * event is dispatched.\n */\n Load = 'load',\n /**\n * Emitted when the JavaScript code makes a call to `console.timeStamp`. For\n * the list of metrics see {@link Page.metrics | page.metrics}.\n *\n * @remarks\n * Contains an object with two properties:\n *\n * - `title`: the title passed to `console.timeStamp`\n * - `metrics`: object containing metrics as key/value pairs. The values will\n * be `number`s.\n */\n Metrics = 'metrics',\n /**\n * Emitted when an uncaught exception happens within the page. Contains an\n * `Error` or data of type unknown.\n */\n PageError = 'pageerror',\n /**\n * Emitted when the page opens a new tab or window.\n *\n * Contains a {@link Page} corresponding to the popup window.\n *\n * @example\n *\n * ```ts\n * const [popup] = await Promise.all([\n * new Promise(resolve => page.once('popup', resolve)),\n * page.click('a[target=_blank]'),\n * ]);\n * ```\n *\n * ```ts\n * const [popup] = await Promise.all([\n * new Promise(resolve => page.once('popup', resolve)),\n * page.evaluate(() => window.open('https://example.com')),\n * ]);\n * ```\n */\n Popup = 'popup',\n /**\n * Emitted when a page issues a request and contains a {@link HTTPRequest}.\n *\n * @remarks\n * The object is readonly. See {@link Page.setRequestInterception} for\n * intercepting and mutating requests.\n */\n Request = 'request',\n /**\n * Emitted when a request ended up loading from cache. Contains a\n * {@link HTTPRequest}.\n *\n * @remarks\n * For certain requests, might contain undefined.\n * {@link https://crbug.com/750469}\n */\n RequestServedFromCache = 'requestservedfromcache',\n /**\n * Emitted when a request fails, for example by timing out.\n *\n * Contains a {@link HTTPRequest}.\n *\n * @remarks\n * HTTP Error responses, such as 404 or 503, are still successful responses\n * from HTTP standpoint, so request will complete with `requestfinished` event\n * and not with `requestfailed`.\n */\n RequestFailed = 'requestfailed',\n /**\n * Emitted when a request finishes successfully. Contains a\n * {@link HTTPRequest}.\n */\n RequestFinished = 'requestfinished',\n /**\n * Emitted when a response is received. Contains a {@link HTTPResponse}.\n */\n Response = 'response',\n /**\n * Emitted when a dedicated\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API | WebWorker}\n * is spawned by the page.\n */\n WorkerCreated = 'workercreated',\n /**\n * Emitted when a dedicated\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API | WebWorker}\n * is destroyed by the page.\n */\n WorkerDestroyed = 'workerdestroyed',\n}\n\n/**\n * Denotes the objects received by callback functions for page events.\n *\n * See {@link PageEvent} for more detail on the events and when they are\n * emitted.\n *\n * @public\n */\nexport interface PageEvents extends Record<EventType, unknown> {\n [PageEvent.Close]: undefined;\n [PageEvent.Console]: ConsoleMessage;\n [PageEvent.Dialog]: Dialog;\n [PageEvent.DOMContentLoaded]: undefined;\n [PageEvent.Issue]: Issue;\n [PageEvent.Error]: Error;\n [PageEvent.FrameAttached]: Frame;\n [PageEvent.FrameDetached]: Frame;\n [PageEvent.FrameNavigated]: Frame;\n [PageEvent.Load]: undefined;\n [PageEvent.Metrics]: {title: string; metrics: Metrics};\n [PageEvent.PageError]: Error | unknown;\n [PageEvent.Popup]: Page | null;\n [PageEvent.Request]: HTTPRequest;\n [PageEvent.Response]: HTTPResponse;\n [PageEvent.RequestFailed]: HTTPRequest;\n [PageEvent.RequestFinished]: HTTPRequest;\n [PageEvent.RequestServedFromCache]: HTTPRequest;\n [PageEvent.WorkerCreated]: WebWorker;\n [PageEvent.WorkerDestroyed]: WebWorker;\n}\n\n/**\n * @public\n */\nexport interface NewDocumentScriptEvaluation {\n identifier: string;\n}\n\n/**\n * @internal\n */\nexport function setDefaultScreenshotOptions(options: ScreenshotOptions): void {\n options.optimizeForSpeed ??= false;\n options.type ??= 'png';\n options.fromSurface ??= true;\n options.fullPage ??= false;\n options.omitBackground ??= false;\n options.encoding ??= 'binary';\n options.captureBeyondViewport ??= true;\n}\n\n/**\n * @public\n */\nexport interface ReloadOptions extends WaitForOptions {\n /**\n * If set to true, the browser caches are ignored for the page reload.\n *\n * @defaultValue true\n * @public\n */\n ignoreCache?: boolean;\n}\n\n/**\n * Options for {@link Page.captureHeapSnapshot}.\n *\n * @public\n */\nexport interface HeapSnapshotOptions {\n /**\n * The file path to save the heap snapshot to.\n */\n path: string;\n}\n\n/**\n * Page provides methods to interact with a single tab or\n * {@link https://developer.chrome.com/extensions/background_pages | extension background page}\n * in the browser.\n *\n * :::note\n *\n * One Browser instance might have multiple Page instances.\n *\n * :::\n *\n * @example\n * This example creates a page, navigates it to a URL, and then saves a screenshot:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.goto('https://example.com');\n * await page.screenshot({path: 'screenshot.png'});\n * await browser.close();\n * ```\n *\n * The Page class extends from Puppeteer's {@link EventEmitter} class and will\n * emit various events which are documented in the {@link PageEvent} enum.\n *\n * @example\n * This example logs a message for a single page `load` event:\n *\n * ```ts\n * page.once('load', () => console.log('Page loaded!'));\n * ```\n *\n * To unsubscribe from events use the {@link EventEmitter.off} method:\n *\n * ```ts\n * function logRequest(interceptedRequest) {\n * console.log('A request was made:', interceptedRequest.url());\n * }\n * page.on('request', logRequest);\n * // Sometime later...\n * page.off('request', logRequest);\n * ```\n *\n * @public\n */\nexport abstract class Page extends EventEmitter<PageEvents> {\n /**\n * @internal\n */\n _isDragging = false;\n /**\n * @internal\n */\n _timeoutSettings = new TimeoutSettings();\n\n /**\n * Internal API to get an implementation-specific identifier\n * for the tab. In Chrome, it is a tab target id. If unknown,\n * returns an empty string.\n *\n * @internal\n */\n _tabId = '';\n\n #requestHandlers = new WeakMap<Handler<HTTPRequest>, Handler<HTTPRequest>>();\n\n #inflight$ = new ReplaySubject<number>(1);\n\n /**\n * @internal\n */\n logger: Logger;\n\n /**\n * @internal\n */\n constructor(logger: Logger) {\n super(undefined, logger);\n this.logger = logger;\n fromEmitterEvent(this, PageEvent.Request)\n .pipe(\n mergeMap(originalRequest => {\n return concat(\n of(1),\n merge(\n fromEmitterEvent(this, PageEvent.RequestFailed),\n fromEmitterEvent(this, PageEvent.RequestFinished),\n fromEmitterEvent(this, PageEvent.Response).pipe(\n map(response => {\n return response.request();\n }),\n ),\n ).pipe(\n filter(request => {\n return request.id === originalRequest.id;\n }),\n take(1),\n map(() => {\n return -1;\n }),\n ),\n );\n }),\n mergeScan((acc, addend) => {\n return of(acc + addend);\n }, 0),\n takeUntil(fromEmitterEvent(this, PageEvent.Close)),\n startWith(0),\n )\n .subscribe(this.#inflight$);\n }\n\n /**\n * `true` if the service worker are being bypassed, `false` otherwise.\n */\n abstract isServiceWorkerBypassed(): boolean;\n\n /**\n * `true` if drag events are being intercepted, `false` otherwise.\n *\n * @deprecated We no longer support intercepting drag payloads. Use the new\n * drag APIs found on {@link ElementHandle} to drag (or just use the\n * {@link Page.mouse}).\n */\n abstract isDragInterceptionEnabled(): boolean;\n\n /**\n * `true` if the page has JavaScript enabled, `false` otherwise.\n */\n abstract isJavaScriptEnabled(): boolean;\n\n /**\n * Listen to page events.\n *\n * @remarks\n * This method exists to define event typings and handle proper wireup of\n * cooperative request interception. Actual event listening and dispatching is\n * delegated to {@link EventEmitter}.\n *\n * @internal\n */\n override on<K extends keyof EventsWithWildcard<PageEvents>>(\n type: K,\n handler: (event: EventsWithWildcard<PageEvents>[K]) => void,\n ): this {\n if (type !== PageEvent.Request) {\n return super.on(type, handler);\n }\n let wrapper = this.#requestHandlers.get(\n handler as (event: PageEvents[PageEvent.Request]) => void,\n );\n if (wrapper === undefined) {\n wrapper = (event: HTTPRequest) => {\n event.enqueueInterceptAction(() => {\n return handler(event as EventsWithWildcard<PageEvents>[K]);\n });\n };\n this.#requestHandlers.set(\n handler as (event: PageEvents[PageEvent.Request]) => void,\n wrapper,\n );\n }\n return super.on(\n type,\n wrapper as (event: EventsWithWildcard<PageEvents>[K]) => void,\n );\n }\n\n /**\n * @internal\n */\n override off<K extends keyof EventsWithWildcard<PageEvents>>(\n type: K,\n handler: (event: EventsWithWildcard<PageEvents>[K]) => void,\n ): this {\n if (type === PageEvent.Request) {\n handler =\n (this.#requestHandlers.get(\n handler as (\n event: EventsWithWildcard<PageEvents>[PageEvent.Request],\n ) => void,\n ) as (event: EventsWithWildcard<PageEvents>[K]) => void) || handler;\n }\n return super.off(type, handler);\n }\n\n /**\n * This method is typically coupled with an action that triggers file\n * choosing.\n *\n * :::caution\n *\n * This must be called before the file chooser is launched. It will not return\n * a currently active file chooser.\n *\n * :::\n *\n * :::caution\n *\n * Interception of file dialogs triggered via DOM APIs such as\n * window.showOpenFilePicker is currently not supported.\n *\n * :::\n *\n * @remarks\n * In the \"headful\" browser, this method results in the native file picker\n * dialog `not showing up` for the user.\n *\n * @example\n * The following example clicks a button that issues a file chooser\n * and then responds with `/tmp/myfile.pdf` as if a user has selected this file.\n *\n * ```ts\n * const [fileChooser] = await Promise.all([\n * page.waitForFileChooser(),\n * page.click('#upload-file-button'),\n * // some button that triggers file selection\n * ]);\n * await fileChooser.accept(['/tmp/myfile.pdf']);\n * ```\n */\n abstract waitForFileChooser(\n options?: WaitTimeoutOptions,\n ): Promise<FileChooser>;\n\n /**\n * Sets the page's geolocation.\n *\n * @remarks\n * Consider using {@link BrowserContext.overridePermissions} to grant\n * permissions for the page to read its geolocation.\n *\n * @example\n *\n * ```ts\n * await page.setGeolocation({latitude: 59.95, longitude: 30.31667});\n * ```\n */\n abstract setGeolocation(options: GeolocationOptions): Promise<void>;\n\n /**\n * A target this page was created from.\n *\n * @deprecated To create CDP session use {@link Page.createCDPSession} directly. To\n * identify pages spawned by this one, use {@link PageEvent.Popup} event instead.\n */\n abstract target(): Target;\n\n /**\n * Get the browser the page belongs to.\n */\n abstract browser(): Browser;\n\n /**\n * Get the browser context that the page belongs to.\n */\n abstract browserContext(): BrowserContext;\n\n /**\n * The page's main frame.\n */\n abstract mainFrame(): Frame;\n\n /**\n * Creates a Chrome Devtools Protocol session attached to the page.\n */\n abstract createCDPSession(): Promise<CDPSession>;\n\n /**\n * {@inheritDoc Keyboard}\n */\n abstract get keyboard(): Keyboard;\n\n /**\n * {@inheritDoc Touchscreen}\n */\n abstract get touchscreen(): Touchscreen;\n\n /**\n * {@inheritDoc Coverage}\n */\n abstract get coverage(): Coverage;\n\n /**\n * {@inheritDoc Tracing}\n */\n abstract get tracing(): Tracing;\n\n /**\n * Experimental API for {@link https://github.com/webmachinelearning/webmcp| WebMCP}.\n * Requires Chrome 151+ with the `--enable-features=WebMCP` flag enabled.\n *\n * @experimental\n */\n abstract get webmcp(): WebMCP;\n\n /**\n * {@inheritDoc Accessibility}\n */\n get accessibility(): Accessibility {\n return this.mainFrame().accessibility;\n }\n\n /**\n * An array of all frames attached to the page.\n */\n abstract frames(): Frame[];\n\n /**\n * All of the dedicated {@link\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API |\n * WebWorkers} associated with the page.\n *\n * @remarks\n * This does not contain ServiceWorkers\n */\n abstract workers(): WebWorker[];\n\n /**\n * Activating request interception enables {@link HTTPRequest.abort},\n * {@link HTTPRequest.continue} and {@link HTTPRequest.respond} methods. This\n * provides the capability to modify network requests that are made by a page.\n *\n * Once request interception is enabled, every request will stall unless it's\n * continued, responded or aborted; or completed using the browser cache.\n *\n * See the\n * {@link https://pptr.dev/guides/network-interception|Request interception guide}\n * for more details.\n *\n * @example\n * An example of a naïve request interceptor that aborts all image requests:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.setRequestInterception(true);\n * page.on('request', interceptedRequest => {\n * if (\n * interceptedRequest.url().endsWith('.png') ||\n * interceptedRequest.url().endsWith('.jpg')\n * )\n * interceptedRequest.abort();\n * else interceptedRequest.continue();\n * });\n * await page.goto('https://example.com');\n * await browser.close();\n * ```\n *\n * @param value - Whether to enable request interception.\n */\n abstract setRequestInterception(value: boolean): Promise<void>;\n\n /**\n * Toggles ignoring of service worker for each request.\n *\n * @param bypass - Whether to bypass service worker and load from network.\n */\n abstract setBypassServiceWorker(bypass: boolean): Promise<void>;\n\n /**\n * @param enabled - Whether to enable drag interception.\n *\n * @deprecated We no longer support intercepting drag payloads. Use the new\n * drag APIs found on {@link ElementHandle} to drag (or just use the\n * {@link Page.mouse}).\n */\n abstract setDragInterception(enabled: boolean): Promise<void>;\n\n /**\n * Emulates the offline mode.\n *\n * It does not change the download/upload/latency parameters set by\n * {@link Page.emulateNetworkConditions}\n *\n * @param enabled - When `true`, enables offline mode for the page.\n */\n abstract setOfflineMode(enabled: boolean): Promise<void>;\n\n /**\n * This does not affect WebSockets and WebRTC PeerConnections (see\n * https://crbug.com/563644). To set the page offline, you can use\n * {@link Page.setOfflineMode}.\n *\n * A list of predefined network conditions can be used by importing\n * {@link PredefinedNetworkConditions}.\n *\n * @example\n *\n * ```ts\n * import {PredefinedNetworkConditions} from 'puppeteer';\n * const slow3G = PredefinedNetworkConditions['Slow 3G'];\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.emulateNetworkConditions(slow3G);\n * await page.goto('https://www.google.com');\n * // other actions...\n * await browser.close();\n * ```\n *\n * @param networkConditions - Passing `null` disables network condition\n * emulation.\n */\n abstract emulateNetworkConditions(\n networkConditions: NetworkConditions | null,\n ): Promise<void>;\n\n /**\n * This setting will change the default maximum navigation time for the\n * following methods and related shortcuts:\n *\n * - {@link Page.goBack | page.goBack(options)}\n *\n * - {@link Page.goForward | page.goForward(options)}\n *\n * - {@link Page.goto | page.goto(url,options)}\n *\n * - {@link Page.reload | page.reload(options)}\n *\n * - {@link Page.setContent | page.setContent(html,options)}\n *\n * - {@link Page.waitForNavigation | page.waitForNavigation(options)}\n * @param timeout - Maximum navigation time in milliseconds.\n */\n abstract setDefaultNavigationTimeout(timeout: number): void;\n\n /**\n * @param timeout - Maximum time in milliseconds.\n */\n abstract setDefaultTimeout(timeout: number): void;\n\n /**\n * Maximum time in milliseconds.\n */\n abstract getDefaultTimeout(): number;\n\n /**\n * Maximum navigation time in milliseconds.\n */\n abstract getDefaultNavigationTimeout(): number;\n\n /**\n * Creates a locator for the provided selector. See {@link Locator} for\n * details and supported actions.\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n */\n locator<Selector extends string>(\n selector: Selector,\n ): Locator<NodeFor<Selector>>;\n\n /**\n * Creates a locator for the provided function. See {@link Locator} for\n * details and supported actions.\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n */\n locator<Ret>(func: () => Awaitable<Ret>): Locator<Ret>;\n\n locator<Selector extends string, Ret, T extends Node>(\n input: Selector | (() => Awaitable<Ret>),\n ): Locator<NodeFor<Selector>> | Locator<Ret> | Locator<T> {\n if (typeof input === 'string') {\n return NodeLocator.create(this, input);\n } else {\n return FunctionLocator.create(this, input);\n }\n }\n\n /**\n * A shortcut for {@link Locator.race} that does not require static imports.\n *\n * @internal\n */\n locatorRace<Locators extends readonly unknown[] | []>(\n locators: Locators,\n ): Locator<AwaitedLocator<Locators[number]>> {\n return Locator.race(locators);\n }\n\n /**\n * Finds the first element that matches the selector. If no element matches\n * the selector, the return value resolves to `null`.\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n *\n * @remarks\n *\n * Shortcut for {@link Frame.$ | Page.mainFrame().$(selector) }.\n */\n async $<Selector extends string>(\n selector: Selector,\n ): Promise<ElementHandle<NodeFor<Selector>> | null> {\n return await this.mainFrame().$(selector);\n }\n\n /**\n * Finds elements on the page that match the selector. If no elements\n * match the selector, the return value resolves to `[]`.\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n *\n * @remarks\n *\n * Shortcut for {@link Frame.$$ | Page.mainFrame().$$(selector) }.\n */\n async $$<Selector extends string>(\n selector: Selector,\n options?: QueryOptions,\n ): Promise<Array<ElementHandle<NodeFor<Selector>>>> {\n return await this.mainFrame().$$(selector, options);\n }\n\n /**\n * @remarks\n *\n * The only difference between {@link Page.evaluate | page.evaluate} and\n * `page.evaluateHandle` is that `evaluateHandle` will return the value\n * wrapped in an in-page object.\n *\n * If the function passed to `page.evaluateHandle` returns a Promise, the\n * function will wait for the promise to resolve and return its value.\n *\n * You can pass a string instead of a function (although functions are\n * recommended as they are easier to debug and use with TypeScript):\n *\n * @example\n *\n * ```ts\n * const aHandle = await page.evaluateHandle('document');\n * ```\n *\n * @example\n * {@link JSHandle} instances can be passed as arguments to the `pageFunction`:\n *\n * ```ts\n * const aHandle = await page.evaluateHandle(() => document.body);\n * const resultHandle = await page.evaluateHandle(\n * body => body.innerHTML,\n * aHandle,\n * );\n * console.log(await resultHandle.jsonValue());\n * await resultHandle.dispose();\n * ```\n *\n * Most of the time this function returns a {@link JSHandle},\n * but if `pageFunction` returns a reference to an element,\n * you instead get an {@link ElementHandle} back:\n *\n * @example\n *\n * ```ts\n * const button = await page.evaluateHandle(() =>\n * document.querySelector('button'),\n * );\n * // can call `click` because `button` is an `ElementHandle`\n * await button.click();\n * ```\n *\n * The TypeScript definitions assume that `evaluateHandle` returns\n * a `JSHandle`, but if you know it's going to return an\n * `ElementHandle`, pass it as the generic argument:\n *\n * ```ts\n * const button = await page.evaluateHandle<ElementHandle>(...);\n * ```\n *\n * @param pageFunction - a function that is run within the page\n * @param args - arguments to be passed to the pageFunction\n */\n async evaluateHandle<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n pageFunction = withSourcePuppeteerURLIfNone(\n this.evaluateHandle.name,\n pageFunction,\n );\n return await this.mainFrame().evaluateHandle(pageFunction, ...args);\n }\n\n /**\n * This method iterates the JavaScript heap and finds all objects with the\n * given prototype.\n *\n * @example\n *\n * ```ts\n * // Create a Map object\n * await page.evaluate(() => (window.map = new Map()));\n * // Get a handle to the Map object prototype\n * const mapPrototype = await page.evaluateHandle(() => Map.prototype);\n * // Query all map instances into an array\n * const mapInstances = await page.queryObjects(mapPrototype);\n * // Count amount of map objects in heap\n * const count = await page.evaluate(maps => maps.length, mapInstances);\n * await mapInstances.dispose();\n * await mapPrototype.dispose();\n * ```\n *\n * @param prototypeHandle - a handle to the object prototype.\n * @returns Promise which resolves to a handle to an array of objects with\n * this prototype.\n */\n abstract queryObjects<Prototype>(\n prototypeHandle: JSHandle<Prototype>,\n ): Promise<JSHandle<Prototype[]>>;\n\n /**\n * This method finds the first element within the page that matches the selector\n * and passes the result as the first argument to the `pageFunction`.\n *\n * @remarks\n *\n * If no element is found matching `selector`, the method will throw an error.\n *\n * If `pageFunction` returns a promise `$eval` will wait for the promise to\n * resolve and then return its value.\n *\n * @example\n *\n * ```ts\n * const searchValue = await page.$eval('#search', el => el.value);\n * const preloadHref = await page.$eval('link[rel=preload]', el => el.href);\n * const html = await page.$eval('.main-container', el => el.outerHTML);\n * ```\n *\n * If you are using TypeScript, you may have to provide an explicit type to the\n * first argument of the `pageFunction`.\n * By default it is typed as `Element`, but you may need to provide a more\n * specific sub-type:\n *\n * @example\n *\n * ```ts\n * // if you don't provide HTMLInputElement here, TS will error\n * // as `value` is not on `Element`\n * const searchValue = await page.$eval(\n * '#search',\n * (el: HTMLInputElement) => el.value,\n * );\n * ```\n *\n * The compiler should be able to infer the return type\n * from the `pageFunction` you provide. If it is unable to, you can use the generic\n * type to tell the compiler what return type you expect from `$eval`:\n *\n * @example\n *\n * ```ts\n * // The compiler can infer the return type in this case, but if it can't\n * // or if you want to be more explicit, provide it as the generic type.\n * const searchValue = await page.$eval<string>(\n * '#search',\n * (el: HTMLInputElement) => el.value,\n * );\n * ```\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @param pageFunction - the function to be evaluated in the page context.\n * Will be passed the result of the element matching the selector as its\n * first argument.\n * @param args - any additional arguments to pass through to `pageFunction`.\n *\n * @returns The result of calling `pageFunction`. If it returns an element it\n * is wrapped in an {@link ElementHandle}, else the raw value itself is\n * returned.\n */\n async $eval<\n Selector extends string,\n Params extends unknown[],\n Func extends EvaluateFuncWith<NodeFor<Selector>, Params> = EvaluateFuncWith<\n NodeFor<Selector>,\n Params\n >,\n >(\n selector: Selector,\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(this.$eval.name, pageFunction);\n return await this.mainFrame().$eval(selector, pageFunction, ...args);\n }\n\n /**\n * This method returns all elements matching the selector and passes the\n * resulting array as the first argument to the `pageFunction`.\n *\n * @remarks\n * If `pageFunction` returns a promise `$$eval` will wait for the promise to\n * resolve and then return its value.\n *\n * @example\n *\n * ```ts\n * // get the amount of divs on the page\n * const divCount = await page.$$eval('div', divs => divs.length);\n *\n * // get the text content of all the `.options` elements:\n * const options = await page.$$eval('div > span.options', options => {\n * return options.map(option => option.textContent);\n * });\n * ```\n *\n * If you are using TypeScript, you may have to provide an explicit type to the\n * first argument of the `pageFunction`.\n * By default it is typed as `Element[]`, but you may need to provide a more\n * specific sub-type:\n *\n * @example\n *\n * ```ts\n * await page.$$eval('input', elements => {\n * return elements.map(e => e.value);\n * });\n * ```\n *\n * The compiler should be able to infer the return type\n * from the `pageFunction` you provide. If it is unable to, you can use the generic\n * type to tell the compiler what return type you expect from `$$eval`:\n *\n * @example\n *\n * ```ts\n * const allInputValues = await page.$$eval('input', elements =>\n * elements.map(e => e.textContent),\n * );\n * ```\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @param pageFunction - the function to be evaluated in the page context.\n * Will be passed an array of matching elements as its first argument.\n * @param args - any additional arguments to pass through to `pageFunction`.\n *\n * @returns The result of calling `pageFunction`. If it returns an element it\n * is wrapped in an {@link ElementHandle}, else the raw value itself is\n * returned.\n */\n async $$eval<\n Selector extends string,\n Params extends unknown[],\n Func extends EvaluateFuncWith<Array<NodeFor<Selector>>, Params> =\n EvaluateFuncWith<Array<NodeFor<Selector>>, Params>,\n >(\n selector: Selector,\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(this.$$eval.name, pageFunction);\n return await this.mainFrame().$$eval(selector, pageFunction, ...args);\n }\n\n /**\n * If no URLs are specified, this method returns cookies for the\n * current page URL. If URLs are specified, only cookies for those\n * URLs are returned.\n *\n * @deprecated Page-level cookie API is deprecated. Use\n * {@link Browser.cookies} or {@link BrowserContext.cookies} instead.\n */\n abstract cookies(...urls: string[]): Promise<Cookie[]>;\n\n /**\n * @deprecated Page-level cookie API is deprecated. Use\n * {@link Browser.deleteCookie}, {@link BrowserContext.deleteCookie},\n * {@link Browser.deleteMatchingCookies} or {@link BrowserContext.deleteMatchingCookies}\n * instead.\n */\n abstract deleteCookie(...cookies: DeleteCookiesRequest[]): Promise<void>;\n\n /**\n * @example\n *\n *```ts\n * await page.setCookie(cookieObject1, cookieObject2);\n *```\n *\n * @deprecated Page-level cookie API is deprecated. Use\n * {@link Browser.setCookie} or {@link BrowserContext.setCookie}\n * instead.\n */\n abstract setCookie(...cookies: CookieParam[]): Promise<void>;\n\n /**\n * Adds a `<script>` tag into the page with the desired URL or content.\n *\n * @remarks\n * Shortcut for\n * {@link Frame.addScriptTag | page.mainFrame().addScriptTag(options)}.\n *\n * @param options - Options for the script.\n * @returns An {@link ElementHandle | element handle} to the injected\n * `<script>` element.\n */\n async addScriptTag(\n options: FrameAddScriptTagOptions,\n ): Promise<ElementHandle<HTMLScriptElement>> {\n return await this.mainFrame().addScriptTag(options);\n }\n\n /**\n * Adds a `<link rel=\"stylesheet\">` tag into the page with the desired URL or\n * a `<style type=\"text/css\">` tag with the content.\n *\n * Shortcut for\n * {@link Frame.(addStyleTag:2) | page.mainFrame().addStyleTag(options)}.\n *\n * @returns An {@link ElementHandle | element handle} to the injected `<link>`\n * or `<style>` element.\n */\n async addStyleTag(\n options: Omit<FrameAddStyleTagOptions, 'url'>,\n ): Promise<ElementHandle<HTMLStyleElement>>;\n async addStyleTag(\n options: FrameAddStyleTagOptions,\n ): Promise<ElementHandle<HTMLLinkElement>>;\n async addStyleTag(\n options: FrameAddStyleTagOptions,\n ): Promise<ElementHandle<HTMLStyleElement | HTMLLinkElement>> {\n return await this.mainFrame().addStyleTag(options);\n }\n\n /**\n * The method adds a function called `name` on the page's `window` object.\n * When called, the function executes `puppeteerFunction` in node.js and\n * returns a `Promise` which resolves to the return value of\n * `puppeteerFunction`.\n *\n * If the puppeteerFunction returns a `Promise`, it will be awaited.\n *\n * :::note\n *\n * Functions installed via `page.exposeFunction` survive navigations.\n *\n * :::\n *\n * @example\n * An example of adding an `md5` function into the page:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n * import crypto from 'crypto';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * page.on('console', msg => console.log(msg.text()));\n * await page.exposeFunction('md5', text =>\n * crypto.createHash('md5').update(text).digest('hex'),\n * );\n * await page.evaluate(async () => {\n * // use window.md5 to compute hashes\n * const myString = 'PUPPETEER';\n * const myHash = await window.md5(myString);\n * console.log(`md5 of ${myString} is ${myHash}`);\n * });\n * await browser.close();\n * ```\n *\n * @example\n * An example of adding a `window.readfile` function into the page:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n * import fs from 'node:fs';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * page.on('console', msg => console.log(msg.text()));\n * await page.exposeFunction('readfile', async filePath => {\n * return new Promise((resolve, reject) => {\n * fs.readFile(filePath, 'utf8', (err, text) => {\n * if (err) reject(err);\n * else resolve(text);\n * });\n * });\n * });\n * await page.evaluate(async () => {\n * // use window.readfile to read contents of a file\n * const content = await window.readfile('/etc/hosts');\n * console.log(content);\n * });\n * await browser.close();\n * ```\n *\n * @param name - Name of the function on the window object\n * @param pptrFunction - Callback function which will be called in Puppeteer's\n * context.\n */\n abstract exposeFunction(\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n pptrFunction: Function | {default: Function},\n ): Promise<void>;\n\n /**\n * The method removes a previously added function via ${@link Page.exposeFunction}\n * called `name` from the page's `window` object.\n */\n abstract removeExposedFunction(name: string): Promise<void>;\n\n /**\n * Provide credentials for `HTTP authentication`.\n *\n * :::note\n *\n * Request interception will be turned on behind the scenes to\n * implement authentication. This might affect performance.\n *\n * :::\n *\n * @remarks\n * To disable authentication, pass `null`.\n */\n abstract authenticate(credentials: Credentials | null): Promise<void>;\n\n /**\n * The extra HTTP headers will be sent with every request the page initiates.\n *\n * :::tip\n *\n * All HTTP header names are lowercased. (HTTP headers are\n * case-insensitive, so this shouldn’t impact your server code.)\n *\n * :::\n *\n * :::note\n *\n * page.setExtraHTTPHeaders does not guarantee the order of headers in\n * the outgoing requests.\n *\n * :::\n *\n * @param headers - An object containing additional HTTP headers to be sent\n * with every request. All header values must be strings.\n */\n abstract setExtraHTTPHeaders(headers: Record<string, string>): Promise<void>;\n\n /**\n * @param userAgent - Specific user agent to use in this page\n * @param userAgentData - Specific user agent client hint data to use in this\n * page\n * @returns Promise which resolves when the user agent is set.\n * @deprecated Use {@link Page.(setUserAgent:2) } instead.\n */\n abstract setUserAgent(\n userAgent: string,\n userAgentMetadata?: Protocol.Emulation.UserAgentMetadata,\n ): Promise<void>;\n\n /**\n * @param options - Object containing user agent and optional user agent metadata\n * @returns Promise which resolves when the user agent is set.\n */\n abstract setUserAgent(options: {\n userAgent?: string;\n userAgentMetadata?: Protocol.Emulation.UserAgentMetadata;\n platform?: string;\n }): Promise<void>;\n\n /**\n * Object containing metrics as key/value pairs.\n *\n * @returns\n *\n * - `Timestamp` : The timestamp when the metrics sample was taken, in\n * monotonic time (seconds).\n *\n * - `Documents` : Number of documents in the page.\n *\n * - `Frames` : Number of frames in the page.\n *\n * - `JSEventListeners` : Number of events in the page.\n *\n * - `Nodes` : Number of DOM nodes in the page.\n *\n * - `LayoutCount` : Total number of full or partial page layout.\n *\n * - `RecalcStyleCount` : Total number of page style recalculations.\n *\n * - `LayoutDuration` : Combined durations of all page layouts, in seconds.\n *\n * - `RecalcStyleDuration` : Combined duration of all page style\n * recalculations, in seconds.\n *\n * - `ScriptDuration` : Combined duration of JavaScript execution, in\n * seconds.\n *\n * - `TaskDuration` : Combined duration of all tasks performed by the\n * browser, in seconds.\n *\n * - `JSHeapUsedSize` : Used JavaScript heap size, in bytes.\n *\n * - `JSHeapTotalSize` : Total JavaScript heap size, in bytes.\n *\n * @remarks\n * All timestamps are in monotonic time: monotonically increasing time\n * in seconds since an arbitrary point in the past.\n */\n abstract metrics(): Promise<Metrics>;\n\n /**\n * Captures a snapshot of the JavaScript heap and writes it to a file.\n */\n abstract captureHeapSnapshot(options: HeapSnapshotOptions): Promise<void>;\n\n /**\n * The page's URL.\n *\n * @remarks\n *\n * Shortcut for {@link Frame.url | page.mainFrame().url()}.\n */\n url(): string {\n return this.mainFrame().url();\n }\n\n /**\n * The full HTML contents of the page, including the DOCTYPE.\n */\n async content(): Promise<string> {\n return await this.mainFrame().content();\n }\n\n /**\n * Set the content of the page.\n *\n * @param html - HTML markup to assign to the page.\n * @param options - Parameters that has some properties.\n */\n async setContent(\n html: string,\n options?: SetContentWaitForOptions,\n ): Promise<void> {\n await this.mainFrame().setContent(html, options);\n }\n\n /**\n * {@inheritDoc Frame.goto}\n */\n async goto(url: string, options?: GoToOptions): Promise<HTTPResponse | null> {\n return await this.mainFrame().goto(url, options);\n }\n\n /**\n * Reloads the page.\n *\n * @param options - Options to configure waiting behavior.\n * @returns A promise which resolves to the main resource response. In case of\n * multiple redirects, the navigation will resolve with the response of the\n * last redirect.\n */\n abstract reload(options?: ReloadOptions): Promise<HTTPResponse | null>;\n\n /**\n * Waits for the page to navigate to a new URL or to reload. It is useful when\n * you run code that will indirectly cause the page to navigate.\n *\n * @example\n *\n * ```ts\n * const [response] = await Promise.all([\n * page.waitForNavigation(), // The promise resolves after navigation has finished\n * page.click('a.my-link'), // Clicking the link will indirectly cause a navigation\n * ]);\n * ```\n *\n * @remarks\n *\n * Usage of the\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/History_API | History API}\n * to change the URL is considered a navigation.\n *\n * @param options - Navigation parameters which might have the following\n * properties:\n * @returns A `Promise` which resolves to the main resource response.\n *\n * - In case of multiple redirects, the navigation will resolve with the\n * response of the last redirect.\n * - In case of navigation to a different anchor or navigation due to History\n * API usage, the navigation will resolve with `null`.\n */\n async waitForNavigation(\n options: WaitForOptions = {},\n ): Promise<HTTPResponse | null> {\n return await this.mainFrame().waitForNavigation(options);\n }\n\n /**\n * @param urlOrPredicate - A URL or predicate to wait for\n * @param options - Optional waiting parameters\n * @returns Promise which resolves to the matched request\n * @example\n *\n * ```ts\n * const firstRequest = await page.waitForRequest(\n * 'https://example.com/resource',\n * );\n * const finalRequest = await page.waitForRequest(\n * request => request.url() === 'https://example.com',\n * );\n * return finalRequest.response()?.ok();\n * ```\n *\n * @remarks\n * Optional Waiting Parameters have:\n *\n * - `timeout`: Maximum wait time in milliseconds, defaults to `30` seconds, pass\n * `0` to disable the timeout. The default value can be changed by using the\n * {@link Page.setDefaultTimeout} method.\n *\n * - `signal`: A signal object that allows you to cancel a waitForRequest call.\n */\n waitForRequest(\n urlOrPredicate: string | AwaitablePredicate<HTTPRequest>,\n options: WaitTimeoutOptions = {},\n ): Promise<HTTPRequest> {\n const {timeout: ms = this._timeoutSettings.timeout(), signal} = options;\n if (typeof urlOrPredicate === 'string') {\n const url = urlOrPredicate;\n urlOrPredicate = (request: HTTPRequest) => {\n return request.url() === url;\n };\n }\n const observable$ = fromEmitterEvent(this, PageEvent.Request).pipe(\n filterAsync(urlOrPredicate),\n raceWith(\n timeout(ms),\n fromAbortSignal(signal),\n fromEmitterEvent(this, PageEvent.Close).pipe(\n map(() => {\n throw new TargetCloseError('Page closed!');\n }),\n ),\n ),\n );\n return firstValueFrom(observable$);\n }\n\n /**\n * @param urlOrPredicate - A URL or predicate to wait for.\n * @param options - Optional waiting parameters\n * @returns Promise which resolves to the matched response.\n * @example\n *\n * ```ts\n * const firstResponse = await page.waitForResponse(\n * 'https://example.com/resource',\n * );\n * const finalResponse = await page.waitForResponse(\n * response =>\n * response.url() === 'https://example.com' && response.status() === 200,\n * );\n * const finalResponse = await page.waitForResponse(async response => {\n * return (await response.text()).includes('<html>');\n * });\n * return finalResponse.ok();\n * ```\n *\n * @remarks\n * Optional Parameter have:\n *\n * - `timeout`: Maximum wait time in milliseconds, defaults to `30` seconds,\n * pass `0` to disable the timeout. The default value can be changed by using\n * the {@link Page.setDefaultTimeout} method.\n *\n * - `signal`: A signal object that allows you to cancel a waitForResponse call.\n */\n waitForResponse(\n urlOrPredicate: string | AwaitablePredicate<HTTPResponse>,\n options: WaitTimeoutOptions = {},\n ): Promise<HTTPResponse> {\n const {timeout: ms = this._timeoutSettings.timeout(), signal} = options;\n if (typeof urlOrPredicate === 'string') {\n const url = urlOrPredicate;\n urlOrPredicate = (response: HTTPResponse) => {\n return response.url() === url;\n };\n }\n const observable$ = fromEmitterEvent(this, PageEvent.Response).pipe(\n filterAsync(urlOrPredicate),\n raceWith(\n timeout(ms),\n fromAbortSignal(signal),\n fromEmitterEvent(this, PageEvent.Close).pipe(\n map(() => {\n throw new TargetCloseError('Page closed!');\n }),\n ),\n ),\n );\n return firstValueFrom(observable$);\n }\n\n /**\n * Waits for the network to be idle.\n *\n * @remarks The function will always wait at least the\n * set {@link WaitForNetworkIdleOptions.idleTime | IdleTime}.\n *\n * @param options - Options to configure waiting behavior.\n * @returns A promise which resolves once the network is idle.\n */\n waitForNetworkIdle(options: WaitForNetworkIdleOptions = {}): Promise<void> {\n return firstValueFrom(this.waitForNetworkIdle$(options));\n }\n\n /**\n * @internal\n */\n waitForNetworkIdle$(\n options: WaitForNetworkIdleOptions = {},\n ): Observable<void> {\n const {\n timeout: ms = this._timeoutSettings.timeout(),\n idleTime = NETWORK_IDLE_TIME,\n concurrency = 0,\n signal,\n } = options;\n\n return this.#inflight$.pipe(\n map(inflight => {\n return inflight > concurrency;\n }),\n distinctUntilChanged(),\n switchMap(isInflightOverConcurrency => {\n if (isInflightOverConcurrency) {\n return EMPTY;\n }\n return timer(idleTime);\n }),\n map(() => {}),\n raceWith(\n timeout(ms),\n fromAbortSignal(signal),\n fromEmitterEvent(this, PageEvent.Close).pipe(\n map(() => {\n throw new TargetCloseError('Page closed!');\n }),\n ),\n ),\n );\n }\n\n /**\n * Waits for a frame matching the given conditions to appear.\n *\n * @example\n *\n * ```ts\n * const frame = await page.waitForFrame(async frame => {\n * const frameElement = await frame.frameElement();\n * if (!frameElement) {\n * return false;\n * }\n * const name = await frameElement.evaluate(el => el.getAttribute('name'));\n * return name === 'test';\n * });\n * ```\n */\n async waitForFrame(\n urlOrPredicate: string | ((frame: Frame) => Awaitable<boolean>),\n options: WaitTimeoutOptions = {},\n ): Promise<Frame> {\n const {timeout: ms = this.getDefaultTimeout(), signal} = options;\n\n const predicate = isString(urlOrPredicate)\n ? (frame: Frame) => {\n return urlOrPredicate === frame.url();\n }\n : urlOrPredicate;\n\n return await firstValueFrom(\n merge(\n fromEmitterEvent(this, PageEvent.FrameAttached),\n fromEmitterEvent(this, PageEvent.FrameNavigated),\n from(this.frames()),\n ).pipe(\n filterAsync(predicate),\n first(),\n raceWith(\n timeout(ms),\n fromAbortSignal(signal),\n fromEmitterEvent(this, PageEvent.Close).pipe(\n map(() => {\n throw new TargetCloseError('Page closed.');\n }),\n ),\n ),\n ),\n );\n }\n\n /**\n * This method navigate to the previous page in history.\n * @param options - Navigation parameters\n * @returns Promise which resolves to the main resource response. In case of\n * multiple redirects, the navigation will resolve with the response of the\n * last redirect.\n * If the navigation is same page, returns null.\n * If no history entry is found throws.\n */\n abstract goBack(options?: WaitForOptions): Promise<HTTPResponse | null>;\n\n /**\n * This method navigate to the next page in history.\n * @param options - Navigation Parameter\n * @returns Promise which resolves to the main resource response. In case of\n * multiple redirects, the navigation will resolve with the response of the\n * last redirect.\n * If the navigation is same page, returns null.\n * If no history entry is found throws.\n */\n abstract goForward(options?: WaitForOptions): Promise<HTTPResponse | null>;\n\n /**\n * Brings page to front (activates tab).\n */\n abstract bringToFront(): Promise<void>;\n\n /**\n * Emulates a given device's metrics and user agent.\n *\n * To aid emulation, Puppeteer provides a list of known devices that can be\n * via {@link KnownDevices}.\n *\n * @remarks\n * This method is a shortcut for calling two methods:\n * {@link Page.(setUserAgent:2) } and {@link Page.setViewport}.\n *\n * This method will resize the page. A lot of websites don't expect phones to\n * change size, so you should emulate before navigating to the page.\n *\n * @example\n *\n * ```ts\n * import {KnownDevices} from 'puppeteer';\n * const iPhone = KnownDevices['iPhone 17 Pro'];\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.emulate(iPhone);\n * await page.goto('https://www.google.com');\n * // other actions...\n * await browser.close();\n * ```\n */\n async emulate(device: Device): Promise<void> {\n await Promise.all([\n this.setUserAgent({userAgent: device.userAgent}),\n this.setViewport(device.viewport),\n ]);\n }\n\n /**\n * @param enabled - Whether or not to enable JavaScript on the page.\n * @remarks\n * NOTE: changing this value won't affect scripts that have already been run.\n * It will take full effect on the next navigation.\n */\n abstract setJavaScriptEnabled(enabled: boolean): Promise<void>;\n\n /**\n * Toggles bypassing page's Content-Security-Policy.\n * @param enabled - sets bypassing of page's Content-Security-Policy.\n * @remarks\n * NOTE: CSP bypassing happens at the moment of CSP initialization rather than\n * evaluation. Usually, this means that `page.setBypassCSP` should be called\n * before navigating to the domain.\n */\n abstract setBypassCSP(enabled: boolean): Promise<void>;\n\n /**\n * @param type - Changes the CSS media type of the page. The only allowed\n * values are `screen`, `print` and `null`. Passing `null` disables CSS media\n * emulation.\n * @example\n *\n * ```ts\n * await page.evaluate(() => matchMedia('screen').matches);\n * // → true\n * await page.evaluate(() => matchMedia('print').matches);\n * // → false\n *\n * await page.emulateMediaType('print');\n * await page.evaluate(() => matchMedia('screen').matches);\n * // → false\n * await page.evaluate(() => matchMedia('print').matches);\n * // → true\n *\n * await page.emulateMediaType(null);\n * await page.evaluate(() => matchMedia('screen').matches);\n * // → true\n * await page.evaluate(() => matchMedia('print').matches);\n * // → false\n * ```\n */\n abstract emulateMediaType(type?: string): Promise<void>;\n\n /**\n * Enables CPU throttling to emulate slow CPUs.\n * @param factor - slowdown factor (1 is no throttle, 2 is 2x slowdown, etc).\n */\n abstract emulateCPUThrottling(factor: number | null): Promise<void>;\n\n /**\n * @param features - `<?Array<Object>>` Given an array of media feature\n * objects, emulates CSS media features on the page. Each media feature object\n * must have the following properties:\n * @example\n *\n * ```ts\n * await page.emulateMediaFeatures([\n * {name: 'prefers-color-scheme', value: 'dark'},\n * ]);\n * await page.evaluate(\n * () => matchMedia('(prefers-color-scheme: dark)').matches,\n * );\n * // → true\n * await page.evaluate(\n * () => matchMedia('(prefers-color-scheme: light)').matches,\n * );\n * // → false\n *\n * await page.emulateMediaFeatures([\n * {name: 'prefers-reduced-motion', value: 'reduce'},\n * ]);\n * await page.evaluate(\n * () => matchMedia('(prefers-reduced-motion: reduce)').matches,\n * );\n * // → true\n * await page.evaluate(\n * () => matchMedia('(prefers-reduced-motion: no-preference)').matches,\n * );\n * // → false\n *\n * await page.emulateMediaFeatures([\n * {name: 'prefers-color-scheme', value: 'dark'},\n * {name: 'prefers-reduced-motion', value: 'reduce'},\n * ]);\n * await page.evaluate(\n * () => matchMedia('(prefers-color-scheme: dark)').matches,\n * );\n * // → true\n * await page.evaluate(\n * () => matchMedia('(prefers-color-scheme: light)').matches,\n * );\n * // → false\n * await page.evaluate(\n * () => matchMedia('(prefers-reduced-motion: reduce)').matches,\n * );\n * // → true\n * await page.evaluate(\n * () => matchMedia('(prefers-reduced-motion: no-preference)').matches,\n * );\n * // → false\n *\n * await page.emulateMediaFeatures([{name: 'color-gamut', value: 'p3'}]);\n * await page.evaluate(() => matchMedia('(color-gamut: srgb)').matches);\n * // → true\n * await page.evaluate(() => matchMedia('(color-gamut: p3)').matches);\n * // → true\n * await page.evaluate(() => matchMedia('(color-gamut: rec2020)').matches);\n * // → false\n * ```\n */\n abstract emulateMediaFeatures(features?: MediaFeature[]): Promise<void>;\n\n /**\n * @param locale - Locale to emulate on the page. Passing no locale disables\n * locale emulation.\n */\n abstract emulateLocale(locale?: string): Promise<void>;\n\n /**\n * @param timezoneId - Changes the timezone of the page. See\n * {@link https://source.chromium.org/chromium/chromium/deps/icu.git/+/faee8bc70570192d82d2978a71e2a615788597d1:source/data/misc/metaZones.txt | ICU’s metaZones.txt}\n * for a list of supported timezone IDs. Passing\n * `null` disables timezone emulation.\n */\n abstract emulateTimezone(timezoneId?: string): Promise<void>;\n\n /**\n * Emulates the idle state.\n * If no arguments set, clears idle state emulation.\n *\n * @example\n *\n * ```ts\n * // set idle emulation\n * await page.emulateIdleState({isUserActive: true, isScreenUnlocked: false});\n *\n * // do some checks here\n * ...\n *\n * // clear idle emulation\n * await page.emulateIdleState();\n * ```\n *\n * @param overrides - Mock idle state. If not set, clears idle overrides\n */\n abstract emulateIdleState(overrides?: {\n isUserActive: boolean;\n isScreenUnlocked: boolean;\n }): Promise<void>;\n\n /**\n * Simulates the given vision deficiency on the page.\n *\n * @example\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.goto('https://v8.dev/blog/10-years');\n *\n * await page.emulateVisionDeficiency('achromatopsia');\n * await page.screenshot({path: 'achromatopsia.png'});\n *\n * await page.emulateVisionDeficiency('deuteranopia');\n * await page.screenshot({path: 'deuteranopia.png'});\n *\n * await page.emulateVisionDeficiency('blurredVision');\n * await page.screenshot({path: 'blurred-vision.png'});\n *\n * await page.emulateVisionDeficiency('reducedContrast');\n * await page.screenshot({path: 'reduced-contrast.png'});\n *\n * await browser.close();\n * ```\n *\n * @param type - the type of deficiency to simulate, or `'none'` to reset.\n */\n abstract emulateVisionDeficiency(\n type?: Protocol.Emulation.SetEmulatedVisionDeficiencyRequest['type'],\n ): Promise<void>;\n\n /**\n * `page.setViewport` will resize the page. A lot of websites don't expect\n * phones to change size, so you should set the viewport before navigating to\n * the page.\n *\n * In the case of multiple pages in a single browser, each page can have its\n * own viewport size. Setting the viewport to `null` resets the viewport to\n * its default value.\n *\n * @example\n *\n * ```ts\n * const page = await browser.newPage();\n * await page.setViewport({\n * width: 640,\n * height: 480,\n * deviceScaleFactor: 1,\n * });\n * await page.goto('https://example.com');\n * ```\n *\n * @param viewport -\n * @remarks\n * NOTE: in certain cases, setting viewport will reload the page in order to\n * set the isMobile or hasTouch properties.\n */\n abstract setViewport(viewport: Viewport | null): Promise<void>;\n\n /**\n * Returns the current page viewport settings without checking the actual page\n * viewport.\n *\n * This is either the viewport set with the previous {@link Page.setViewport}\n * call or the default viewport set via\n * {@link ConnectOptions.defaultViewport |\n * ConnectOptions.defaultViewport}.\n */\n abstract viewport(): Viewport | null;\n\n /**\n * Evaluates a function in the page's context and returns the result.\n *\n * If the function passed to `page.evaluate` returns a Promise, the\n * function will wait for the promise to resolve and return its value.\n *\n * @example\n *\n * ```ts\n * const result = await frame.evaluate(() => {\n * return Promise.resolve(8 * 7);\n * });\n * console.log(result); // prints \"56\"\n * ```\n *\n * You can pass a string instead of a function (although functions are\n * recommended as they are easier to debug and use with TypeScript):\n *\n * @example\n *\n * ```ts\n * const aHandle = await page.evaluate('1 + 2');\n * ```\n *\n * To get the best TypeScript experience, you should pass in as the\n * generic the type of `pageFunction`:\n *\n * ```ts\n * const aHandle = await page.evaluate(() => 2);\n * ```\n *\n * @example\n *\n * {@link ElementHandle} instances (including {@link JSHandle}s) can be passed\n * as arguments to the `pageFunction`:\n *\n * ```ts\n * const bodyHandle = await page.$('body');\n * const html = await page.evaluate(body => body.innerHTML, bodyHandle);\n * await bodyHandle.dispose();\n * ```\n *\n * @param pageFunction - a function that is run within the page\n * @param args - arguments to be passed to the pageFunction\n *\n * @returns the return value of `pageFunction`.\n */\n async evaluate<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(\n this.evaluate.name,\n pageFunction,\n );\n return await this.mainFrame().evaluate(pageFunction, ...args);\n }\n\n /**\n * Adds a function which would be invoked in one of the following scenarios:\n *\n * - whenever the page is navigated\n *\n * - whenever the child frame is attached or navigated. In this case, the\n * function is invoked in the context of the newly attached frame.\n *\n * The function is invoked after the document was created but before any of\n * its scripts were run. This is useful to amend the JavaScript environment,\n * e.g. to seed `Math.random`.\n * @param pageFunction - Function to be evaluated in browser context\n * @param args - Arguments to pass to `pageFunction`\n * @example\n * An example of overriding the navigator.languages property before the page loads:\n *\n * ```ts\n * // preload.js\n *\n * // overwrite the `languages` property to use a custom getter\n * Object.defineProperty(navigator, 'languages', {\n * get: function () {\n * return ['en-US', 'en', 'bn'];\n * },\n * });\n *\n * // In your puppeteer script, assuming the preload.js file is\n * // in same folder of our script.\n * const preloadFile = fs.readFileSync('./preload.js', 'utf8');\n * await page.evaluateOnNewDocument(preloadFile);\n * ```\n */\n abstract evaluateOnNewDocument<\n Params extends unknown[],\n Func extends (...args: Params) => unknown = (...args: Params) => unknown,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<NewDocumentScriptEvaluation>;\n\n /**\n * Removes script that injected into page by Page.evaluateOnNewDocument.\n *\n * @param identifier - script identifier\n */\n abstract removeScriptToEvaluateOnNewDocument(\n identifier: string,\n ): Promise<void>;\n\n /**\n * Toggles ignoring cache for each request based on the enabled state. By\n * default, caching is enabled.\n * @param enabled - sets the `enabled` state of cache\n * @defaultValue `true`\n */\n abstract setCacheEnabled(enabled?: boolean): Promise<void>;\n\n /**\n * @internal\n */\n async _maybeWriteTypedArrayToFile(\n path: string | undefined,\n typedArray: Uint8Array,\n ): Promise<void> {\n if (!path) {\n return;\n }\n\n await environment.value.writeFile(path, typedArray);\n }\n\n /**\n * Captures a screencast of this {@link Page | page}. Works in Chrome 153+.\n *\n * @example\n * Recording a {@link Page | page}:\n *\n * ```\n * import puppeteer from 'puppeteer';\n *\n * // Launch a browser\n * const browser = await puppeteer.launch();\n *\n * // Create a new page\n * const page = await browser.newPage();\n *\n * // Go to your site.\n * await page.goto(\"https://www.example.com\");\n *\n * // Start recording.\n * const recorder = await page.screencast({path: 'recording.webm'});\n *\n * // Do something.\n *\n * // Stop recording.\n * await recorder.stop();\n *\n * browser.close();\n * ```\n *\n * @param options - Configures screencast behavior.\n *\n * @deprecated Use {@link Page.record} instead.\n *\n * @remarks\n *\n * By default, all recordings will be {@link https://www.webmproject.org/ | WebM} format using\n * the {@link https://www.webmproject.org/vp9/ | VP9} video codec, with a frame rate of 30 FPS.\n *\n * You must have {@link https://ffmpeg.org/ | ffmpeg} installed on your system.\n */\n async screencast(\n options: Readonly<ScreencastOptions> = {},\n ): Promise<ScreenRecorder> {\n const ScreenRecorder = environment.value.ScreenRecorder;\n const [width, height, devicePixelRatio] =\n await this.#getNativePixelDimensions();\n let crop: BoundingBox | undefined;\n if (options.crop) {\n const {\n x,\n y,\n width: cropWidth,\n height: cropHeight,\n } = roundRectangle(normalizeRectangle(options.crop));\n if (x < 0 || y < 0) {\n throw new Error(\n `\\`crop.x\\` and \\`crop.y\\` must be greater than or equal to 0.`,\n );\n }\n if (cropWidth <= 0 || cropHeight <= 0) {\n throw new Error(\n `\\`crop.height\\` and \\`crop.width\\` must be greater than or equal to 0.`,\n );\n }\n\n const viewportWidth = width / devicePixelRatio;\n const viewportHeight = height / devicePixelRatio;\n if (x + cropWidth > viewportWidth) {\n throw new Error(\n `\\`crop.width\\` cannot be larger than the viewport width (${viewportWidth}).`,\n );\n }\n if (y + cropHeight > viewportHeight) {\n throw new Error(\n `\\`crop.height\\` cannot be larger than the viewport height (${viewportHeight}).`,\n );\n }\n\n crop = {\n x: x * devicePixelRatio,\n y: y * devicePixelRatio,\n width: cropWidth * devicePixelRatio,\n height: cropHeight * devicePixelRatio,\n };\n }\n if (options.speed !== undefined && options.speed <= 0) {\n throw new Error(`\\`speed\\` must be greater than 0.`);\n }\n if (options.scale !== undefined && options.scale <= 0) {\n throw new Error(`\\`scale\\` must be greater than 0.`);\n }\n\n if (options.path && environment.value.path) {\n await environment.value.mkdir(\n environment.value.path.dirname(options.path),\n {recursive: options.overwrite ?? true},\n );\n }\n\n const stream = options.path\n ? environment.value.createWriteStream(options.path, {\n encoding: 'binary',\n overwrite: options.overwrite,\n })\n : undefined;\n const recorder = new ScreenRecorder(\n this,\n width,\n height,\n {\n ...options,\n crop,\n },\n this.logger,\n );\n try {\n await this._startScreencast();\n } catch (error) {\n void recorder.stop();\n throw error;\n }\n if (stream) {\n recorder.pipe(stream);\n }\n return recorder;\n }\n\n /**\n * @internal\n */\n protected abstract createScreenRecording(\n options: Readonly<RecordOptions>,\n ): ScreenRecording;\n\n /**\n * Records this {@link Page | page} using the Chrome DevTools Protocol\n * {@link https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-startScreenRecording | Page.startScreenRecording}\n * API.\n *\n * Outputs mp4 video stream.\n *\n * @example\n * Recording a {@link Page | page}:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * // Launch a browser\n * const browser = await puppeteer.launch();\n *\n * // Create a new page\n * const page = await browser.newPage();\n *\n * // Go to your site.\n * await page.goto('https://www.example.com');\n *\n * // Start recording.\n * const recorder = await page.record({path: 'recording.mp4'});\n *\n * // Do something.\n *\n * // Stop recording.\n * await recorder.stop();\n *\n * await browser.close();\n * ```\n *\n * @param options - Configures recording behavior.\n *\n * @experimental\n */\n async record(\n options: Readonly<RecordOptions> = {},\n ): Promise<ScreenRecording> {\n if (options.maxWidth !== undefined && options.maxWidth <= 0) {\n throw new Error('`maxWidth` must be greater than 0.');\n }\n if (options.maxHeight !== undefined && options.maxHeight <= 0) {\n throw new Error('`maxHeight` must be greater than 0.');\n }\n if (options.frameRate !== undefined && options.frameRate <= 0) {\n throw new Error('`frameRate` must be greater than 0.');\n }\n if (options.fps !== undefined && options.fps <= 0) {\n throw new Error('`fps` must be greater than 0.');\n }\n\n if (options.path && environment.value.path) {\n await environment.value.mkdir(\n environment.value.path.dirname(options.path),\n {recursive: options.overwrite ?? true},\n );\n }\n\n const stream = options.path\n ? environment.value.createWriteStream(options.path, {\n encoding: 'binary',\n overwrite: options.overwrite,\n })\n : undefined;\n\n const recording = this.createScreenRecording(options);\n\n try {\n await recording._start();\n } catch (error) {\n void recording.stop();\n throw error;\n }\n\n if (stream) {\n recording.pipe(stream);\n }\n\n return recording;\n }\n\n #screencastSessionCount = 0;\n #startScreencastPromise: Promise<void> | undefined;\n\n /**\n * @internal\n */\n async _startScreencast(): Promise<void> {\n ++this.#screencastSessionCount;\n if (!this.#startScreencastPromise) {\n const client = this.mainFrame().client;\n const firstFrame = new Promise<void>(resolve => {\n return client.once('Page.screencastFrame', () => {\n return resolve();\n });\n });\n this.#startScreencastPromise = client\n .send('Page.startScreencast', {format: 'png'})\n .then(() => {\n return firstFrame;\n });\n }\n await this.#startScreencastPromise;\n }\n\n /**\n * @internal\n */\n async _stopScreencast(): Promise<void> {\n --this.#screencastSessionCount;\n if (!this.#startScreencastPromise) {\n return;\n }\n this.#startScreencastPromise = undefined;\n if (this.#screencastSessionCount === 0) {\n await this.mainFrame().client.send('Page.stopScreencast');\n }\n }\n\n /**\n * Gets the native, non-emulated dimensions of the viewport.\n */\n async #getNativePixelDimensions(): Promise<\n readonly [width: number, height: number, devicePixelRatio: number]\n > {\n const viewport = this.viewport();\n using stack = new DisposableStack();\n if (viewport && viewport.deviceScaleFactor !== 0) {\n await this.setViewport({...viewport, deviceScaleFactor: 0});\n stack.defer(() => {\n void this.setViewport(viewport).catch(error => {\n this.logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n });\n }\n return await this.mainFrame()\n .isolatedRealm()\n .evaluate(() => {\n return [\n window.visualViewport!.width * window.devicePixelRatio,\n window.visualViewport!.height * window.devicePixelRatio,\n window.devicePixelRatio,\n ] as const;\n });\n }\n\n /**\n * Captures a screenshot of this {@link Page | page}.\n *\n * @param options - Configures screenshot behavior.\n *\n * @remarks\n *\n * While a screenshot is being taken in a {@link BrowserContext}, the\n * following methods will automatically wait for the screenshot to\n * finish to prevent interference with the screenshot process:\n * {@link BrowserContext.newPage}, {@link Browser.newPage},\n * {@link Page.close}.\n *\n * Calling {@link Page.bringToFront} will not wait for existing\n * screenshot operations.\n *\n */\n async screenshot(\n options: Readonly<ScreenshotOptions> & {encoding: 'base64'},\n ): Promise<string>;\n async screenshot(options?: Readonly<ScreenshotOptions>): Promise<Uint8Array>;\n @guarded(function () {\n return this.browser();\n })\n async screenshot(\n userOptions: Readonly<ScreenshotOptions> = {},\n ): Promise<Uint8Array | string> {\n using _guard = await this.browserContext().startScreenshot();\n\n const options = {\n ...userOptions,\n clip: userOptions.clip\n ? {\n ...userOptions.clip,\n }\n : undefined,\n };\n if (options.type === undefined && options.path !== undefined) {\n const filePath = options.path;\n // Note we cannot use Node.js here due to browser compatibility.\n const extension = filePath\n .slice(filePath.lastIndexOf('.') + 1)\n .toLowerCase();\n switch (extension) {\n case 'png':\n options.type = 'png';\n break;\n case 'jpeg':\n case 'jpg':\n options.type = 'jpeg';\n break;\n case 'webp':\n options.type = 'webp';\n break;\n }\n }\n if (options.quality !== undefined) {\n if (options.quality < 0 || options.quality > 100) {\n throw new Error(\n `Expected 'quality' (${options.quality}) to be between 0 and 100, inclusive.`,\n );\n }\n if (\n options.type === undefined ||\n !['jpeg', 'webp'].includes(options.type)\n ) {\n throw new Error(\n `${options.type ?? 'png'} screenshots do not support 'quality'.`,\n );\n }\n }\n if (options.clip) {\n if (options.clip.width <= 0) {\n throw new Error(\"'width' in 'clip' must be positive.\");\n }\n if (options.clip.height <= 0) {\n throw new Error(\"'height' in 'clip' must be positive.\");\n }\n }\n\n setDefaultScreenshotOptions(options);\n\n await using stack = new AsyncDisposableStack();\n if (options.clip) {\n if (options.fullPage) {\n throw new Error(\"'clip' and 'fullPage' are mutually exclusive\");\n }\n\n options.clip = roundRectangle(normalizeRectangle(options.clip));\n } else {\n if (options.fullPage) {\n // If `captureBeyondViewport` is `false`, then we set the viewport to\n // capture the full page. Note this may be affected by on-page CSS and\n // JavaScript.\n if (!options.captureBeyondViewport) {\n const scrollDimensions = await this.mainFrame()\n .isolatedRealm()\n .evaluate(() => {\n const element = document.documentElement;\n return {\n width: element.scrollWidth,\n height: element.scrollHeight,\n };\n });\n const viewport = this.viewport();\n await this.setViewport({\n ...viewport,\n ...scrollDimensions,\n });\n stack.defer(async () => {\n await this.setViewport(viewport).catch(error => {\n this.logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n });\n }\n } else {\n options.captureBeyondViewport = false;\n }\n }\n\n const data = await this._screenshot(options);\n if (options.encoding === 'base64') {\n return data;\n }\n\n const typedArray = stringToTypedArray(data, true);\n await this._maybeWriteTypedArrayToFile(options.path, typedArray);\n return typedArray;\n }\n\n /**\n * Emulates focus state of the page.\n *\n * @param enabled - Whether to emulate focus.\n */\n abstract emulateFocusedPage(enabled: boolean): Promise<void>;\n\n /**\n * @internal\n */\n abstract _screenshot(options: Readonly<ScreenshotOptions>): Promise<string>;\n\n /**\n * Generates a PDF of the page with the `print` CSS media type.\n *\n * @param options - options for generating the PDF.\n *\n * @remarks\n *\n * To generate a PDF with the `screen` media type, call\n * {@link Page.emulateMediaType | `page.emulateMediaType('screen')`} before\n * calling `page.pdf()`.\n *\n * By default, `page.pdf()` generates a pdf with modified colors for printing.\n * Use the\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-print-color-adjust | `-webkit-print-color-adjust`}\n * property to force rendering of exact colors.\n */\n abstract createPDFStream(\n options?: PDFOptions,\n ): Promise<ReadableStream<Uint8Array>>;\n\n /**\n * {@inheritDoc Page.createPDFStream}\n */\n abstract pdf(options?: PDFOptions): Promise<Uint8Array>;\n\n /**\n * The page's title\n *\n * @remarks\n *\n * Shortcut for {@link Frame.title | page.mainFrame().title()}.\n */\n async title(): Promise<string> {\n return await this.mainFrame().title();\n }\n\n abstract close(options?: {runBeforeUnload?: boolean}): Promise<void>;\n\n /**\n * Indicates that the page has been closed.\n * @returns\n */\n abstract isClosed(): boolean;\n\n /**\n * {@inheritDoc Mouse}\n */\n abstract get mouse(): Mouse;\n\n /**\n * This method fetches an element with `selector`, scrolls it into view if\n * needed, and then uses {@link Page.mouse} to click in the center of the\n * element. If there's no element matching `selector`, the method throws an\n * error.\n *\n * @remarks\n *\n * Bear in mind that if `click()` triggers a navigation event and\n * there's a separate `page.waitForNavigation()` promise to be resolved, you\n * may end up with a race condition that yields unexpected results. The\n * correct pattern for click and wait for navigation is the following:\n *\n * ```ts\n * const [response] = await Promise.all([\n * page.waitForNavigation(waitOptions),\n * page.click(selector, clickOptions),\n * ]);\n * ```\n *\n * Shortcut for {@link Frame.click | page.mainFrame().click(selector[, options]) }.\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}. If there are\n * multiple elements satisfying the `selector`, the first will be clicked\n * @param options - `Object`\n * @returns Promise which resolves when the element matching `selector` is\n * successfully clicked. The Promise will be rejected if there is no element\n * matching `selector`.\n */\n click(selector: string, options?: Readonly<ClickOptions>): Promise<void> {\n return this.mainFrame().click(selector, options);\n }\n\n /**\n * This method fetches an element with `selector` and focuses it. If\n * there's no element matching `selector`, the method throws an error.\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * If there are multiple elements satisfying the selector, the first\n * will be focused.\n * @returns Promise which resolves when the element matching selector\n * is successfully focused. The promise will be rejected if there is\n * no element matching selector.\n *\n * @remarks\n *\n * Shortcut for\n * {@link Frame.focus | page.mainFrame().focus(selector)}.\n */\n focus(selector: string): Promise<void> {\n return this.mainFrame().focus(selector);\n }\n\n /**\n * This method fetches an element with `selector`, scrolls it into view if\n * needed, and then uses {@link Page.mouse}\n * to hover over the center of the element.\n * If there's no element matching `selector`, the method throws an error.\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}. If there are\n * multiple elements satisfying the `selector`, the first will be hovered.\n * @returns Promise which resolves when the element matching `selector` is\n * successfully hovered. Promise gets rejected if there's no element matching\n * `selector`.\n *\n * @remarks\n *\n * Shortcut for {@link Page.hover | page.mainFrame().hover(selector)}.\n */\n hover(selector: string): Promise<void> {\n return this.mainFrame().hover(selector);\n }\n\n /**\n * Triggers a `change` and `input` event once all the provided options have been\n * selected. If there's no `<select>` element matching `selector`, the method\n * throws an error.\n *\n * @example\n *\n * ```ts\n * page.select('select#colors', 'blue'); // single selection\n * page.select('select#colors', 'red', 'green', 'blue'); // multiple selections\n * ```\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @param values - Values of options to select. If the `<select>` has the\n * `multiple` attribute, all values are considered, otherwise only the first one\n * is taken into account.\n * @returns\n *\n * @remarks\n *\n * Shortcut for {@link Frame.select | page.mainFrame().select()}\n */\n select(selector: string, ...values: string[]): Promise<string[]> {\n return this.mainFrame().select(selector, ...values);\n }\n\n /**\n * This method fetches an element with `selector`, scrolls it into view if\n * needed, and then uses {@link Page.touchscreen}\n * to tap in the center of the element.\n * If there's no element matching `selector`, the method throws an error.\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}. If there are multiple elements satisfying the\n * selector, the first will be tapped.\n *\n * @remarks\n *\n * Shortcut for {@link Frame.tap | page.mainFrame().tap(selector)}.\n */\n tap(selector: string): Promise<void> {\n return this.mainFrame().tap(selector);\n }\n\n /**\n * Sends a `keydown`, `keypress/input`, and `keyup` event for each character\n * in the text.\n *\n * To press a special key, like `Control` or `ArrowDown`, use {@link Keyboard.press}.\n * @example\n *\n * ```ts\n * await page.type('#mytextarea', 'Hello');\n * // Types instantly\n * await page.type('#mytextarea', 'World', {delay: 100});\n * // Types slower, like a user\n * ```\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @param text - A text to type into a focused element.\n * @param options - have property `delay` which is the Time to wait between\n * key presses in milliseconds. Defaults to `0`.\n * @returns\n */\n type(\n selector: string,\n text: string,\n options?: Readonly<KeyboardTypeOptions>,\n ): Promise<void> {\n return this.mainFrame().type(selector, text, options);\n }\n\n /**\n * Wait for the `selector` to appear in page. If at the moment of calling the\n * method the `selector` already exists, the method will return immediately. If\n * the `selector` doesn't appear after the `timeout` milliseconds of waiting, the\n * function will throw.\n *\n * @example\n * This method works across navigations:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * let currentURL;\n * page\n * .waitForSelector('img')\n * .then(() => console.log('First URL with image: ' + currentURL));\n * for (currentURL of [\n * 'https://example.com',\n * 'https://google.com',\n * 'https://bbc.com',\n * ]) {\n * await page.goto(currentURL);\n * }\n * await browser.close();\n * ```\n *\n * @param selector -\n * {@link https://pptr.dev/guides/page-interactions#selectors | selector}\n * to query the page for.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors | CSS selectors}\n * can be passed as-is and a\n * {@link https://pptr.dev/guides/page-interactions#non-css-selectors | Puppeteer-specific selector syntax}\n * allows querying by\n * {@link https://pptr.dev/guides/page-interactions#text-selectors--p-text | text},\n * {@link https://pptr.dev/guides/page-interactions#aria-selectors--p-aria | a11y role and name},\n * and\n * {@link https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath | xpath}\n * and\n * {@link https://pptr.dev/guides/page-interactions#querying-elements-in-shadow-dom | combining these queries across shadow roots}.\n * Alternatively, you can specify the selector type using a\n * {@link https://pptr.dev/guides/page-interactions#prefixed-selector-syntax | prefix}.\n * @param options - Optional waiting parameters\n * @returns Promise which resolves when element specified by selector string\n * is added to DOM. Resolves to `null` if waiting for hidden: `true` and\n * selector is not found in DOM.\n *\n * @remarks\n * The optional Parameter in Arguments `options` are:\n *\n * - `visible`: A boolean wait for element to be present in DOM and to be\n * visible, i.e. to not have `display: none` or `visibility: hidden` CSS\n * properties. Defaults to `false`.\n *\n * - `hidden`: Wait for element to not be found in the DOM or to be hidden,\n * i.e. have `display: none` or `visibility: hidden` CSS properties. Defaults to\n * `false`.\n *\n * - `timeout`: maximum time to wait for in milliseconds. Defaults to `30000`\n * (30 seconds). Pass `0` to disable timeout. The default value can be changed\n * by using the {@link Page.setDefaultTimeout} method.\n *\n * - `signal`: A signal object that allows you to cancel a waitForSelector call.\n */\n async waitForSelector<Selector extends string>(\n selector: Selector,\n options: WaitForSelectorOptions = {},\n ): Promise<ElementHandle<NodeFor<Selector>> | null> {\n return await this.mainFrame().waitForSelector(selector, options);\n }\n\n /**\n * Waits for the provided function, `pageFunction`, to return a truthy value when\n * evaluated in the page's context.\n *\n * @example\n * {@link Page.waitForFunction} can be used to observe a viewport size change:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * const watchDog = page.waitForFunction('window.innerWidth < 100');\n * await page.setViewport({width: 50, height: 50});\n * await watchDog;\n * await browser.close();\n * ```\n *\n * @example\n * Arguments can be passed from Node.js to `pageFunction`:\n *\n * ```ts\n * const selector = '.foo';\n * await page.waitForFunction(\n * selector => !!document.querySelector(selector),\n * {},\n * selector,\n * );\n * ```\n *\n * @example\n * The provided `pageFunction` can be asynchronous:\n *\n * ```ts\n * const username = 'github-username';\n * await page.waitForFunction(\n * async username => {\n * const githubResponse = await fetch(\n * `https://api.github.com/users/${username}`,\n * );\n * const githubUser = await githubResponse.json();\n * // show the avatar\n * const img = document.createElement('img');\n * img.src = githubUser.avatar_url;\n * // wait 3 seconds\n * await new Promise((resolve, reject) => setTimeout(resolve, 3000));\n * img.remove();\n * },\n * {},\n * username,\n * );\n * ```\n *\n * @param pageFunction - Function to be evaluated in browser context until it returns a\n * truthy value.\n * @param options - Options for configuring waiting behavior.\n */\n waitForFunction<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n options?: FrameWaitForFunctionOptions,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n return this.mainFrame().waitForFunction(pageFunction, options, ...args);\n }\n\n /**\n * This method is typically coupled with an action that triggers a device\n * request from an api such as WebBluetooth.\n *\n * :::caution\n *\n * This must be called before the device request is made. It will not return a\n * currently active device prompt.\n *\n * :::\n *\n * @example\n *\n * ```ts\n * const [devicePrompt] = Promise.all([\n * page.waitForDevicePrompt(),\n * page.click('#connect-bluetooth'),\n * ]);\n * await devicePrompt.select(\n * await devicePrompt.waitForDevice(({name}) => name.includes('My Device')),\n * );\n * ```\n */\n abstract waitForDevicePrompt(\n options?: WaitTimeoutOptions,\n ): Promise<DeviceRequestPrompt>;\n\n /**\n * Resizes the browser window of this page so that the content area (excluding\n * browser UI) has the specified width and height.\n *\n * @experimental\n */\n abstract resize(params: {\n contentWidth: number;\n contentHeight: number;\n }): Promise<void>;\n\n /**\n * Returns the page's window id.\n *\n * @experimental\n */\n abstract windowId(): Promise<WindowId>;\n\n override [disposeSymbol](): void {\n return void this[asyncDisposeSymbol]().catch(error => {\n this.logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }\n\n override async [asyncDisposeSymbol](): Promise<void> {\n await this.close();\n await super[asyncDisposeSymbol]();\n }\n\n /**\n * Opens DevTools for the this page if not already open and returns the DevTools page.\n * This method is only available in Chrome.\n */\n abstract openDevTools(): Promise<Page>;\n\n /**\n * Returns true if DevTools is attached to the current page.\n * Use {@link Page.openDevTools} to get the DevTools page.\n *\n * @experimental\n */\n abstract hasDevTools(): Promise<boolean>;\n\n /**\n * {@inheritDoc BluetoothEmulation}\n */\n abstract get bluetooth(): BluetoothEmulation;\n\n /**\n * Triggers the default action of the specified extension for this page.\n * This simulates clicking the extension's icon in the browser's toolbar.\n *\n * @param extension - The {@link Extension} whose action to trigger.\n * @public\n */\n abstract triggerExtensionAction(extension: Extension): Promise<void>;\n\n /**\n * Retrieves the list of extension execution realms in the main frame of the page.\n * These realms correspond to extension content scripts running on the page.\n *\n * Shortcut for {@link Frame.extensionRealms | mainFrame().extensionRealms()}.\n *\n * @public\n */\n abstract extensionRealms(): Realm[];\n}\n\n/**\n * @internal\n */\nexport const supportedMetrics = new Set<string>([\n 'Timestamp',\n 'Documents',\n 'Frames',\n 'JSEventListeners',\n 'Nodes',\n 'LayoutCount',\n 'RecalcStyleCount',\n 'LayoutDuration',\n 'RecalcStyleDuration',\n 'ScriptDuration',\n 'TaskDuration',\n 'JSHeapUsedSize',\n 'JSHeapTotalSize',\n]);\n\n/** @see https://w3c.github.io/webdriver-bidi/#normalize-rect */\nfunction normalizeRectangle<BoundingBoxType extends BoundingBox>(\n clip: Readonly<BoundingBoxType>,\n): BoundingBoxType {\n return {\n ...clip,\n ...(clip.width < 0\n ? {\n x: clip.x + clip.width,\n width: -clip.width,\n }\n : {\n x: clip.x,\n width: clip.width,\n }),\n ...(clip.height < 0\n ? {\n y: clip.y + clip.height,\n height: -clip.height,\n }\n : {\n y: clip.y,\n height: clip.height,\n }),\n };\n}\n\nfunction roundRectangle<BoundingBoxType extends BoundingBox>(\n clip: Readonly<BoundingBoxType>,\n): BoundingBoxType {\n const x = Math.round(clip.x);\n const y = Math.round(clip.y);\n const width = Math.round(clip.width + clip.x - x);\n const height = Math.round(clip.height + clip.y - y);\n return {...clip, x, y, width, height};\n}\n","/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {ElementHandle} from '../api/ElementHandle.js';\nimport type {JSHandle} from '../api/JSHandle.js';\nimport type {Realm} from '../api/Realm.js';\nimport type {Poller} from '../injected/Poller.js';\nimport {Deferred} from '../util/Deferred.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\nimport {stringifyFunction} from '../util/Function.js';\n\nimport {TimeoutError} from './Errors.js';\nimport {LazyArg} from './LazyArg.js';\nimport type {HandleFor} from './types.js';\n\n/**\n * @internal\n */\nexport interface WaitTaskOptions {\n polling: 'raf' | 'mutation' | number;\n root?: ElementHandle<Node>;\n timeout: number;\n signal?: AbortSignal;\n}\n\n/**\n * @internal\n */\nexport class WaitTask<T = unknown> {\n #world: Realm;\n #polling: 'raf' | 'mutation' | number;\n #root?: ElementHandle<Node>;\n\n #fn: string;\n #args: unknown[];\n\n #timeout?: NodeJS.Timeout;\n #genericError = new Error('Waiting failed');\n #timeoutError?: TimeoutError;\n\n #result = Deferred.create<HandleFor<T>>();\n\n #poller?: JSHandle<Poller<T>>;\n #signal?: AbortSignal;\n #reruns: AbortController[] = [];\n\n constructor(\n world: Realm,\n options: WaitTaskOptions,\n fn: ((...args: unknown[]) => Promise<T>) | string,\n ...args: unknown[]\n ) {\n this.#world = world;\n this.#polling = options.polling;\n this.#root = options.root;\n this.#signal = options.signal;\n this.#signal?.addEventListener('abort', this.#onAbortSignal, {\n once: true,\n });\n\n switch (typeof fn) {\n case 'string':\n this.#fn = `() => {return (${fn});}`;\n break;\n default:\n this.#fn = stringifyFunction(fn);\n break;\n }\n this.#args = args;\n\n this.#world.taskManager.add(this);\n\n if (options.timeout) {\n this.#timeoutError = new TimeoutError(\n `Waiting failed: ${options.timeout}ms exceeded`,\n );\n this.#timeout = setTimeout(() => {\n void this.terminate(this.#timeoutError);\n }, options.timeout);\n }\n\n void this.rerun();\n }\n\n get result(): Promise<HandleFor<T>> {\n return this.#result.valueOrThrow();\n }\n\n async rerun(): Promise<void> {\n for (const prev of this.#reruns) {\n prev.abort();\n }\n this.#reruns.length = 0;\n const controller = new AbortController();\n this.#reruns.push(controller);\n try {\n switch (this.#polling) {\n case 'raf':\n this.#poller = await this.#world.evaluateHandle(\n ({RAFPoller, createFunction}, fn, ...args) => {\n const fun = createFunction(fn);\n return new RAFPoller(() => {\n return fun(...args) as Promise<T>;\n });\n },\n LazyArg.create(context => {\n return context.puppeteerUtil;\n }),\n this.#fn,\n ...this.#args,\n );\n break;\n case 'mutation':\n this.#poller = await this.#world.evaluateHandle(\n ({MutationPoller, createFunction}, root, fn, ...args) => {\n const fun = createFunction(fn);\n return new MutationPoller(() => {\n return fun(...args) as Promise<T>;\n }, root || document);\n },\n LazyArg.create(context => {\n return context.puppeteerUtil;\n }),\n this.#root,\n this.#fn,\n ...this.#args,\n );\n break;\n default:\n this.#poller = await this.#world.evaluateHandle(\n ({IntervalPoller, createFunction}, ms, fn, ...args) => {\n const fun = createFunction(fn);\n return new IntervalPoller(() => {\n return fun(...args) as Promise<T>;\n }, ms);\n },\n LazyArg.create(context => {\n return context.puppeteerUtil;\n }),\n this.#polling,\n this.#fn,\n ...this.#args,\n );\n break;\n }\n\n await this.#poller.evaluate(poller => {\n void poller.start();\n });\n\n const result = await this.#poller.evaluateHandle(poller => {\n return poller.result();\n });\n this.#result.resolve(result);\n\n await this.terminate();\n } catch (error) {\n if (controller.signal.aborted) {\n return;\n }\n const badError = this.getBadError(error);\n if (badError) {\n this.#genericError.cause = badError;\n await this.terminate(this.#genericError);\n }\n }\n }\n\n async terminate(error?: Error): Promise<void> {\n this.#world.taskManager.delete(this);\n\n this.#signal?.removeEventListener('abort', this.#onAbortSignal);\n\n clearTimeout(this.#timeout);\n\n if (error && !this.#result.finished()) {\n this.#result.reject(error);\n }\n\n if (this.#poller) {\n try {\n await this.#poller.evaluate(async poller => {\n await poller.stop();\n });\n if (this.#poller) {\n await this.#poller.dispose();\n this.#poller = undefined;\n }\n } catch {\n // Ignore errors since they most likely come from low-level cleanup.\n }\n }\n }\n\n /**\n * Not all errors lead to termination. They usually imply we need to rerun the task.\n */\n getBadError(error: unknown): Error | undefined {\n if (isErrorLike(error)) {\n // When frame is detached the task should have been terminated by the IsolatedWorld.\n // This can fail if we were adding this task while the frame was detached,\n // so we terminate here instead.\n if (\n error.message.includes(\n 'Execution context is not available in detached frame',\n )\n ) {\n return new Error('Waiting failed: Frame detached');\n }\n\n // When the page is navigated, the promise is rejected.\n // We will try again in the new execution context.\n if (error.message.includes('Execution context was destroyed')) {\n return;\n }\n\n // We could have tried to evaluate in a context which was already\n // destroyed.\n if (error.message.includes('Cannot find context with specified id')) {\n return;\n }\n\n // Errors coming from WebDriver BiDi. TODO: Adjust messages after\n // https://github.com/w3c/webdriver-bidi/issues/540 is resolved.\n if (error.message.includes('DiscardedBrowsingContextError')) {\n return;\n }\n\n return error;\n }\n\n return new Error('WaitTask failed with an error', {\n cause: error,\n });\n }\n\n #onAbortSignal = () => {\n void this.terminate(this.#signal?.reason);\n };\n}\n\n/**\n * @internal\n */\nexport class TaskManager {\n #tasks: Set<WaitTask> = new Set<WaitTask>();\n\n add(task: WaitTask<any>): void {\n this.#tasks.add(task);\n }\n\n delete(task: WaitTask<any>): void {\n this.#tasks.delete(task);\n }\n\n terminateAll(error?: Error): void {\n for (const task of this.#tasks) {\n void task.terminate(error);\n }\n this.#tasks.clear();\n }\n\n async rerunAll(): Promise<void> {\n await Promise.all(\n [...this.#tasks].map(task => {\n return task.rerun();\n }),\n );\n }\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {TimeoutSettings} from '../common/TimeoutSettings.js';\nimport type {EvaluateFunc, HandleFor} from '../common/types.js';\nimport {TaskManager, WaitTask} from '../common/WaitTask.js';\nimport {disposeSymbol} from '../util/disposable.js';\n\nimport type {ElementHandle} from './ElementHandle.js';\nimport type {Environment} from './Environment.js';\nimport type {Extension} from './Extension.js';\nimport type {JSHandle} from './JSHandle.js';\n\n/**\n * @public\n */\nexport abstract class Realm {\n /** @internal */\n protected readonly timeoutSettings: TimeoutSettings;\n /** @internal */\n readonly taskManager = new TaskManager();\n /** @internal */\n constructor(timeoutSettings: TimeoutSettings) {\n this.timeoutSettings = timeoutSettings;\n }\n /** @internal */\n abstract get environment(): Environment;\n\n /**\n * Returns the origin that created the Realm.\n * For example, if the realm was created by an extension content script,\n * this will return the origin of the extension\n * (e.g., `chrome-extension://<extension-id>`).\n *\n * @experimental\n * @example\n * `chrome-extension://<chrome-extension-id>`\n */\n abstract get origin(): string | undefined;\n /**\n * Returns the {@link Extension} that created this realm, if applicable.\n * This is typically populated when the realm was created by an extension\n * content script injected into a page.\n *\n * @returns A promise that resolves to the {@link Extension}\n * or `null` if not created by an extension.\n * @experimental\n */\n abstract extension(): Promise<Extension | null>;\n\n /** @internal */\n abstract adoptHandle<T extends JSHandle<Node>>(handle: T): Promise<T>;\n\n /** @internal */\n abstract transferHandle<T extends JSHandle<Node>>(handle: T): Promise<T>;\n\n /**\n * Evaluates a function in the realm's context and returns a\n * {@link JSHandle} to the result.\n *\n * If the function passed to `realm.evaluateHandle` returns a Promise,\n * the method will wait for the promise to resolve and return its value.\n *\n * {@link JSHandle} instances can be passed as arguments to the function.\n *\n * @example\n *\n * ```ts\n * const aHandle = await realm.evaluateHandle(() => document.body);\n * const resultHandle = await realm.evaluateHandle(\n * body => body.innerHTML,\n * aHandle,\n * );\n * ```\n *\n * @param pageFunction - A function to be evaluated in the realm.\n * @param args - Arguments to be passed to the `pageFunction`.\n * @returns A promise that resolves to a {@link JSHandle} containing\n * the result.\n * @public\n */\n abstract evaluateHandle<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>>;\n\n /**\n * Evaluates a function in the realm's context and returns the\n * resulting value.\n *\n * If the function passed to `realm.evaluate` returns a Promise,\n * the method will wait for the promise to resolve and return its value.\n *\n * {@link JSHandle} instances can be passed as arguments to the function.\n *\n * @example\n *\n * ```ts\n * const result = await realm.evaluate(() => {\n * return Promise.resolve(8 * 7);\n * });\n * console.log(result); // prints \"56\"\n * ```\n *\n * @param pageFunction - A function to be evaluated in the realm.\n * @param args - Arguments to be passed to the `pageFunction`.\n * @returns A promise that resolves to the return value of the function.\n * @public\n */\n abstract evaluate<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>>;\n\n /**\n * Waits for a function to return a truthy value when evaluated in\n * the realm's context.\n *\n * Arguments can be passed from Node.js to `pageFunction`.\n *\n * @example\n *\n * ```ts\n * const selector = '.foo';\n * await realm.waitForFunction(\n * selector => !!document.querySelector(selector),\n * {},\n * selector,\n * );\n * ```\n *\n * @param pageFunction - A function to evaluate in the realm.\n * @param options - Options for polling and timeouts.\n * @param args - Arguments to pass to the function.\n * @returns A promise that resolves when the function returns a truthy\n * value.\n * @public\n */\n async waitForFunction<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n options: {\n polling?: 'raf' | 'mutation' | number;\n timeout?: number;\n root?: ElementHandle<Node>;\n signal?: AbortSignal;\n } = {},\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n const {\n polling = 'raf',\n timeout = this.timeoutSettings.timeout(),\n root,\n signal,\n } = options;\n if (typeof polling === 'number' && polling < 0) {\n throw new Error('Cannot poll with non-positive interval');\n }\n const waitTask = new WaitTask(\n this,\n {\n polling,\n root,\n timeout,\n signal,\n },\n pageFunction as unknown as\n ((...args: unknown[]) => Promise<Awaited<ReturnType<Func>>>) | string,\n ...args,\n );\n return await waitTask.result;\n }\n\n /** @internal */\n abstract adoptBackendNode(backendNodeId?: number): Promise<JSHandle<Node>>;\n\n /** @internal */\n get disposed(): boolean {\n return this.#disposed;\n }\n\n #disposed = false;\n /** @internal */\n dispose(): void {\n this.#disposed = true;\n this.taskManager.terminateAll(\n new Error('waitForFunction failed: frame got detached.'),\n );\n }\n\n [disposeSymbol](): void {\n this.dispose();\n }\n}\n","/**\n * @license\n * Copyright 2026 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Logger} from '../common/Debug.js';\nimport {asyncDisposeSymbol} from '../util/disposable.js';\n\nimport type {Page, RecordOptions} from './Page.js';\n\n/**\n * @public\n */\nexport interface WritableDestination {\n write(chunk: Uint8Array): boolean;\n end(): unknown;\n writableFinished?: boolean;\n closed?: boolean;\n destroyed?: boolean;\n once?(event: string, cb: (arg?: unknown) => void): unknown;\n}\n\n/**\n * @public\n */\nexport abstract class ScreenRecording extends ReadableStream<Uint8Array> {\n /**\n * @internal\n */\n protected page: Page;\n /**\n * @internal\n */\n protected options: RecordOptions;\n /**\n * @internal\n */\n protected logger: Logger;\n /**\n * @internal\n */\n protected controller!: ReadableStreamDefaultController<Uint8Array>;\n /**\n * @internal\n */\n protected destinations = new Set<WritableDestination>();\n /**\n * @internal\n */\n protected stopped = false;\n\n /**\n * @internal\n */\n constructor(page: Page, options: RecordOptions = {}, logger: Logger) {\n let controller!: ReadableStreamDefaultController<Uint8Array>;\n super({\n start(c) {\n controller = c;\n },\n });\n this.controller = controller;\n\n this.page = page;\n this.options = options;\n this.logger = logger;\n }\n\n /**\n * @internal\n */\n abstract _start(): Promise<void>;\n\n /**\n * Pipes the recorded stream to a destination stream.\n *\n * @public\n */\n pipe<T extends WritableStream<Uint8Array>>(destination: T): Promise<void>;\n pipe<T extends WritableDestination>(destination: T): T;\n pipe(\n destination: WritableStream<Uint8Array> | WritableDestination,\n ): Promise<void> | WritableDestination {\n if (\n 'getWriter' in destination &&\n typeof destination.getWriter === 'function'\n ) {\n return this.pipeTo(destination as WritableStream<Uint8Array>);\n }\n const dest = destination as WritableDestination;\n this.destinations.add(dest);\n dest.once?.('unpipe', () => {\n this.destinations.delete(dest);\n });\n dest.once?.('error', () => {\n this.destinations.delete(dest);\n });\n dest.once?.('close', () => {\n this.destinations.delete(dest);\n });\n dest.once?.('finish', () => {\n this.destinations.delete(dest);\n });\n return dest;\n }\n\n /**\n * Stops the screen recording.\n *\n * @public\n */\n abstract stop(): Promise<void>;\n\n /**\n * @internal\n */\n protected async closeDestinations(): Promise<void> {\n try {\n this.controller.close();\n } catch {\n // Controller might already be closed.\n }\n for (const dest of this.destinations) {\n dest.end();\n }\n const destinationPromises = Array.from(this.destinations).map(dest => {\n return new Promise(resolve => {\n if (dest.writableFinished || dest.closed || dest.destroyed) {\n resolve(undefined);\n } else {\n dest.once?.('finish', resolve);\n dest.once?.('close', resolve);\n dest.once?.('error', resolve);\n }\n });\n });\n\n await Promise.all(destinationPromises);\n }\n\n async [asyncDisposeSymbol](): Promise<void> {\n await this.stop();\n }\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Logger} from '../common/Debug.js';\n\nimport type {Browser} from './Browser.js';\nimport type {BrowserContext} from './BrowserContext.js';\nimport type {CDPSession} from './CDPSession.js';\nimport type {Page} from './Page.js';\nimport type {WebWorker} from './WebWorker.js';\n\n/**\n * @public\n */\nexport enum TargetType {\n PAGE = 'page',\n BACKGROUND_PAGE = 'background_page',\n SERVICE_WORKER = 'service_worker',\n SHARED_WORKER = 'shared_worker',\n BROWSER = 'browser',\n WEBVIEW = 'webview',\n OTHER = 'other',\n /**\n * @internal\n */\n TAB = 'tab',\n}\n\n/**\n * Target represents a\n * {@link https://chromedevtools.github.io/devtools-protocol/tot/Target/ | CDP target}.\n * In CDP a target is something that can be debugged, such as a frame, a page or a\n * worker.\n * @public\n */\nexport abstract class Target {\n /**\n * @internal\n */\n protected constructor(protected logger: Logger) {}\n\n /**\n * If the target is not of type `\"service_worker\"` or `\"shared_worker\"`, returns `null`.\n */\n async worker(): Promise<WebWorker | null> {\n return null;\n }\n\n /**\n * If the target is not of type `\"page\"`, `\"webview\"` or `\"background_page\"`,\n * returns `null`.\n */\n async page(): Promise<Page | null> {\n return null;\n }\n\n /**\n * Forcefully creates a page for a target of any type. It is useful if you\n * want to handle a CDP target of type `other` as a page. If you deal with a\n * regular page target, use {@link Target.page}.\n */\n abstract asPage(): Promise<Page>;\n\n abstract url(): string;\n\n /**\n * Creates a Chrome Devtools Protocol session attached to the target.\n */\n abstract createCDPSession(): Promise<CDPSession>;\n\n /**\n * Identifies what kind of target this is.\n *\n * @remarks\n *\n * See {@link https://developer.chrome.com/extensions/background_pages | docs} for more info about background pages.\n */\n abstract type(): TargetType;\n\n /**\n * Get the browser the target belongs to.\n */\n abstract browser(): Browser;\n\n /**\n * Get the browser context the target belongs to.\n */\n abstract browserContext(): BrowserContext;\n\n /**\n * Get the target that opened this target. Top-level targets return `null`.\n */\n abstract opener(): Target | undefined;\n}\n","/**\n * @license\n * Copyright 2018 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {ConsoleMessage} from '../common/ConsoleMessage.js';\nimport {UnsupportedOperation} from '../common/Errors.js';\nimport type {EventType} from '../common/EventEmitter.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {TimeoutSettings} from '../common/TimeoutSettings.js';\nimport type {EvaluateFunc, HandleFor} from '../common/types.js';\nimport {withSourcePuppeteerURLIfNone} from '../common/util.js';\n\nimport type {CDPSession} from './CDPSession.js';\nimport type {Realm} from './Realm.js';\n\n/**\n * @public\n */\nexport enum WebWorkerEvent {\n /**\n * Emitted when the worker calls a console API.\n */\n Console = 'console',\n /**\n * Emitted when the worker throws an exception.\n */\n Error = 'error',\n}\n\n/**\n * @public\n */\nexport interface WebWorkerEvents extends Record<EventType, unknown> {\n [WebWorkerEvent.Console]: ConsoleMessage;\n [WebWorkerEvent.Error]: Error;\n}\n\n/**\n * This class represents a\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API | WebWorker}.\n *\n * @remarks\n * The events `workercreated` and `workerdestroyed` are emitted on the page\n * object to signal the worker lifecycle.\n *\n * @example\n *\n * ```ts\n * page.on('workercreated', worker =>\n * console.log('Worker created: ' + worker.url()),\n * );\n * page.on('workerdestroyed', worker =>\n * console.log('Worker destroyed: ' + worker.url()),\n * );\n *\n * console.log('Current workers:');\n * for (const worker of page.workers()) {\n * console.log(' ' + worker.url());\n * }\n * ```\n *\n * @public\n */\nexport abstract class WebWorker extends EventEmitter<WebWorkerEvents> {\n /**\n * @internal\n */\n readonly timeoutSettings = new TimeoutSettings();\n\n readonly #url: string;\n\n /**\n * @internal\n */\n constructor(url: string) {\n super();\n\n this.#url = url;\n }\n\n /**\n * @internal\n */\n abstract mainRealm(): Realm;\n\n /**\n * The URL of this web worker.\n */\n url(): string {\n return this.#url;\n }\n\n /**\n * The CDP session client the WebWorker belongs to.\n */\n abstract get client(): CDPSession;\n\n /**\n * Evaluates a given function in the {@link WebWorker | worker}.\n *\n * @remarks If the given function returns a promise,\n * {@link WebWorker.evaluate | evaluate} will wait for the promise to resolve.\n *\n * As a rule of thumb, if the return value of the given function is more\n * complicated than a JSON object (e.g. most classes), then\n * {@link WebWorker.evaluate | evaluate} will _likely_ return some truncated\n * value (or `{}`). This is because we are not returning the actual return\n * value, but a deserialized version as a result of transferring the return\n * value through a protocol to Puppeteer.\n *\n * In general, you should use\n * {@link WebWorker.evaluateHandle | evaluateHandle} if\n * {@link WebWorker.evaluate | evaluate} cannot serialize the return value\n * properly or you need a mutable {@link JSHandle | handle} to the return\n * object.\n *\n * @param func - Function to be evaluated.\n * @param args - Arguments to pass into `func`.\n * @returns The result of `func`.\n */\n async evaluate<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(func: Func | string, ...args: Params): Promise<Awaited<ReturnType<Func>>> {\n func = withSourcePuppeteerURLIfNone(this.evaluate.name, func);\n return await this.mainRealm().evaluate(func, ...args);\n }\n\n /**\n * Evaluates a given function in the {@link WebWorker | worker}.\n *\n * @remarks If the given function returns a promise,\n * {@link WebWorker.evaluate | evaluate} will wait for the promise to resolve.\n *\n * In general, you should use\n * {@link WebWorker.evaluateHandle | evaluateHandle} if\n * {@link WebWorker.evaluate | evaluate} cannot serialize the return value\n * properly or you need a mutable {@link JSHandle | handle} to the return\n * object.\n *\n * @param func - Function to be evaluated.\n * @param args - Arguments to pass into `func`.\n * @returns A {@link JSHandle | handle} to the return value of `func`.\n */\n async evaluateHandle<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n func: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n func = withSourcePuppeteerURLIfNone(this.evaluateHandle.name, func);\n return await this.mainRealm().evaluateHandle(func, ...args);\n }\n\n /**\n * Waits for the provided function, `workerFunction`, to return a truthy value when\n * evaluated in the page's context.\n *\n * @param workerFunction - Function to be evaluated in browser context until it\n * returns a truthy value.\n * @param options - Options for configuring waiting behavior.\n */\n waitForFunction<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n workerFunction: Func | string,\n options: {\n polling?: number;\n timeout?: number;\n signal?: AbortSignal;\n } = {},\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n return this.mainRealm().waitForFunction(\n workerFunction,\n {\n polling: 100,\n ...options,\n },\n ...args,\n );\n }\n\n async close(): Promise<void> {\n throw new UnsupportedOperation('WebWorker.close() is not supported');\n }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {ElementHandle} from '../api/ElementHandle.js';\nimport type {Realm} from '../api/Realm.js';\nimport type {CdpFrame} from '../cdp/Frame.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\n\n/**\n * Represents a Node and the properties of it that are relevant to Accessibility.\n * @public\n */\nexport interface SerializedAXNode {\n /**\n * The {@link https://www.w3.org/TR/wai-aria/#usage_intro | role} of the node.\n */\n role: string;\n /**\n * A human readable name for the node.\n */\n name?: string;\n /**\n * The current value of the node.\n */\n value?: string | number;\n /**\n * An additional human readable description of the node.\n */\n description?: string;\n /**\n * Any keyboard shortcuts associated with this node.\n */\n keyshortcuts?: string;\n /**\n * A human readable alternative to the role.\n */\n roledescription?: string;\n /**\n * A description of the current value.\n */\n valuetext?: string;\n disabled?: boolean;\n expanded?: boolean;\n focused?: boolean;\n modal?: boolean;\n multiline?: boolean;\n /**\n * Whether more than one child can be selected.\n */\n multiselectable?: boolean;\n readonly?: boolean;\n required?: boolean;\n selected?: boolean;\n /**\n * Whether the checkbox is checked, or in a\n * {@link https://www.w3.org/TR/wai-aria-practices/examples/checkbox/checkbox-2/checkbox-2.html | mixed state}.\n */\n checked?: boolean | 'mixed';\n /**\n * Whether the node is checked or in a mixed state.\n */\n pressed?: boolean | 'mixed';\n /**\n * The level of a heading.\n */\n level?: number;\n valuemin?: number;\n valuemax?: number;\n autocomplete?: string;\n haspopup?: string;\n /**\n * Whether and in what way this node's value is invalid.\n */\n invalid?: string;\n orientation?: string;\n /**\n * Whether the node is {@link https://www.w3.org/TR/wai-aria/#aria-busy | busy}.\n */\n busy?: boolean;\n /**\n * The {@link https://www.w3.org/TR/wai-aria/#aria-live | live} status of the\n * node.\n */\n live?: string;\n /**\n * Whether the live region is\n * {@link https://www.w3.org/TR/wai-aria/#aria-atomic | atomic}.\n */\n atomic?: boolean;\n /**\n * The {@link https://www.w3.org/TR/wai-aria/#aria-relevant | relevant}\n * changes for the live region.\n */\n relevant?: string;\n /**\n * The {@link https://www.w3.org/TR/wai-aria/#aria-errormessage | error message}\n * for the node.\n */\n errormessage?: string;\n /**\n * The {@link https://www.w3.org/TR/wai-aria/#aria-details | details} for the\n * node.\n */\n details?: string;\n\n /**\n * Url for link elements.\n */\n url?: string;\n /**\n * Children of this node, if there are any.\n */\n children?: SerializedAXNode[];\n\n /**\n * CDP-specific ID to reference the DOM node.\n *\n * @internal\n */\n backendNodeId?: number;\n\n /**\n * CDP-specific documentId.\n *\n * @internal\n */\n loaderId: string;\n\n /**\n * Get an ElementHandle for this AXNode if available.\n *\n * If the underlying DOM element has been disposed, the method might return an\n * error.\n */\n elementHandle(): Promise<ElementHandle | null>;\n}\n\n/**\n * @public\n */\nexport interface SnapshotOptions {\n /**\n * Prune uninteresting nodes from the tree.\n * @defaultValue `true`\n */\n interestingOnly?: boolean;\n /**\n * If true, gets accessibility trees for each of the iframes in the frame\n * subtree.\n *\n * @defaultValue `false`\n */\n includeIframes?: boolean;\n /**\n * Root node to get the accessibility tree for\n * @defaultValue The root node of the entire page.\n */\n root?: ElementHandle<Node>;\n}\n\n/**\n * The Accessibility class provides methods for inspecting the browser's\n * accessibility tree. The accessibility tree is used by assistive technology\n * such as {@link https://en.wikipedia.org/wiki/Screen_reader | screen readers} or\n * {@link https://en.wikipedia.org/wiki/Switch_access | switches}.\n *\n * @remarks\n *\n * Accessibility is a very platform-specific thing. On different platforms,\n * there are different screen readers that might have wildly different output.\n *\n * Blink - Chrome's rendering engine - has a concept of \"accessibility tree\",\n * which is then translated into different platform-specific APIs. Accessibility\n * namespace gives users access to the Blink Accessibility Tree.\n *\n * Most of the accessibility tree gets filtered out when converting from Blink\n * AX Tree to Platform-specific AX-Tree or by assistive technologies themselves.\n * By default, Puppeteer tries to approximate this filtering, exposing only\n * the \"interesting\" nodes of the tree.\n *\n * @public\n */\nexport class Accessibility {\n #realm: Realm;\n #frameId: string;\n #logger?: Logger;\n\n /**\n * @internal\n */\n constructor(realm: Realm, frameId = '', logger?: Logger) {\n this.#realm = realm;\n this.#frameId = frameId;\n this.#logger = logger;\n }\n\n /**\n * Captures the current state of the accessibility tree.\n * The returned object represents the root accessible node of the page.\n *\n * @remarks\n *\n * **NOTE** The Chrome accessibility tree contains nodes that go unused on\n * most platforms and by most screen readers. Puppeteer will discard them as\n * well for an easier to process tree, unless `interestingOnly` is set to\n * `false`.\n *\n * @example\n * An example of dumping the entire accessibility tree:\n *\n * ```ts\n * const snapshot = await page.accessibility.snapshot();\n * console.log(snapshot);\n * ```\n *\n * @example\n * An example of logging the focused node's name:\n *\n * ```ts\n * const snapshot = await page.accessibility.snapshot();\n * const node = findFocusedNode(snapshot);\n * console.log(node && node.name);\n *\n * function findFocusedNode(node) {\n * if (node.focused) return node;\n * for (const child of node.children || []) {\n * const foundNode = findFocusedNode(child);\n * return foundNode;\n * }\n * return null;\n * }\n * ```\n *\n * @returns An AXNode object representing the snapshot.\n */\n public async snapshot(\n options: SnapshotOptions = {},\n ): Promise<SerializedAXNode | null> {\n const {\n interestingOnly = true,\n root = null,\n includeIframes = false,\n } = options;\n const {nodes} = await this.#realm.environment.client.send(\n 'Accessibility.getFullAXTree',\n {\n frameId: this.#frameId,\n },\n );\n let backendNodeId: number | undefined;\n if (root) {\n const {node} = await this.#realm.environment.client.send(\n 'DOM.describeNode',\n {\n objectId: root.id,\n },\n );\n backendNodeId = node.backendNodeId;\n }\n const defaultRoot = AXNode.createTree(this.#realm, nodes);\n const populateIframes = async (root: AXNode): Promise<void> => {\n if (root.payload.role?.value === 'Iframe') {\n if (!root.payload.backendDOMNodeId) {\n return;\n }\n using handle = (await this.#realm.adoptBackendNode(\n root.payload.backendDOMNodeId,\n )) as ElementHandle<Element>;\n if (!handle || !('contentFrame' in handle)) {\n return;\n }\n const frame = await handle.contentFrame();\n if (!frame) {\n return;\n }\n try {\n const iframeSnapshot = await frame.accessibility.snapshot(options);\n root.iframeSnapshot = iframeSnapshot ?? undefined;\n } catch (error) {\n // Frames can get detached at any time resulting in errors.\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n }\n }\n await Promise.all(\n root.children.map(child => {\n return populateIframes(child);\n }),\n );\n };\n\n let needle: AXNode | null = defaultRoot;\n if (!defaultRoot) {\n return null;\n }\n\n if (includeIframes) {\n await populateIframes(defaultRoot);\n }\n\n if (backendNodeId) {\n needle = defaultRoot.find(node => {\n return node.payload.backendDOMNodeId === backendNodeId;\n });\n }\n\n if (!needle) {\n return null;\n }\n\n if (!interestingOnly) {\n return this.serializeTree(needle)[0] ?? null;\n }\n\n const interestingNodes = new Set<AXNode>();\n this.collectInterestingNodes(interestingNodes, defaultRoot, false);\n\n return this.serializeTree(needle, interestingNodes)[0] ?? null;\n }\n\n private serializeTree(\n node: AXNode,\n interestingNodes?: Set<AXNode>,\n ): SerializedAXNode[] {\n const children: SerializedAXNode[] = [];\n for (const child of node.children) {\n children.push(...this.serializeTree(child, interestingNodes));\n }\n\n if (interestingNodes && !interestingNodes.has(node)) {\n return children;\n }\n\n const serializedNode = node.serialize();\n if (children.length) {\n serializedNode.children = children;\n }\n if (node.iframeSnapshot) {\n if (!serializedNode.children) {\n serializedNode.children = [];\n }\n serializedNode.children.push(node.iframeSnapshot);\n }\n return [serializedNode];\n }\n\n private collectInterestingNodes(\n collection: Set<AXNode>,\n node: AXNode,\n insideControl: boolean,\n ): void {\n if (node.isInteresting(insideControl) || node.iframeSnapshot) {\n collection.add(node);\n }\n if (node.isLeafNode()) {\n return;\n }\n insideControl = insideControl || node.isControl();\n for (const child of node.children) {\n this.collectInterestingNodes(collection, child, insideControl);\n }\n }\n}\n\nclass AXNode {\n public payload: Protocol.Accessibility.AXNode;\n public children: AXNode[] = [];\n public iframeSnapshot?: SerializedAXNode;\n\n #richlyEditable = false;\n #editable = false;\n #focusable = false;\n #hidden = false;\n #busy = false;\n #modal = false;\n #hasErrormessage = false;\n #hasDetails = false;\n #name: string;\n #role: string;\n #description?: string;\n #roledescription?: string;\n #live?: string;\n #ignored: boolean;\n #cachedHasFocusableChild?: boolean;\n #realm: Realm;\n\n constructor(realm: Realm, payload: Protocol.Accessibility.AXNode) {\n this.payload = payload;\n this.#role = this.payload.role ? this.payload.role.value : 'Unknown';\n this.#ignored = this.payload.ignored;\n this.#name = this.payload.name ? this.payload.name.value : '';\n this.#description = this.payload.description\n ? this.payload.description.value\n : undefined;\n this.#realm = realm;\n for (const property of this.payload.properties || []) {\n if (property.name === 'editable') {\n this.#richlyEditable = property.value.value === 'richtext';\n this.#editable = true;\n }\n if (property.name === 'focusable') {\n this.#focusable = property.value.value;\n }\n if (property.name === 'hidden') {\n this.#hidden = property.value.value;\n }\n if (property.name === 'busy') {\n this.#busy = property.value.value;\n }\n if (property.name === 'live') {\n this.#live = property.value.value;\n }\n if (property.name === 'modal') {\n this.#modal = property.value.value;\n }\n if (property.name === 'roledescription') {\n this.#roledescription = property.value.value;\n }\n if (property.name === 'errormessage') {\n this.#hasErrormessage = true;\n }\n if (property.name === 'details') {\n this.#hasDetails = true;\n }\n }\n }\n\n #isPlainTextField(): boolean {\n if (this.#richlyEditable) {\n return false;\n }\n if (this.#editable) {\n return true;\n }\n return this.#role === 'textbox' || this.#role === 'searchbox';\n }\n\n #isTextOnlyObject(): boolean {\n const role = this.#role;\n return (\n role === 'LineBreak' ||\n role === 'text' ||\n role === 'InlineTextBox' ||\n role === 'StaticText'\n );\n }\n\n #hasFocusableChild(): boolean {\n if (this.#cachedHasFocusableChild === undefined) {\n this.#cachedHasFocusableChild = false;\n for (const child of this.children) {\n if (child.#focusable || child.#hasFocusableChild()) {\n this.#cachedHasFocusableChild = true;\n break;\n }\n }\n }\n return this.#cachedHasFocusableChild;\n }\n\n public find(predicate: (x: AXNode) => boolean): AXNode | null {\n if (predicate(this)) {\n return this;\n }\n for (const child of this.children) {\n const result = child.find(predicate);\n if (result) {\n return result;\n }\n }\n return null;\n }\n\n public isLeafNode(): boolean {\n if (!this.children.length) {\n return true;\n }\n\n // These types of objects may have children that we use as internal\n // implementation details, but we want to expose them as leaves to platform\n // accessibility APIs because screen readers might be confused if they find\n // any children.\n if (this.#isPlainTextField() || this.#isTextOnlyObject()) {\n return true;\n }\n\n // Roles whose children are only presentational according to the ARIA and\n // HTML5 Specs should be hidden from screen readers.\n // (Note that whilst ARIA buttons can have only presentational children, HTML5\n // buttons are allowed to have content.)\n switch (this.#role) {\n case 'doc-cover':\n case 'graphics-symbol':\n case 'img':\n case 'image':\n case 'Meter':\n case 'scrollbar':\n case 'slider':\n case 'separator':\n case 'progressbar':\n return true;\n default:\n break;\n }\n\n if (this.#hasFocusableChild()) {\n return false;\n }\n\n if (this.#role === 'heading' && this.#name) {\n return true;\n }\n\n return false;\n }\n\n public isControl(): boolean {\n switch (this.#role) {\n case 'button':\n case 'checkbox':\n case 'ColorWell':\n case 'combobox':\n case 'DisclosureTriangle':\n case 'listbox':\n case 'menu':\n case 'menubar':\n case 'menuitem':\n case 'menuitemcheckbox':\n case 'menuitemradio':\n case 'radio':\n case 'scrollbar':\n case 'searchbox':\n case 'slider':\n case 'spinbutton':\n case 'switch':\n case 'tab':\n case 'textbox':\n case 'tree':\n case 'treeitem':\n return true;\n default:\n return false;\n }\n }\n\n public isLandmark(): boolean {\n switch (this.#role) {\n case 'banner':\n case 'complementary':\n case 'contentinfo':\n case 'form':\n case 'main':\n case 'navigation':\n case 'region':\n case 'search':\n return true;\n default:\n return false;\n }\n }\n\n public isInteresting(insideControl: boolean): boolean {\n const role = this.#role;\n if (role === 'Ignored' || this.#hidden || this.#ignored) {\n return false;\n }\n\n if (this.isLandmark()) {\n return true;\n }\n\n if (\n this.#focusable ||\n this.#richlyEditable ||\n this.#busy ||\n (this.#live && this.#live !== 'off') ||\n this.#modal ||\n this.#hasErrormessage ||\n this.#hasDetails ||\n this.#roledescription\n ) {\n return true;\n }\n\n // If it's not focusable but has a control role, then it's interesting.\n if (this.isControl()) {\n return true;\n }\n\n // A non focusable child of a control is not interesting\n if (insideControl) {\n return false;\n }\n\n return this.isLeafNode() && (!!this.#name || !!this.#description);\n }\n\n public serialize(): SerializedAXNode {\n const properties = new Map<string, number | string | boolean>();\n for (const property of this.payload.properties || []) {\n properties.set(property.name.toLowerCase(), property.value.value);\n }\n if (this.payload.name) {\n properties.set('name', this.payload.name.value);\n }\n if (this.payload.value) {\n properties.set('value', this.payload.value.value);\n }\n if (this.payload.description) {\n properties.set('description', this.payload.description.value);\n }\n\n const node: SerializedAXNode = {\n role: this.#role,\n elementHandle: async (): Promise<ElementHandle | null> => {\n if (!this.payload.backendDOMNodeId) {\n return null;\n }\n using handle = await this.#realm.adoptBackendNode(\n this.payload.backendDOMNodeId,\n );\n\n // Since Text nodes are not elements, we want to\n // return a handle to the parent element for them.\n return (await handle.evaluateHandle(node => {\n return node.nodeType === Node.TEXT_NODE ? node.parentElement : node;\n })) as ElementHandle<Element>;\n },\n backendNodeId: this.payload.backendDOMNodeId,\n // LoaderId is an experimental mechanism to establish unique IDs across\n // navigations.\n loaderId: (this.#realm.environment as CdpFrame)._loaderId,\n };\n\n type UserStringProperty =\n | 'name'\n | 'value'\n | 'description'\n | 'keyshortcuts'\n | 'roledescription'\n | 'valuetext'\n | 'url';\n\n const userStringProperties: UserStringProperty[] = [\n 'name',\n 'value',\n 'description',\n 'keyshortcuts',\n 'roledescription',\n 'valuetext',\n 'url',\n ];\n const getUserStringPropertyValue = (key: UserStringProperty): string => {\n return properties.get(key) as string;\n };\n\n for (const userStringProperty of userStringProperties) {\n if (!properties.has(userStringProperty)) {\n continue;\n }\n\n node[userStringProperty] = getUserStringPropertyValue(userStringProperty);\n }\n\n type BooleanProperty =\n | 'disabled'\n | 'expanded'\n | 'focused'\n | 'modal'\n | 'multiline'\n | 'multiselectable'\n | 'readonly'\n | 'required'\n | 'selected'\n | 'busy'\n | 'atomic';\n const booleanProperties: BooleanProperty[] = [\n 'disabled',\n 'expanded',\n 'focused',\n 'modal',\n 'multiline',\n 'multiselectable',\n 'readonly',\n 'required',\n 'selected',\n 'busy',\n 'atomic',\n ];\n const getBooleanPropertyValue = (key: BooleanProperty): boolean => {\n return !!properties.get(key);\n };\n\n for (const booleanProperty of booleanProperties) {\n // RootWebArea's treat focus differently than other nodes. They report whether\n // their frame has focus, not whether focus is specifically on the root\n // node.\n if (booleanProperty === 'focused' && this.#role === 'RootWebArea') {\n continue;\n }\n if (!properties.has(booleanProperty)) {\n continue;\n }\n node[booleanProperty] = getBooleanPropertyValue(booleanProperty);\n }\n\n type TristateProperty = 'checked' | 'pressed';\n const tristateProperties: TristateProperty[] = ['checked', 'pressed'];\n for (const tristateProperty of tristateProperties) {\n if (!properties.has(tristateProperty)) {\n continue;\n }\n const value = properties.get(tristateProperty);\n node[tristateProperty] =\n value === 'mixed' ? 'mixed' : value === 'true' ? true : false;\n }\n\n type NumbericalProperty = 'level' | 'valuemax' | 'valuemin';\n const numericalProperties: NumbericalProperty[] = [\n 'level',\n 'valuemax',\n 'valuemin',\n ];\n const getNumericalPropertyValue = (key: NumbericalProperty): number => {\n return properties.get(key) as number;\n };\n for (const numericalProperty of numericalProperties) {\n if (!properties.has(numericalProperty)) {\n continue;\n }\n node[numericalProperty] = getNumericalPropertyValue(numericalProperty);\n }\n\n type TokenProperty =\n | 'autocomplete'\n | 'haspopup'\n | 'invalid'\n | 'orientation'\n | 'live'\n | 'relevant'\n | 'errormessage'\n | 'details';\n const tokenProperties: TokenProperty[] = [\n 'autocomplete',\n 'haspopup',\n 'invalid',\n 'orientation',\n 'live',\n 'relevant',\n 'errormessage',\n 'details',\n ];\n const getTokenPropertyValue = (key: TokenProperty): string => {\n return properties.get(key) as string;\n };\n for (const tokenProperty of tokenProperties) {\n const value = getTokenPropertyValue(tokenProperty);\n if (!value || value === 'false') {\n continue;\n }\n node[tokenProperty] = getTokenPropertyValue(tokenProperty);\n }\n return node;\n }\n\n public static createTree(\n realm: Realm,\n payloads: Protocol.Accessibility.AXNode[],\n ): AXNode | null {\n const nodeById = new Map<string, AXNode>();\n for (const payload of payloads) {\n nodeById.set(payload.nodeId, new AXNode(realm, payload));\n }\n for (const node of nodeById.values()) {\n for (const childId of node.payload.childIds || []) {\n const child = nodeById.get(childId);\n if (child) {\n node.children.push(child);\n }\n }\n }\n return nodeById.values().next().value ?? null;\n }\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {JSHandle} from '../api/JSHandle.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {DisposableStack} from '../util/disposable.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\n\nimport type {ExecutionContext} from './ExecutionContext.js';\n\n/**\n * @internal\n */\nexport class Binding {\n #name: string;\n #fn: (...args: unknown[]) => unknown;\n #initSource: string;\n #logger: Logger;\n constructor(\n name: string,\n fn: (...args: unknown[]) => unknown,\n initSource: string,\n logger: Logger,\n ) {\n this.#name = name;\n this.#fn = fn;\n this.#initSource = initSource;\n this.#logger = logger;\n }\n\n get name(): string {\n return this.#name;\n }\n\n get initSource(): string {\n return this.#initSource;\n }\n\n /**\n * @param context - Context to run the binding in; the context should have\n * the binding added to it beforehand.\n * @param id - ID of the call. This should come from the CDP\n * `onBindingCalled` response.\n * @param args - Plain arguments from CDP.\n */\n async run(\n context: ExecutionContext,\n id: number,\n args: unknown[],\n isTrivial: boolean,\n ): Promise<void> {\n const stack = new DisposableStack();\n try {\n if (!isTrivial) {\n // Getting non-trivial arguments.\n using handles = await context.evaluateHandle(\n (name, seq) => {\n // @ts-expect-error Code is evaluated in a different context.\n return globalThis[name].args.get(seq);\n },\n this.#name,\n id,\n );\n const properties = await handles.getProperties();\n for (const [index, handle] of properties) {\n // This is not straight-forward since some arguments can stringify, but\n // aren't plain objects so add subtypes when the use-case arises.\n if (index in args) {\n switch (handle.remoteObject().subtype) {\n case 'node':\n args[+index] = handle;\n break;\n default:\n stack.use(handle);\n }\n } else {\n stack.use(handle);\n }\n }\n }\n\n await context.evaluate(\n (name, seq, result) => {\n // @ts-expect-error Code is evaluated in a different context.\n const callbacks = globalThis[name].callbacks;\n callbacks.get(seq).resolve(result);\n callbacks.delete(seq);\n },\n this.#name,\n id,\n await this.#fn(...args),\n );\n\n for (const arg of args) {\n if (arg instanceof JSHandle) {\n stack.use(arg);\n }\n }\n } catch (error) {\n if (isErrorLike(error)) {\n await context\n .evaluate(\n (name, seq, message, stack) => {\n const error = new Error(message);\n error.stack = stack;\n // @ts-expect-error Code is evaluated in a different context.\n const callbacks = globalThis[name].callbacks;\n callbacks.get(seq).reject(error);\n callbacks.delete(seq);\n },\n this.#name,\n id,\n error.message,\n error.stack,\n )\n .catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n } else {\n await context\n .evaluate(\n (name, seq, error) => {\n // @ts-expect-error Code is evaluated in a different context.\n const callbacks = globalThis[name].callbacks;\n callbacks.get(seq).reject(error);\n callbacks.delete(seq);\n },\n this.#name,\n id,\n error,\n )\n .catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }\n }\n }\n}\n","/**\n * @license\n * Copyright 2025 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {\n AdapterState,\n BluetoothEmulation,\n PreconnectedPeripheral,\n} from '../api/BluetoothEmulation.js';\n\nimport type {Connection} from './Connection.js';\n\n/**\n * @internal\n */\nexport class CdpBluetoothEmulation implements BluetoothEmulation {\n #connection: Connection;\n\n constructor(connection: Connection) {\n this.#connection = connection;\n }\n\n async emulateAdapter(state: AdapterState, leSupported = true): Promise<void> {\n // Bluetooth spec requires overriding the existing adapter (step 6). From the CDP\n // perspective, it means disabling the emulation first.\n // https://webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateAdapter-command\n await this.#connection.send('BluetoothEmulation.disable');\n await this.#connection.send('BluetoothEmulation.enable', {\n state,\n leSupported,\n });\n }\n\n async disableEmulation(): Promise<void> {\n await this.#connection.send('BluetoothEmulation.disable');\n }\n\n async simulatePreconnectedPeripheral(\n preconnectedPeripheral: PreconnectedPeripheral,\n ): Promise<void> {\n await this.#connection.send(\n 'BluetoothEmulation.simulatePreconnectedPeripheral',\n preconnectedPeripheral,\n );\n }\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {Frame} from '../api/Frame.js';\nimport type {JSHandle} from '../api/JSHandle.js';\n\n/**\n * @public\n */\nexport interface ConsoleMessageLocation {\n /**\n * URL of the resource if known or `undefined` otherwise.\n */\n url?: string;\n\n /**\n * 0-based line number in the resource if known or `undefined` otherwise.\n */\n lineNumber?: number;\n\n /**\n * 0-based column number in the resource if known or `undefined` otherwise.\n */\n columnNumber?: number;\n}\n\n/**\n * The supported types for console messages.\n * @public\n */\nexport type ConsoleMessageType =\n | 'log'\n | 'debug'\n | 'info'\n | 'error'\n | 'warn'\n | 'dir'\n | 'dirxml'\n | 'table'\n | 'trace'\n | 'clear'\n | 'startGroup'\n | 'startGroupCollapsed'\n | 'endGroup'\n | 'assert'\n | 'profile'\n | 'profileEnd'\n | 'count'\n | 'timeEnd'\n | 'verbose';\n\n/**\n * ConsoleMessage objects are dispatched by page via the 'console' event.\n * @public\n */\nexport class ConsoleMessage {\n #type: ConsoleMessageType;\n #text: string;\n #args: JSHandle[];\n #stackTraceLocations: ConsoleMessageLocation[];\n #frame?: Frame;\n #rawStackTrace?: Protocol.Runtime.StackTrace;\n #targetId?: string;\n\n /**\n * @internal\n */\n constructor(\n type: ConsoleMessageType,\n text: string,\n args: JSHandle[],\n stackTraceLocations: ConsoleMessageLocation[],\n frame?: Frame,\n rawStackTrace?: Protocol.Runtime.StackTrace,\n targetId?: string,\n ) {\n this.#type = type;\n this.#text = text;\n this.#args = args;\n this.#stackTraceLocations = stackTraceLocations;\n this.#frame = frame;\n this.#rawStackTrace = rawStackTrace;\n this.#targetId = targetId;\n }\n\n /**\n * The type of the console message.\n */\n type(): ConsoleMessageType {\n return this.#type;\n }\n\n /**\n * The text of the console message.\n */\n text(): string {\n return this.#text;\n }\n\n /**\n * An array of arguments passed to the console.\n */\n args(): JSHandle[] {\n return this.#args;\n }\n\n /**\n * The location of the console message.\n */\n location(): ConsoleMessageLocation {\n return (\n this.#stackTraceLocations[0] ??\n (this.#frame ? {url: this.#frame.url()} : {})\n );\n }\n\n /**\n * The array of locations on the stack of the console message.\n */\n stackTrace(): ConsoleMessageLocation[] {\n return this.#stackTraceLocations;\n }\n\n /**\n * The underlying protocol stack trace if available.\n *\n * @internal\n */\n _rawStackTrace(): Protocol.Runtime.StackTrace | undefined {\n return this.#rawStackTrace;\n }\n\n /**\n * The targetId from which this console message originated.\n *\n * @internal\n */\n _targetId(): string | undefined {\n return this.#targetId;\n }\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {ElementHandle} from '../api/ElementHandle.js';\nimport {assert} from '../util/assert.js';\n\n/**\n * File choosers let you react to the page requesting for a file.\n *\n * @remarks\n * `FileChooser` instances are returned via the {@link Page.waitForFileChooser} method.\n *\n * In browsers, only one file chooser can be opened at a time.\n * All file choosers must be accepted or canceled. Not doing so will prevent\n * subsequent file choosers from appearing.\n *\n * @example\n *\n * ```ts\n * const [fileChooser] = await Promise.all([\n * page.waitForFileChooser(),\n * page.click('#upload-file-button'), // some button that triggers file selection\n * ]);\n * await fileChooser.accept(['/tmp/myfile.pdf']);\n * ```\n *\n * @public\n */\nexport class FileChooser {\n #element: ElementHandle<HTMLInputElement>;\n #multiple: boolean;\n #handled = false;\n\n /**\n * @internal\n */\n constructor(element: ElementHandle<HTMLInputElement>, multiple: boolean) {\n this.#element = element;\n this.#multiple = multiple;\n }\n\n /**\n * Whether file chooser allow for\n * {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#attr-multiple | multiple}\n * file selection.\n */\n isMultiple(): boolean {\n return this.#multiple;\n }\n\n /**\n * Accept the file chooser request with the given file paths.\n *\n * @remarks This will not validate whether the file paths exists. Also, if a\n * path is relative, then it is resolved against the\n * {@link https://nodejs.org/api/process.html#process_process_cwd | current working directory}.\n * For locals script connecting to remote chrome environments, paths must be\n * absolute.\n */\n async accept(paths: string[]): Promise<void> {\n assert(\n !this.#handled,\n 'Cannot accept FileChooser which is already handled!',\n );\n this.#handled = true;\n await this.#element.uploadFile(...paths);\n }\n\n /**\n * Closes the file chooser without selecting any files.\n */\n async cancel(): Promise<void> {\n assert(\n !this.#handled,\n 'Cannot cancel FileChooser which is already handled!',\n );\n this.#handled = true;\n // XXX: These events should converted to trusted events. Perhaps do this\n // in `DOM.setFileInputFiles`?\n await this.#element.evaluate(element => {\n element.dispatchEvent(new Event('cancel', {bubbles: true}));\n });\n }\n}\n","/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {HTTPRequest} from '../api/HTTPRequest.js';\nimport type {HTTPResponse} from '../api/HTTPResponse.js';\n\nimport type {EventType} from './EventEmitter.js';\n\n/**\n * We use symbols to prevent any external parties listening to these events.\n * They are internal to Puppeteer.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace NetworkManagerEvent {\n export const Request = Symbol('NetworkManager.Request');\n export const RequestServedFromCache = Symbol(\n 'NetworkManager.RequestServedFromCache',\n );\n export const Response = Symbol('NetworkManager.Response');\n export const RequestFailed = Symbol('NetworkManager.RequestFailed');\n export const RequestFinished = Symbol('NetworkManager.RequestFinished');\n}\n\n/**\n * @internal\n */\nexport interface NetworkManagerEvents extends Record<EventType, unknown> {\n [NetworkManagerEvent.Request]: HTTPRequest;\n [NetworkManagerEvent.RequestServedFromCache]: HTTPRequest;\n [NetworkManagerEvent.Response]: HTTPResponse;\n [NetworkManagerEvent.RequestFailed]: HTTPRequest;\n [NetworkManagerEvent.RequestFinished]: HTTPRequest;\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {Deferred} from '../util/Deferred.js';\nimport {rewriteError} from '../util/ErrorLike.js';\nimport type {GetIdFn} from '../util/incremental-id-generator.js';\n\nimport {DEBUG_PREFIXES, type Logger} from './Debug.js';\nimport {ProtocolError, TargetCloseError} from './Errors.js';\n\n/**\n * Manages callbacks and their IDs for the protocol request/response communication.\n *\n * @internal\n */\nexport class CallbackRegistry {\n readonly #callbacks = new Map<number, Callback>();\n readonly #idGenerator: GetIdFn;\n #logger: Logger;\n\n constructor(idGenerator: GetIdFn, logger: Logger) {\n this.#idGenerator = idGenerator;\n this.#logger = logger;\n }\n\n has(id: number): boolean {\n return this.#callbacks.has(id);\n }\n\n create(\n label: string,\n timeout: number | undefined,\n request: (id: number) => void,\n ): Promise<unknown> {\n const callback = new Callback(this.#idGenerator(), label, timeout);\n this.#callbacks.set(callback.id, callback);\n try {\n request(callback.id);\n } catch (error) {\n // We still throw sync errors synchronously and clean up the scheduled\n // callback.\n void callback.promise\n .catch(err => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n })\n .finally(() => {\n this.#callbacks.delete(callback.id);\n });\n callback.reject(error as Error);\n throw error;\n }\n // Must only have sync code up until here.\n return callback.promise.finally(() => {\n this.#callbacks.delete(callback.id);\n });\n }\n\n reject(id: number, message: string, originalMessage?: string): void {\n const callback = this.#callbacks.get(id);\n if (!callback) {\n return;\n }\n this._reject(callback, message, originalMessage);\n }\n\n rejectRaw(id: number, error: object): void {\n const callback = this.#callbacks.get(id);\n if (!callback) {\n return;\n }\n callback.reject(error as any);\n }\n\n _reject(\n callback: Callback,\n errorMessage: string | ProtocolError,\n originalMessage?: string,\n ): void {\n let error: ProtocolError;\n let message: string;\n if (errorMessage instanceof ProtocolError) {\n error = errorMessage;\n error.cause = callback.error;\n message = errorMessage.message;\n } else {\n error = callback.error;\n message = errorMessage;\n }\n\n callback.reject(\n rewriteError(\n error,\n `Protocol error (${callback.label}): ${message}`,\n originalMessage,\n ),\n );\n }\n\n resolve(id: number, value: unknown): void {\n const callback = this.#callbacks.get(id);\n if (!callback) {\n return;\n }\n callback.resolve(value);\n }\n\n clear(): void {\n for (const callback of this.#callbacks.values()) {\n // TODO: probably we can accept error messages as params.\n this._reject(callback, new TargetCloseError('Target closed'));\n }\n this.#callbacks.clear();\n }\n\n /**\n * @internal\n */\n getPendingProtocolErrors(): Error[] {\n const result: Error[] = [];\n for (const callback of this.#callbacks.values()) {\n result.push(\n new Error(\n `${callback.label} timed out. Trace: ${callback.error.stack}`,\n ),\n );\n }\n return result;\n }\n}\n/**\n * @internal\n */\n\nexport class Callback {\n #id: number;\n #error = new ProtocolError();\n #deferred = Deferred.create<unknown>();\n #timer?: ReturnType<typeof setTimeout>;\n #label: string;\n\n constructor(id: number, label: string, timeout?: number) {\n this.#id = id;\n this.#label = label;\n if (timeout) {\n this.#timer = setTimeout(() => {\n this.#deferred.reject(\n rewriteError(\n this.#error,\n `${label} timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.`,\n ),\n );\n }, timeout);\n }\n }\n\n resolve(value: unknown): void {\n clearTimeout(this.#timer);\n this.#deferred.resolve(value);\n }\n\n reject(error: Error): void {\n clearTimeout(this.#timer);\n this.#deferred.reject(error);\n }\n\n get id(): number {\n return this.#id;\n }\n\n get promise(): Promise<unknown> {\n return this.#deferred.valueOrThrow();\n }\n\n get error(): ProtocolError {\n return this.#error;\n }\n\n get label(): string {\n return this.#label;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {ProtocolMapping} from 'devtools-protocol/types/protocol-mapping.js';\n\nimport {\n type CDPEvents,\n CDPSession,\n CDPSessionEvent,\n type CommandOptions,\n} from '../api/CDPSession.js';\nimport {CallbackRegistry} from '../common/CallbackRegistry.js';\nimport type {Logger} from '../common/Debug.js';\nimport {TargetCloseError} from '../common/Errors.js';\nimport {assert} from '../util/assert.js';\nimport {createProtocolErrorMessage} from '../util/ErrorLike.js';\n\nimport type {Connection} from './Connection.js';\nimport type {CdpTarget} from './Target.js';\n\n/**\n * @internal\n */\n\nexport class CdpCDPSession extends CDPSession {\n #sessionId: string;\n #targetType: string;\n #callbacks: CallbackRegistry;\n #connection: Connection;\n #parentSessionId?: string;\n #target?: CdpTarget;\n #rawErrors = false;\n #detached = false;\n /**\n * @internal\n */\n constructor(\n connection: Connection,\n targetType: string,\n sessionId: string,\n parentSessionId: string | undefined,\n rawErrors: boolean,\n logger: Logger,\n ) {\n super();\n this.#connection = connection;\n this.#targetType = targetType;\n this.#callbacks = new CallbackRegistry(connection._idGenerator, logger);\n this.#sessionId = sessionId;\n this.#parentSessionId = parentSessionId;\n this.#rawErrors = rawErrors;\n }\n\n /**\n * Sets the {@link CdpTarget} associated with the session instance.\n *\n * @internal\n */\n setTarget(target: CdpTarget): void {\n this.#target = target;\n }\n\n /**\n * Gets the {@link CdpTarget} associated with the session instance.\n *\n * @internal\n */\n target(): CdpTarget {\n assert(this.#target, 'Target must exist');\n return this.#target;\n }\n\n override connection(): Connection {\n return this.#connection;\n }\n\n override get detached(): boolean {\n return this.#connection._closed || this.#detached;\n }\n\n override parentSession(): CDPSession | undefined {\n if (!this.#parentSessionId) {\n // In some cases, e.g., DevTools pages there is no parent session. In this\n // case, we treat the current session as the parent session.\n return this;\n }\n const parent = this.#connection?.session(this.#parentSessionId);\n return parent ?? undefined;\n }\n\n override send<T extends keyof ProtocolMapping.Commands>(\n method: T,\n params?: ProtocolMapping.Commands[T]['paramsType'][0],\n options?: CommandOptions,\n ): Promise<ProtocolMapping.Commands[T]['returnType']> {\n if (this.detached) {\n return Promise.reject(\n new TargetCloseError(\n `Protocol error (${method}): Session closed. Most likely the ${this.#targetType} has been closed.`,\n ),\n );\n }\n return this.#connection\n ._rawSend(this.#callbacks, method, params, this.#sessionId, options)\n .catch(error => {\n if (\n error instanceof Error &&\n error.message.includes('Session with given id not found')\n ) {\n this.onClosed();\n throw new TargetCloseError(\n `Protocol error (${method}): Session with given id not found.`,\n );\n }\n throw error;\n });\n }\n /**\n * @internal\n */\n onMessage(object: {\n id?: number;\n method: keyof CDPEvents;\n params: CDPEvents[keyof CDPEvents];\n error: {message: string; data: any; code: number};\n result?: any;\n }): void {\n if (object.id) {\n if (object.error) {\n if (this.#rawErrors) {\n this.#callbacks.rejectRaw(object.id, object.error);\n } else {\n this.#callbacks.reject(\n object.id,\n createProtocolErrorMessage(object),\n object.error.message,\n );\n }\n } else {\n this.#callbacks.resolve(object.id, object.result);\n }\n } else {\n assert(!object.id);\n this.emit(object.method, object.params);\n }\n }\n\n /**\n * Detaches the cdpSession from the target. Once detached, the cdpSession object\n * won't emit any events and can't be used to send messages.\n */\n override async detach(): Promise<void> {\n if (this.detached) {\n throw new Error(\n `Session already detached. Most likely the ${this.#targetType} has been closed.`,\n );\n }\n await this.#connection.send('Target.detachFromTarget', {\n sessionId: this.#sessionId,\n });\n this.#detached = true;\n }\n\n /**\n * @internal\n */\n onClosed(): void {\n this.#callbacks.clear();\n this.#detached = true;\n this.emit(CDPSessionEvent.Disconnected, undefined);\n }\n\n /**\n * Returns the session's id.\n */\n override id(): string {\n return this.#sessionId;\n }\n\n /**\n * @internal\n */\n hasCallback(id: number): boolean {\n return this.#callbacks.has(id);\n }\n\n /**\n * @internal\n */\n getPendingProtocolErrors(): Error[] {\n return this.#callbacks.getPendingProtocolErrors();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\nimport type {ProtocolMapping} from 'devtools-protocol/types/protocol-mapping.js';\n\nimport type {CommandOptions} from '../api/CDPSession.js';\nimport {\n CDPSessionEvent,\n type CDPSession,\n type CDPSessionEvents,\n} from '../api/CDPSession.js';\nimport {CallbackRegistry} from '../common/CallbackRegistry.js';\nimport type {ConnectionTransport} from '../common/ConnectionTransport.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {ConnectionClosedError, TargetCloseError} from '../common/Errors.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {createProtocolErrorMessage} from '../util/ErrorLike.js';\nimport {\n createIncrementalIdGenerator,\n type GetIdFn,\n} from '../util/incremental-id-generator.js';\n\nimport {CdpCDPSession} from './CdpSession.js';\n\n/**\n * @public\n */\nexport class Connection extends EventEmitter<CDPSessionEvents> {\n #url: string;\n #transport: ConnectionTransport;\n #delay: number;\n #timeout: number;\n #sessions = new Map<string, CdpCDPSession>();\n #closed = false;\n #manuallyAttached = new Set<string>();\n #rejectEmulateNetworkConditionsCalls = false;\n #callbacks: CallbackRegistry;\n #rawErrors = false;\n #idGenerator: GetIdFn;\n #debugProtocolSend: ((...args: unknown[]) => void) | undefined;\n #debugProtocolReceive: ((...args: unknown[]) => void) | undefined;\n #logger: Logger;\n\n /**\n * @internal\n */\n constructor(\n url: string,\n transport: ConnectionTransport,\n delay = 0,\n timeout: number | undefined = undefined,\n rawErrors = false,\n idGenerator: () => number = createIncrementalIdGenerator(),\n logger: Logger,\n ) {\n super();\n this.#logger = logger;\n this.#rawErrors = rawErrors;\n this.#idGenerator = idGenerator;\n this.#callbacks = new CallbackRegistry(idGenerator, logger);\n this.#url = url;\n this.#debugProtocolSend = logger?.(DEBUG_PREFIXES.cdpSend);\n this.#debugProtocolReceive = logger?.(DEBUG_PREFIXES.cdpReceive);\n this.#delay = delay;\n this.#timeout = timeout ?? 180_000;\n\n this.#transport = transport;\n this.#transport.onmessage = this.onMessage.bind(this);\n this.#transport.onclose = this.#onClose.bind(this);\n }\n\n static fromSession(session: CDPSession): Connection | undefined {\n return session.connection();\n }\n\n /**\n * @internal\n */\n get delay(): number {\n return this.#delay;\n }\n\n get timeout(): number {\n return this.#timeout;\n }\n\n /**\n * @internal\n */\n get rejectEmulateNetworkConditionsCalls(): boolean {\n return this.#rejectEmulateNetworkConditionsCalls;\n }\n\n set rejectEmulateNetworkConditionsCalls(value: boolean) {\n this.#rejectEmulateNetworkConditionsCalls = value;\n }\n\n /**\n * @internal\n */\n get _closed(): boolean {\n return this.#closed;\n }\n\n /**\n * @internal\n */\n get _idGenerator(): GetIdFn {\n return this.#idGenerator;\n }\n\n /**\n * @internal\n */\n get _sessions(): Map<string, CdpCDPSession> {\n return this.#sessions;\n }\n\n /**\n * @internal\n */\n _session(sessionId: string): CdpCDPSession | null {\n return this.#sessions.get(sessionId) || null;\n }\n\n /**\n * @param sessionId - The session id\n * @returns The current CDP session if it exists\n */\n session(sessionId: string): CDPSession | null {\n return this._session(sessionId);\n }\n\n url(): string {\n return this.#url;\n }\n\n send<T extends keyof ProtocolMapping.Commands>(\n method: T,\n params?: ProtocolMapping.Commands[T]['paramsType'][0],\n options?: CommandOptions,\n ): Promise<ProtocolMapping.Commands[T]['returnType']> {\n // There is only ever 1 param arg passed, but the Protocol defines it as an\n // array of 0 or 1 items See this comment:\n // https://github.com/ChromeDevTools/devtools-protocol/pull/113#issuecomment-412603285\n // which explains why the protocol defines the params this way for better\n // type-inference.\n // So now we check if there are any params or not and deal with them accordingly.\n return this._rawSend(this.#callbacks, method, params, undefined, options);\n }\n\n /**\n * @internal\n */\n _rawSend<T extends keyof ProtocolMapping.Commands>(\n callbacks: CallbackRegistry,\n method: T,\n params: ProtocolMapping.Commands[T]['paramsType'][0],\n sessionId?: string,\n options?: CommandOptions,\n ): Promise<ProtocolMapping.Commands[T]['returnType']> {\n if (this.#closed) {\n return Promise.reject(new ConnectionClosedError('Connection closed.'));\n }\n if (\n method === 'Network.emulateNetworkConditions' &&\n this.rejectEmulateNetworkConditionsCalls\n ) {\n return Promise.reject(\n new Error(\n 'Cannot reset network conditions: rule-based emulation is enabled.',\n ),\n );\n }\n return callbacks.create(method, options?.timeout ?? this.#timeout, id => {\n const stringifiedMessage = JSON.stringify({\n method,\n params,\n id,\n sessionId,\n });\n this.#debugProtocolSend?.(stringifiedMessage);\n this.#transport.send(stringifiedMessage);\n }) as Promise<ProtocolMapping.Commands[T]['returnType']>;\n }\n\n /**\n * @internal\n */\n async closeBrowser(): Promise<void> {\n await this.send('Browser.close');\n }\n\n /**\n * @internal\n */\n protected async onMessage(message: string): Promise<void> {\n if (this.#delay) {\n await new Promise(r => {\n return setTimeout(r, this.#delay);\n });\n }\n this.#debugProtocolReceive?.(message);\n const object = JSON.parse(message);\n if (object.method === 'Target.attachedToTarget') {\n const sessionId = object.params.sessionId;\n const session = new CdpCDPSession(\n this,\n object.params.targetInfo.type,\n sessionId,\n object.sessionId,\n this.#rawErrors,\n this.#logger,\n );\n this.#sessions.set(sessionId, session);\n this.emit(CDPSessionEvent.SessionAttached, session);\n const parentSession = this.#sessions.get(object.sessionId);\n if (parentSession) {\n parentSession.emit(CDPSessionEvent.SessionAttached, session);\n }\n } else if (object.method === 'Target.detachedFromTarget') {\n const session = this.#sessions.get(object.params.sessionId);\n if (session) {\n session.onClosed();\n this.#sessions.delete(object.params.sessionId);\n this.emit(CDPSessionEvent.SessionDetached, session);\n const parentSession = this.#sessions.get(object.sessionId);\n if (parentSession) {\n parentSession.emit(CDPSessionEvent.SessionDetached, session);\n }\n }\n }\n if (object.sessionId) {\n const session = this.#sessions.get(object.sessionId);\n if (session) {\n session.onMessage(object);\n }\n } else if (object.id) {\n if (this.#callbacks.has(object.id)) {\n if (object.error) {\n if (this.#rawErrors) {\n this.#callbacks.rejectRaw(object.id, object.error);\n } else {\n this.#callbacks.reject(\n object.id,\n createProtocolErrorMessage(object),\n object.error.message,\n );\n }\n } else {\n this.#callbacks.resolve(object.id, object.result);\n }\n } else {\n for (const session of this.#sessions.values()) {\n if (session.hasCallback(object.id)) {\n session.onMessage(object);\n break;\n }\n }\n }\n } else {\n this.emit(object.method, object.params);\n }\n }\n\n #onClose(): void {\n if (this.#closed) {\n return;\n }\n this.#closed = true;\n this.#transport.onmessage = undefined;\n this.#transport.onclose = undefined;\n this.#callbacks.clear();\n for (const session of this.#sessions.values()) {\n session.onClosed();\n }\n this.#sessions.clear();\n this.emit(CDPSessionEvent.Disconnected, undefined);\n }\n\n dispose(): void {\n this.#onClose();\n this.#transport.close();\n }\n\n /**\n * @internal\n */\n isAutoAttached(targetId: string): boolean {\n return !this.#manuallyAttached.has(targetId);\n }\n\n /**\n * @internal\n */\n async _createSession(\n targetInfo: {targetId: string},\n isAutoAttachEmulated = true,\n ): Promise<CdpCDPSession> {\n if (!isAutoAttachEmulated) {\n this.#manuallyAttached.add(targetInfo.targetId);\n }\n const {sessionId} = await this.send('Target.attachToTarget', {\n targetId: targetInfo.targetId,\n flatten: true,\n });\n this.#manuallyAttached.delete(targetInfo.targetId);\n const session = this.#sessions.get(sessionId);\n if (!session) {\n throw new Error('CDPSession creation failed.');\n }\n return session;\n }\n\n /**\n * @param targetInfo - The target info\n * @returns The CDP session that is created\n */\n async createSession(\n targetInfo: Protocol.Target.TargetInfo,\n ): Promise<CDPSession> {\n return await this._createSession(targetInfo, false);\n }\n\n /**\n * @internal\n */\n getPendingProtocolErrors(): Error[] {\n const result: Error[] = [];\n result.push(...this.#callbacks.getPendingProtocolErrors());\n for (const session of this.#sessions.values()) {\n result.push(...session.getPendingProtocolErrors());\n }\n return result;\n }\n}\n\n/**\n * @internal\n */\nexport function isTargetClosedError(error: Error): boolean {\n return error instanceof TargetCloseError;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {CDPSession} from '../api/CDPSession.js';\nimport {DEBUG_PREFIXES} from '../common/Debug.js';\nimport type {Logger} from '../common/Debug.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {PuppeteerURL} from '../common/util.js';\nimport {assert} from '../util/assert.js';\nimport {DisposableStack} from '../util/disposable.js';\n\n/**\n * The CoverageEntry class represents one entry of the coverage report.\n * @public\n */\nexport interface CoverageEntry {\n /**\n * The URL of the style sheet or script.\n */\n url: string;\n /**\n * The content of the style sheet or script.\n */\n text: string;\n /**\n * The covered range as start and end positions.\n */\n ranges: Array<{start: number; end: number}>;\n}\n\n/**\n * The CoverageEntry class for JavaScript\n * @public\n */\nexport interface JSCoverageEntry extends CoverageEntry {\n /**\n * Raw V8 script coverage entry.\n */\n rawScriptCoverage?: Protocol.Profiler.ScriptCoverage;\n}\n\n/**\n * Set of configurable options for JS coverage.\n * @public\n */\nexport interface JSCoverageOptions {\n /**\n * Whether to reset coverage on every navigation.\n */\n resetOnNavigation?: boolean;\n /**\n * Whether anonymous scripts generated by the page should be reported.\n */\n reportAnonymousScripts?: boolean;\n /**\n * Whether the result includes raw V8 script coverage entries.\n */\n includeRawScriptCoverage?: boolean;\n /**\n * Whether to collect coverage information at the block level.\n * If true, coverage will be collected at the block level (this is the default).\n * If false, coverage will be collected at the function level.\n */\n useBlockCoverage?: boolean;\n}\n\n/**\n * Set of configurable options for CSS coverage.\n * @public\n */\nexport interface CSSCoverageOptions {\n /**\n * Whether to reset coverage on every navigation.\n */\n resetOnNavigation?: boolean;\n}\n\n/**\n * The Coverage class provides methods to gather information about parts of\n * JavaScript and CSS that were used by the page.\n *\n * @remarks\n * To output coverage in a form consumable by {@link https://github.com/istanbuljs | Istanbul},\n * see {@link https://github.com/istanbuljs/puppeteer-to-istanbul | puppeteer-to-istanbul}.\n *\n * @example\n * An example of using JavaScript and CSS coverage to get percentage of initially\n * executed code:\n *\n * ```ts\n * // Enable both JavaScript and CSS coverage\n * await Promise.all([\n * page.coverage.startJSCoverage(),\n * page.coverage.startCSSCoverage(),\n * ]);\n * // Navigate to page\n * await page.goto('https://example.com');\n * // Disable both JavaScript and CSS coverage\n * const [jsCoverage, cssCoverage] = await Promise.all([\n * page.coverage.stopJSCoverage(),\n * page.coverage.stopCSSCoverage(),\n * ]);\n * let totalBytes = 0;\n * let usedBytes = 0;\n * const coverage = [...jsCoverage, ...cssCoverage];\n * for (const entry of coverage) {\n * totalBytes += entry.text.length;\n * for (const range of entry.ranges) usedBytes += range.end - range.start - 1;\n * }\n * console.log(`Bytes used: ${(usedBytes / totalBytes) * 100}%`);\n * ```\n *\n * @public\n */\nexport class Coverage {\n #jsCoverage: JSCoverage;\n #cssCoverage: CSSCoverage;\n\n /**\n * @internal\n */\n constructor(client: CDPSession) {\n this.#jsCoverage = new JSCoverage(client);\n this.#cssCoverage = new CSSCoverage(client);\n }\n\n /**\n * @internal\n */\n updateClient(client: CDPSession): void {\n this.#jsCoverage.updateClient(client);\n this.#cssCoverage.updateClient(client);\n }\n\n /**\n * @param options - Set of configurable options for coverage defaults to\n * `resetOnNavigation : true, reportAnonymousScripts : false,`\n * `includeRawScriptCoverage : false, useBlockCoverage : true`\n * @returns Promise that resolves when coverage is started.\n *\n * @remarks\n * Anonymous scripts are ones that don't have an associated url. These are\n * scripts that are dynamically created on the page using `eval` or\n * `new Function`. If `reportAnonymousScripts` is set to `true`, anonymous\n * scripts URL will start with `debugger://VM` (unless a magic //# sourceURL\n * comment is present, in which case that will the be URL).\n */\n async startJSCoverage(options: JSCoverageOptions = {}): Promise<void> {\n return await this.#jsCoverage.start(options);\n }\n\n /**\n * Promise that resolves to the array of coverage reports for\n * all scripts.\n *\n * @remarks\n * JavaScript Coverage doesn't include anonymous scripts by default.\n * However, scripts with sourceURLs are reported.\n */\n async stopJSCoverage(): Promise<JSCoverageEntry[]> {\n return await this.#jsCoverage.stop();\n }\n\n /**\n * @param options - Set of configurable options for coverage, defaults to\n * `resetOnNavigation : true`\n * @returns Promise that resolves when coverage is started.\n */\n async startCSSCoverage(options: CSSCoverageOptions = {}): Promise<void> {\n return await this.#cssCoverage.start(options);\n }\n\n /**\n * Promise that resolves to the array of coverage reports\n * for all stylesheets.\n *\n * @remarks\n * CSS Coverage doesn't include dynamically injected style tags\n * without sourceURLs.\n */\n async stopCSSCoverage(): Promise<CoverageEntry[]> {\n return await this.#cssCoverage.stop();\n }\n}\n\n/**\n * @public\n */\nexport class JSCoverage {\n #client: CDPSession;\n #enabled = false;\n #scriptURLs = new Map<string, string>();\n #scriptSources = new Map<string, string>();\n #subscriptions?: DisposableStack;\n #resetOnNavigation = false;\n #reportAnonymousScripts = false;\n #includeRawScriptCoverage = false;\n\n #logger?: Logger;\n\n /**\n * @internal\n */\n constructor(client: CDPSession, logger?: Logger) {\n this.#logger = logger;\n this.#client = client;\n }\n\n /**\n * @internal\n */\n updateClient(client: CDPSession): void {\n this.#client = client;\n }\n\n async start(\n options: {\n resetOnNavigation?: boolean;\n reportAnonymousScripts?: boolean;\n includeRawScriptCoverage?: boolean;\n useBlockCoverage?: boolean;\n } = {},\n ): Promise<void> {\n assert(!this.#enabled, 'JSCoverage is already enabled');\n const {\n resetOnNavigation = true,\n reportAnonymousScripts = false,\n includeRawScriptCoverage = false,\n useBlockCoverage = true,\n } = options;\n this.#resetOnNavigation = resetOnNavigation;\n this.#reportAnonymousScripts = reportAnonymousScripts;\n this.#includeRawScriptCoverage = includeRawScriptCoverage;\n this.#enabled = true;\n this.#scriptURLs.clear();\n this.#scriptSources.clear();\n this.#subscriptions = new DisposableStack();\n const clientEmitter = this.#subscriptions.use(\n new EventEmitter(this.#client),\n );\n clientEmitter.on('Debugger.scriptParsed', this.#onScriptParsed.bind(this));\n clientEmitter.on(\n 'Runtime.executionContextsCleared',\n this.#onExecutionContextsCleared.bind(this),\n );\n await Promise.all([\n this.#client.send('Profiler.enable'),\n this.#client.send('Profiler.startPreciseCoverage', {\n callCount: this.#includeRawScriptCoverage,\n detailed: useBlockCoverage,\n }),\n this.#client.send('Debugger.enable'),\n this.#client.send('Debugger.setSkipAllPauses', {skip: true}),\n ]);\n }\n\n #onExecutionContextsCleared(): void {\n if (!this.#resetOnNavigation) {\n return;\n }\n this.#scriptURLs.clear();\n this.#scriptSources.clear();\n }\n\n async #onScriptParsed(\n event: Protocol.Debugger.ScriptParsedEvent,\n ): Promise<void> {\n // Ignore puppeteer-injected scripts\n if (PuppeteerURL.isPuppeteerURL(event.url)) {\n return;\n }\n // Ignore other anonymous scripts unless the reportAnonymousScripts option is true.\n if (!event.url && !this.#reportAnonymousScripts) {\n return;\n }\n try {\n const response = await this.#client.send('Debugger.getScriptSource', {\n scriptId: event.scriptId,\n });\n this.#scriptURLs.set(event.scriptId, event.url);\n this.#scriptSources.set(event.scriptId, response.scriptSource);\n } catch (error) {\n // This might happen if the page has already navigated away.\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n }\n }\n\n async stop(): Promise<JSCoverageEntry[]> {\n assert(this.#enabled, 'JSCoverage is not enabled');\n this.#enabled = false;\n\n const result = await Promise.all([\n this.#client.send('Profiler.takePreciseCoverage'),\n this.#client.send('Profiler.stopPreciseCoverage'),\n this.#client.send('Profiler.disable'),\n this.#client.send('Debugger.disable'),\n ]);\n\n this.#subscriptions?.dispose();\n\n const coverage = [];\n const profileResponse = result[0];\n\n for (const entry of profileResponse.result) {\n let url = this.#scriptURLs.get(entry.scriptId);\n if (!url && this.#reportAnonymousScripts) {\n url = 'debugger://VM' + entry.scriptId;\n }\n const text = this.#scriptSources.get(entry.scriptId);\n if (text === undefined || url === undefined) {\n continue;\n }\n const flattenRanges = [];\n for (const func of entry.functions) {\n flattenRanges.push(...func.ranges);\n }\n const ranges = convertToDisjointRanges(flattenRanges);\n if (!this.#includeRawScriptCoverage) {\n coverage.push({url, ranges, text});\n } else {\n coverage.push({url, ranges, text, rawScriptCoverage: entry});\n }\n }\n return coverage;\n }\n}\n\n/**\n * @public\n */\nexport class CSSCoverage {\n #client: CDPSession;\n #enabled = false;\n #stylesheetURLs = new Map<string, string>();\n #stylesheetSources = new Map<string, string>();\n #eventListeners?: DisposableStack;\n #resetOnNavigation = false;\n\n #logger?: Logger;\n\n constructor(client: CDPSession, logger?: Logger) {\n this.#logger = logger;\n this.#client = client;\n }\n\n /**\n * @internal\n */\n updateClient(client: CDPSession): void {\n this.#client = client;\n }\n\n async start(options: {resetOnNavigation?: boolean} = {}): Promise<void> {\n assert(!this.#enabled, 'CSSCoverage is already enabled');\n const {resetOnNavigation = true} = options;\n this.#resetOnNavigation = resetOnNavigation;\n this.#enabled = true;\n this.#stylesheetURLs.clear();\n this.#stylesheetSources.clear();\n this.#eventListeners = new DisposableStack();\n const clientEmitter = this.#eventListeners.use(\n new EventEmitter(this.#client),\n );\n clientEmitter.on('CSS.styleSheetAdded', this.#onStyleSheet.bind(this));\n clientEmitter.on(\n 'Runtime.executionContextsCleared',\n this.#onExecutionContextsCleared.bind(this),\n );\n\n await Promise.all([\n this.#client.send('DOM.enable'),\n this.#client.send('CSS.enable'),\n this.#client.send('CSS.startRuleUsageTracking'),\n ]);\n }\n\n #onExecutionContextsCleared(): void {\n if (!this.#resetOnNavigation) {\n return;\n }\n this.#stylesheetURLs.clear();\n this.#stylesheetSources.clear();\n }\n\n async #onStyleSheet(event: Protocol.CSS.StyleSheetAddedEvent): Promise<void> {\n const header = event.header;\n // Ignore anonymous scripts\n if (!header.sourceURL) {\n return;\n }\n try {\n const response = await this.#client.send('CSS.getStyleSheetText', {\n styleSheetId: header.styleSheetId,\n });\n this.#stylesheetURLs.set(header.styleSheetId, header.sourceURL);\n this.#stylesheetSources.set(header.styleSheetId, response.text);\n } catch (error) {\n // This might happen if the page has already navigated away.\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n }\n }\n\n async stop(): Promise<CoverageEntry[]> {\n assert(this.#enabled, 'CSSCoverage is not enabled');\n this.#enabled = false;\n const ruleTrackingResponse = await this.#client.send(\n 'CSS.stopRuleUsageTracking',\n );\n await Promise.all([\n this.#client.send('CSS.disable'),\n this.#client.send('DOM.disable'),\n ]);\n this.#eventListeners?.dispose();\n\n // aggregate by styleSheetId\n const styleSheetIdToCoverage = new Map();\n for (const entry of ruleTrackingResponse.ruleUsage) {\n let ranges = styleSheetIdToCoverage.get(entry.styleSheetId);\n if (!ranges) {\n ranges = [];\n styleSheetIdToCoverage.set(entry.styleSheetId, ranges);\n }\n ranges.push({\n startOffset: entry.startOffset,\n endOffset: entry.endOffset,\n count: entry.used ? 1 : 0,\n });\n }\n\n const coverage: CoverageEntry[] = [];\n for (const styleSheetId of this.#stylesheetURLs.keys()) {\n const url = this.#stylesheetURLs.get(styleSheetId);\n assert(\n typeof url !== 'undefined',\n `Stylesheet URL is undefined (styleSheetId=${styleSheetId})`,\n );\n const text = this.#stylesheetSources.get(styleSheetId);\n assert(\n typeof text !== 'undefined',\n `Stylesheet text is undefined (styleSheetId=${styleSheetId})`,\n );\n const ranges = convertToDisjointRanges(\n styleSheetIdToCoverage.get(styleSheetId) || [],\n );\n coverage.push({url, ranges, text});\n }\n\n return coverage;\n }\n}\n\nfunction convertToDisjointRanges(\n nestedRanges: Array<{startOffset: number; endOffset: number; count: number}>,\n): Array<{start: number; end: number}> {\n const points = [];\n for (const range of nestedRanges) {\n points.push({offset: range.startOffset, type: 0, range});\n points.push({offset: range.endOffset, type: 1, range});\n }\n // Sort points to form a valid parenthesis sequence.\n points.sort((a, b) => {\n // Sort with increasing offsets.\n if (a.offset !== b.offset) {\n return a.offset - b.offset;\n }\n // All \"end\" points should go before \"start\" points.\n if (a.type !== b.type) {\n return b.type - a.type;\n }\n const aLength = a.range.endOffset - a.range.startOffset;\n const bLength = b.range.endOffset - b.range.startOffset;\n // For two \"start\" points, the one with longer range goes first.\n if (a.type === 0) {\n return bLength - aLength;\n }\n // For two \"end\" points, the one with shorter range goes first.\n return aLength - bLength;\n });\n\n const hitCountStack = [];\n const results: Array<{\n start: number;\n end: number;\n }> = [];\n let lastOffset = 0;\n // Run scanning line to intersect all ranges.\n for (const point of points) {\n if (\n hitCountStack.length &&\n lastOffset < point.offset &&\n hitCountStack[hitCountStack.length - 1]! > 0\n ) {\n const lastResult = results[results.length - 1];\n if (lastResult && lastResult.end === lastOffset) {\n lastResult.end = point.offset;\n } else {\n results.push({start: lastOffset, end: point.offset});\n }\n }\n lastOffset = point.offset;\n if (point.type === 0) {\n hitCountStack.push(point.range.count);\n } else {\n hitCountStack.pop();\n }\n }\n // Filter out empty ranges.\n return results.filter(range => {\n return range.end - range.start > 0;\n });\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {CDPSession} from '../api/CDPSession.js';\nimport {Dialog} from '../api/Dialog.js';\n\n/**\n * @internal\n */\nexport class CdpDialog extends Dialog {\n #client: CDPSession;\n\n constructor(\n client: CDPSession,\n type: Protocol.Page.DialogType,\n message: string,\n defaultValue = '',\n ) {\n super(type, message, defaultValue);\n this.#client = client;\n\n client.once('Page.javascriptDialogClosed', this.#onDialogClosed);\n }\n\n override async handle(options: {\n accept: boolean;\n text?: string;\n }): Promise<void> {\n await this.#client.send('Page.handleJavaScriptDialog', {\n accept: options.accept,\n promptText: options.text,\n });\n this.#client.off('Page.javascriptDialogClosed', this.#onDialogClosed);\n }\n\n #onDialogClosed = () => {\n this.handled = true;\n };\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {Protocol} from 'devtools-protocol';\n\nimport {type CDPSession, CDPSessionEvent} from '../api/CDPSession.js';\nimport type {GeolocationOptions, MediaFeature} from '../api/Page.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport type {Viewport} from '../common/Viewport.js';\nimport {assert} from '../util/assert.js';\nimport {invokeAtMostOnceForArguments} from '../util/decorators.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\n\ninterface ViewportState {\n viewport?: Viewport;\n active: boolean;\n}\n\ninterface IdleOverridesState {\n overrides?: {\n isUserActive: boolean;\n isScreenUnlocked: boolean;\n };\n active: boolean;\n}\n\ninterface TimezoneState {\n timezoneId?: string;\n active: boolean;\n}\n\ninterface LocaleState {\n locale?: string;\n active: boolean;\n}\n\ninterface VisionDeficiencyState {\n visionDeficiency?: Protocol.Emulation.SetEmulatedVisionDeficiencyRequest['type'];\n active: boolean;\n}\n\ninterface CpuThrottlingState {\n factor?: number;\n active: boolean;\n}\n\ninterface MediaFeaturesState {\n mediaFeatures?: MediaFeature[];\n active: boolean;\n}\n\ninterface MediaTypeState {\n type?: string;\n active: boolean;\n}\n\ninterface GeoLocationState {\n geoLocation?: GeolocationOptions;\n active: boolean;\n}\n\ninterface DefaultBackgroundColorState {\n color?: Protocol.DOM.RGBA;\n active: boolean;\n}\n\ninterface JavascriptEnabledState {\n javaScriptEnabled: boolean;\n active: boolean;\n}\n\ninterface FocusState {\n enabled: boolean;\n active: boolean;\n}\n\n/**\n * @internal\n */\nexport interface ClientProvider {\n clients(): CDPSession[];\n registerState(state: EmulatedState<any>): void;\n}\n\n/**\n * @internal\n */\nexport class EmulatedState<T extends {active: boolean}> {\n #state: T;\n #clientProvider: ClientProvider;\n #updater: (client: CDPSession, state: T) => Promise<void>;\n\n constructor(\n initialState: T,\n clientProvider: ClientProvider,\n updater: (client: CDPSession, state: T) => Promise<void>,\n ) {\n this.#state = initialState;\n this.#clientProvider = clientProvider;\n this.#updater = updater;\n this.#clientProvider.registerState(this);\n }\n\n async setState(state: T): Promise<void> {\n this.#state = state;\n await this.sync();\n }\n\n get state(): T {\n return this.#state;\n }\n\n async sync(): Promise<void> {\n await Promise.all(\n this.#clientProvider.clients().map(client => {\n return this.#updater(client, this.#state);\n }),\n );\n }\n}\n\n/**\n * @internal\n */\nexport class EmulationManager implements ClientProvider {\n #client: CDPSession;\n\n #emulatingMobile = false;\n #hasTouch = false;\n\n #states: Array<EmulatedState<any>> = [];\n\n #viewportState = new EmulatedState<ViewportState>(\n {\n active: false,\n },\n this,\n this.#applyViewport,\n );\n #idleOverridesState = new EmulatedState<IdleOverridesState>(\n {\n active: false,\n },\n this,\n this.#emulateIdleState,\n );\n #timezoneState = new EmulatedState<TimezoneState>(\n {\n active: false,\n },\n this,\n this.#emulateTimezone,\n );\n #localeState = new EmulatedState<LocaleState>(\n {\n active: false,\n },\n this,\n this.#emulateLocale,\n );\n #visionDeficiencyState = new EmulatedState<VisionDeficiencyState>(\n {\n active: false,\n },\n this,\n this.#emulateVisionDeficiency,\n );\n #cpuThrottlingState = new EmulatedState<CpuThrottlingState>(\n {\n active: false,\n },\n this,\n this.#emulateCpuThrottling,\n );\n #mediaFeaturesState = new EmulatedState<MediaFeaturesState>(\n {\n active: false,\n },\n this,\n this.#emulateMediaFeatures,\n );\n #mediaTypeState = new EmulatedState<MediaTypeState>(\n {\n active: false,\n },\n this,\n this.#emulateMediaType,\n );\n #geoLocationState = new EmulatedState<GeoLocationState>(\n {\n active: false,\n },\n this,\n this.#setGeolocation,\n );\n #defaultBackgroundColorState = new EmulatedState<DefaultBackgroundColorState>(\n {\n active: false,\n },\n this,\n this.#setDefaultBackgroundColor,\n );\n #javascriptEnabledState = new EmulatedState<JavascriptEnabledState>(\n {\n javaScriptEnabled: true,\n active: false,\n },\n this,\n this.#setJavaScriptEnabled,\n );\n #focusState = new EmulatedState<FocusState>(\n {\n enabled: true,\n active: false,\n },\n this,\n this.#emulateFocus,\n );\n\n #secondaryClients = new Set<CDPSession>();\n\n #logger: Logger;\n\n constructor(client: CDPSession, logger: Logger) {\n this.#logger = logger;\n this.#client = client;\n }\n\n updateClient(client: CDPSession): void {\n this.#client = client;\n this.#secondaryClients.delete(client);\n }\n\n registerState(state: EmulatedState<any>): void {\n this.#states.push(state);\n }\n\n clients(): CDPSession[] {\n return [this.#client, ...Array.from(this.#secondaryClients)];\n }\n\n async registerSpeculativeSession(client: CDPSession): Promise<void> {\n this.#secondaryClients.add(client);\n client.once(CDPSessionEvent.Disconnected, () => {\n this.#secondaryClients.delete(client);\n });\n // We don't await here because we want to register all state changes before\n // the target is unpaused.\n void Promise.all(\n this.#states.map(s => {\n return s.sync().catch(err => {\n return this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n }),\n );\n }\n\n get javascriptEnabled(): boolean {\n return this.#javascriptEnabledState.state.javaScriptEnabled;\n }\n\n async emulateViewport(viewport: Viewport | null): Promise<boolean> {\n const currentState = this.#viewportState.state;\n if (!viewport && !currentState.active) {\n return false;\n }\n await this.#viewportState.setState(\n viewport\n ? {\n viewport,\n active: true,\n }\n : {\n active: false,\n },\n );\n\n const mobile = viewport?.isMobile || false;\n const hasTouch = viewport?.hasTouch || false;\n const reloadNeeded =\n this.#emulatingMobile !== mobile || this.#hasTouch !== hasTouch;\n this.#emulatingMobile = mobile;\n this.#hasTouch = hasTouch;\n\n return reloadNeeded;\n }\n\n @invokeAtMostOnceForArguments\n async #applyViewport(\n client: CDPSession,\n viewportState: ViewportState,\n ): Promise<void> {\n if (!viewportState.viewport) {\n await Promise.all([\n client.send('Emulation.clearDeviceMetricsOverride'),\n client.send('Emulation.setTouchEmulationEnabled', {\n enabled: false,\n }),\n ]).catch(err => {\n return this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n return;\n }\n const {viewport} = viewportState;\n const mobile = viewport.isMobile || false;\n const width = viewport.width;\n const height = viewport.height;\n const deviceScaleFactor = viewport.deviceScaleFactor ?? 1;\n const screenOrientation: Protocol.Emulation.ScreenOrientation =\n viewport.isLandscape\n ? {angle: 90, type: 'landscapePrimary'}\n : {angle: 0, type: 'portraitPrimary'};\n const hasTouch = viewport.hasTouch || false;\n\n await Promise.all([\n client\n .send('Emulation.setDeviceMetricsOverride', {\n mobile,\n width,\n height,\n deviceScaleFactor,\n screenOrientation,\n })\n .catch(err => {\n if (\n err.message.includes('Target does not support metrics override')\n ) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n return;\n }\n throw err;\n }),\n client.send('Emulation.setTouchEmulationEnabled', {\n enabled: hasTouch,\n }),\n ]);\n }\n\n async emulateIdleState(overrides?: {\n isUserActive: boolean;\n isScreenUnlocked: boolean;\n }): Promise<void> {\n await this.#idleOverridesState.setState({\n active: true,\n overrides,\n });\n }\n\n @invokeAtMostOnceForArguments\n async #emulateIdleState(\n client: CDPSession,\n idleStateState: IdleOverridesState,\n ): Promise<void> {\n if (!idleStateState.active) {\n return;\n }\n if (idleStateState.overrides) {\n await client.send('Emulation.setIdleOverride', {\n isUserActive: idleStateState.overrides.isUserActive,\n isScreenUnlocked: idleStateState.overrides.isScreenUnlocked,\n });\n } else {\n await client.send('Emulation.clearIdleOverride');\n }\n }\n\n @invokeAtMostOnceForArguments\n async #emulateTimezone(\n client: CDPSession,\n timezoneState: TimezoneState,\n ): Promise<void> {\n if (!timezoneState.active) {\n return;\n }\n try {\n await client.send('Emulation.setTimezoneOverride', {\n timezoneId: timezoneState.timezoneId || '',\n });\n } catch (error) {\n if (isErrorLike(error) && error.message.includes('Invalid timezone')) {\n throw new Error(`Invalid timezone ID: ${timezoneState.timezoneId}`);\n }\n throw error;\n }\n }\n\n async emulateTimezone(timezoneId?: string): Promise<void> {\n await this.#timezoneState.setState({\n timezoneId,\n active: true,\n });\n }\n\n @invokeAtMostOnceForArguments\n async #emulateLocale(\n client: CDPSession,\n localeState: LocaleState,\n ): Promise<void> {\n if (!localeState.active) {\n return;\n }\n await client.send('Emulation.setLocaleOverride', {\n locale: localeState.locale,\n });\n }\n\n async emulateLocale(locale?: string): Promise<void> {\n await this.#localeState.setState({\n locale,\n active: true,\n });\n }\n\n @invokeAtMostOnceForArguments\n async #emulateVisionDeficiency(\n client: CDPSession,\n visionDeficiency: VisionDeficiencyState,\n ): Promise<void> {\n if (!visionDeficiency.active) {\n return;\n }\n await client.send('Emulation.setEmulatedVisionDeficiency', {\n type: visionDeficiency.visionDeficiency || 'none',\n });\n }\n\n async emulateVisionDeficiency(\n type?: Protocol.Emulation.SetEmulatedVisionDeficiencyRequest['type'],\n ): Promise<void> {\n const visionDeficiencies = new Set<\n Protocol.Emulation.SetEmulatedVisionDeficiencyRequest['type']\n >([\n 'none',\n 'achromatopsia',\n 'blurredVision',\n 'deuteranopia',\n 'protanopia',\n 'reducedContrast',\n 'tritanopia',\n ]);\n assert(\n !type || visionDeficiencies.has(type),\n `Unsupported vision deficiency: ${type}`,\n );\n await this.#visionDeficiencyState.setState({\n active: true,\n visionDeficiency: type,\n });\n }\n\n @invokeAtMostOnceForArguments\n async #emulateCpuThrottling(\n client: CDPSession,\n state: CpuThrottlingState,\n ): Promise<void> {\n if (!state.active) {\n return;\n }\n await client.send('Emulation.setCPUThrottlingRate', {\n rate: state.factor ?? 1,\n });\n }\n\n async emulateCPUThrottling(factor: number | null): Promise<void> {\n assert(\n factor === null || factor >= 1,\n 'Throttling rate should be greater or equal to 1',\n );\n await this.#cpuThrottlingState.setState({\n active: true,\n factor: factor ?? undefined,\n });\n }\n\n @invokeAtMostOnceForArguments\n async #emulateMediaFeatures(\n client: CDPSession,\n state: MediaFeaturesState,\n ): Promise<void> {\n if (!state.active) {\n return;\n }\n await client.send('Emulation.setEmulatedMedia', {\n features: state.mediaFeatures,\n });\n }\n\n async emulateMediaFeatures(features?: MediaFeature[]): Promise<void> {\n if (Array.isArray(features)) {\n for (const mediaFeature of features) {\n const name = mediaFeature.name;\n assert(\n /^(?:prefers-(?:color-scheme|reduced-motion)|color-gamut)$/.test(\n name,\n ),\n 'Unsupported media feature: ' + name,\n );\n }\n }\n await this.#mediaFeaturesState.setState({\n active: true,\n mediaFeatures: features,\n });\n }\n\n @invokeAtMostOnceForArguments\n async #emulateMediaType(\n client: CDPSession,\n state: MediaTypeState,\n ): Promise<void> {\n if (!state.active) {\n return;\n }\n await client.send('Emulation.setEmulatedMedia', {\n media: state.type || '',\n });\n }\n\n async emulateMediaType(type?: string): Promise<void> {\n assert(\n type === 'screen' ||\n type === 'print' ||\n (type ?? undefined) === undefined,\n 'Unsupported media type: ' + type,\n );\n await this.#mediaTypeState.setState({\n type,\n active: true,\n });\n }\n\n @invokeAtMostOnceForArguments\n async #setGeolocation(\n client: CDPSession,\n state: GeoLocationState,\n ): Promise<void> {\n if (!state.active) {\n return;\n }\n await client.send(\n 'Emulation.setGeolocationOverride',\n state.geoLocation\n ? {\n longitude: state.geoLocation.longitude,\n latitude: state.geoLocation.latitude,\n accuracy: state.geoLocation.accuracy,\n }\n : undefined,\n );\n }\n\n async setGeolocation(options: GeolocationOptions): Promise<void> {\n const {longitude, latitude, accuracy = 0} = options;\n if (longitude < -180 || longitude > 180) {\n throw new Error(\n `Invalid longitude \"${longitude}\": precondition -180 <= LONGITUDE <= 180 failed.`,\n );\n }\n if (latitude < -90 || latitude > 90) {\n throw new Error(\n `Invalid latitude \"${latitude}\": precondition -90 <= LATITUDE <= 90 failed.`,\n );\n }\n if (accuracy < 0) {\n throw new Error(\n `Invalid accuracy \"${accuracy}\": precondition 0 <= ACCURACY failed.`,\n );\n }\n await this.#geoLocationState.setState({\n active: true,\n geoLocation: {\n longitude,\n latitude,\n accuracy,\n },\n });\n }\n\n @invokeAtMostOnceForArguments\n async #setDefaultBackgroundColor(\n client: CDPSession,\n state: DefaultBackgroundColorState,\n ): Promise<void> {\n if (!state.active) {\n return;\n }\n await client.send('Emulation.setDefaultBackgroundColorOverride', {\n color: state.color,\n });\n }\n\n /**\n * Resets default white background\n */\n async resetDefaultBackgroundColor(): Promise<void> {\n await this.#defaultBackgroundColorState.setState({\n active: true,\n color: undefined,\n });\n }\n\n /**\n * Hides default white background\n */\n async setTransparentBackgroundColor(): Promise<void> {\n await this.#defaultBackgroundColorState.setState({\n active: true,\n color: {r: 0, g: 0, b: 0, a: 0},\n });\n }\n\n @invokeAtMostOnceForArguments\n async #setJavaScriptEnabled(\n client: CDPSession,\n state: JavascriptEnabledState,\n ): Promise<void> {\n if (!state.active) {\n return;\n }\n await client.send('Emulation.setScriptExecutionDisabled', {\n value: !state.javaScriptEnabled,\n });\n }\n\n async setJavaScriptEnabled(enabled: boolean): Promise<void> {\n await this.#javascriptEnabledState.setState({\n active: true,\n javaScriptEnabled: enabled,\n });\n }\n\n @invokeAtMostOnceForArguments\n async #emulateFocus(client: CDPSession, state: FocusState): Promise<void> {\n if (!state.active) {\n return;\n }\n await client.send('Emulation.setFocusEmulationEnabled', {\n enabled: state.enabled,\n });\n }\n\n async emulateFocus(enabled: boolean): Promise<void> {\n await this.#focusState.setState({\n active: true,\n enabled,\n });\n }\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {CdpFrame} from './Frame.js';\n\n/**\n * @internal\n */\nexport class CdpPreloadScript {\n /**\n * This is the ID of the preload script returned by\n * Page.addScriptToEvaluateOnNewDocument in the main frame.\n *\n * Sub-frames would get a different CDP ID because\n * addScriptToEvaluateOnNewDocument is called for each subframe. But\n * users only see this ID and subframe IDs are internal to Puppeteer.\n */\n #id: string;\n #source: string;\n #frameToId = new WeakMap<CdpFrame, string>();\n\n constructor(mainFrame: CdpFrame, id: string, source: string) {\n this.#id = id;\n this.#source = source;\n this.#frameToId.set(mainFrame, id);\n }\n\n get id(): string {\n return this.#id;\n }\n\n get source(): string {\n return this.#source;\n }\n\n getIdForFrame(frame: CdpFrame): string | undefined {\n return this.#frameToId.get(frame);\n }\n\n setIdForFrame(frame: CdpFrame, identifier: string): void {\n this.#frameToId.set(frame, identifier);\n }\n}\n","/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type Protocol from 'devtools-protocol';\n\nimport type {CDPSession} from '../api/CDPSession.js';\nimport {DeviceRequestPrompt} from '../api/DeviceRequestPrompt.js';\nimport type {DeviceRequestPromptDevice} from '../api/DeviceRequestPrompt.js';\nimport type {WaitTimeoutOptions} from '../api/Page.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport type {TimeoutSettings} from '../common/TimeoutSettings.js';\nimport {assert} from '../util/assert.js';\nimport {Deferred} from '../util/Deferred.js';\nimport {DisposableStack} from '../util/disposable.js';\n\n/**\n * @internal\n */\nexport class CdpDeviceRequestPrompt extends DeviceRequestPrompt {\n #client: CDPSession;\n #timeoutSettings: TimeoutSettings;\n #id: string;\n #handled = false;\n #waitForDevicePromises = new Set<{\n filter: (device: DeviceRequestPromptDevice) => boolean;\n promise: Deferred<DeviceRequestPromptDevice>;\n }>();\n #subscriptions = new DisposableStack();\n\n constructor(\n client: CDPSession,\n timeoutSettings: TimeoutSettings,\n firstEvent: Protocol.DeviceAccess.DeviceRequestPromptedEvent,\n ) {\n super();\n this.#client = client;\n this.#timeoutSettings = timeoutSettings;\n this.#id = firstEvent.id;\n\n const clientEmitter = this.#subscriptions.use(\n new EventEmitter(this.#client),\n );\n clientEmitter.on(\n 'DeviceAccess.deviceRequestPrompted',\n this.#updateDevices.bind(this),\n );\n\n this.#updateDevices(firstEvent);\n }\n\n #updateDevices(event: Protocol.DeviceAccess.DeviceRequestPromptedEvent) {\n if (event.id !== this.#id) {\n return;\n }\n\n for (const rawDevice of event.devices) {\n if (\n this.devices.some(device => {\n return device.id === rawDevice.id;\n })\n ) {\n continue;\n }\n\n const newDevice = {id: rawDevice.id, name: rawDevice.name};\n this.devices.push(newDevice);\n\n for (const waitForDevicePromise of this.#waitForDevicePromises) {\n if (waitForDevicePromise.filter(newDevice)) {\n waitForDevicePromise.promise.resolve(newDevice);\n }\n }\n }\n }\n\n async waitForDevice(\n filter: (device: DeviceRequestPromptDevice) => boolean,\n options: WaitTimeoutOptions = {},\n ): Promise<DeviceRequestPromptDevice> {\n for (const device of this.devices) {\n if (filter(device)) {\n return device;\n }\n }\n\n const {timeout = this.#timeoutSettings.timeout()} = options;\n const deferred = Deferred.create<DeviceRequestPromptDevice>({\n message: `Waiting for \\`DeviceRequestPromptDevice\\` failed: ${timeout}ms exceeded`,\n timeout,\n });\n\n if (options.signal) {\n options.signal.addEventListener(\n 'abort',\n () => {\n deferred.reject(options.signal?.reason);\n },\n {once: true},\n );\n }\n\n const handle = {filter, promise: deferred};\n this.#waitForDevicePromises.add(handle);\n try {\n return await deferred.valueOrThrow();\n } finally {\n this.#waitForDevicePromises.delete(handle);\n }\n }\n\n async select(device: DeviceRequestPromptDevice): Promise<void> {\n assert(this.devices.includes(device), 'Cannot select unknown device!');\n assert(\n !this.#handled,\n 'Cannot select DeviceRequestPrompt which is already handled!',\n );\n this.#subscriptions.dispose();\n this.#handled = true;\n await this.#client.send('DeviceAccess.selectPrompt', {\n id: this.#id,\n deviceId: device.id,\n });\n }\n\n async cancel(): Promise<void> {\n assert(\n !this.#handled,\n 'Cannot cancel DeviceRequestPrompt which is already handled!',\n );\n this.#subscriptions.dispose();\n this.#handled = true;\n await this.#client.send('DeviceAccess.cancelPrompt', {id: this.#id});\n }\n}\n\n/**\n * @internal\n */\nexport class CdpDeviceRequestPromptManager {\n #client: CDPSession | null;\n #timeoutSettings: TimeoutSettings;\n #deviceRequestPromptDeferreds = new Set<Deferred<DeviceRequestPrompt>>();\n\n constructor(client: CDPSession, timeoutSettings: TimeoutSettings) {\n this.#client = client;\n this.#timeoutSettings = timeoutSettings;\n\n this.#client.on('DeviceAccess.deviceRequestPrompted', event => {\n this.#onDeviceRequestPrompted(event);\n });\n this.#client.on('Target.detachedFromTarget', () => {\n this.#client = null;\n });\n }\n\n async waitForDevicePrompt(\n options: WaitTimeoutOptions = {},\n ): Promise<DeviceRequestPrompt> {\n assert(\n this.#client !== null,\n 'Cannot wait for device prompt through detached session!',\n );\n const needsEnable = this.#deviceRequestPromptDeferreds.size === 0;\n let enablePromise: Promise<void> | undefined;\n if (needsEnable) {\n enablePromise = this.#client.send('DeviceAccess.enable');\n }\n\n const {timeout = this.#timeoutSettings.timeout()} = options;\n const deferred = Deferred.create<DeviceRequestPrompt>({\n message: `Waiting for \\`DeviceRequestPrompt\\` failed: ${timeout}ms exceeded`,\n timeout,\n });\n if (options.signal) {\n options.signal.addEventListener(\n 'abort',\n () => {\n deferred.reject(options.signal?.reason);\n },\n {once: true},\n );\n }\n\n this.#deviceRequestPromptDeferreds.add(deferred);\n\n try {\n const [result] = await Promise.all([\n deferred.valueOrThrow(),\n enablePromise,\n ]);\n return result;\n } finally {\n this.#deviceRequestPromptDeferreds.delete(deferred);\n }\n }\n\n #onDeviceRequestPrompted(\n event: Protocol.DeviceAccess.DeviceRequestPromptedEvent,\n ) {\n if (!this.#deviceRequestPromptDeferreds.size) {\n return;\n }\n\n assert(this.#client !== null);\n const devicePrompt = new CdpDeviceRequestPrompt(\n this.#client,\n this.#timeoutSettings,\n event,\n );\n for (const promise of this.#deviceRequestPromptDeferreds) {\n promise.resolve(devicePrompt);\n }\n this.#deviceRequestPromptDeferreds.clear();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {JSHandle} from '../api/JSHandle.js';\nimport {\n ConsoleMessage,\n type ConsoleMessageType,\n} from '../common/ConsoleMessage.js';\nimport {PuppeteerURL, evaluationString} from '../common/util.js';\nimport {assert} from '../util/assert.js';\n\n/**\n * @internal\n */\nexport function createConsoleMessage(\n event: Protocol.Runtime.ConsoleAPICalledEvent,\n values: JSHandle[],\n targetId?: string,\n): ConsoleMessage {\n const textTokens = [];\n // eslint-disable-next-line max-len -- The comment is long.\n // eslint-disable-next-line @puppeteer/use-using -- These are not owned by this function.\n for (const arg of values) {\n textTokens.push(valueFromJSHandle(arg));\n }\n const stackTraceLocations = [];\n if (event.stackTrace) {\n for (const callFrame of event.stackTrace.callFrames) {\n stackTraceLocations.push({\n url: callFrame.url,\n lineNumber: callFrame.lineNumber,\n columnNumber: callFrame.columnNumber,\n });\n }\n }\n\n return new ConsoleMessage(\n convertConsoleMessageLevel(event.type),\n textTokens.join(' '),\n values,\n stackTraceLocations,\n undefined,\n event.stackTrace,\n targetId,\n );\n}\n\n/**\n * @internal\n */\nexport function createEvaluationError(\n details: Protocol.Runtime.ExceptionDetails,\n): unknown {\n let name: string;\n let message: string;\n if (!details.exception) {\n name = 'Error';\n message = details.text;\n } else if (\n (details.exception.type !== 'object' ||\n details.exception.subtype !== 'error') &&\n !details.exception.objectId\n ) {\n return valueFromPrimitiveRemoteObject(details.exception);\n } else {\n const detail = getErrorDetails(details);\n name = detail.name;\n message = detail.message;\n }\n const messageHeight = message.split('\\n').length;\n const error = new Error(message);\n error.name = name;\n const stackLines = error.stack!.split('\\n');\n const messageLines = stackLines.splice(0, messageHeight);\n\n // The first line is this function which we ignore.\n stackLines.shift();\n if (details.stackTrace && stackLines.length < Error.stackTraceLimit) {\n for (const frame of details.stackTrace.callFrames.reverse()) {\n if (\n PuppeteerURL.isPuppeteerURL(frame.url) &&\n frame.url !== PuppeteerURL.INTERNAL_URL\n ) {\n const url = PuppeteerURL.parse(frame.url);\n stackLines.unshift(\n ` at ${frame.functionName || url.functionName} (${\n url.functionName\n } at ${url.siteString}, <anonymous>:${frame.lineNumber}:${\n frame.columnNumber\n })`,\n );\n } else {\n stackLines.push(\n ` at ${frame.functionName || '<anonymous>'} (${frame.url}:${\n frame.lineNumber\n }:${frame.columnNumber})`,\n );\n }\n if (stackLines.length >= Error.stackTraceLimit) {\n break;\n }\n }\n }\n\n error.stack = [...messageLines, ...stackLines].join('\\n');\n return error;\n}\n\nconst getErrorDetails = (details: Protocol.Runtime.ExceptionDetails) => {\n let name = '';\n let message: string;\n const lines = details.exception?.description?.split('\\n at ') ?? [];\n const size = Math.min(\n details.stackTrace?.callFrames.length ?? 0,\n lines.length - 1,\n );\n lines.splice(-size, size);\n if (details.exception?.className) {\n name = details.exception.className;\n }\n message = lines.join('\\n');\n if (name && message.startsWith(`${name}: `)) {\n message = message.slice(name.length + 2);\n }\n return {message, name};\n};\n\n/**\n * @internal\n */\nexport function createClientError(\n details: Protocol.Runtime.ExceptionDetails,\n): Error | unknown {\n let name: string;\n let message: string;\n if (!details.exception) {\n name = 'Error';\n message = details.text;\n } else if (\n (details.exception.type !== 'object' ||\n details.exception.subtype !== 'error') &&\n !details.exception.objectId\n ) {\n return valueFromPrimitiveRemoteObject(details.exception);\n } else {\n const detail = getErrorDetails(details);\n name = detail.name;\n message = detail.message;\n }\n const error = new Error(message);\n error.name = name;\n\n const messageHeight = error.message.split('\\n').length;\n const messageLines = error.stack!.split('\\n').splice(0, messageHeight);\n\n const stackLines = [];\n if (details.stackTrace) {\n for (const frame of details.stackTrace.callFrames) {\n // Note we need to add `1` because the values are 0-indexed.\n stackLines.push(\n ` at ${frame.functionName || '<anonymous>'} (${frame.url}:${\n frame.lineNumber + 1\n }:${frame.columnNumber + 1})`,\n );\n if (stackLines.length >= Error.stackTraceLimit) {\n break;\n }\n }\n }\n\n error.stack = [...messageLines, ...stackLines].join('\\n');\n return error;\n}\n\n/**\n * @internal\n */\nexport function valueFromJSHandle(handle: JSHandle): unknown {\n const remoteObject = handle.remoteObject();\n if (remoteObject.objectId) {\n return valueFromRemoteObjectReference(handle);\n } else {\n return valueFromPrimitiveRemoteObject(remoteObject);\n }\n}\n\n/**\n * @internal\n */\nexport function valueFromRemoteObjectReference(handle: JSHandle): string {\n const remoteObject = handle.remoteObject();\n assert(\n remoteObject.objectId,\n 'Cannot extract value when no objectId is given',\n );\n const description = remoteObject.description ?? '';\n if (remoteObject.subtype === 'error' && description) {\n const newlineIdx = description.indexOf('\\n');\n if (newlineIdx === -1) {\n return description;\n }\n return description.slice(0, newlineIdx);\n }\n return `[${remoteObject.subtype || remoteObject.type} ${remoteObject.className}]`;\n}\n\n/**\n * @internal\n */\nexport function valueFromPrimitiveRemoteObject(\n remoteObject: Protocol.Runtime.RemoteObject,\n): unknown {\n assert(!remoteObject.objectId, 'Cannot extract value when objectId is given');\n if (remoteObject.unserializableValue) {\n if (remoteObject.type === 'bigint') {\n return BigInt(remoteObject.unserializableValue.replace('n', ''));\n }\n switch (remoteObject.unserializableValue) {\n case '-0':\n return -0;\n case 'NaN':\n return NaN;\n case 'Infinity':\n return Infinity;\n case '-Infinity':\n return -Infinity;\n default:\n throw new Error(\n 'Unsupported unserializable value: ' +\n remoteObject.unserializableValue,\n );\n }\n }\n return remoteObject.value;\n}\n\n/**\n * @internal\n */\nexport function addPageBinding(\n type: string,\n name: string,\n prefix: string,\n): void {\n // Depending on the frame loading state either Runtime.evaluate or\n // Page.addScriptToEvaluateOnNewDocument might succeed. Let's check that we\n // don't re-wrap Puppeteer's binding.\n // @ts-expect-error: In a different context.\n if (globalThis[name]) {\n return;\n }\n\n // We replace the CDP binding with a Puppeteer binding.\n Object.assign(globalThis, {\n [name](...args: unknown[]): Promise<unknown> {\n // This is the Puppeteer binding.\n // @ts-expect-error: In a different context.\n const callPuppeteer = globalThis[name];\n callPuppeteer.args ??= new Map();\n callPuppeteer.callbacks ??= new Map();\n\n const seq = (callPuppeteer.lastSeq ?? 0) + 1;\n callPuppeteer.lastSeq = seq;\n callPuppeteer.args.set(seq, args);\n\n // @ts-expect-error: In a different context.\n // Needs to be the same as CDP_BINDING_PREFIX.\n globalThis[prefix + name](\n JSON.stringify({\n type,\n name,\n seq,\n args,\n isTrivial: !args.some(value => {\n return value instanceof Node;\n }),\n }),\n );\n\n return new Promise((resolve, reject) => {\n callPuppeteer.callbacks.set(seq, {\n resolve(value: unknown) {\n callPuppeteer.args.delete(seq);\n resolve(value);\n },\n reject(value?: unknown) {\n callPuppeteer.args.delete(seq);\n reject(value);\n },\n });\n });\n },\n });\n}\n\n/**\n * @internal\n */\nexport const CDP_BINDING_PREFIX = 'puppeteer_';\n\n/**\n * @internal\n */\nexport function pageBindingInitString(type: string, name: string): string {\n return evaluationString(addPageBinding, type, name, CDP_BINDING_PREFIX);\n}\n\n/**\n * @internal\n */\nexport function convertConsoleMessageLevel(method: string): ConsoleMessageType {\n switch (method) {\n case 'warning':\n return 'warn';\n default:\n return method as ConsoleMessageType;\n }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {CDPSession} from '../api/CDPSession.js';\nimport {JSHandle} from '../api/JSHandle.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\n\nimport type {CdpElementHandle} from './ElementHandle.js';\nimport type {IsolatedWorld} from './IsolatedWorld.js';\nimport {valueFromPrimitiveRemoteObject} from './utils.js';\n\n/**\n * @internal\n */\nexport class CdpJSHandle<T = unknown> extends JSHandle<T> {\n #disposed = false;\n readonly #remoteObject: Protocol.Runtime.RemoteObject;\n readonly #world: IsolatedWorld;\n #logger: Logger;\n\n constructor(\n world: IsolatedWorld,\n remoteObject: Protocol.Runtime.RemoteObject,\n logger: Logger,\n ) {\n super(logger);\n this.#world = world;\n this.#remoteObject = remoteObject;\n this.#logger = logger;\n }\n\n override get disposed(): boolean {\n return this.#disposed;\n }\n\n override get realm(): IsolatedWorld {\n return this.#world;\n }\n\n get client(): CDPSession {\n return this.realm.environment.client;\n }\n\n override async jsonValue(): Promise<T> {\n if (!this.#remoteObject.objectId) {\n return valueFromPrimitiveRemoteObject(this.#remoteObject) as T;\n }\n const value = await this.evaluate(object => {\n return object;\n });\n if (value === undefined) {\n throw new Error('Could not serialize referenced object');\n }\n return value;\n }\n\n /**\n * Either `null` or the handle itself if the handle is an\n * instance of {@link ElementHandle}.\n */\n override asElement(): CdpElementHandle<Node> | null {\n return null;\n }\n\n override async dispose(): Promise<void> {\n if (this.#disposed) {\n return;\n }\n this.#disposed = true;\n await releaseObject(this.client, this.#remoteObject, this.#logger);\n }\n\n override toString(): string {\n if (!this.#remoteObject.objectId) {\n return 'JSHandle:' + valueFromPrimitiveRemoteObject(this.#remoteObject);\n }\n const type = this.#remoteObject.subtype || this.#remoteObject.type;\n return 'JSHandle@' + type;\n }\n\n override get id(): string | undefined {\n return this.#remoteObject.objectId;\n }\n\n override remoteObject(): Protocol.Runtime.RemoteObject {\n return this.#remoteObject;\n }\n\n override async getProperties(): Promise<Map<string, JSHandle<unknown>>> {\n // We use Runtime.getProperties rather than iterative version for\n // improved performance as it allows getting everything at once.\n const response = await this.client.send('Runtime.getProperties', {\n objectId: this.#remoteObject.objectId!,\n ownProperties: true,\n });\n const result = new Map<string, JSHandle>();\n for (const property of response.result) {\n if (!property.enumerable || !property.value) {\n continue;\n }\n result.set(property.name, this.#world.createCdpHandle(property.value));\n }\n return result;\n }\n}\n\n/**\n * @internal\n */\nexport async function releaseObject(\n client: CDPSession,\n remoteObject: Protocol.Runtime.RemoteObject,\n logger?: Logger,\n): Promise<void> {\n if (!remoteObject.objectId) {\n return;\n }\n await client\n .send('Runtime.releaseObject', {objectId: remoteObject.objectId})\n .catch(error => {\n // Exceptions might happen in case of a page been navigated or closed.\n // Swallow these since they are harmless and we don't leak anything in this case.\n logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n}\n","/**\n * @license\n * Copyright 2019 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {CDPSession} from '../api/CDPSession.js';\nimport {\n bindIsolatedHandle,\n ElementHandle,\n type AutofillData,\n} from '../api/ElementHandle.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport type {AwaitableIterable} from '../common/types.js';\nimport {environment} from '../environment.js';\nimport {assert} from '../util/assert.js';\nimport {AsyncIterableUtil} from '../util/AsyncIterableUtil.js';\nimport {throwIfDisposed} from '../util/decorators.js';\n\nimport type {CdpFrame} from './Frame.js';\nimport type {FrameManager} from './FrameManager.js';\nimport type {IsolatedWorld} from './IsolatedWorld.js';\nimport {CdpJSHandle} from './JSHandle.js';\n\nconst NON_ELEMENT_NODE_ROLES = new Set(['StaticText', 'InlineTextBox']);\n\n/**\n * The CdpElementHandle extends ElementHandle now to keep compatibility\n * with `instanceof` because of that we need to have methods for\n * CdpJSHandle to in this implementation as well.\n *\n * @internal\n */\nexport class CdpElementHandle<\n ElementType extends Node = Element,\n> extends ElementHandle<ElementType> {\n declare protected readonly handle: CdpJSHandle<ElementType>;\n #backendNodeId?: number;\n #logger: Logger;\n\n constructor(\n world: IsolatedWorld,\n remoteObject: Protocol.Runtime.RemoteObject,\n logger: Logger,\n ) {\n super(new CdpJSHandle(world, remoteObject, logger), logger);\n this.#logger = logger;\n }\n\n override get realm(): IsolatedWorld {\n return this.handle.realm;\n }\n\n get client(): CDPSession {\n return this.handle.client;\n }\n\n override remoteObject(): Protocol.Runtime.RemoteObject {\n return this.handle.remoteObject();\n }\n\n get #frameManager(): FrameManager {\n return this.frame._frameManager;\n }\n\n override get frame(): CdpFrame {\n return this.realm.environment as CdpFrame;\n }\n\n override async contentFrame(\n this: ElementHandle<HTMLIFrameElement>,\n ): Promise<CdpFrame>;\n\n @throwIfDisposed()\n override async contentFrame(): Promise<CdpFrame | null> {\n const nodeInfo = await this.client.send('DOM.describeNode', {\n objectId: this.id,\n });\n if (typeof nodeInfo.node.frameId !== 'string') {\n return null;\n }\n return this.#frameManager.frame(nodeInfo.node.frameId);\n }\n\n @throwIfDisposed()\n @bindIsolatedHandle\n override async scrollIntoView(\n this: CdpElementHandle<Element>,\n ): Promise<void> {\n await this.assertConnectedElement();\n try {\n await this.client.send('DOM.scrollIntoViewIfNeeded', {\n objectId: this.id,\n });\n } catch (error) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n // Fallback to Element.scrollIntoView if DOM.scrollIntoViewIfNeeded is not supported\n await super.scrollIntoView();\n }\n }\n\n @throwIfDisposed()\n @bindIsolatedHandle\n override async uploadFile(\n this: CdpElementHandle<HTMLInputElement>,\n ...files: string[]\n ): Promise<void> {\n const isMultiple = await this.evaluate(element => {\n return element.multiple;\n });\n assert(\n files.length <= 1 || isMultiple,\n 'Multiple file uploads only work with <input type=file multiple>',\n );\n\n // Locate all files and confirm that they exist.\n const path = environment.value.path;\n if (path) {\n files = files.map(filePath => {\n if (\n path.win32.isAbsolute(filePath) ||\n path.posix.isAbsolute(filePath)\n ) {\n return filePath;\n } else {\n return path.resolve(filePath);\n }\n });\n }\n\n /**\n * The zero-length array is a special case, it seems that\n * DOM.setFileInputFiles does not actually update the files in that case, so\n * the solution is to eval the element value to a new FileList directly.\n */\n if (files.length === 0) {\n // XXX: These events should converted to trusted events. Perhaps do this\n // in `DOM.setFileInputFiles`?\n await this.evaluate(element => {\n element.files = new DataTransfer().files;\n\n // Dispatch events for this case because it should behave akin to a user action.\n element.dispatchEvent(\n new Event('input', {bubbles: true, composed: true}),\n );\n element.dispatchEvent(new Event('change', {bubbles: true}));\n });\n return;\n }\n\n const {\n node: {backendNodeId},\n } = await this.client.send('DOM.describeNode', {\n objectId: this.id,\n });\n await this.client.send('DOM.setFileInputFiles', {\n objectId: this.id,\n files,\n backendNodeId,\n });\n }\n\n @throwIfDisposed()\n override async autofill(data: AutofillData): Promise<void> {\n const nodeInfo = await this.client.send('DOM.describeNode', {\n objectId: this.handle.id,\n });\n const fieldId = nodeInfo.node.backendNodeId;\n const frameId = this.frame._id;\n await this.client.send('Autofill.trigger', {\n fieldId,\n frameId,\n card: data.creditCard,\n address: data.address,\n });\n }\n\n override async *queryAXTree(\n name?: string | undefined,\n role?: string | undefined,\n ): AwaitableIterable<ElementHandle<Node>> {\n const {nodes} = await this.client.send('Accessibility.queryAXTree', {\n objectId: this.id,\n accessibleName: name,\n role,\n });\n\n const results = nodes.filter(node => {\n if (node.ignored) {\n return false;\n }\n if (!node.role) {\n return false;\n }\n if (NON_ELEMENT_NODE_ROLES.has(node.role.value)) {\n return false;\n }\n return true;\n });\n\n return yield* AsyncIterableUtil.map(results, node => {\n return this.realm.adoptBackendNode(node.backendDOMNodeId) as Promise<\n ElementHandle<Node>\n >;\n });\n }\n\n override async backendNodeId(): Promise<number> {\n if (this.#backendNodeId) {\n return this.#backendNodeId;\n }\n const {node} = await this.client.send('DOM.describeNode', {\n objectId: this.handle.id,\n });\n this.#backendNodeId = node.backendNodeId;\n return this.#backendNodeId;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {CDPSessionEvent, type CDPSession} from '../api/CDPSession.js';\nimport type {ElementHandle} from '../api/ElementHandle.js';\nimport type {JSHandle} from '../api/JSHandle.js';\nimport {ARIAQueryHandler} from '../common/AriaQueryHandler.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {LazyArg} from '../common/LazyArg.js';\nimport {scriptInjector} from '../common/ScriptInjector.js';\nimport type {BindingPayload, EvaluateFunc, HandleFor} from '../common/types.js';\nimport {\n PuppeteerURL,\n SOURCE_URL_REGEX,\n getSourcePuppeteerURLIfAvailable,\n getSourceUrlComment,\n isString,\n} from '../common/util.js';\nimport type {PuppeteerInjectedUtil} from '../injected/injected.js';\nimport {AsyncIterableUtil} from '../util/AsyncIterableUtil.js';\nimport {DisposableStack, disposeSymbol} from '../util/disposable.js';\nimport {stringifyFunction} from '../util/Function.js';\nimport {Mutex} from '../util/Mutex.js';\n\nimport {Binding} from './Binding.js';\nimport {CdpElementHandle} from './ElementHandle.js';\nimport type {IsolatedWorld} from './IsolatedWorld.js';\nimport {CdpJSHandle} from './JSHandle.js';\nimport {\n addPageBinding,\n CDP_BINDING_PREFIX,\n createEvaluationError,\n valueFromPrimitiveRemoteObject,\n} from './utils.js';\n\n/**\n * @internal\n */\nexport class ExecutionContext\n extends EventEmitter<{\n /** Emitted when this execution context is disposed. */\n disposed: undefined;\n consoleapicalled: Protocol.Runtime.ConsoleAPICalledEvent;\n /** Emitted when a binding that is not installed by the ExecutionContext is called. */\n bindingcalled: Protocol.Runtime.BindingCalledEvent;\n }>\n implements Disposable\n{\n static #ariaQuerySelectorBinding?: Binding;\n static getOrCreateAriaQuerySelectorBinding(logger: Logger): Binding {\n return (this.#ariaQuerySelectorBinding ??= new Binding(\n '__ariaQuerySelector',\n ARIAQueryHandler.queryOne as (...args: unknown[]) => unknown,\n '', // custom init\n logger,\n ));\n }\n\n static #ariaQuerySelectorAllBinding?: Binding;\n static getOrCreateAriaQuerySelectorAllBinding(logger: Logger): Binding {\n return (this.#ariaQuerySelectorAllBinding ??= new Binding(\n '__ariaQuerySelectorAll',\n (async (\n element: ElementHandle<Node>,\n selector: string,\n ): Promise<JSHandle<Node[]>> => {\n const results = ARIAQueryHandler.queryAll(element, selector);\n return await element.realm.evaluateHandle(\n (...elements) => {\n return elements;\n },\n ...(await AsyncIterableUtil.collect(results)),\n );\n }) as (...args: unknown[]) => unknown,\n '', // custom init\n logger,\n ));\n }\n\n #client: CDPSession;\n #world: IsolatedWorld;\n #id: number;\n #name?: string;\n\n readonly #disposables = new DisposableStack();\n #logger: Logger;\n\n constructor(\n client: CDPSession,\n contextPayload: Protocol.Runtime.ExecutionContextDescription,\n world: IsolatedWorld,\n logger: Logger,\n ) {\n super(undefined, logger);\n this.#client = client;\n this.#world = world;\n this.#logger = logger;\n this.#id = contextPayload.id;\n if (contextPayload.name) {\n this.#name = contextPayload.name;\n }\n const clientEmitter = this.#disposables.use(new EventEmitter(this.#client));\n clientEmitter.on('Runtime.bindingCalled', this.#onBindingCalled.bind(this));\n clientEmitter.on('Runtime.executionContextDestroyed', async event => {\n if (event.executionContextId === this.#id) {\n this[disposeSymbol]();\n }\n });\n clientEmitter.on('Runtime.executionContextsCleared', async () => {\n this[disposeSymbol]();\n });\n clientEmitter.on('Runtime.consoleAPICalled', this.#onConsoleAPI.bind(this));\n clientEmitter.on(CDPSessionEvent.Disconnected, () => {\n this[disposeSymbol]();\n });\n }\n\n // Contains mapping from functions that should be bound to Puppeteer functions.\n #bindings = new Map<string, Binding>();\n\n // If multiple waitFor are set up asynchronously, we need to wait for the\n // first one to set up the binding in the page before running the others.\n #mutex = new Mutex();\n async #addBinding(binding: Binding): Promise<void> {\n if (this.#bindings.has(binding.name)) {\n return;\n }\n\n using _ = await this.#mutex.acquire();\n try {\n await this.#client.send(\n 'Runtime.addBinding',\n this.#name\n ? {\n name: CDP_BINDING_PREFIX + binding.name,\n executionContextName: this.#name,\n }\n : {\n name: CDP_BINDING_PREFIX + binding.name,\n executionContextId: this.#id,\n },\n );\n\n await this.evaluate(\n addPageBinding,\n 'internal',\n binding.name,\n CDP_BINDING_PREFIX,\n );\n\n this.#bindings.set(binding.name, binding);\n } catch (error) {\n // We could have tried to evaluate in a context which was already\n // destroyed. This happens, for example, if the page is navigated while\n // we are trying to add the binding\n if (error instanceof Error) {\n // Destroyed context.\n if (error.message.includes('Execution context was destroyed')) {\n return;\n }\n // Missing context.\n if (error.message.includes('Cannot find context with specified id')) {\n return;\n }\n }\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n }\n }\n\n async #onBindingCalled(\n event: Protocol.Runtime.BindingCalledEvent,\n ): Promise<void> {\n if (event.executionContextId !== this.#id) {\n return;\n }\n\n let payload: BindingPayload;\n try {\n payload = JSON.parse(event.payload);\n } catch {\n // The binding was either called by something in the page or it was\n // called before our wrapper was initialized.\n return;\n }\n const {type, name, seq, args, isTrivial} = payload;\n if (type !== 'internal') {\n this.emit('bindingcalled', event);\n return;\n }\n if (!this.#bindings.has(name)) {\n this.emit('bindingcalled', event);\n return;\n }\n\n try {\n const binding = this.#bindings.get(name);\n await binding?.run(this, seq, args, isTrivial);\n } catch (err) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n }\n }\n\n get id(): number {\n return this.#id;\n }\n\n #onConsoleAPI(event: Protocol.Runtime.ConsoleAPICalledEvent): void {\n if (event.executionContextId !== this.#id) {\n return;\n }\n this.emit('consoleapicalled', event);\n }\n\n #bindingsInstalled = false;\n #puppeteerUtil?: Promise<JSHandle<PuppeteerInjectedUtil>>;\n /**\n * @internal\n */\n get puppeteerUtil(): Promise<JSHandle<PuppeteerInjectedUtil>> {\n let promise = Promise.resolve() as Promise<unknown>;\n if (!this.#bindingsInstalled) {\n promise = Promise.all([\n this.#addBindingWithoutThrowing(\n ExecutionContext.getOrCreateAriaQuerySelectorBinding(this.#logger),\n ),\n this.#addBindingWithoutThrowing(\n ExecutionContext.getOrCreateAriaQuerySelectorAllBinding(this.#logger),\n ),\n ]);\n this.#bindingsInstalled = true;\n }\n scriptInjector.inject(script => {\n if (this.#puppeteerUtil) {\n void this.#puppeteerUtil.then(handle => {\n void handle.dispose();\n });\n }\n this.#puppeteerUtil = promise.then(() => {\n return this.evaluateHandle(script) as Promise<\n JSHandle<PuppeteerInjectedUtil>\n >;\n });\n }, !this.#puppeteerUtil);\n return this.#puppeteerUtil as Promise<JSHandle<PuppeteerInjectedUtil>>;\n }\n\n async #addBindingWithoutThrowing(binding: Binding) {\n try {\n await this.#addBinding(binding);\n } catch (err) {\n // If the binding cannot be added, the context is broken. We cannot\n // recover so we ignore the error.\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n }\n }\n\n /**\n * Evaluates the given function.\n *\n * @example\n *\n * ```ts\n * const executionContext = await page.mainFrame().executionContext();\n * const result = await executionContext.evaluate(() => Promise.resolve(8 * 7))* ;\n * console.log(result); // prints \"56\"\n * ```\n *\n * @example\n * A string can also be passed in instead of a function:\n *\n * ```ts\n * console.log(await executionContext.evaluate('1 + 2')); // prints \"3\"\n * ```\n *\n * @example\n * Handles can also be passed as `args`. They resolve to their referenced object:\n *\n * ```ts\n * const oneHandle = await executionContext.evaluateHandle(() => 1);\n * const twoHandle = await executionContext.evaluateHandle(() => 2);\n * const result = await executionContext.evaluate(\n * (a, b) => a + b,\n * oneHandle,\n * twoHandle,\n * );\n * await oneHandle.dispose();\n * await twoHandle.dispose();\n * console.log(result); // prints '3'.\n * ```\n *\n * @param pageFunction - The function to evaluate.\n * @param args - Additional arguments to pass into the function.\n * @returns The result of evaluating the function. If the result is an object,\n * a vanilla object containing the serializable properties of the result is\n * returned.\n */\n async evaluate<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n return await this.#evaluate(true, pageFunction, ...args);\n }\n\n /**\n * Evaluates the given function.\n *\n * Unlike {@link ExecutionContext.evaluate | evaluate}, this method returns a\n * handle to the result of the function.\n *\n * This method may be better suited if the object cannot be serialized (e.g.\n * `Map`) and requires further manipulation.\n *\n * @example\n *\n * ```ts\n * const context = await page.mainFrame().executionContext();\n * const handle: JSHandle<typeof globalThis> = await context.evaluateHandle(\n * () => Promise.resolve(self),\n * );\n * ```\n *\n * @example\n * A string can also be passed in instead of a function.\n *\n * ```ts\n * const handle: JSHandle<number> = await context.evaluateHandle('1 + 2');\n * ```\n *\n * @example\n * Handles can also be passed as `args`. They resolve to their referenced object:\n *\n * ```ts\n * const bodyHandle: ElementHandle<HTMLBodyElement> =\n * await context.evaluateHandle(() => {\n * return document.body;\n * });\n * const stringHandle: JSHandle<string> = await context.evaluateHandle(\n * body => body.innerHTML,\n * body,\n * );\n * console.log(await stringHandle.jsonValue()); // prints body's innerHTML\n * // Always dispose your garbage! :)\n * await bodyHandle.dispose();\n * await stringHandle.dispose();\n * ```\n *\n * @param pageFunction - The function to evaluate.\n * @param args - Additional arguments to pass into the function.\n * @returns A {@link JSHandle | handle} to the result of evaluating the\n * function. If the result is a `Node`, then this will return an\n * {@link ElementHandle | element handle}.\n */\n async evaluateHandle<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n return await this.#evaluate(false, pageFunction, ...args);\n }\n\n async #evaluate<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n returnByValue: true,\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>>;\n async #evaluate<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n returnByValue: false,\n pageFunction: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>>;\n async #evaluate<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n returnByValue: boolean,\n pageFunction: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>> | Awaited<ReturnType<Func>>> {\n const sourceUrlComment = getSourceUrlComment(\n getSourcePuppeteerURLIfAvailable(pageFunction)?.toString() ??\n PuppeteerURL.INTERNAL_URL,\n );\n\n if (isString(pageFunction)) {\n const contextId = this.#id;\n const expression = pageFunction;\n const expressionWithSourceUrl = SOURCE_URL_REGEX.test(expression)\n ? expression\n : `${expression}\\n${sourceUrlComment}\\n`;\n\n const {exceptionDetails, result: remoteObject} = await this.#client\n .send('Runtime.evaluate', {\n expression: expressionWithSourceUrl,\n contextId,\n returnByValue,\n awaitPromise: true,\n userGesture: true,\n })\n .catch(rewriteError);\n\n if (exceptionDetails) {\n throw createEvaluationError(exceptionDetails);\n }\n\n if (returnByValue) {\n return valueFromPrimitiveRemoteObject(remoteObject) as HandleFor<\n Awaited<ReturnType<Func>>\n >;\n }\n\n return this.#world.createCdpHandle(remoteObject) as HandleFor<\n Awaited<ReturnType<Func>>\n >;\n }\n\n const functionDeclaration = stringifyFunction(pageFunction);\n const functionDeclarationWithSourceUrl = SOURCE_URL_REGEX.test(\n functionDeclaration,\n )\n ? functionDeclaration\n : `${functionDeclaration}\\n${sourceUrlComment}\\n`;\n let callFunctionOnPromise;\n try {\n callFunctionOnPromise = this.#client.send('Runtime.callFunctionOn', {\n functionDeclaration: functionDeclarationWithSourceUrl,\n executionContextId: this.#id,\n // LazyArgs are used only internally and should not affect the order\n // evaluate calls for the public APIs.\n arguments: args.some(arg => {\n return arg instanceof LazyArg;\n })\n ? await Promise.all(\n args.map(arg => {\n return convertArgumentAsync(this, arg);\n }),\n )\n : args.map(arg => {\n return convertArgument(this, arg);\n }),\n returnByValue,\n awaitPromise: true,\n userGesture: true,\n });\n } catch (error) {\n if (\n error instanceof TypeError &&\n error.message.startsWith('Converting circular structure to JSON')\n ) {\n error.message += ' Recursive objects are not allowed.';\n }\n throw error;\n }\n const {exceptionDetails, result: remoteObject} =\n await callFunctionOnPromise.catch(rewriteError);\n if (exceptionDetails) {\n throw createEvaluationError(exceptionDetails);\n }\n\n if (returnByValue) {\n return valueFromPrimitiveRemoteObject(\n remoteObject,\n ) as unknown as HandleFor<Awaited<ReturnType<Func>>>;\n }\n\n return this.#world.createCdpHandle(remoteObject) as HandleFor<\n Awaited<ReturnType<Func>>\n >;\n\n async function convertArgumentAsync(\n context: ExecutionContext,\n arg: unknown,\n ) {\n if (arg instanceof LazyArg) {\n arg = await arg.get(context);\n }\n return convertArgument(context, arg);\n }\n\n function convertArgument(\n context: ExecutionContext,\n arg: unknown,\n ): Protocol.Runtime.CallArgument {\n if (typeof arg === 'bigint') {\n return {unserializableValue: `${arg.toString()}n`};\n }\n if (Object.is(arg, -0)) {\n return {unserializableValue: '-0'};\n }\n if (Object.is(arg, Infinity)) {\n return {unserializableValue: 'Infinity'};\n }\n if (Object.is(arg, -Infinity)) {\n return {unserializableValue: '-Infinity'};\n }\n if (Object.is(arg, NaN)) {\n return {unserializableValue: 'NaN'};\n }\n const objectHandle =\n arg && (arg instanceof CdpJSHandle || arg instanceof CdpElementHandle)\n ? arg\n : null;\n if (objectHandle) {\n if (objectHandle.realm !== context.#world) {\n throw new Error(\n 'JSHandles can be evaluated only in the context they were created!',\n );\n }\n if (objectHandle.disposed) {\n throw new Error('JSHandle is disposed!');\n }\n if (objectHandle.remoteObject().unserializableValue) {\n return {\n unserializableValue:\n objectHandle.remoteObject().unserializableValue,\n };\n }\n if (!objectHandle.remoteObject().objectId) {\n return {value: objectHandle.remoteObject().value};\n }\n return {objectId: objectHandle.remoteObject().objectId};\n }\n return {value: arg};\n }\n }\n\n override [disposeSymbol](): void {\n this.#disposables.dispose();\n this.emit('disposed', undefined);\n super[disposeSymbol]();\n }\n}\n\nconst rewriteError = (error: Error): Protocol.Runtime.EvaluateResponse => {\n if (error.message.includes('Object reference chain is too long')) {\n return {result: {type: 'undefined'}};\n }\n if (error.message.includes(\"Object couldn't be returned by value\")) {\n return {result: {type: 'undefined'}};\n }\n\n if (\n error.message.endsWith('Cannot find context with specified id') ||\n error.message.endsWith('Inspected target navigated or closed')\n ) {\n throw new Error(\n 'Execution context was destroyed, most likely because of a navigation.',\n );\n }\n throw error;\n};\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type Protocol from 'devtools-protocol';\n\nimport type {EventType} from '../common/EventEmitter.js';\n\nimport type {CdpFrame} from './Frame.js';\nimport type {IsolatedWorld} from './IsolatedWorld.js';\n\n/**\n * We use symbols to prevent external parties listening to these events.\n * They are internal to Puppeteer.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace FrameManagerEvent {\n export const FrameAttached = Symbol('FrameManager.FrameAttached');\n export const FrameNavigated = Symbol('FrameManager.FrameNavigated');\n export const FrameDetached = Symbol('FrameManager.FrameDetached');\n export const FrameSwapped = Symbol('FrameManager.FrameSwapped');\n export const LifecycleEvent = Symbol('FrameManager.LifecycleEvent');\n export const FrameNavigatedWithinDocument = Symbol(\n 'FrameManager.FrameNavigatedWithinDocument',\n );\n export const ConsoleApiCalled = Symbol('FrameManager.ConsoleApiCalled');\n export const BindingCalled = Symbol('FrameManager.BindingCalled');\n}\n\n/**\n * @internal\n */\nexport interface FrameManagerEvents extends Record<EventType, unknown> {\n [FrameManagerEvent.FrameAttached]: CdpFrame;\n [FrameManagerEvent.FrameNavigated]: CdpFrame;\n [FrameManagerEvent.FrameDetached]: CdpFrame;\n [FrameManagerEvent.FrameSwapped]: CdpFrame;\n [FrameManagerEvent.LifecycleEvent]: CdpFrame;\n [FrameManagerEvent.FrameNavigatedWithinDocument]: CdpFrame;\n // Emitted when a new console message is logged.\n [FrameManagerEvent.ConsoleApiCalled]: [\n IsolatedWorld,\n Protocol.Runtime.ConsoleAPICalledEvent,\n ];\n [FrameManagerEvent.BindingCalled]: [\n IsolatedWorld,\n Protocol.Runtime.BindingCalledEvent,\n ];\n}\n","/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * A unique key for {@link IsolatedWorldChart} to denote the default world.\n * Execution contexts are automatically created in the default world.\n *\n * @internal\n */\nexport const MAIN_WORLD = Symbol('mainWorld');\n/**\n * A unique key for {@link IsolatedWorldChart} to denote the puppeteer world.\n * This world contains all puppeteer-internal bindings/code.\n *\n * @internal\n */\nexport const PUPPETEER_WORLD = Symbol('puppeteerWorld');\n","/**\n * @license\n * Copyright 2019 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {firstValueFrom, map, raceWith} from '../../third_party/rxjs/rxjs.js';\nimport type {CDPSession} from '../api/CDPSession.js';\nimport type {ElementHandle} from '../api/ElementHandle.js';\nimport type {Extension} from '../api/Extension.js';\nimport type {JSHandle} from '../api/JSHandle.js';\nimport {Realm} from '../api/Realm.js';\nimport type {Logger} from '../common/Debug.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport type {TimeoutSettings} from '../common/TimeoutSettings.js';\nimport type {EvaluateFunc, HandleFor} from '../common/types.js';\nimport {\n fromEmitterEvent,\n timeout,\n withSourcePuppeteerURLIfNone,\n} from '../common/util.js';\nimport {disposeSymbol} from '../util/disposable.js';\n\nimport {CdpElementHandle} from './ElementHandle.js';\nimport type {ExecutionContext} from './ExecutionContext.js';\nimport type {CdpFrame} from './Frame.js';\nimport type {PUPPETEER_WORLD} from './IsolatedWorlds.js';\nimport {MAIN_WORLD} from './IsolatedWorlds.js';\nimport {CdpJSHandle} from './JSHandle.js';\nimport {CdpWebWorker} from './WebWorker.js';\n\n/**\n * @internal\n */\nexport interface PageBinding {\n name: string;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n pptrFunction: Function;\n}\n\n/**\n * @internal\n */\nexport interface IsolatedWorldChart {\n [key: string]: IsolatedWorld;\n [MAIN_WORLD]: IsolatedWorld;\n [PUPPETEER_WORLD]: IsolatedWorld;\n}\n\n/**\n * @internal\n */\nexport type IsolatedWorldEmitter = EventEmitter<{\n // Emitted when the isolated world gets a new execution context.\n context: ExecutionContext;\n // Emitted when the isolated world is disposed.\n disposed: undefined;\n // Emitted when a new console message is logged.\n consoleapicalled: Protocol.Runtime.ConsoleAPICalledEvent;\n /** Emitted when a binding that is not installed by the ExecutionContext is called. */\n bindingcalled: Protocol.Runtime.BindingCalledEvent;\n}>;\n\n/**\n * @internal\n */\nexport class IsolatedWorld extends Realm {\n #context?: ExecutionContext;\n #emitter: IsolatedWorldEmitter = new EventEmitter();\n #worldId: string | symbol;\n #origin?: string;\n\n readonly #frameOrWorker: CdpFrame | CdpWebWorker;\n #logger: Logger;\n\n constructor(\n frameOrWorker: CdpFrame | CdpWebWorker,\n timeoutSettings: TimeoutSettings,\n worldId: string | symbol,\n logger: Logger,\n ) {\n super(timeoutSettings);\n this.#frameOrWorker = frameOrWorker;\n this.#worldId = worldId;\n this.#logger = logger;\n }\n\n get environment(): CdpFrame | CdpWebWorker {\n return this.#frameOrWorker;\n }\n\n get client(): CDPSession {\n return this.#frameOrWorker.client;\n }\n\n get emitter(): IsolatedWorldEmitter {\n return this.#emitter;\n }\n\n setContext(context: ExecutionContext): void {\n this.#context?.[disposeSymbol]();\n context.once('disposed', this.#onContextDisposed.bind(this));\n context.on('consoleapicalled', this.#onContextConsoleApiCalled.bind(this));\n context.on('bindingcalled', this.#onContextBindingCalled.bind(this));\n this.#context = context;\n this.#emitter.emit('context', context);\n void this.taskManager.rerunAll();\n }\n\n #onContextDisposed(): void {\n this.#context = undefined;\n if ('clearDocumentHandle' in this.#frameOrWorker) {\n this.#frameOrWorker.clearDocumentHandle();\n }\n }\n\n #onContextConsoleApiCalled(\n event: Protocol.Runtime.ConsoleAPICalledEvent,\n ): void {\n this.#emitter.emit('consoleapicalled', event);\n }\n\n #onContextBindingCalled(event: Protocol.Runtime.BindingCalledEvent): void {\n this.#emitter.emit('bindingcalled', event);\n }\n\n hasContext(): boolean {\n return !!this.#context;\n }\n\n get context(): ExecutionContext | undefined {\n return this.#context;\n }\n\n #executionContext(): ExecutionContext | undefined {\n if (this.disposed) {\n throw new Error(\n `Execution context is not available in detached frame or worker \"${this.environment.url()}\" (are you trying to evaluate?)`,\n );\n }\n return this.#context;\n }\n\n /**\n * Waits for the next context to be set on the isolated world.\n */\n async #waitForExecutionContext(): Promise<ExecutionContext> {\n const error = new Error('Execution context was destroyed');\n const result = await firstValueFrom(\n fromEmitterEvent(this.#emitter, 'context').pipe(\n raceWith(\n fromEmitterEvent(this.#emitter, 'disposed').pipe(\n map(() => {\n // The message has to match the CDP message expected by the WaitTask class.\n throw error;\n }),\n ),\n timeout(this.timeoutSettings.timeout()),\n ),\n ),\n );\n return result;\n }\n\n async evaluateHandle<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n pageFunction = withSourcePuppeteerURLIfNone(\n this.evaluateHandle.name,\n pageFunction,\n );\n // This code needs to schedule evaluateHandle call synchronously (at\n // least when the context is there) so we cannot unconditionally\n // await.\n let context = this.#executionContext();\n if (!context) {\n context = await this.#waitForExecutionContext();\n }\n return await context.evaluateHandle(pageFunction, ...args);\n }\n\n async evaluate<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<Awaited<ReturnType<Func>>> {\n pageFunction = withSourcePuppeteerURLIfNone(\n this.evaluate.name,\n pageFunction,\n );\n // This code needs to schedule evaluate call synchronously (at\n // least when the context is there) so we cannot unconditionally\n // await.\n let context = this.#executionContext();\n if (!context) {\n context = await this.#waitForExecutionContext();\n }\n return await context.evaluate(pageFunction, ...args);\n }\n\n override async adoptBackendNode(\n backendNodeId?: Protocol.DOM.BackendNodeId,\n ): Promise<JSHandle<Node>> {\n // This code needs to schedule resolveNode call synchronously (at\n // least when the context is there) so we cannot unconditionally\n // await.\n let context = this.#executionContext();\n if (!context) {\n context = await this.#waitForExecutionContext();\n }\n const {object} = await this.client.send('DOM.resolveNode', {\n backendNodeId: backendNodeId,\n executionContextId: context.id,\n });\n return this.createCdpHandle(object) as JSHandle<Node>;\n }\n\n async adoptHandle<T extends JSHandle<Node>>(handle: T): Promise<T> {\n if (handle.realm === this) {\n // If the context has already adopted this handle, clone it so downstream\n // disposal doesn't become an issue.\n return (await handle.evaluateHandle(value => {\n return value;\n })) as unknown as T;\n }\n const nodeInfo = await this.client.send('DOM.describeNode', {\n objectId: handle.id,\n });\n return (await this.adoptBackendNode(nodeInfo.node.backendNodeId)) as T;\n }\n\n async transferHandle<T extends JSHandle<Node>>(handle: T): Promise<T> {\n if (handle.realm === this) {\n return handle;\n }\n // Implies it's a primitive value, probably.\n if (handle.remoteObject().objectId === undefined) {\n return handle;\n }\n const info = await this.client.send('DOM.describeNode', {\n objectId: handle.remoteObject().objectId,\n });\n const newHandle = (await this.adoptBackendNode(\n info.node.backendNodeId,\n )) as T;\n await handle.dispose();\n return newHandle;\n }\n\n /**\n * @internal\n */\n createCdpHandle(\n remoteObject: Protocol.Runtime.RemoteObject,\n ): JSHandle | ElementHandle<Node> {\n if (remoteObject.subtype === 'node') {\n return new CdpElementHandle(this, remoteObject, this.#logger);\n }\n return new CdpJSHandle(this, remoteObject, this.#logger);\n }\n\n override [disposeSymbol](): void {\n this.#context?.[disposeSymbol]();\n this.#emitter.emit('disposed', undefined);\n this.#emitter.removeAllListeners();\n super[disposeSymbol]();\n }\n\n override get origin(): string | undefined {\n return this.#origin;\n }\n\n set origin(origin: string) {\n this.#origin = origin;\n }\n\n setWorldId(worldId: string | symbol): void {\n this.#worldId = worldId;\n }\n\n async extension(): Promise<Extension | null> {\n if (this.#frameOrWorker instanceof CdpWebWorker) {\n throw new Error('Unable to get extension from Realm');\n }\n\n if (this.#worldId === MAIN_WORLD) {\n return null;\n }\n\n if (typeof this.#worldId === 'string') {\n const extensions = await this.#frameOrWorker._frameManager\n .page()\n .browser()\n .extensions();\n return extensions.get(this.#worldId) ?? null;\n }\n\n return null;\n }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {Protocol} from 'devtools-protocol';\n\nimport {CDPSessionEvent, type CDPSession} from '../api/CDPSession.js';\nimport type {Realm} from '../api/Realm.js';\nimport {TargetType} from '../api/Target.js';\nimport {\n WebWorker,\n WebWorkerEvent,\n type WebWorkerEvents,\n} from '../api/WebWorker.js';\nimport type {Logger} from '../common/Debug.js';\nimport {DEBUG_PREFIXES} from '../common/Debug.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {TimeoutSettings} from '../common/TimeoutSettings.js';\nimport type {EvaluateFunc, HandleFor} from '../index-browser.js';\nimport {Deferred} from '../util/Deferred.js';\n\nimport {ExecutionContext} from './ExecutionContext.js';\nimport {IsolatedWorld} from './IsolatedWorld.js';\nimport {MAIN_WORLD} from './IsolatedWorlds.js';\nimport type {NetworkManager} from './NetworkManager.js';\nimport {createConsoleMessage} from './utils.js';\n\n/**\n * @internal\n */\nexport type ExceptionThrownCallback = (\n event: Protocol.Runtime.ExceptionThrownEvent,\n) => void;\n\n/**\n * @internal\n */\nexport class CdpWebWorker extends WebWorker {\n #world: IsolatedWorld;\n #client: CDPSession;\n readonly #id: string;\n readonly #targetType: TargetType;\n #logger: Logger;\n readonly #emitter: EventEmitter<WebWorkerEvents>;\n #workerLoaded = new Deferred<void>();\n\n get internalEmitter(): EventEmitter<WebWorkerEvents> {\n return this.#emitter;\n }\n\n constructor(\n client: CDPSession,\n url: string,\n targetId: string,\n targetType: TargetType,\n exceptionThrown: ExceptionThrownCallback,\n networkManager: NetworkManager | undefined,\n logger: Logger,\n ) {\n super(url);\n this.#id = targetId;\n this.#client = client;\n this.#logger = logger;\n this.#targetType = targetType;\n this.#world = new IsolatedWorld(\n this,\n new TimeoutSettings(),\n MAIN_WORLD,\n logger,\n );\n this.#emitter = new EventEmitter<WebWorkerEvents>(undefined, logger);\n\n this.#client.once('Runtime.executionContextCreated', async event => {\n this.#world.setContext(\n new ExecutionContext(client, event.context, this.#world, logger),\n );\n });\n this.#client.once('Inspector.workerScriptLoaded', () => {\n this.#workerLoaded.resolve();\n });\n\n this.#world.emitter.on('consoleapicalled', async event => {\n try {\n const values = event.args.map(arg => {\n return this.#world.createCdpHandle(arg);\n });\n\n const noInternalListeners =\n this.#emitter.listenerCount(WebWorkerEvent.Console) === 0;\n const noWorkerListeners =\n this.listenerCount(WebWorkerEvent.Console) === 0;\n\n if (noInternalListeners && noWorkerListeners) {\n // eslint-disable-next-line max-len -- The comment is long.\n // eslint-disable-next-line @puppeteer/use-using -- These are not owned by this function.\n for (const value of values) {\n void value.dispose().catch((err: Error) => {\n return this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n }\n return;\n }\n\n const consoleMessages = createConsoleMessage(event, values, this.#id);\n this.#emitter.emit(WebWorkerEvent.Console, consoleMessages);\n if (!noWorkerListeners) {\n this.emit(WebWorkerEvent.Console, consoleMessages);\n }\n } catch (err) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n }\n });\n this.#client.on('Runtime.exceptionThrown', exceptionThrown);\n this.#client.once(CDPSessionEvent.Disconnected, () => {\n this.#world.dispose();\n });\n\n // This might fail if the target is closed before we receive all execution contexts.\n networkManager?.addClient(this.#client).catch((err: Error) => {\n return this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n this.#client.send('Runtime.enable').catch((err: Error) => {\n return this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n }\n\n mainRealm(): Realm {\n return this.#world;\n }\n\n get client(): CDPSession {\n return this.#client;\n }\n\n override async close(): Promise<void> {\n switch (this.#targetType) {\n case TargetType.SERVICE_WORKER: {\n // For service workers we need to close the target and detach to allow\n // the worker to stop.\n await this.client.connection()?.send('Target.closeTarget', {\n targetId: this.#id,\n });\n await this.client.connection()?.send('Target.detachFromTarget', {\n sessionId: this.client.id(),\n });\n break;\n }\n case TargetType.SHARED_WORKER: {\n await this.client.connection()?.send('Target.closeTarget', {\n targetId: this.#id,\n });\n break;\n }\n default:\n await this.evaluate(() => {\n self.close();\n });\n }\n }\n\n override async evaluate<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(func: Func | string, ...args: Params): Promise<Awaited<ReturnType<Func>>> {\n await this.#workerLoaded.valueOrThrow();\n return await super.evaluate(func, ...args);\n }\n\n override async evaluateHandle<\n Params extends unknown[],\n Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,\n >(\n func: Func | string,\n ...args: Params\n ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {\n await this.#workerLoaded.valueOrThrow();\n return await super.evaluateHandle(func, ...args);\n }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type Protocol from 'devtools-protocol';\n\nimport {type Frame, FrameEvent} from '../api/Frame.js';\nimport type {HTTPRequest} from '../api/HTTPRequest.js';\nimport type {HTTPResponse} from '../api/HTTPResponse.js';\nimport type {TimeoutError} from '../common/Errors.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {NetworkManagerEvent} from '../common/NetworkManagerEvents.js';\nimport {assert} from '../util/assert.js';\nimport {Deferred} from '../util/Deferred.js';\nimport {DisposableStack} from '../util/disposable.js';\n\nimport type {CdpFrame} from './Frame.js';\nimport {FrameManagerEvent} from './FrameManagerEvents.js';\nimport type {NetworkManager} from './NetworkManager.js';\n\n/**\n * @public\n */\nexport type PuppeteerLifeCycleEvent =\n /**\n * Waits for the 'load' event.\n */\n | 'load'\n /**\n * Waits for the 'DOMContentLoaded' event.\n */\n | 'domcontentloaded'\n /**\n * Waits till there are no more than 0 network connections for at least `500`\n * ms.\n */\n | 'networkidle0'\n /**\n * Waits till there are no more than 2 network connections for at least `500`\n * ms.\n */\n | 'networkidle2';\n\n/**\n * @public\n */\nexport type ProtocolLifeCycleEvent =\n 'load' | 'DOMContentLoaded' | 'networkIdle' | 'networkAlmostIdle';\n\nconst puppeteerToProtocolLifecycle = new Map<\n PuppeteerLifeCycleEvent,\n ProtocolLifeCycleEvent\n>([\n ['load', 'load'],\n ['domcontentloaded', 'DOMContentLoaded'],\n ['networkidle0', 'networkIdle'],\n ['networkidle2', 'networkAlmostIdle'],\n]);\n\n/**\n * @internal\n */\nexport class LifecycleWatcher {\n #expectedLifecycle: ProtocolLifeCycleEvent[];\n #frame: CdpFrame;\n #timeout: number;\n #navigationRequest: HTTPRequest | null = null;\n #subscriptions = new DisposableStack();\n #initialLoaderId: string;\n\n #terminationDeferred: Deferred<Error>;\n #sameDocumentNavigationDeferred = Deferred.create<undefined>();\n #lifecycleDeferred = Deferred.create<void>();\n #newDocumentNavigationDeferred = Deferred.create<undefined>();\n #error = new Error('LifecycleWatcher terminated');\n\n #hasSameDocumentNavigation?: boolean;\n #swapped?: boolean;\n\n #navigationResponseReceived?: Deferred<void>;\n\n constructor(\n networkManager: NetworkManager,\n frame: CdpFrame,\n waitUntil: PuppeteerLifeCycleEvent | PuppeteerLifeCycleEvent[],\n timeout: number,\n signal?: AbortSignal,\n ) {\n if (Array.isArray(waitUntil)) {\n waitUntil = waitUntil.slice();\n } else if (typeof waitUntil === 'string') {\n waitUntil = [waitUntil];\n }\n this.#initialLoaderId = frame._loaderId;\n this.#expectedLifecycle = waitUntil.map(value => {\n const protocolEvent = puppeteerToProtocolLifecycle.get(value);\n assert(protocolEvent, 'Unknown value for options.waitUntil: ' + value);\n return protocolEvent;\n });\n\n signal?.addEventListener('abort', () => {\n if (signal.reason instanceof Error) {\n signal.reason.cause = this.#error;\n }\n this.#terminationDeferred.reject(signal.reason);\n });\n\n this.#frame = frame;\n this.#timeout = timeout;\n const frameManagerEmitter = this.#subscriptions.use(\n new EventEmitter(frame._frameManager),\n );\n frameManagerEmitter.on(\n FrameManagerEvent.LifecycleEvent,\n this.#checkLifecycleComplete.bind(this),\n );\n\n const frameEmitter = this.#subscriptions.use(new EventEmitter(frame));\n frameEmitter.on(\n FrameEvent.FrameNavigatedWithinDocument,\n this.#navigatedWithinDocument.bind(this),\n );\n frameEmitter.on(FrameEvent.FrameNavigated, this.#navigated.bind(this));\n frameEmitter.on(FrameEvent.FrameSwapped, this.#frameSwapped.bind(this));\n frameEmitter.on(\n FrameEvent.FrameSwappedByActivation,\n this.#frameSwapped.bind(this),\n );\n frameEmitter.on(FrameEvent.FrameDetached, this.#onFrameDetached.bind(this));\n\n const networkManagerEmitter = this.#subscriptions.use(\n new EventEmitter(networkManager),\n );\n networkManagerEmitter.on(\n NetworkManagerEvent.Request,\n this.#onRequest.bind(this),\n );\n networkManagerEmitter.on(\n NetworkManagerEvent.Response,\n this.#onResponse.bind(this),\n );\n networkManagerEmitter.on(\n NetworkManagerEvent.RequestFailed,\n this.#onRequestFailed.bind(this),\n );\n\n this.#terminationDeferred = Deferred.create<Error>({\n timeout: this.#timeout,\n message: `Navigation timeout of ${this.#timeout} ms exceeded`,\n });\n\n this.#checkLifecycleComplete();\n }\n\n #onRequest(request: HTTPRequest): void {\n if (request.frame() !== this.#frame || !request.isNavigationRequest()) {\n return;\n }\n this.#navigationRequest = request;\n // Resolve previous navigation response in case there are multiple\n // navigation requests reported by the backend. This generally should not\n // happen by it looks like it's possible.\n this.#navigationResponseReceived?.resolve();\n this.#navigationResponseReceived = Deferred.create();\n if (request.response() !== null) {\n this.#navigationResponseReceived?.resolve();\n }\n }\n\n #onRequestFailed(request: HTTPRequest): void {\n if (this.#navigationRequest?.id !== request.id) {\n return;\n }\n this.#navigationResponseReceived?.resolve();\n }\n\n #onResponse(response: HTTPResponse): void {\n if (this.#navigationRequest?.id !== response.request().id) {\n return;\n }\n this.#navigationResponseReceived?.resolve();\n }\n\n #onFrameDetached(frame: Frame): void {\n if (this.#frame === frame) {\n this.#error.message = 'Navigating frame was detached';\n this.#terminationDeferred.resolve(this.#error);\n return;\n }\n this.#checkLifecycleComplete();\n }\n\n async navigationResponse(): Promise<HTTPResponse | null> {\n // Continue with a possibly null response.\n await this.#navigationResponseReceived?.valueOrThrow();\n return this.#navigationRequest ? this.#navigationRequest.response() : null;\n }\n\n sameDocumentNavigationPromise(): Promise<Error | undefined> {\n return this.#sameDocumentNavigationDeferred.valueOrThrow();\n }\n\n newDocumentNavigationPromise(): Promise<Error | undefined> {\n return this.#newDocumentNavigationDeferred.valueOrThrow();\n }\n\n lifecyclePromise(): Promise<void> {\n return this.#lifecycleDeferred.valueOrThrow();\n }\n\n terminationPromise(): Promise<Error | TimeoutError | undefined> {\n return this.#terminationDeferred.valueOrThrow();\n }\n\n #navigatedWithinDocument(): void {\n this.#hasSameDocumentNavigation = true;\n this.#checkLifecycleComplete();\n }\n\n #navigated(navigationType: Protocol.Page.NavigationType): void {\n if (navigationType === 'BackForwardCacheRestore') {\n return this.#frameSwapped();\n }\n this.#checkLifecycleComplete();\n }\n\n #frameSwapped(): void {\n this.#swapped = true;\n this.#checkLifecycleComplete();\n }\n\n #checkLifecycleComplete(): void {\n // We expect navigation to commit.\n if (!checkLifecycle(this.#frame, this.#expectedLifecycle)) {\n return;\n }\n this.#lifecycleDeferred.resolve();\n if (this.#hasSameDocumentNavigation) {\n this.#sameDocumentNavigationDeferred.resolve(undefined);\n }\n if (this.#swapped || this.#frame._loaderId !== this.#initialLoaderId) {\n this.#newDocumentNavigationDeferred.resolve(undefined);\n }\n\n function checkLifecycle(\n frame: CdpFrame,\n expectedLifecycle: ProtocolLifeCycleEvent[],\n ): boolean {\n for (const event of expectedLifecycle) {\n if (!frame._lifecycleEvents.has(event)) {\n return false;\n }\n }\n for (const child of frame.childFrames()) {\n if (\n child._hasStartedLoading &&\n !checkLifecycle(child, expectedLifecycle)\n ) {\n return false;\n }\n }\n return true;\n }\n }\n\n dispose(): void {\n this.#subscriptions.dispose();\n this.#error.cause = new Error('LifecycleWatcher disposed');\n this.#terminationDeferred.resolve(this.#error);\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {CDPSession} from '../api/CDPSession.js';\nimport type {DeviceRequestPrompt} from '../api/DeviceRequestPrompt.js';\nimport type {ElementHandle} from '../api/ElementHandle.js';\nimport type {SetContentWaitForOptions, WaitForOptions} from '../api/Frame.js';\nimport {Frame, FrameEvent, throwIfDetached} from '../api/Frame.js';\nimport type {HTTPResponse} from '../api/HTTPResponse.js';\nimport type {WaitTimeoutOptions} from '../api/Page.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {UnsupportedOperation} from '../common/Errors.js';\nimport type {Realm} from '../puppeteer-core.js';\nimport {Deferred} from '../util/Deferred.js';\nimport {disposeSymbol} from '../util/disposable.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\n\nimport {Accessibility} from './Accessibility.js';\nimport type {Binding} from './Binding.js';\nimport type {CdpPreloadScript} from './CdpPreloadScript.js';\nimport type {CdpDeviceRequestPromptManager} from './DeviceRequestPrompt.js';\nimport type {FrameManager} from './FrameManager.js';\nimport {FrameManagerEvent} from './FrameManagerEvents.js';\nimport type {IsolatedWorldChart} from './IsolatedWorld.js';\nimport {IsolatedWorld} from './IsolatedWorld.js';\nimport {MAIN_WORLD, PUPPETEER_WORLD} from './IsolatedWorlds.js';\nimport {\n LifecycleWatcher,\n type PuppeteerLifeCycleEvent,\n} from './LifecycleWatcher.js';\nimport type {CdpPage} from './Page.js';\nimport {CDP_BINDING_PREFIX} from './utils.js';\n\n/**\n * @internal\n */\nexport class CdpFrame extends Frame {\n #url = '';\n #detached = false;\n #client: CDPSession;\n\n _frameManager: FrameManager;\n _loaderId = '';\n _lifecycleEvents = new Set<string>();\n\n override _id: string;\n override _parentId?: string;\n override accessibility: Accessibility;\n\n worlds: IsolatedWorldChart;\n extensionWorlds: Record<string, IsolatedWorld> = {};\n #logger: Logger;\n\n constructor(\n frameManager: FrameManager,\n frameId: string,\n parentFrameId: string | undefined,\n client: CDPSession,\n logger: Logger,\n ) {\n super(logger);\n this._frameManager = frameManager;\n this.#url = '';\n this._id = frameId;\n this._parentId = parentFrameId;\n this.#detached = false;\n this.#client = client;\n this.#logger = logger;\n\n this._loaderId = '';\n this.worlds = {\n [MAIN_WORLD]: new IsolatedWorld(\n this,\n this._frameManager.timeoutSettings,\n MAIN_WORLD,\n logger,\n ),\n [PUPPETEER_WORLD]: new IsolatedWorld(\n this,\n this._frameManager.timeoutSettings,\n PUPPETEER_WORLD,\n logger,\n ),\n };\n\n this.accessibility = new Accessibility(\n this.worlds[MAIN_WORLD],\n frameId,\n logger,\n );\n\n this.on(FrameEvent.FrameSwappedByActivation, () => {\n // Emulate loading process for swapped frames.\n this._onLoadingStarted();\n this._onLoadingStopped();\n });\n\n this.registerWorldListeners(this.worlds[MAIN_WORLD]);\n }\n\n /**\n * @internal\n */\n registerWorldListeners(world: IsolatedWorld): void {\n world.emitter.on('consoleapicalled', event => {\n this._frameManager.emit(FrameManagerEvent.ConsoleApiCalled, [\n world,\n event,\n ]);\n });\n\n world.emitter.on('bindingcalled', event => {\n this._frameManager.emit(FrameManagerEvent.BindingCalled, [world, event]);\n });\n }\n\n /**\n * This is used internally in DevTools.\n *\n * @internal\n */\n _client(): CDPSession {\n return this.#client;\n }\n\n /**\n * Updates the frame ID with the new ID. This happens when the main frame is\n * replaced by a different frame.\n */\n updateId(id: string): void {\n this._id = id;\n }\n\n updateClient(client: CDPSession): void {\n this.#client = client;\n }\n\n override page(): CdpPage {\n return this._frameManager.page();\n }\n\n @throwIfDetached\n override async goto(\n url: string,\n options: {\n referer?: string;\n referrerPolicy?: string;\n timeout?: number;\n waitUntil?: PuppeteerLifeCycleEvent | PuppeteerLifeCycleEvent[];\n } = {},\n ): Promise<HTTPResponse | null> {\n if (!this.page()._isUrlAllowed(url)) {\n throw new Error(\n `Navigation to ${url} is blocked by blocklist/allowlist rules`,\n );\n }\n\n const {\n referer = this._frameManager.networkManager.extraHTTPHeaders()['referer'],\n referrerPolicy = this._frameManager.networkManager.extraHTTPHeaders()[\n 'referer-policy'\n ],\n waitUntil = ['load'],\n timeout = this._frameManager.timeoutSettings.navigationTimeout(),\n } = options;\n\n let ensureNewDocumentNavigation = false;\n const watcher = new LifecycleWatcher(\n this._frameManager.networkManager,\n this,\n waitUntil,\n timeout,\n );\n let error = await Deferred.race([\n navigate(\n this.#client,\n url,\n referer,\n referrerPolicy ? referrerPolicyToProtocol(referrerPolicy) : undefined,\n this._id,\n ),\n watcher.terminationPromise(),\n ]);\n if (!error) {\n error = await Deferred.race([\n watcher.terminationPromise(),\n ensureNewDocumentNavigation\n ? watcher.newDocumentNavigationPromise()\n : watcher.sameDocumentNavigationPromise(),\n ]);\n }\n\n try {\n if (error) {\n throw error;\n }\n return await watcher.navigationResponse();\n } finally {\n watcher.dispose();\n }\n\n async function navigate(\n client: CDPSession,\n url: string,\n referrer: string | undefined,\n referrerPolicy: Protocol.Page.ReferrerPolicy | undefined,\n frameId: string,\n ): Promise<Error | null> {\n try {\n const response = await client.send('Page.navigate', {\n url,\n referrer,\n frameId,\n referrerPolicy,\n });\n ensureNewDocumentNavigation = !!response.loaderId;\n if (response.errorText === 'net::ERR_HTTP_RESPONSE_CODE_FAILURE') {\n return null;\n }\n return response.errorText\n ? new Error(`${response.errorText} at ${url}`)\n : null;\n } catch (error) {\n if (isErrorLike(error)) {\n return error;\n }\n throw error;\n }\n }\n }\n\n @throwIfDetached\n override async waitForNavigation(\n options: WaitForOptions = {},\n ): Promise<HTTPResponse | null> {\n const {\n waitUntil = ['load'],\n timeout = this._frameManager.timeoutSettings.navigationTimeout(),\n signal,\n } = options;\n const watcher = new LifecycleWatcher(\n this._frameManager.networkManager,\n this,\n waitUntil,\n timeout,\n signal,\n );\n const error = await Deferred.race([\n watcher.terminationPromise(),\n ...(options.ignoreSameDocumentNavigation\n ? []\n : [watcher.sameDocumentNavigationPromise()]),\n watcher.newDocumentNavigationPromise(),\n ]);\n try {\n if (error) {\n throw error;\n }\n const result = await Deferred.race<\n Error | HTTPResponse | null | undefined\n >([watcher.terminationPromise(), watcher.navigationResponse()]);\n if (result instanceof Error) {\n throw error;\n }\n return result || null;\n } finally {\n watcher.dispose();\n }\n }\n\n override get client(): CDPSession {\n return this.#client;\n }\n\n override mainRealm(): IsolatedWorld {\n return this.worlds[MAIN_WORLD];\n }\n\n override isolatedRealm(): IsolatedWorld {\n return this.worlds[PUPPETEER_WORLD];\n }\n\n @throwIfDetached\n override async setContent(\n html: string,\n options: SetContentWaitForOptions = {},\n ): Promise<void> {\n const {\n waitUntil = ['load'],\n timeout = this._frameManager.timeoutSettings.navigationTimeout(),\n } = options;\n\n // We rely upon the fact that the document is reopened, which resets the\n // frame lifecycle with an \"init\" lifecycle event.\n // @see https://crrev.com/608658\n await this.setFrameContent(html);\n\n const watcher = new LifecycleWatcher(\n this._frameManager.networkManager,\n this,\n waitUntil,\n timeout,\n );\n const error = await Deferred.race<void | Error | undefined>([\n watcher.terminationPromise(),\n watcher.lifecyclePromise(),\n ]);\n watcher.dispose();\n if (error) {\n throw error;\n }\n }\n\n /**\n * @internal\n */\n override async setFrameContent(content: string): Promise<void> {\n // Writing the content from the page would go through document.write, which\n // makes Chrome treat parser-blocking cross-site scripts in it as an\n // intervention candidate and may block them outright.\n await this.#client.send('Page.setDocumentContent', {\n frameId: this._id,\n html: content,\n });\n }\n\n override url(): string {\n return this.#url;\n }\n\n override parentFrame(): CdpFrame | null {\n return this._frameManager._frameTree.parentFrame(this._id) || null;\n }\n\n override childFrames(): CdpFrame[] {\n return this._frameManager._frameTree.childFrames(this._id);\n }\n\n #deviceRequestPromptManager(): CdpDeviceRequestPromptManager {\n return this._frameManager._deviceRequestPromptManager(this.#client);\n }\n\n @throwIfDetached\n async addPreloadScript(preloadScript: CdpPreloadScript): Promise<void> {\n const parentFrame = this.parentFrame();\n if (parentFrame && this.#client === parentFrame.client) {\n return;\n }\n if (preloadScript.getIdForFrame(this)) {\n return;\n }\n const {identifier} = await this.#client.send(\n 'Page.addScriptToEvaluateOnNewDocument',\n {\n source: preloadScript.source,\n },\n );\n preloadScript.setIdForFrame(this, identifier);\n }\n\n @throwIfDetached\n async addExposedFunctionBinding(binding: Binding): Promise<void> {\n // If a frame has not started loading, it might never start. Rely on\n // addScriptToEvaluateOnNewDocument in that case.\n if (this !== this._frameManager.mainFrame() && !this._hasStartedLoading) {\n return;\n }\n await Promise.all([\n this.#client.send('Runtime.addBinding', {\n name: CDP_BINDING_PREFIX + binding.name,\n }),\n this.evaluate(binding.initSource).catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n }),\n ]);\n }\n\n @throwIfDetached\n async removeExposedFunctionBinding(binding: Binding): Promise<void> {\n // If a frame has not started loading, it might never start. Rely on\n // addScriptToEvaluateOnNewDocument in that case.\n if (this !== this._frameManager.mainFrame() && !this._hasStartedLoading) {\n return;\n }\n await Promise.all([\n this.#client.send('Runtime.removeBinding', {\n name: CDP_BINDING_PREFIX + binding.name,\n }),\n this.evaluate(name => {\n // Removes the dangling Puppeteer binding wrapper.\n // @ts-expect-error: In a different context.\n globalThis[name] = undefined;\n }, binding.name).catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n }),\n ]);\n }\n\n @throwIfDetached\n override async waitForDevicePrompt(\n options: WaitTimeoutOptions = {},\n ): Promise<DeviceRequestPrompt> {\n return await this.#deviceRequestPromptManager().waitForDevicePrompt(\n options,\n );\n }\n\n _navigated(framePayload: Protocol.Page.Frame): void {\n this._name = framePayload.name;\n this.#url = `${framePayload.url}${framePayload.urlFragment || ''}`;\n }\n\n _navigatedWithinDocument(url: string): void {\n this.#url = url;\n }\n\n _onLifecycleEvent(loaderId: string, name: string): void {\n if (name === 'init') {\n this._loaderId = loaderId;\n this._lifecycleEvents.clear();\n }\n this._lifecycleEvents.add(name);\n }\n\n _onLoadingStopped(): void {\n this._lifecycleEvents.add('DOMContentLoaded');\n this._lifecycleEvents.add('load');\n }\n\n _onLoadingStarted(): void {\n this._hasStartedLoading = true;\n }\n\n override get detached(): boolean {\n return this.#detached;\n }\n\n override [disposeSymbol](): void {\n if (this.#detached) {\n return;\n }\n this.#detached = true;\n this.worlds[MAIN_WORLD][disposeSymbol]();\n this.worlds[PUPPETEER_WORLD][disposeSymbol]();\n for (const extensionWorld of Object.values(this.extensionWorlds)) {\n extensionWorld[disposeSymbol]();\n }\n super[disposeSymbol]();\n }\n\n exposeFunction(): never {\n throw new UnsupportedOperation();\n }\n\n override async frameElement(): Promise<ElementHandle<HTMLIFrameElement> | null> {\n const parent = this.parentFrame();\n if (!parent) {\n return null;\n }\n const {backendNodeId} = await parent.client.send('DOM.getFrameOwner', {\n frameId: this._id,\n });\n return (await parent\n .mainRealm()\n .adoptBackendNode(backendNodeId)) as ElementHandle<HTMLIFrameElement>;\n }\n\n /**\n * @public\n */\n override extensionRealms(): Realm[] {\n return Object.values(this.extensionWorlds);\n }\n}\n\n/**\n * @internal\n */\nexport function referrerPolicyToProtocol(\n referrerPolicy: string,\n): Protocol.Page.ReferrerPolicy {\n // See\n // https://chromedevtools.github.io/devtools-protocol/tot/Page/#type-ReferrerPolicy\n // We need to convert from Web-facing phase to CDP's camelCase.\n return referrerPolicy.replaceAll(/-./g, match => {\n return match[1]!.toUpperCase();\n }) as Protocol.Page.ReferrerPolicy;\n}\n","/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Frame} from '../api/Frame.js';\nimport {Deferred} from '../util/Deferred.js';\n\n/**\n * Keeps track of the page frame tree and it's is managed by\n * {@link FrameManager}. FrameTree uses frame IDs to reference frame and it\n * means that referenced frames might not be in the tree anymore. Thus, the tree\n * structure is eventually consistent.\n * @internal\n */\nexport class FrameTree<FrameType extends Frame> {\n #frames = new Map<string, FrameType>();\n // frameID -> parentFrameID\n #parentIds = new Map<string, string>();\n // frameID -> childFrameIDs\n #childIds = new Map<string, Set<string>>();\n #mainFrame?: FrameType;\n #isMainFrameStale = false;\n #waitRequests = new Map<string, Set<Deferred<FrameType>>>();\n\n getMainFrame(): FrameType | undefined {\n return this.#mainFrame;\n }\n\n getById(frameId: string): FrameType | undefined {\n return this.#frames.get(frameId);\n }\n\n /**\n * Returns a promise that is resolved once the frame with\n * the given ID is added to the tree.\n */\n waitForFrame(frameId: string): Promise<FrameType> {\n const frame = this.getById(frameId);\n if (frame) {\n return Promise.resolve(frame);\n }\n const deferred = Deferred.create<FrameType>();\n const callbacks =\n this.#waitRequests.get(frameId) || new Set<Deferred<FrameType>>();\n callbacks.add(deferred);\n return deferred.valueOrThrow();\n }\n\n frames(): FrameType[] {\n return Array.from(this.#frames.values());\n }\n\n addFrame(frame: FrameType): void {\n this.#frames.set(frame._id, frame);\n if (frame._parentId) {\n this.#parentIds.set(frame._id, frame._parentId);\n if (!this.#childIds.has(frame._parentId)) {\n this.#childIds.set(frame._parentId, new Set());\n }\n this.#childIds.get(frame._parentId)!.add(frame._id);\n } else if (!this.#mainFrame || this.#isMainFrameStale) {\n this.#mainFrame = frame;\n this.#isMainFrameStale = false;\n }\n this.#waitRequests.get(frame._id)?.forEach(request => {\n return request.resolve(frame);\n });\n }\n\n removeFrame(frame: FrameType): void {\n this.#frames.delete(frame._id);\n this.#parentIds.delete(frame._id);\n if (frame._parentId) {\n this.#childIds.get(frame._parentId)?.delete(frame._id);\n } else {\n this.#isMainFrameStale = true;\n }\n }\n\n childFrames(frameId: string): FrameType[] {\n const childIds = this.#childIds.get(frameId);\n if (!childIds) {\n return [];\n }\n return Array.from(childIds)\n .map(id => {\n return this.getById(id);\n })\n .filter((frame): frame is FrameType => {\n return frame !== undefined;\n });\n }\n\n parentFrame(frameId: string): FrameType | undefined {\n const parentId = this.#parentIds.get(frameId);\n return parentId ? this.getById(parentId) : undefined;\n }\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {CDPSession} from '../api/CDPSession.js';\nimport type {Frame} from '../api/Frame.js';\nimport {\n type ContinueRequestOverrides,\n headersArray,\n HTTPRequest,\n type ResourceType,\n type ResponseForRequest,\n STATUS_TEXTS,\n handleError,\n} from '../api/HTTPRequest.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {\n mergeUint8Arrays,\n stringToBase64,\n stringToTypedArray,\n} from '../util/encoding.js';\n\nimport type {CdpHTTPResponse} from './HTTPResponse.js';\n\n/**\n * @internal\n */\nexport class CdpHTTPRequest extends HTTPRequest {\n override id: string;\n declare _redirectChain: CdpHTTPRequest[];\n declare _response: CdpHTTPResponse | null;\n\n #client: CDPSession;\n #isNavigationRequest: boolean;\n\n #url: string;\n #resourceType: ResourceType;\n\n #method: string;\n #hasPostData = false;\n #postData?: string;\n #headers: Record<string, string> = {};\n #frame: Frame | null;\n #initiator?: Protocol.Network.Initiator;\n #logger: Logger;\n\n override get client(): CDPSession {\n return this.#client;\n }\n\n override set client(newClient: CDPSession) {\n this.#client = newClient;\n }\n\n constructor(\n client: CDPSession,\n frame: Frame | null,\n interceptionId: string | undefined,\n allowInterception: boolean,\n data: {\n /**\n * Request identifier.\n */\n requestId: Protocol.Network.RequestId;\n /**\n * Loader identifier. Empty string if the request is fetched from worker.\n */\n loaderId?: Protocol.Network.LoaderId;\n /**\n * URL of the document this request is loaded for.\n */\n documentURL?: string;\n /**\n * Request data.\n */\n request: Protocol.Network.Request;\n /**\n * Request initiator.\n */\n initiator?: Protocol.Network.Initiator;\n /**\n * Type of this resource.\n */\n type?: Protocol.Network.ResourceType;\n },\n redirectChain: CdpHTTPRequest[],\n logger: Logger,\n ) {\n super();\n this.#logger = logger;\n this.#client = client;\n this.id = data.requestId;\n this.#isNavigationRequest =\n data.requestId === data.loaderId && data.type === 'Document';\n this._interceptionId = interceptionId;\n this.#url = data.request.url + (data.request.urlFragment ?? '');\n this.#resourceType = (data.type || 'other').toLowerCase() as ResourceType;\n this.#method = data.request.method;\n if (\n data.request.postDataEntries &&\n data.request.postDataEntries.length > 0\n ) {\n this.#postData = new TextDecoder().decode(\n mergeUint8Arrays(\n data.request.postDataEntries\n .map(entry => {\n return entry.bytes ? stringToTypedArray(entry.bytes, true) : null;\n })\n .filter((entry): entry is Uint8Array => {\n return entry !== null;\n }),\n ),\n );\n } else {\n this.#postData = data.request.postData;\n }\n this.#hasPostData = data.request.hasPostData ?? false;\n this.#frame = frame;\n this._redirectChain = redirectChain;\n this.#initiator = data.initiator;\n\n this.interception.enabled = allowInterception;\n\n this.updateHeaders(data.request.headers);\n }\n\n updateHeaders(headers: Protocol.Network.Headers): void {\n for (const [key, value] of Object.entries(headers)) {\n this.#headers[key.toLowerCase()] = value;\n }\n }\n\n override url(): string {\n return this.#url;\n }\n\n override resourceType(): ResourceType {\n return this.#resourceType;\n }\n\n override method(): string {\n return this.#method;\n }\n\n override postData(): string | undefined {\n return this.#postData;\n }\n\n override hasPostData(): boolean {\n return this.#hasPostData;\n }\n\n override async fetchPostData(): Promise<string | undefined> {\n try {\n const result = await this.#client.send('Network.getRequestPostData', {\n requestId: this.id,\n });\n return result.postData;\n } catch (err) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n return;\n }\n }\n\n override headers(): Record<string, string> {\n // Callers should not be allowed to mutate internal structure.\n return structuredClone(this.#headers);\n }\n\n override response(): CdpHTTPResponse | null {\n return this._response;\n }\n\n override frame(): Frame | null {\n return this.#frame;\n }\n\n override isNavigationRequest(): boolean {\n return this.#isNavigationRequest;\n }\n\n override initiator(): Protocol.Network.Initiator | undefined {\n return this.#initiator;\n }\n\n override redirectChain(): CdpHTTPRequest[] {\n return this._redirectChain.slice();\n }\n\n override failure(): {errorText: string} | null {\n if (!this._failureText) {\n return null;\n }\n return {\n errorText: this._failureText,\n };\n }\n\n protected canBeIntercepted(): boolean {\n return !this.url().startsWith('data:') && !this._fromMemoryCache;\n }\n\n /**\n * @internal\n */\n async _continue(overrides: ContinueRequestOverrides = {}): Promise<void> {\n const {url, method, postData, headers} = overrides;\n this.interception.handled = true;\n\n const postDataBinaryBase64 = postData\n ? stringToBase64(postData)\n : undefined;\n\n if (this._interceptionId === undefined) {\n throw new Error(\n 'HTTPRequest is missing _interceptionId needed for Fetch.continueRequest',\n );\n }\n await this.#client\n .send('Fetch.continueRequest', {\n requestId: this._interceptionId,\n url,\n method,\n postData: postDataBinaryBase64,\n headers: headers ? headersArray(headers) : undefined,\n })\n .catch(error => {\n this.interception.handled = false;\n return handleError(error, this.#logger);\n });\n }\n\n async _respond(response: Partial<ResponseForRequest>): Promise<void> {\n this.interception.handled = true;\n\n let parsedBody:\n | {\n contentLength: number;\n base64: string;\n }\n | undefined;\n if (response.body) {\n parsedBody = HTTPRequest.getResponse(response.body);\n }\n\n const responseHeaders: Record<string, string | string[]> = {};\n if (response.headers) {\n for (const header of Object.keys(response.headers)) {\n const value = response.headers[header];\n\n responseHeaders[header.toLowerCase()] = Array.isArray(value)\n ? value.map(item => {\n return String(item);\n })\n : String(value);\n }\n }\n if (response.contentType) {\n responseHeaders['content-type'] = response.contentType;\n }\n if (parsedBody?.contentLength && !('content-length' in responseHeaders)) {\n responseHeaders['content-length'] = String(parsedBody.contentLength);\n }\n\n const status = response.status || 200;\n if (this._interceptionId === undefined) {\n throw new Error(\n 'HTTPRequest is missing _interceptionId needed for Fetch.fulfillRequest',\n );\n }\n await this.#client\n .send('Fetch.fulfillRequest', {\n requestId: this._interceptionId,\n responseCode: status,\n responsePhrase: STATUS_TEXTS[status],\n responseHeaders: headersArray(responseHeaders),\n body: parsedBody?.base64,\n })\n .catch(error => {\n this.interception.handled = false;\n return handleError(error, this.#logger);\n });\n }\n\n async _abort(\n errorReason: Protocol.Network.ErrorReason | null,\n ): Promise<void> {\n this.interception.handled = true;\n if (this._interceptionId === undefined) {\n throw new Error(\n 'HTTPRequest is missing _interceptionId needed for Fetch.failRequest',\n );\n }\n await this.#client\n .send('Fetch.failRequest', {\n requestId: this._interceptionId,\n errorReason: errorReason || 'Failed',\n })\n .catch(error => {\n return handleError(error, this.#logger);\n });\n }\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\n/**\n * The SecurityDetails class represents the security details of a\n * response that was received over a secure connection.\n *\n * @public\n */\nexport class SecurityDetails {\n #subjectName: string;\n #issuer: string;\n #validFrom: number;\n #validTo: number;\n #protocol: string;\n #sanList: string[];\n\n /**\n * @internal\n */\n constructor(securityPayload: Protocol.Network.SecurityDetails) {\n this.#subjectName = securityPayload.subjectName;\n this.#issuer = securityPayload.issuer;\n this.#validFrom = securityPayload.validFrom;\n this.#validTo = securityPayload.validTo;\n this.#protocol = securityPayload.protocol;\n this.#sanList = securityPayload.sanList;\n }\n\n /**\n * The name of the issuer of the certificate.\n */\n issuer(): string {\n return this.#issuer;\n }\n\n /**\n * {@link https://en.wikipedia.org/wiki/Unix_time | Unix timestamp}\n * marking the start of the certificate's validity.\n */\n validFrom(): number {\n return this.#validFrom;\n }\n\n /**\n * {@link https://en.wikipedia.org/wiki/Unix_time | Unix timestamp}\n * marking the end of the certificate's validity.\n */\n validTo(): number {\n return this.#validTo;\n }\n\n /**\n * The security protocol being used, e.g. \"TLS 1.2\".\n */\n protocol(): string {\n return this.#protocol;\n }\n\n /**\n * The name of the subject to which the certificate was issued.\n */\n subjectName(): string {\n return this.#subjectName;\n }\n\n /**\n * The list of {@link https://en.wikipedia.org/wiki/Subject_Alternative_Name | subject alternative names (SANs)} of the certificate.\n */\n subjectAlternativeNames(): string[] {\n return this.#sanList;\n }\n}\n","/**\n * @license\n * Copyright 2025 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Normalizes HTTP header values by handling multiline values.\n * Multiline header values are joined with commas according to HTTP/1.1 spec.\n *\n * @internal\n */\nexport function normalizeHeaderValue(name: string, value: string): string {\n if (!value.includes('\\n')) {\n return value;\n }\n\n return value\n .split('\\n')\n .map(v => {\n return v.trim();\n })\n .filter(Boolean)\n .join(name === 'set-cookie' ? '\\n ' : ', ');\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {Frame} from '../api/Frame.js';\nimport {HTTPResponse, type RemoteAddress} from '../api/HTTPResponse.js';\nimport {ProtocolError} from '../common/Errors.js';\nimport {SecurityDetails} from '../common/SecurityDetails.js';\nimport {Deferred} from '../util/Deferred.js';\nimport {stringToTypedArray} from '../util/encoding.js';\nimport {normalizeHeaderValue} from '../util/httpUtils.js';\n\nimport type {CdpHTTPRequest} from './HTTPRequest.js';\n\n/**\n * @internal\n */\nexport class CdpHTTPResponse extends HTTPResponse {\n #request: CdpHTTPRequest;\n #contentPromise: Promise<Uint8Array> | null = null;\n #bodyLoadedDeferred = Deferred.create<void, Error>();\n #remoteAddress: RemoteAddress;\n #status: number;\n #statusText: string;\n #fromDiskCache: boolean;\n #fromServiceWorker: boolean;\n #headers: Record<string, string> = {};\n #securityDetails: SecurityDetails | null;\n #timing: Protocol.Network.ResourceTiming | null;\n\n constructor(\n request: CdpHTTPRequest,\n responsePayload: Protocol.Network.Response,\n extraInfo: Protocol.Network.ResponseReceivedExtraInfoEvent | null,\n ) {\n super();\n this.#request = request;\n\n this.#remoteAddress = {\n ip: responsePayload.remoteIPAddress,\n port: responsePayload.remotePort,\n };\n this.#statusText =\n this.#parseStatusTextFromExtraInfo(extraInfo) ||\n responsePayload.statusText;\n this.#fromDiskCache = !!responsePayload.fromDiskCache;\n this.#fromServiceWorker = !!responsePayload.fromServiceWorker;\n\n this.#status = extraInfo ? extraInfo.statusCode : responsePayload.status;\n const headers = extraInfo ? extraInfo.headers : responsePayload.headers;\n for (const [key, value] of Object.entries(headers)) {\n const headerName = key.toLowerCase();\n // See https://www.rfc-editor.org/rfc/rfc9110.html#name-field-order for\n // the set-cookie exception.\n this.#headers[headerName] = normalizeHeaderValue(headerName, value);\n }\n\n this.#securityDetails = responsePayload.securityDetails\n ? new SecurityDetails(responsePayload.securityDetails)\n : null;\n this.#timing = responsePayload.timing || null;\n }\n\n #parseStatusTextFromExtraInfo(\n extraInfo: Protocol.Network.ResponseReceivedExtraInfoEvent | null,\n ): string | undefined {\n if (!extraInfo || !extraInfo.headersText) {\n return;\n }\n const firstLine = extraInfo.headersText.split('\\r', 1)[0];\n if (!firstLine || firstLine.length > 1_000) {\n return;\n }\n const match = firstLine.match(/[^ ]* [^ ]* (.*)/);\n if (!match) {\n return;\n }\n const statusText = match[1];\n if (!statusText) {\n return;\n }\n return statusText;\n }\n\n _resolveBody(err?: Error): void {\n if (err) {\n return this.#bodyLoadedDeferred.reject(err);\n }\n return this.#bodyLoadedDeferred.resolve();\n }\n\n override remoteAddress(): RemoteAddress {\n return this.#remoteAddress;\n }\n\n override url(): string {\n return this.#request.url();\n }\n\n override status(): number {\n return this.#status;\n }\n\n override statusText(): string {\n return this.#statusText;\n }\n\n override headers(): Record<string, string> {\n return this.#headers;\n }\n\n override securityDetails(): SecurityDetails | null {\n return this.#securityDetails;\n }\n\n override timing(): Protocol.Network.ResourceTiming | null {\n return this.#timing;\n }\n\n override content(): Promise<Uint8Array> {\n if (!this.#contentPromise) {\n this.#contentPromise = this.#bodyLoadedDeferred\n .valueOrThrow()\n .then(async () => {\n try {\n // Use CDPSession from corresponding request to retrieve body, as it's client\n // might have been updated (e.g. for an adopted OOPIF).\n const response = await this.#request.client.send(\n 'Network.getResponseBody',\n {\n requestId: this.#request.id,\n },\n );\n\n return stringToTypedArray(response.body, response.base64Encoded);\n } catch (error) {\n if (\n error instanceof ProtocolError &&\n error.originalMessage ===\n 'No resource with given identifier found'\n ) {\n throw new ProtocolError(\n 'Could not load response body for this request. This might happen if the request is a preflight request.',\n );\n }\n\n throw error;\n }\n });\n }\n return this.#contentPromise;\n }\n\n override request(): CdpHTTPRequest {\n return this.#request;\n }\n\n override fromCache(): boolean {\n return this.#fromDiskCache || this.#request._fromMemoryCache;\n }\n\n override fromServiceWorker(): boolean {\n return this.#fromServiceWorker;\n }\n\n override frame(): Frame | null {\n return this.#request.frame();\n }\n}\n","/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {CdpHTTPRequest} from './HTTPRequest.js';\n\n/**\n * @internal\n */\nexport interface QueuedEventGroup {\n responseReceivedEvent: Protocol.Network.ResponseReceivedEvent;\n loadingFinishedEvent?: Protocol.Network.LoadingFinishedEvent;\n loadingFailedEvent?: Protocol.Network.LoadingFailedEvent;\n}\n\n/**\n * @internal\n */\nexport type FetchRequestId = string;\n\n/**\n * @internal\n */\nexport interface RedirectInfo {\n event: Protocol.Network.RequestWillBeSentEvent;\n fetchRequestId?: FetchRequestId;\n}\ntype RedirectInfoList = RedirectInfo[];\n\n/**\n * @internal\n */\nexport type NetworkRequestId = string;\n\n/**\n * Helper class to track network events by request ID\n *\n * @internal\n */\nexport class NetworkEventManager {\n /**\n * There are four possible orders of events:\n * A. `_onRequestWillBeSent`\n * B. `_onRequestWillBeSent`, `_onRequestPaused`\n * C. `_onRequestPaused`, `_onRequestWillBeSent`\n * D. `_onRequestPaused`, `_onRequestWillBeSent`, `_onRequestPaused`,\n * `_onRequestWillBeSent`, `_onRequestPaused`, `_onRequestPaused`\n * (see crbug.com/1196004)\n *\n * For `_onRequest` we need the event from `_onRequestWillBeSent` and\n * optionally the `interceptionId` from `_onRequestPaused`.\n *\n * If request interception is disabled, call `_onRequest` once per call to\n * `_onRequestWillBeSent`.\n * If request interception is enabled, call `_onRequest` once per call to\n * `_onRequestPaused` (once per `interceptionId`).\n *\n * Events are stored to allow for subsequent events to call `_onRequest`.\n *\n * Note that (chains of) redirect requests have the same `requestId` (!) as\n * the original request. We have to anticipate series of events like these:\n * A. `_onRequestWillBeSent`,\n * `_onRequestWillBeSent`, ...\n * B. `_onRequestWillBeSent`, `_onRequestPaused`,\n * `_onRequestWillBeSent`, `_onRequestPaused`, ...\n * C. `_onRequestWillBeSent`, `_onRequestPaused`,\n * `_onRequestPaused`, `_onRequestWillBeSent`, ...\n * D. `_onRequestPaused`, `_onRequestWillBeSent`,\n * `_onRequestPaused`, `_onRequestWillBeSent`, `_onRequestPaused`,\n * `_onRequestWillBeSent`, `_onRequestPaused`, `_onRequestPaused`, ...\n * (see crbug.com/1196004)\n */\n #requestWillBeSentMap = new Map<\n NetworkRequestId,\n Protocol.Network.RequestWillBeSentEvent\n >();\n #requestPausedMap = new Map<\n NetworkRequestId,\n Protocol.Fetch.RequestPausedEvent\n >();\n #httpRequestsMap = new Map<NetworkRequestId, CdpHTTPRequest>();\n #requestWillBeSentExtraInfoMap = new Map<\n NetworkRequestId,\n Protocol.Network.RequestWillBeSentExtraInfoEvent[]\n >();\n /*\n * The below maps are used to reconcile Network.responseReceivedExtraInfo\n * events with their corresponding request. Each response and redirect\n * response gets an ExtraInfo event, and we don't know which will come first.\n * This means that we have to store a Response or an ExtraInfo for each\n * response, and emit the event when we get both of them. In addition, to\n * handle redirects, we have to make them Arrays to represent the chain of\n * events.\n */\n #responseReceivedExtraInfoMap = new Map<\n NetworkRequestId,\n Protocol.Network.ResponseReceivedExtraInfoEvent[]\n >();\n #queuedRedirectInfoMap = new Map<NetworkRequestId, RedirectInfoList>();\n #queuedEventGroupMap = new Map<NetworkRequestId, QueuedEventGroup>();\n\n forget(networkRequestId: NetworkRequestId): void {\n this.#requestWillBeSentMap.delete(networkRequestId);\n this.#requestPausedMap.delete(networkRequestId);\n this.#requestWillBeSentExtraInfoMap.delete(networkRequestId);\n this.#queuedEventGroupMap.delete(networkRequestId);\n this.#queuedRedirectInfoMap.delete(networkRequestId);\n this.#responseReceivedExtraInfoMap.delete(networkRequestId);\n }\n\n requestExtraInfo(\n networkRequestId: NetworkRequestId,\n ): Protocol.Network.RequestWillBeSentExtraInfoEvent[] {\n if (!this.#requestWillBeSentExtraInfoMap.has(networkRequestId)) {\n this.#requestWillBeSentExtraInfoMap.set(networkRequestId, []);\n }\n return this.#requestWillBeSentExtraInfoMap.get(\n networkRequestId,\n ) as Protocol.Network.RequestWillBeSentExtraInfoEvent[];\n }\n\n responseExtraInfo(\n networkRequestId: NetworkRequestId,\n ): Protocol.Network.ResponseReceivedExtraInfoEvent[] {\n if (!this.#responseReceivedExtraInfoMap.has(networkRequestId)) {\n this.#responseReceivedExtraInfoMap.set(networkRequestId, []);\n }\n return this.#responseReceivedExtraInfoMap.get(\n networkRequestId,\n ) as Protocol.Network.ResponseReceivedExtraInfoEvent[];\n }\n\n private queuedRedirectInfo(fetchRequestId: FetchRequestId): RedirectInfoList {\n if (!this.#queuedRedirectInfoMap.has(fetchRequestId)) {\n this.#queuedRedirectInfoMap.set(fetchRequestId, []);\n }\n return this.#queuedRedirectInfoMap.get(fetchRequestId) as RedirectInfoList;\n }\n\n queueRedirectInfo(\n fetchRequestId: FetchRequestId,\n redirectInfo: RedirectInfo,\n ): void {\n this.queuedRedirectInfo(fetchRequestId).push(redirectInfo);\n }\n\n takeQueuedRedirectInfo(\n fetchRequestId: FetchRequestId,\n ): RedirectInfo | undefined {\n return this.queuedRedirectInfo(fetchRequestId).shift();\n }\n\n inFlightRequestsCount(): number {\n let inFlightRequestCounter = 0;\n for (const request of this.#httpRequestsMap.values()) {\n if (!request.response()) {\n inFlightRequestCounter++;\n }\n }\n return inFlightRequestCounter;\n }\n\n storeRequestWillBeSent(\n networkRequestId: NetworkRequestId,\n event: Protocol.Network.RequestWillBeSentEvent,\n ): void {\n this.#requestWillBeSentMap.set(networkRequestId, event);\n }\n\n getRequestWillBeSent(\n networkRequestId: NetworkRequestId,\n ): Protocol.Network.RequestWillBeSentEvent | undefined {\n return this.#requestWillBeSentMap.get(networkRequestId);\n }\n\n forgetRequestWillBeSent(networkRequestId: NetworkRequestId): void {\n this.#requestWillBeSentMap.delete(networkRequestId);\n }\n\n getRequestPaused(\n networkRequestId: NetworkRequestId,\n ): Protocol.Fetch.RequestPausedEvent | undefined {\n return this.#requestPausedMap.get(networkRequestId);\n }\n\n forgetRequestPaused(networkRequestId: NetworkRequestId): void {\n this.#requestPausedMap.delete(networkRequestId);\n }\n\n storeRequestPaused(\n networkRequestId: NetworkRequestId,\n event: Protocol.Fetch.RequestPausedEvent,\n ): void {\n this.#requestPausedMap.set(networkRequestId, event);\n }\n\n getRequest(networkRequestId: NetworkRequestId): CdpHTTPRequest | undefined {\n return this.#httpRequestsMap.get(networkRequestId);\n }\n\n storeRequest(\n networkRequestId: NetworkRequestId,\n request: CdpHTTPRequest,\n ): void {\n this.#httpRequestsMap.set(networkRequestId, request);\n }\n\n forgetRequest(networkRequestId: NetworkRequestId): void {\n this.#httpRequestsMap.delete(networkRequestId);\n }\n\n getQueuedEventGroup(\n networkRequestId: NetworkRequestId,\n ): QueuedEventGroup | undefined {\n return this.#queuedEventGroupMap.get(networkRequestId);\n }\n\n queueEventGroup(\n networkRequestId: NetworkRequestId,\n event: QueuedEventGroup,\n ): void {\n this.#queuedEventGroupMap.set(networkRequestId, event);\n }\n\n forgetQueuedEventGroup(networkRequestId: NetworkRequestId): void {\n this.#queuedEventGroupMap.delete(networkRequestId);\n }\n\n printState(): void {\n function replacer(_key: unknown, value: unknown) {\n if (value instanceof Map) {\n return {\n dataType: 'Map',\n value: Array.from(value.entries()), // or with spread: value: [...value]\n };\n } else if (value instanceof CdpHTTPRequest) {\n return {\n dataType: 'CdpHTTPRequest',\n value: `${value.id}: ${value.url()}`,\n };\n }\n {\n return value;\n }\n }\n console.log(\n 'httpRequestsMap',\n JSON.stringify(this.#httpRequestsMap, replacer, 2),\n );\n console.log(\n 'requestWillBeSentMap',\n JSON.stringify(this.#requestWillBeSentMap, replacer, 2),\n );\n console.log(\n 'requestWillBeSentMap',\n JSON.stringify(this.#responseReceivedExtraInfoMap, replacer, 2),\n );\n console.log(\n 'requestWillBeSentMap',\n JSON.stringify(this.#requestPausedMap, replacer, 2),\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {CDPSessionEvent, type CDPSession} from '../api/CDPSession.js';\nimport type {Frame} from '../api/Frame.js';\nimport type {Credentials, Page} from '../api/Page.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {\n NetworkManagerEvent,\n type NetworkManagerEvents,\n} from '../common/NetworkManagerEvents.js';\nimport {isString} from '../common/util.js';\nimport {assert} from '../util/assert.js';\nimport {DisposableStack} from '../util/disposable.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\n\nimport {isTargetClosedError} from './Connection.js';\nimport {CdpHTTPRequest} from './HTTPRequest.js';\nimport {CdpHTTPResponse} from './HTTPResponse.js';\nimport {\n NetworkEventManager,\n type FetchRequestId,\n} from './NetworkEventManager.js';\n\n/**\n * @public\n */\nexport interface NetworkConditions {\n /**\n * Emulates the offline mode.\n *\n * @remarks\n *\n * Shortcut for {@link Page.setOfflineMode}.\n */\n offline?: boolean;\n /**\n * Download speed (bytes/s)\n */\n download: number;\n /**\n * Upload speed (bytes/s)\n */\n upload: number;\n /**\n * Latency (ms)\n */\n latency: number;\n}\n\n/**\n * @public\n */\nexport interface InternalNetworkConditions extends NetworkConditions {\n offline: boolean;\n}\n\n/**\n * @internal\n */\nexport interface FrameProvider {\n frame(id: string): Frame | null;\n page(): Page;\n}\n\n/**\n * @internal\n */\nexport class NetworkManager extends EventEmitter<NetworkManagerEvents> {\n #frameManager: FrameProvider;\n #networkEventManager = new NetworkEventManager();\n #extraHTTPHeaders?: Record<string, string>;\n #credentials: Credentials | null = null;\n #attemptedAuthentications = new Set<string>();\n #userRequestInterceptionEnabled = false;\n #protocolRequestInterceptionEnabled?: boolean;\n #userCacheDisabled?: boolean;\n #emulatedNetworkConditions?: InternalNetworkConditions;\n #userAgent?: string;\n #userAgentMetadata?: Protocol.Emulation.UserAgentMetadata;\n #platform?: string;\n #acceptLanguage?: string;\n #userAgentOverrideApplied = false;\n\n readonly #handlers = [\n ['Fetch.requestPaused', this.#onRequestPaused],\n ['Fetch.authRequired', this.#onAuthRequired],\n ['Network.requestWillBeSent', this.#onRequestWillBeSent],\n ['Network.requestWillBeSentExtraInfo', this.#onRequestWillBeSentExtraInfo],\n ['Network.requestServedFromCache', this.#onRequestServedFromCache],\n ['Network.responseReceived', this.#onResponseReceived],\n ['Network.loadingFinished', this.#onLoadingFinished],\n ['Network.loadingFailed', this.#onLoadingFailed],\n ['Network.responseReceivedExtraInfo', this.#onResponseReceivedExtraInfo],\n [CDPSessionEvent.Disconnected, this.#removeClient],\n ] as const;\n\n #clients = new Map<CDPSession, DisposableStack>();\n #networkEnabled: boolean;\n #logger: Logger;\n\n constructor(\n frameManager: FrameProvider,\n networkEnabled = true,\n logger: Logger,\n ) {\n super(undefined, logger);\n this.#frameManager = frameManager;\n this.#networkEnabled = networkEnabled ?? true;\n this.#logger = logger;\n }\n\n #canIgnoreError(error: unknown) {\n return (\n isErrorLike(error) &&\n (isTargetClosedError(error) ||\n error.message.includes('Not supported') ||\n error.message.includes(\"wasn't found\"))\n );\n }\n\n async addClient(client: CDPSession): Promise<void> {\n if (!this.#networkEnabled || this.#clients.has(client)) {\n return;\n }\n const subscriptions = new DisposableStack();\n this.#clients.set(client, subscriptions);\n const clientEmitter = subscriptions.use(new EventEmitter(client));\n\n for (const [event, handler] of this.#handlers) {\n clientEmitter.on(event, (arg: any) => {\n return handler.bind(this)(client, arg);\n });\n }\n\n try {\n await Promise.all([\n client.send('Network.enable'),\n this.#applyExtraHTTPHeaders(client),\n this.#applyNetworkConditions(client),\n this.#applyProtocolCacheDisabled(client),\n this.#applyProtocolRequestInterception(client),\n this.#applyUserAgent(client),\n ]);\n } catch (error) {\n if (this.#canIgnoreError(error)) {\n return;\n }\n throw error;\n }\n }\n\n async #removeClient(client: CDPSession) {\n this.#clients.get(client)?.dispose();\n this.#clients.delete(client);\n }\n\n async authenticate(credentials: Credentials | null): Promise<void> {\n this.#credentials = credentials;\n const enabled = this.#userRequestInterceptionEnabled || !!this.#credentials;\n if (enabled === this.#protocolRequestInterceptionEnabled) {\n return;\n }\n this.#protocolRequestInterceptionEnabled = enabled;\n await this.#applyToAllClients(\n this.#applyProtocolRequestInterception.bind(this),\n );\n }\n\n async setExtraHTTPHeaders(headers: Record<string, string>): Promise<void> {\n const extraHTTPHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n assert(\n isString(value),\n `Expected value of header \"${key}\" to be String, but \"${typeof value}\" is found.`,\n );\n extraHTTPHeaders[key.toLowerCase()] = value;\n }\n this.#extraHTTPHeaders = extraHTTPHeaders;\n\n await this.#applyToAllClients(this.#applyExtraHTTPHeaders.bind(this));\n }\n\n async #applyExtraHTTPHeaders(client: CDPSession) {\n if (this.#extraHTTPHeaders === undefined) {\n return;\n }\n try {\n await client.send('Network.setExtraHTTPHeaders', {\n headers: this.#extraHTTPHeaders,\n });\n } catch (error) {\n if (this.#canIgnoreError(error)) {\n return;\n }\n throw error;\n }\n }\n\n extraHTTPHeaders(): Record<string, string> {\n return Object.assign({}, this.#extraHTTPHeaders);\n }\n\n inFlightRequestsCount(): number {\n return this.#networkEventManager.inFlightRequestsCount();\n }\n\n async setOfflineMode(value: boolean): Promise<void> {\n if (!this.#emulatedNetworkConditions) {\n this.#emulatedNetworkConditions = {\n offline: false,\n upload: -1,\n download: -1,\n latency: 0,\n };\n }\n this.#emulatedNetworkConditions.offline = value;\n await this.#applyToAllClients(this.#applyNetworkConditions.bind(this));\n }\n\n async emulateNetworkConditions(\n networkConditions: NetworkConditions | null,\n ): Promise<void> {\n if (!this.#emulatedNetworkConditions) {\n this.#emulatedNetworkConditions = {\n offline: networkConditions?.offline ?? false,\n upload: -1,\n download: -1,\n latency: 0,\n };\n }\n this.#emulatedNetworkConditions.upload = networkConditions\n ? networkConditions.upload\n : -1;\n this.#emulatedNetworkConditions.download = networkConditions\n ? networkConditions.download\n : -1;\n this.#emulatedNetworkConditions.latency = networkConditions\n ? networkConditions.latency\n : 0;\n this.#emulatedNetworkConditions.offline =\n networkConditions?.offline ?? false;\n await this.#applyToAllClients(this.#applyNetworkConditions.bind(this));\n }\n\n async #applyToAllClients(fn: (client: CDPSession) => Promise<unknown>) {\n await Promise.all(\n Array.from(this.#clients.keys()).map(client => {\n return fn(client);\n }),\n );\n }\n\n async #applyNetworkConditions(client: CDPSession): Promise<void> {\n if (this.#emulatedNetworkConditions === undefined) {\n return;\n }\n try {\n await client.send('Network.emulateNetworkConditions', {\n offline: this.#emulatedNetworkConditions.offline,\n latency: this.#emulatedNetworkConditions.latency,\n uploadThroughput: this.#emulatedNetworkConditions.upload,\n downloadThroughput: this.#emulatedNetworkConditions.download,\n });\n } catch (error) {\n if (this.#canIgnoreError(error)) {\n return;\n }\n throw error;\n }\n }\n\n async setUserAgent(\n userAgent: string,\n userAgentMetadata?: Protocol.Emulation.UserAgentMetadata,\n platform?: string,\n ): Promise<void> {\n this.#userAgent = userAgent;\n this.#userAgentMetadata = userAgentMetadata;\n this.#platform = platform;\n await this.#applyToAllClients(this.#applyUserAgent.bind(this));\n }\n\n async setAcceptLanguage(acceptLanguage: string | undefined): Promise<void> {\n this.#acceptLanguage = acceptLanguage;\n await this.#applyToAllClients(this.#applyUserAgent.bind(this));\n }\n\n async #applyUserAgent(client: CDPSession) {\n const nothingToEmulate =\n this.#userAgent === undefined &&\n this.#userAgentMetadata === undefined &&\n this.#acceptLanguage === undefined &&\n this.#platform === undefined;\n // Still need to send once to reset a previously-applied override.\n if (nothingToEmulate && !this.#userAgentOverrideApplied) {\n return;\n }\n const userAgent =\n this.#userAgent ??\n (await this.#frameManager.page().browser().userAgent());\n if (userAgent === undefined) {\n return;\n }\n try {\n await client.send('Network.setUserAgentOverride', {\n userAgent,\n acceptLanguage: this.#acceptLanguage,\n userAgentMetadata: this.#userAgentMetadata,\n platform: this.#platform,\n });\n this.#userAgentOverrideApplied = !nothingToEmulate;\n } catch (error) {\n if (this.#canIgnoreError(error)) {\n return;\n }\n throw error;\n }\n }\n\n async setCacheEnabled(enabled: boolean): Promise<void> {\n this.#userCacheDisabled = !enabled;\n await this.#applyToAllClients(this.#applyProtocolCacheDisabled.bind(this));\n }\n\n async setRequestInterception(value: boolean): Promise<void> {\n this.#userRequestInterceptionEnabled = value;\n const enabled = this.#userRequestInterceptionEnabled || !!this.#credentials;\n if (enabled === this.#protocolRequestInterceptionEnabled) {\n return;\n }\n this.#protocolRequestInterceptionEnabled = enabled;\n await this.#applyToAllClients(\n this.#applyProtocolRequestInterception.bind(this),\n );\n }\n\n async #applyProtocolRequestInterception(client: CDPSession): Promise<void> {\n if (this.#protocolRequestInterceptionEnabled === undefined) {\n return;\n }\n if (this.#userCacheDisabled === undefined) {\n this.#userCacheDisabled = false;\n }\n try {\n if (this.#protocolRequestInterceptionEnabled) {\n await Promise.all([\n this.#applyProtocolCacheDisabled(client),\n client.send('Fetch.enable', {\n handleAuthRequests: true,\n patterns: [{urlPattern: '*'}],\n }),\n ]);\n } else {\n await Promise.all([\n this.#applyProtocolCacheDisabled(client),\n client.send('Fetch.disable'),\n ]);\n }\n } catch (error) {\n if (this.#canIgnoreError(error)) {\n return;\n }\n throw error;\n }\n }\n\n async #applyProtocolCacheDisabled(client: CDPSession): Promise<void> {\n if (this.#userCacheDisabled === undefined) {\n return;\n }\n try {\n await client.send('Network.setCacheDisabled', {\n cacheDisabled: this.#userCacheDisabled,\n });\n } catch (error) {\n if (this.#canIgnoreError(error)) {\n return;\n }\n throw error;\n }\n }\n\n #onRequestWillBeSent(\n client: CDPSession,\n event: Protocol.Network.RequestWillBeSentEvent,\n ): void {\n // Request interception doesn't happen for data URLs with Network Service.\n if (\n this.#userRequestInterceptionEnabled &&\n !event.request.url.startsWith('data:')\n ) {\n const {requestId: networkRequestId} = event;\n\n this.#networkEventManager.storeRequestWillBeSent(networkRequestId, event);\n\n /**\n * CDP may have sent a Fetch.requestPaused event already. Check for it.\n */\n const requestPausedEvent =\n this.#networkEventManager.getRequestPaused(networkRequestId);\n if (requestPausedEvent) {\n const {requestId: fetchRequestId} = requestPausedEvent;\n this.#patchRequestEventHeaders(event, requestPausedEvent);\n this.#onRequest(client, event, fetchRequestId);\n this.#networkEventManager.forgetRequestPaused(networkRequestId);\n }\n\n return;\n }\n this.#onRequest(client, event, undefined);\n }\n\n #onAuthRequired(\n client: CDPSession,\n event: Protocol.Fetch.AuthRequiredEvent,\n ): void {\n let response: Protocol.Fetch.AuthChallengeResponse['response'] = 'Default';\n if (this.#attemptedAuthentications.has(event.requestId)) {\n response = 'CancelAuth';\n } else if (this.#credentials) {\n response = 'ProvideCredentials';\n this.#attemptedAuthentications.add(event.requestId);\n }\n const {username, password} = this.#credentials || {\n username: undefined,\n password: undefined,\n };\n void client\n .send('Fetch.continueWithAuth', {\n requestId: event.requestId,\n authChallengeResponse: {response, username, password},\n })\n .catch(err => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n }\n\n /**\n * CDP may send a Fetch.requestPaused without or before a\n * Network.requestWillBeSent\n *\n * CDP may send multiple Fetch.requestPaused\n * for the same Network.requestWillBeSent.\n */\n #onRequestPaused(\n client: CDPSession,\n event: Protocol.Fetch.RequestPausedEvent,\n ): void {\n if (\n !this.#userRequestInterceptionEnabled &&\n this.#protocolRequestInterceptionEnabled\n ) {\n void client\n .send('Fetch.continueRequest', {\n requestId: event.requestId,\n })\n .catch(err => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n }\n\n const {networkId: networkRequestId, requestId: fetchRequestId} = event;\n\n if (!networkRequestId) {\n this.#onRequestWithoutNetworkInstrumentation(client, event);\n return;\n }\n\n const requestWillBeSentEvent = (() => {\n const requestWillBeSentEvent =\n this.#networkEventManager.getRequestWillBeSent(networkRequestId);\n\n // redirect requests have the same `requestId`,\n if (\n requestWillBeSentEvent &&\n (requestWillBeSentEvent.request.url !== event.request.url ||\n requestWillBeSentEvent.request.method !== event.request.method)\n ) {\n this.#networkEventManager.forgetRequestWillBeSent(networkRequestId);\n return;\n }\n return requestWillBeSentEvent;\n })();\n\n if (requestWillBeSentEvent) {\n this.#patchRequestEventHeaders(requestWillBeSentEvent, event);\n this.#onRequest(client, requestWillBeSentEvent, fetchRequestId);\n } else {\n this.#networkEventManager.storeRequestPaused(networkRequestId, event);\n }\n }\n\n #patchRequestEventHeaders(\n requestWillBeSentEvent: Protocol.Network.RequestWillBeSentEvent,\n requestPausedEvent: Protocol.Fetch.RequestPausedEvent,\n ): void {\n requestWillBeSentEvent.request.headers = {\n ...requestWillBeSentEvent.request.headers,\n // includes extra headers, like: Accept, Origin\n ...requestPausedEvent.request.headers,\n };\n }\n\n #onRequestWithoutNetworkInstrumentation(\n client: CDPSession,\n event: Protocol.Fetch.RequestPausedEvent,\n ): void {\n // If an event has no networkId it should not have any network events. We\n // still want to dispatch it for the interception by the user.\n const frame = event.frameId\n ? this.#frameManager.frame(event.frameId)\n : null;\n\n const request = new CdpHTTPRequest(\n client,\n frame,\n event.requestId,\n this.#userRequestInterceptionEnabled,\n event,\n [],\n this.#logger,\n );\n this.emit(NetworkManagerEvent.Request, request);\n void request.finalizeInterceptions();\n }\n\n #onRequest(\n client: CDPSession,\n event: Protocol.Network.RequestWillBeSentEvent,\n fetchRequestId?: FetchRequestId,\n fromMemoryCache = false,\n ): void {\n let redirectChain: CdpHTTPRequest[] = [];\n if (event.redirectResponse) {\n // We want to emit a response and requestfinished for the\n // redirectResponse, but we can't do so unless we have a\n // responseExtraInfo ready to pair it up with. If we don't have any\n // responseExtraInfos saved in our queue, they we have to wait until\n // the next one to emit response and requestfinished, *and* we should\n // also wait to emit this Request too because it should come after the\n // response/requestfinished.\n let redirectResponseExtraInfo = null;\n if (event.redirectHasExtraInfo) {\n redirectResponseExtraInfo = this.#networkEventManager\n .responseExtraInfo(event.requestId)\n .shift();\n if (!redirectResponseExtraInfo) {\n this.#networkEventManager.queueRedirectInfo(event.requestId, {\n event,\n fetchRequestId,\n });\n return;\n }\n }\n\n const request = this.#networkEventManager.getRequest(event.requestId);\n // If we connect late to the target, we could have missed the\n // requestWillBeSent event.\n if (request) {\n this.#handleRequestRedirect(\n client,\n request,\n event.redirectResponse,\n redirectResponseExtraInfo,\n );\n redirectChain = request._redirectChain;\n\n const extraInfo = this.#networkEventManager\n .requestExtraInfo(event.requestId)\n .shift();\n if (extraInfo) {\n request.updateHeaders(extraInfo.headers);\n }\n }\n }\n const frame = event.frameId\n ? this.#frameManager.frame(event.frameId)\n : null;\n\n const request = new CdpHTTPRequest(\n client,\n frame,\n fetchRequestId,\n this.#userRequestInterceptionEnabled,\n event,\n redirectChain,\n this.#logger,\n );\n\n const extraInfo = this.#networkEventManager\n .requestExtraInfo(event.requestId)\n .shift();\n if (extraInfo) {\n request.updateHeaders(extraInfo.headers);\n }\n\n request._fromMemoryCache = fromMemoryCache;\n this.#networkEventManager.storeRequest(event.requestId, request);\n this.emit(NetworkManagerEvent.Request, request);\n void request.finalizeInterceptions();\n }\n\n #onRequestWillBeSentExtraInfo(\n _client: CDPSession,\n event: Protocol.Network.RequestWillBeSentExtraInfoEvent,\n ): void {\n const request = this.#networkEventManager.getRequest(event.requestId);\n if (request) {\n request.updateHeaders(event.headers);\n } else {\n this.#networkEventManager.requestExtraInfo(event.requestId).push(event);\n }\n }\n\n #onRequestServedFromCache(\n client: CDPSession,\n event: Protocol.Network.RequestServedFromCacheEvent,\n ): void {\n const requestWillBeSentEvent =\n this.#networkEventManager.getRequestWillBeSent(event.requestId);\n let request = this.#networkEventManager.getRequest(event.requestId);\n // Requests served from memory cannot be intercepted.\n if (request) {\n request._fromMemoryCache = true;\n }\n // If request ended up being served from cache, we need to convert\n // requestWillBeSentEvent to a HTTP request.\n if (!request && requestWillBeSentEvent) {\n this.#onRequest(client, requestWillBeSentEvent, undefined, true);\n request = this.#networkEventManager.getRequest(event.requestId);\n }\n if (!request) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(\n new Error(\n `Request ${event.requestId} was served from cache but we could not find the corresponding request object`,\n ),\n );\n return;\n }\n this.emit(NetworkManagerEvent.RequestServedFromCache, request);\n }\n\n #handleRequestRedirect(\n _client: CDPSession,\n request: CdpHTTPRequest,\n responsePayload: Protocol.Network.Response,\n extraInfo: Protocol.Network.ResponseReceivedExtraInfoEvent | null,\n ): void {\n const response = new CdpHTTPResponse(request, responsePayload, extraInfo);\n request._response = response;\n request._redirectChain.push(request);\n response._resolveBody(\n new Error('Response body is unavailable for redirect responses'),\n );\n this.#forgetRequest(request, false);\n this.emit(NetworkManagerEvent.Response, response);\n this.emit(NetworkManagerEvent.RequestFinished, request);\n }\n\n #emitResponseEvent(\n _client: CDPSession,\n responseReceived: Protocol.Network.ResponseReceivedEvent,\n extraInfo: Protocol.Network.ResponseReceivedExtraInfoEvent | null,\n ): void {\n const request = this.#networkEventManager.getRequest(\n responseReceived.requestId,\n );\n // FileUpload sends a response without a matching request.\n if (!request) {\n return;\n }\n\n const extraInfos = this.#networkEventManager.responseExtraInfo(\n responseReceived.requestId,\n );\n if (extraInfos.length) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(\n new Error(\n 'Unexpected extraInfo events for request ' +\n responseReceived.requestId,\n ),\n );\n }\n\n // Chromium sends wrong extraInfo events for responses served from cache.\n // See https://github.com/puppeteer/puppeteer/issues/9965 and\n // https://crbug.com/1340398.\n if (responseReceived.response.fromDiskCache) {\n extraInfo = null;\n }\n\n const response = new CdpHTTPResponse(\n request,\n responseReceived.response,\n extraInfo,\n );\n request._response = response;\n this.emit(NetworkManagerEvent.Response, response);\n }\n\n #onResponseReceived(\n client: CDPSession,\n event: Protocol.Network.ResponseReceivedEvent,\n ): void {\n const request = this.#networkEventManager.getRequest(event.requestId);\n let extraInfo = null;\n if (request && !request._fromMemoryCache && event.hasExtraInfo) {\n extraInfo = this.#networkEventManager\n .responseExtraInfo(event.requestId)\n .shift();\n if (!extraInfo) {\n // Wait until we get the corresponding ExtraInfo event.\n this.#networkEventManager.queueEventGroup(event.requestId, {\n responseReceivedEvent: event,\n });\n return;\n }\n }\n this.#emitResponseEvent(client, event, extraInfo);\n }\n\n #onResponseReceivedExtraInfo(\n client: CDPSession,\n event: Protocol.Network.ResponseReceivedExtraInfoEvent,\n ): void {\n // We may have skipped a redirect response/request pair due to waiting for\n // this ExtraInfo event. If so, continue that work now that we have the\n // request.\n const redirectInfo = this.#networkEventManager.takeQueuedRedirectInfo(\n event.requestId,\n );\n if (redirectInfo) {\n this.#networkEventManager.responseExtraInfo(event.requestId).push(event);\n this.#onRequest(client, redirectInfo.event, redirectInfo.fetchRequestId);\n return;\n }\n\n // We may have skipped response and loading events because we didn't have\n // this ExtraInfo event yet. If so, emit those events now.\n const queuedEvents = this.#networkEventManager.getQueuedEventGroup(\n event.requestId,\n );\n if (queuedEvents) {\n this.#networkEventManager.forgetQueuedEventGroup(event.requestId);\n this.#emitResponseEvent(\n client,\n queuedEvents.responseReceivedEvent,\n event,\n );\n if (queuedEvents.loadingFinishedEvent) {\n this.#emitLoadingFinished(client, queuedEvents.loadingFinishedEvent);\n }\n if (queuedEvents.loadingFailedEvent) {\n this.#emitLoadingFailed(client, queuedEvents.loadingFailedEvent);\n }\n return;\n }\n\n // Wait until we get another event that can use this ExtraInfo event.\n this.#networkEventManager.responseExtraInfo(event.requestId).push(event);\n }\n\n #forgetRequest(request: CdpHTTPRequest, events: boolean): void {\n const requestId = request.id;\n const interceptionId = request._interceptionId;\n\n this.#networkEventManager.forgetRequest(requestId);\n if (interceptionId !== undefined) {\n this.#attemptedAuthentications.delete(interceptionId);\n }\n\n if (events) {\n this.#networkEventManager.forget(requestId);\n }\n }\n\n #onLoadingFinished(\n client: CDPSession,\n event: Protocol.Network.LoadingFinishedEvent,\n ): void {\n // If the response event for this request is still waiting on a\n // corresponding ExtraInfo event, then wait to emit this event too.\n const queuedEvents = this.#networkEventManager.getQueuedEventGroup(\n event.requestId,\n );\n if (queuedEvents) {\n queuedEvents.loadingFinishedEvent = event;\n } else {\n this.#emitLoadingFinished(client, event);\n }\n }\n\n #emitLoadingFinished(\n client: CDPSession,\n event: Protocol.Network.LoadingFinishedEvent,\n ): void {\n const request = this.#networkEventManager.getRequest(event.requestId);\n // For certain requestIds we never receive requestWillBeSent event.\n // @see https://crbug.com/750469\n if (!request) {\n return;\n }\n\n this.#adoptCdpSessionIfNeeded(client, request);\n\n // Under certain conditions we never get the Network.responseReceived\n // event from protocol. @see https://crbug.com/883475\n if (request.response()) {\n request.response()?._resolveBody();\n }\n this.#forgetRequest(request, true);\n this.emit(NetworkManagerEvent.RequestFinished, request);\n }\n\n #onLoadingFailed(\n client: CDPSession,\n event: Protocol.Network.LoadingFailedEvent,\n ): void {\n // If the response event for this request is still waiting on a\n // corresponding ExtraInfo event, then wait to emit this event too.\n const queuedEvents = this.#networkEventManager.getQueuedEventGroup(\n event.requestId,\n );\n if (queuedEvents) {\n queuedEvents.loadingFailedEvent = event;\n } else {\n this.#emitLoadingFailed(client, event);\n }\n }\n\n #emitLoadingFailed(\n client: CDPSession,\n event: Protocol.Network.LoadingFailedEvent,\n ): void {\n const request = this.#networkEventManager.getRequest(event.requestId);\n // For certain requestIds we never receive requestWillBeSent event.\n // @see https://crbug.com/750469\n if (!request) {\n return;\n }\n this.#adoptCdpSessionIfNeeded(client, request);\n request._failureText = event.errorText;\n const response = request.response();\n if (response) {\n response._resolveBody();\n }\n this.#forgetRequest(request, true);\n this.emit(NetworkManagerEvent.RequestFailed, request);\n }\n\n #adoptCdpSessionIfNeeded(client: CDPSession, request: CdpHTTPRequest): void {\n // Document requests for OOPIFs start in the parent frame but are\n // adopted by their child frame, meaning their loadingFinished and\n // loadingFailed events are fired on the child session. In this case\n // we reassign the request CDPSession to ensure all subsequent\n // actions use the correct session (e.g. retrieving response body in\n // HTTPResponse). The same applies to main worker script requests.\n if (client !== request.client) {\n request.client = client;\n }\n }\n}\n","/**\n * @license\n * Copyright 2026 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {Issue} from '../api/Issue.js';\n\n/**\n * @internal\n */\nexport class CdpIssue implements Issue {\n #code: Protocol.Audits.InspectorIssueCode;\n #details: Protocol.Audits.InspectorIssueDetails;\n\n constructor(issue: Protocol.Audits.InspectorIssue) {\n this.#code = issue.code;\n this.#details = issue.details;\n }\n\n get code(): Protocol.Audits.InspectorIssueCode {\n return this.#code;\n }\n\n get details(): Protocol.Audits.InspectorIssueDetails {\n return this.#details;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {type CDPSession, CDPSessionEvent} from '../api/CDPSession.js';\nimport {FrameEvent} from '../api/Frame.js';\nimport {PageEvent, type NewDocumentScriptEvaluation} from '../api/Page.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport type {TimeoutSettings} from '../common/TimeoutSettings.js';\nimport {PuppeteerURL, UTILITY_WORLD_NAME} from '../common/util.js';\nimport {assert} from '../util/assert.js';\nimport {Deferred} from '../util/Deferred.js';\nimport {DisposableStack, disposeSymbol} from '../util/disposable.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\n\nimport type {Binding} from './Binding.js';\nimport {CdpIssue} from './CdpIssue.js';\nimport {CdpPreloadScript} from './CdpPreloadScript.js';\nimport type {CdpCDPSession} from './CdpSession.js';\nimport {isTargetClosedError} from './Connection.js';\nimport {CdpDeviceRequestPromptManager} from './DeviceRequestPrompt.js';\nimport {ExecutionContext} from './ExecutionContext.js';\nimport {CdpFrame} from './Frame.js';\nimport type {FrameManagerEvents} from './FrameManagerEvents.js';\nimport {FrameManagerEvent} from './FrameManagerEvents.js';\nimport {FrameTree} from './FrameTree.js';\nimport {IsolatedWorld} from './IsolatedWorld.js';\nimport {MAIN_WORLD, PUPPETEER_WORLD} from './IsolatedWorlds.js';\nimport {NetworkManager} from './NetworkManager.js';\nimport type {CdpPage} from './Page.js';\nimport type {CdpTarget} from './Target.js';\n\nconst CHROME_EXTENSION_PREFIX = 'chrome-extension://';\n/**\n * A frame manager manages the frames for a given {@link Page | page}.\n *\n * @internal\n */\nexport class FrameManager extends EventEmitter<FrameManagerEvents> {\n #page: CdpPage;\n #networkManager: NetworkManager;\n #timeoutSettings: TimeoutSettings;\n #isolatedWorlds = new Set<string>();\n #client: CdpCDPSession;\n #scriptsToEvaluateOnNewDocument = new Map<string, CdpPreloadScript>();\n #bindings = new Set<Binding>();\n\n _frameTree = new FrameTree<CdpFrame>();\n\n /**\n * Set of frame IDs stored to indicate if a frame has received a\n * frameNavigated event so that frame tree responses could be ignored as the\n * frameNavigated event usually contains the latest information.\n */\n #frameNavigatedReceived = new Set<string>();\n\n #deviceRequestPromptManagerMap = new WeakMap<\n CDPSession,\n CdpDeviceRequestPromptManager\n >();\n\n #frameTreeHandled?: Deferred<void>;\n #logger: Logger;\n\n get timeoutSettings(): TimeoutSettings {\n return this.#timeoutSettings;\n }\n\n get networkManager(): NetworkManager {\n return this.#networkManager;\n }\n\n get client(): CdpCDPSession {\n return this.#client;\n }\n\n constructor(\n client: CdpCDPSession,\n page: CdpPage,\n timeoutSettings: TimeoutSettings,\n logger: Logger,\n ) {\n super(undefined, logger);\n this.#client = client;\n this.#page = page;\n this.#networkManager = new NetworkManager(\n this,\n page.browser().isNetworkEnabled(),\n logger,\n );\n this.#timeoutSettings = timeoutSettings;\n this.#logger = logger;\n this.setupEventListeners(this.#client);\n client.once(CDPSessionEvent.Disconnected, () => {\n void this.#onClientDisconnect(client).catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n });\n }\n\n /**\n * Called when the frame's client is disconnected. We don't know if the\n * disconnect means that the frame is removed or if it will be replaced by a\n * new frame. Therefore, we wait for a swap event.\n */\n async #onClientDisconnect(client: CdpCDPSession) {\n const mainFrame = this._frameTree.getMainFrame();\n if (!mainFrame) {\n return;\n }\n\n // If the disconnected client is not the current one, it means a swap\n // has already happened.\n if (this.#client !== client) {\n return;\n }\n\n if (!this.#page.browser().connected || this.#page.isClosed()) {\n // If the browser is not connected or the page is closed, we know\n // that activation will not happen.\n this.#removeFramesRecursively(mainFrame);\n return;\n }\n\n for (const child of mainFrame.childFrames()) {\n this.#removeFramesRecursively(child);\n }\n const swapped = Deferred.create<void>();\n using subscriptions = new DisposableStack();\n const frameEmitter = subscriptions.use(new EventEmitter(mainFrame));\n const pageEmitter = subscriptions.use(new EventEmitter(this.#page));\n\n frameEmitter.once(FrameEvent.FrameSwappedByActivation, () => {\n swapped.resolve();\n });\n pageEmitter.once(PageEvent.Close, () => {\n swapped.reject(new Error('Page closed'));\n });\n\n try {\n await swapped.valueOrThrow();\n } catch {\n this.#removeFramesRecursively(mainFrame);\n }\n }\n\n /**\n * When the main frame is replaced by another main frame,\n * we maintain the main frame object identity while updating\n * its frame tree and ID.\n */\n async swapFrameTree(client: CdpCDPSession): Promise<void> {\n this.#client = client;\n const frame = this._frameTree.getMainFrame();\n if (frame) {\n this.#frameNavigatedReceived.add(this.#client.target()._targetId);\n this._frameTree.removeFrame(frame);\n frame.updateId(this.#client.target()._targetId);\n this._frameTree.addFrame(frame);\n frame.updateClient(client);\n }\n this.setupEventListeners(client);\n client.once(CDPSessionEvent.Disconnected, () => {\n void this.#onClientDisconnect(client).catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n });\n await this.initialize(client, frame);\n await this.#networkManager.addClient(client);\n if (frame) {\n frame.emit(FrameEvent.FrameSwappedByActivation, undefined);\n }\n }\n\n async registerSpeculativeSession(client: CdpCDPSession): Promise<void> {\n await this.#networkManager.addClient(client);\n }\n\n private setupEventListeners(session: CDPSession) {\n session.on('Page.frameAttached', async event => {\n await this.#frameTreeHandled?.valueOrThrow();\n this.#onFrameAttached(session, event.frameId, event.parentFrameId);\n });\n session.on('Page.frameNavigated', async event => {\n this.#frameNavigatedReceived.add(event.frame.id);\n await this.#frameTreeHandled?.valueOrThrow();\n void this.#onFrameNavigated(event.frame, event.type);\n });\n session.on('Page.navigatedWithinDocument', async event => {\n await this.#frameTreeHandled?.valueOrThrow();\n this.#onFrameNavigatedWithinDocument(event.frameId, event.url);\n });\n session.on(\n 'Page.frameDetached',\n async (event: Protocol.Page.FrameDetachedEvent) => {\n await this.#frameTreeHandled?.valueOrThrow();\n this.#onFrameDetached(\n event.frameId,\n event.reason as Protocol.Page.FrameDetachedEventReason,\n );\n },\n );\n session.on('Page.frameStartedLoading', async event => {\n await this.#frameTreeHandled?.valueOrThrow();\n this.#onFrameStartedLoading(event.frameId);\n });\n session.on('Page.frameStoppedLoading', async event => {\n await this.#frameTreeHandled?.valueOrThrow();\n this.#onFrameStoppedLoading(event.frameId);\n });\n session.on('Runtime.executionContextCreated', async event => {\n await this.#frameTreeHandled?.valueOrThrow();\n this.#onExecutionContextCreated(event.context, session);\n });\n session.on('Page.lifecycleEvent', async event => {\n await this.#frameTreeHandled?.valueOrThrow();\n this.#onLifecycleEvent(event);\n });\n session.on('Audits.issueAdded', event => {\n this.#page.emit(PageEvent.Issue, new CdpIssue(event.issue));\n });\n }\n\n async initialize(client: CDPSession, frame?: CdpFrame | null): Promise<void> {\n try {\n this.#frameTreeHandled?.resolve();\n this.#frameTreeHandled = Deferred.create();\n // We need to schedule all these commands while the target is paused,\n // therefore, it needs to happen synchronously. At the same time we\n // should not start processing execution context and frame events before\n // we received the initial information about the frame tree.\n await Promise.all([\n this.#networkManager.addClient(client),\n client.send('Page.enable'),\n client.send('Page.getFrameTree').then(({frameTree}) => {\n this.#handleFrameTree(client, frameTree);\n this.#frameTreeHandled?.resolve();\n }),\n client.send('Page.setLifecycleEventsEnabled', {enabled: true}),\n client.send('Runtime.enable').then(() => {\n return this.#createIsolatedWorld(client, UTILITY_WORLD_NAME);\n }),\n ...(frame\n ? Array.from(this.#scriptsToEvaluateOnNewDocument.values())\n : []\n ).map(script => {\n return frame?.addPreloadScript(script);\n }),\n ...(frame ? Array.from(this.#bindings.values()) : []).map(binding => {\n return frame?.addExposedFunctionBinding(binding);\n }),\n this.#page.browser().isIssuesEnabled() && client.send('Audits.enable'),\n ]);\n } catch (error) {\n this.#frameTreeHandled?.resolve();\n // The target might have been closed before the initialization finished.\n if (isErrorLike(error) && isTargetClosedError(error)) {\n return;\n }\n\n throw error;\n }\n }\n\n page(): CdpPage {\n return this.#page;\n }\n\n mainFrame(): CdpFrame {\n const mainFrame = this._frameTree.getMainFrame();\n assert(mainFrame, 'Requesting main frame too early!');\n return mainFrame;\n }\n\n frames(): CdpFrame[] {\n return Array.from(this._frameTree.frames());\n }\n\n frame(frameId: string): CdpFrame | null {\n return this._frameTree.getById(frameId) || null;\n }\n\n async #forEachFrame(\n action: (frame: CdpFrame) => Promise<unknown>,\n ): Promise<void> {\n await Promise.all(\n this.frames().map(async frame => {\n try {\n await action(frame);\n } catch (error) {\n // Only an out-of-process frame has a session of its own to lose.\n if (\n frame._client() === this.#client ||\n !isErrorLike(error) ||\n !isTargetClosedError(error)\n ) {\n throw error;\n }\n }\n }),\n );\n }\n\n async addExposedFunctionBinding(binding: Binding): Promise<void> {\n this.#bindings.add(binding);\n await this.#forEachFrame(frame => {\n return frame.addExposedFunctionBinding(binding);\n });\n }\n\n async removeExposedFunctionBinding(binding: Binding): Promise<void> {\n this.#bindings.delete(binding);\n await this.#forEachFrame(frame => {\n return frame.removeExposedFunctionBinding(binding);\n });\n }\n\n async evaluateOnNewDocument(\n source: string,\n ): Promise<NewDocumentScriptEvaluation> {\n const {identifier} = await this.mainFrame()\n ._client()\n .send('Page.addScriptToEvaluateOnNewDocument', {\n source,\n });\n\n const preloadScript = new CdpPreloadScript(\n this.mainFrame(),\n identifier,\n source,\n );\n\n this.#scriptsToEvaluateOnNewDocument.set(identifier, preloadScript);\n\n await this.#forEachFrame(frame => {\n return frame.addPreloadScript(preloadScript);\n });\n\n return {identifier};\n }\n\n async removeScriptToEvaluateOnNewDocument(identifier: string): Promise<void> {\n const preloadScript = this.#scriptsToEvaluateOnNewDocument.get(identifier);\n if (!preloadScript) {\n throw new Error(\n `Script to evaluate on new document with id ${identifier} not found`,\n );\n }\n\n this.#scriptsToEvaluateOnNewDocument.delete(identifier);\n\n await Promise.all(\n this.frames().map(frame => {\n const identifier = preloadScript.getIdForFrame(frame);\n if (!identifier) {\n return;\n }\n return frame\n ._client()\n .send('Page.removeScriptToEvaluateOnNewDocument', {\n identifier,\n })\n .catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }),\n );\n }\n\n onAttachedToTarget(target: CdpTarget): void {\n if (target._getTargetInfo().type !== 'iframe') {\n return;\n }\n\n const frame = this.frame(target._getTargetInfo().targetId);\n if (frame) {\n frame.updateClient(target._session()!);\n }\n this.setupEventListeners(target._session()!);\n void this.initialize(target._session()!, frame).catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }\n\n _deviceRequestPromptManager(\n client: CDPSession,\n ): CdpDeviceRequestPromptManager {\n let manager = this.#deviceRequestPromptManagerMap.get(client);\n if (manager === undefined) {\n manager = new CdpDeviceRequestPromptManager(\n client,\n this.#timeoutSettings,\n );\n this.#deviceRequestPromptManagerMap.set(client, manager);\n }\n return manager;\n }\n\n #onLifecycleEvent(event: Protocol.Page.LifecycleEventEvent): void {\n const frame = this.frame(event.frameId);\n if (!frame) {\n return;\n }\n frame._onLifecycleEvent(event.loaderId, event.name);\n this.emit(FrameManagerEvent.LifecycleEvent, frame);\n frame.emit(FrameEvent.LifecycleEvent, undefined);\n }\n\n #onFrameStartedLoading(frameId: string): void {\n const frame = this.frame(frameId);\n if (!frame) {\n return;\n }\n frame._onLoadingStarted();\n }\n\n #onFrameStoppedLoading(frameId: string): void {\n const frame = this.frame(frameId);\n if (!frame) {\n return;\n }\n frame._onLoadingStopped();\n this.emit(FrameManagerEvent.LifecycleEvent, frame);\n frame.emit(FrameEvent.LifecycleEvent, undefined);\n }\n\n #handleFrameTree(\n session: CDPSession,\n frameTree: Protocol.Page.FrameTree,\n ): void {\n if (frameTree.frame.parentId) {\n this.#onFrameAttached(\n session,\n frameTree.frame.id,\n frameTree.frame.parentId,\n );\n }\n if (!this.#frameNavigatedReceived.has(frameTree.frame.id)) {\n void this.#onFrameNavigated(frameTree.frame, 'Navigation');\n } else {\n this.#frameNavigatedReceived.delete(frameTree.frame.id);\n }\n\n if (!frameTree.childFrames) {\n return;\n }\n\n for (const child of frameTree.childFrames) {\n this.#handleFrameTree(session, child);\n }\n }\n\n #onFrameAttached(\n session: CDPSession,\n frameId: string,\n parentFrameId: string,\n ): void {\n let frame = this.frame(frameId);\n if (frame) {\n const parentFrame = this.frame(parentFrameId);\n if (session && parentFrame && frame.client !== parentFrame?.client) {\n // If an OOP iframes becomes a normal iframe\n // again it is first attached to the parent frame before the\n // target is removed.\n frame.updateClient(session);\n }\n return;\n }\n\n frame = new CdpFrame(this, frameId, parentFrameId, session, this.#logger);\n this._frameTree.addFrame(frame);\n this.emit(FrameManagerEvent.FrameAttached, frame);\n }\n\n async #onFrameNavigated(\n framePayload: Protocol.Page.Frame,\n navigationType: Protocol.Page.NavigationType,\n ): Promise<void> {\n const frameId = framePayload.id;\n const isMainFrame = !framePayload.parentId;\n\n let frame = this._frameTree.getById(frameId);\n\n // Detach all child frames first.\n if (frame) {\n for (const child of frame.childFrames()) {\n this.#removeFramesRecursively(child);\n }\n }\n\n // Update or create main frame.\n if (isMainFrame) {\n if (frame) {\n // Update frame id to retain frame identity on cross-process navigation.\n this._frameTree.removeFrame(frame);\n frame._id = frameId;\n } else {\n // Initial main frame navigation.\n frame = new CdpFrame(\n this,\n frameId,\n undefined,\n this.#client,\n this.#logger,\n );\n }\n this._frameTree.addFrame(frame);\n }\n\n frame = await this._frameTree.waitForFrame(frameId);\n frame._navigated(framePayload);\n this.emit(FrameManagerEvent.FrameNavigated, frame);\n frame.emit(FrameEvent.FrameNavigated, navigationType);\n }\n\n async #createIsolatedWorld(session: CDPSession, name: string): Promise<void> {\n const key = `${session.id()}:${name}`;\n\n if (this.#isolatedWorlds.has(key)) {\n return;\n }\n\n await session.send('Page.addScriptToEvaluateOnNewDocument', {\n source: `//# sourceURL=${PuppeteerURL.INTERNAL_URL}`,\n worldName: name,\n });\n\n await Promise.all(\n this.frames()\n .filter(frame => {\n return frame.client === session;\n })\n .map(frame => {\n // Frames might be removed before we send this, so we don't want to\n // throw an error.\n return session\n .send('Page.createIsolatedWorld', {\n frameId: frame._id,\n worldName: name,\n grantUniveralAccess: true,\n })\n .catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }),\n );\n\n this.#isolatedWorlds.add(key);\n }\n\n #onFrameNavigatedWithinDocument(frameId: string, url: string): void {\n const frame = this.frame(frameId);\n if (!frame) {\n return;\n }\n frame._navigatedWithinDocument(url);\n this.emit(FrameManagerEvent.FrameNavigatedWithinDocument, frame);\n frame.emit(FrameEvent.FrameNavigatedWithinDocument, undefined);\n this.emit(FrameManagerEvent.FrameNavigated, frame);\n frame.emit(FrameEvent.FrameNavigated, 'Navigation');\n }\n\n #onFrameDetached(\n frameId: string,\n reason: Protocol.Page.FrameDetachedEventReason,\n ): void {\n const frame = this.frame(frameId);\n if (!frame) {\n return;\n }\n switch (reason) {\n case 'remove':\n // Only remove the frame if the reason for the detached event is\n // an actual removement of the frame.\n // For frames that become OOP iframes, the reason would be 'swap'.\n this.#removeFramesRecursively(frame);\n break;\n case 'swap':\n this.emit(FrameManagerEvent.FrameSwapped, frame);\n frame.emit(FrameEvent.FrameSwapped, undefined);\n break;\n }\n }\n\n #isExtensionOrigin(origin: string) {\n return origin.startsWith(CHROME_EXTENSION_PREFIX);\n }\n\n #extractExtensionId(origin: string): string | null {\n if (!origin || !this.#isExtensionOrigin(origin)) {\n return null;\n }\n\n const pathPart = origin.substring(CHROME_EXTENSION_PREFIX.length);\n const slashIndex = pathPart.indexOf('/');\n\n // if there's no / it means that pathPart is now the extensionId, otherwise\n // we take everything until the first /\n return slashIndex === -1 ? pathPart : pathPart.substring(0, slashIndex);\n }\n\n #onExecutionContextCreated(\n contextPayload: Protocol.Runtime.ExecutionContextDescription,\n session: CDPSession,\n ): void {\n const auxData = contextPayload.auxData as {frameId?: string} | undefined;\n const origin = contextPayload.origin;\n const frameId = auxData && auxData.frameId;\n const frame = typeof frameId === 'string' ? this.frame(frameId) : undefined;\n let world: IsolatedWorld | undefined;\n if (frame) {\n // Only care about execution contexts created for the current session.\n if (frame.client !== session) {\n return;\n }\n if (contextPayload.auxData && contextPayload.auxData['isDefault']) {\n world = frame.worlds[MAIN_WORLD];\n } else if (contextPayload.name === UTILITY_WORLD_NAME) {\n // In case of multiple sessions to the same target, there's a race between\n // connections so we might end up creating multiple isolated worlds.\n // We can use either.\n world = frame.worlds[PUPPETEER_WORLD];\n } else if (this.#isExtensionOrigin(origin)) {\n const extId = this.#extractExtensionId(origin);\n\n if (!extId) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(\n 'Error while parsing extension id',\n );\n return;\n }\n\n if (frame.extensionWorlds[extId]) {\n world = frame.extensionWorlds[extId];\n } else {\n world = new IsolatedWorld(\n frame,\n this.timeoutSettings,\n extId,\n this.#logger,\n );\n frame.extensionWorlds[extId] = world;\n frame.registerWorldListeners(world);\n world.origin = origin;\n world.setWorldId(extId);\n }\n }\n }\n\n // If there is no world, the context is not meant to be handled by us.\n if (!world) {\n return;\n }\n const context = new ExecutionContext(\n frame?.client || this.#client,\n contextPayload,\n world,\n this.#logger,\n );\n world.setContext(context);\n }\n\n #removeFramesRecursively(frame: CdpFrame): void {\n for (const child of frame.childFrames()) {\n this.#removeFramesRecursively(child);\n }\n this._frameTree.removeFrame(frame);\n this.emit(FrameManagerEvent.FrameDetached, frame);\n frame.emit(FrameEvent.FrameDetached, frame);\n // Needs to be last to ensure events\n // sent before handlers are cleared.\n frame[disposeSymbol]();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @internal\n */\nexport interface KeyDefinition {\n keyCode?: number;\n shiftKeyCode?: number;\n key?: string;\n shiftKey?: string;\n code?: string;\n text?: string;\n shiftText?: string;\n location?: number;\n}\n\n/**\n * All the valid keys that can be passed to functions that take user input, such\n * as {@link Keyboard.press | keyboard.press }\n *\n * @public\n */\nexport type KeyInput =\n | '0'\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | 'Power'\n | 'Eject'\n | 'Abort'\n | 'Help'\n | 'Backspace'\n | 'Tab'\n | 'Numpad5'\n | 'NumpadEnter'\n | 'Enter'\n | '\\r'\n | '\\n'\n | 'ShiftLeft'\n | 'ShiftRight'\n | 'ControlLeft'\n | 'ControlRight'\n | 'AltLeft'\n | 'AltRight'\n | 'Pause'\n | 'CapsLock'\n | 'Escape'\n | 'Convert'\n | 'NonConvert'\n | 'Space'\n | 'Numpad9'\n | 'PageUp'\n | 'Numpad3'\n | 'PageDown'\n | 'End'\n | 'Numpad1'\n | 'Home'\n | 'Numpad7'\n | 'ArrowLeft'\n | 'Numpad4'\n | 'Numpad8'\n | 'ArrowUp'\n | 'ArrowRight'\n | 'Numpad6'\n | 'Numpad2'\n | 'ArrowDown'\n | 'Select'\n | 'Open'\n | 'PrintScreen'\n | 'Insert'\n | 'Numpad0'\n | 'Delete'\n | 'NumpadDecimal'\n | 'Digit0'\n | 'Digit1'\n | 'Digit2'\n | 'Digit3'\n | 'Digit4'\n | 'Digit5'\n | 'Digit6'\n | 'Digit7'\n | 'Digit8'\n | 'Digit9'\n | 'KeyA'\n | 'KeyB'\n | 'KeyC'\n | 'KeyD'\n | 'KeyE'\n | 'KeyF'\n | 'KeyG'\n | 'KeyH'\n | 'KeyI'\n | 'KeyJ'\n | 'KeyK'\n | 'KeyL'\n | 'KeyM'\n | 'KeyN'\n | 'KeyO'\n | 'KeyP'\n | 'KeyQ'\n | 'KeyR'\n | 'KeyS'\n | 'KeyT'\n | 'KeyU'\n | 'KeyV'\n | 'KeyW'\n | 'KeyX'\n | 'KeyY'\n | 'KeyZ'\n | 'MetaLeft'\n | 'MetaRight'\n | 'ContextMenu'\n | 'NumpadMultiply'\n | 'NumpadAdd'\n | 'NumpadSubtract'\n | 'NumpadDivide'\n | 'F1'\n | 'F2'\n | 'F3'\n | 'F4'\n | 'F5'\n | 'F6'\n | 'F7'\n | 'F8'\n | 'F9'\n | 'F10'\n | 'F11'\n | 'F12'\n | 'F13'\n | 'F14'\n | 'F15'\n | 'F16'\n | 'F17'\n | 'F18'\n | 'F19'\n | 'F20'\n | 'F21'\n | 'F22'\n | 'F23'\n | 'F24'\n | 'NumLock'\n | 'ScrollLock'\n | 'AudioVolumeMute'\n | 'AudioVolumeDown'\n | 'AudioVolumeUp'\n | 'MediaTrackNext'\n | 'MediaTrackPrevious'\n | 'MediaStop'\n | 'MediaPlayPause'\n | 'Semicolon'\n | 'Equal'\n | 'NumpadEqual'\n | 'Comma'\n | 'Minus'\n | 'Period'\n | 'Slash'\n | 'Backquote'\n | 'BracketLeft'\n | 'Backslash'\n | 'BracketRight'\n | 'Quote'\n | 'AltGraph'\n | 'Props'\n | 'Cancel'\n | 'Clear'\n | 'Shift'\n | 'Control'\n | 'Alt'\n | 'Accept'\n | 'ModeChange'\n | ' '\n | 'Print'\n | 'Execute'\n | '\\u0000'\n | 'a'\n | 'b'\n | 'c'\n | 'd'\n | 'e'\n | 'f'\n | 'g'\n | 'h'\n | 'i'\n | 'j'\n | 'k'\n | 'l'\n | 'm'\n | 'n'\n | 'o'\n | 'p'\n | 'q'\n | 'r'\n | 's'\n | 't'\n | 'u'\n | 'v'\n | 'w'\n | 'x'\n | 'y'\n | 'z'\n | 'Meta'\n | '*'\n | '+'\n | '-'\n | '/'\n | ';'\n | '='\n | ','\n | '.'\n | '`'\n | '['\n | '\\\\'\n | ']'\n | \"'\"\n | 'Attn'\n | 'CrSel'\n | 'ExSel'\n | 'EraseEof'\n | 'Play'\n | 'ZoomOut'\n | ')'\n | '!'\n | '@'\n | '#'\n | '$'\n | '%'\n | '^'\n | '&'\n | '('\n | 'A'\n | 'B'\n | 'C'\n | 'D'\n | 'E'\n | 'F'\n | 'G'\n | 'H'\n | 'I'\n | 'J'\n | 'K'\n | 'L'\n | 'M'\n | 'N'\n | 'O'\n | 'P'\n | 'Q'\n | 'R'\n | 'S'\n | 'T'\n | 'U'\n | 'V'\n | 'W'\n | 'X'\n | 'Y'\n | 'Z'\n | ':'\n | '<'\n | '_'\n | '>'\n | '?'\n | '~'\n | '{'\n | '|'\n | '}'\n | '\"'\n | 'SoftLeft'\n | 'SoftRight'\n | 'Camera'\n | 'Call'\n | 'EndCall'\n | 'VolumeDown'\n | 'VolumeUp';\n\n/**\n * @internal\n */\nexport const _keyDefinitions: Readonly<Record<KeyInput, KeyDefinition>> = {\n '0': {keyCode: 48, key: '0', code: 'Digit0'},\n '1': {keyCode: 49, key: '1', code: 'Digit1'},\n '2': {keyCode: 50, key: '2', code: 'Digit2'},\n '3': {keyCode: 51, key: '3', code: 'Digit3'},\n '4': {keyCode: 52, key: '4', code: 'Digit4'},\n '5': {keyCode: 53, key: '5', code: 'Digit5'},\n '6': {keyCode: 54, key: '6', code: 'Digit6'},\n '7': {keyCode: 55, key: '7', code: 'Digit7'},\n '8': {keyCode: 56, key: '8', code: 'Digit8'},\n '9': {keyCode: 57, key: '9', code: 'Digit9'},\n Power: {key: 'Power', code: 'Power'},\n Eject: {key: 'Eject', code: 'Eject'},\n Abort: {keyCode: 3, code: 'Abort', key: 'Cancel'},\n Help: {keyCode: 6, code: 'Help', key: 'Help'},\n Backspace: {keyCode: 8, code: 'Backspace', key: 'Backspace'},\n Tab: {keyCode: 9, code: 'Tab', key: 'Tab'},\n Numpad5: {\n keyCode: 12,\n shiftKeyCode: 101,\n key: 'Clear',\n code: 'Numpad5',\n shiftKey: '5',\n location: 3,\n },\n NumpadEnter: {\n keyCode: 13,\n code: 'NumpadEnter',\n key: 'Enter',\n text: '\\r',\n location: 3,\n },\n Enter: {keyCode: 13, code: 'Enter', key: 'Enter', text: '\\r'},\n '\\r': {keyCode: 13, code: 'Enter', key: 'Enter', text: '\\r'},\n '\\n': {keyCode: 13, code: 'Enter', key: 'Enter', text: '\\r'},\n ShiftLeft: {keyCode: 16, code: 'ShiftLeft', key: 'Shift', location: 1},\n ShiftRight: {keyCode: 16, code: 'ShiftRight', key: 'Shift', location: 2},\n ControlLeft: {\n keyCode: 17,\n code: 'ControlLeft',\n key: 'Control',\n location: 1,\n },\n ControlRight: {\n keyCode: 17,\n code: 'ControlRight',\n key: 'Control',\n location: 2,\n },\n AltLeft: {keyCode: 18, code: 'AltLeft', key: 'Alt', location: 1},\n AltRight: {keyCode: 18, code: 'AltRight', key: 'Alt', location: 2},\n Pause: {keyCode: 19, code: 'Pause', key: 'Pause'},\n CapsLock: {keyCode: 20, code: 'CapsLock', key: 'CapsLock'},\n Escape: {keyCode: 27, code: 'Escape', key: 'Escape'},\n Convert: {keyCode: 28, code: 'Convert', key: 'Convert'},\n NonConvert: {keyCode: 29, code: 'NonConvert', key: 'NonConvert'},\n Space: {keyCode: 32, code: 'Space', key: ' '},\n Numpad9: {\n keyCode: 33,\n shiftKeyCode: 105,\n key: 'PageUp',\n code: 'Numpad9',\n shiftKey: '9',\n location: 3,\n },\n PageUp: {keyCode: 33, code: 'PageUp', key: 'PageUp'},\n Numpad3: {\n keyCode: 34,\n shiftKeyCode: 99,\n key: 'PageDown',\n code: 'Numpad3',\n shiftKey: '3',\n location: 3,\n },\n PageDown: {keyCode: 34, code: 'PageDown', key: 'PageDown'},\n End: {keyCode: 35, code: 'End', key: 'End'},\n Numpad1: {\n keyCode: 35,\n shiftKeyCode: 97,\n key: 'End',\n code: 'Numpad1',\n shiftKey: '1',\n location: 3,\n },\n Home: {keyCode: 36, code: 'Home', key: 'Home'},\n Numpad7: {\n keyCode: 36,\n shiftKeyCode: 103,\n key: 'Home',\n code: 'Numpad7',\n shiftKey: '7',\n location: 3,\n },\n ArrowLeft: {keyCode: 37, code: 'ArrowLeft', key: 'ArrowLeft'},\n Numpad4: {\n keyCode: 37,\n shiftKeyCode: 100,\n key: 'ArrowLeft',\n code: 'Numpad4',\n shiftKey: '4',\n location: 3,\n },\n Numpad8: {\n keyCode: 38,\n shiftKeyCode: 104,\n key: 'ArrowUp',\n code: 'Numpad8',\n shiftKey: '8',\n location: 3,\n },\n ArrowUp: {keyCode: 38, code: 'ArrowUp', key: 'ArrowUp'},\n ArrowRight: {keyCode: 39, code: 'ArrowRight', key: 'ArrowRight'},\n Numpad6: {\n keyCode: 39,\n shiftKeyCode: 102,\n key: 'ArrowRight',\n code: 'Numpad6',\n shiftKey: '6',\n location: 3,\n },\n Numpad2: {\n keyCode: 40,\n shiftKeyCode: 98,\n key: 'ArrowDown',\n code: 'Numpad2',\n shiftKey: '2',\n location: 3,\n },\n ArrowDown: {keyCode: 40, code: 'ArrowDown', key: 'ArrowDown'},\n Select: {keyCode: 41, code: 'Select', key: 'Select'},\n Open: {keyCode: 43, code: 'Open', key: 'Execute'},\n PrintScreen: {keyCode: 44, code: 'PrintScreen', key: 'PrintScreen'},\n Insert: {keyCode: 45, code: 'Insert', key: 'Insert'},\n Numpad0: {\n keyCode: 45,\n shiftKeyCode: 96,\n key: 'Insert',\n code: 'Numpad0',\n shiftKey: '0',\n location: 3,\n },\n Delete: {keyCode: 46, code: 'Delete', key: 'Delete'},\n NumpadDecimal: {\n keyCode: 46,\n shiftKeyCode: 110,\n code: 'NumpadDecimal',\n key: '\\u0000',\n shiftKey: '.',\n location: 3,\n },\n Digit0: {keyCode: 48, code: 'Digit0', shiftKey: ')', key: '0'},\n Digit1: {keyCode: 49, code: 'Digit1', shiftKey: '!', key: '1'},\n Digit2: {keyCode: 50, code: 'Digit2', shiftKey: '@', key: '2'},\n Digit3: {keyCode: 51, code: 'Digit3', shiftKey: '#', key: '3'},\n Digit4: {keyCode: 52, code: 'Digit4', shiftKey: '$', key: '4'},\n Digit5: {keyCode: 53, code: 'Digit5', shiftKey: '%', key: '5'},\n Digit6: {keyCode: 54, code: 'Digit6', shiftKey: '^', key: '6'},\n Digit7: {keyCode: 55, code: 'Digit7', shiftKey: '&', key: '7'},\n Digit8: {keyCode: 56, code: 'Digit8', shiftKey: '*', key: '8'},\n Digit9: {keyCode: 57, code: 'Digit9', shiftKey: '(', key: '9'},\n KeyA: {keyCode: 65, code: 'KeyA', shiftKey: 'A', key: 'a'},\n KeyB: {keyCode: 66, code: 'KeyB', shiftKey: 'B', key: 'b'},\n KeyC: {keyCode: 67, code: 'KeyC', shiftKey: 'C', key: 'c'},\n KeyD: {keyCode: 68, code: 'KeyD', shiftKey: 'D', key: 'd'},\n KeyE: {keyCode: 69, code: 'KeyE', shiftKey: 'E', key: 'e'},\n KeyF: {keyCode: 70, code: 'KeyF', shiftKey: 'F', key: 'f'},\n KeyG: {keyCode: 71, code: 'KeyG', shiftKey: 'G', key: 'g'},\n KeyH: {keyCode: 72, code: 'KeyH', shiftKey: 'H', key: 'h'},\n KeyI: {keyCode: 73, code: 'KeyI', shiftKey: 'I', key: 'i'},\n KeyJ: {keyCode: 74, code: 'KeyJ', shiftKey: 'J', key: 'j'},\n KeyK: {keyCode: 75, code: 'KeyK', shiftKey: 'K', key: 'k'},\n KeyL: {keyCode: 76, code: 'KeyL', shiftKey: 'L', key: 'l'},\n KeyM: {keyCode: 77, code: 'KeyM', shiftKey: 'M', key: 'm'},\n KeyN: {keyCode: 78, code: 'KeyN', shiftKey: 'N', key: 'n'},\n KeyO: {keyCode: 79, code: 'KeyO', shiftKey: 'O', key: 'o'},\n KeyP: {keyCode: 80, code: 'KeyP', shiftKey: 'P', key: 'p'},\n KeyQ: {keyCode: 81, code: 'KeyQ', shiftKey: 'Q', key: 'q'},\n KeyR: {keyCode: 82, code: 'KeyR', shiftKey: 'R', key: 'r'},\n KeyS: {keyCode: 83, code: 'KeyS', shiftKey: 'S', key: 's'},\n KeyT: {keyCode: 84, code: 'KeyT', shiftKey: 'T', key: 't'},\n KeyU: {keyCode: 85, code: 'KeyU', shiftKey: 'U', key: 'u'},\n KeyV: {keyCode: 86, code: 'KeyV', shiftKey: 'V', key: 'v'},\n KeyW: {keyCode: 87, code: 'KeyW', shiftKey: 'W', key: 'w'},\n KeyX: {keyCode: 88, code: 'KeyX', shiftKey: 'X', key: 'x'},\n KeyY: {keyCode: 89, code: 'KeyY', shiftKey: 'Y', key: 'y'},\n KeyZ: {keyCode: 90, code: 'KeyZ', shiftKey: 'Z', key: 'z'},\n MetaLeft: {keyCode: 91, code: 'MetaLeft', key: 'Meta', location: 1},\n MetaRight: {keyCode: 92, code: 'MetaRight', key: 'Meta', location: 2},\n ContextMenu: {keyCode: 93, code: 'ContextMenu', key: 'ContextMenu'},\n NumpadMultiply: {\n keyCode: 106,\n code: 'NumpadMultiply',\n key: '*',\n location: 3,\n },\n NumpadAdd: {keyCode: 107, code: 'NumpadAdd', key: '+', location: 3},\n NumpadSubtract: {\n keyCode: 109,\n code: 'NumpadSubtract',\n key: '-',\n location: 3,\n },\n NumpadDivide: {keyCode: 111, code: 'NumpadDivide', key: '/', location: 3},\n F1: {keyCode: 112, code: 'F1', key: 'F1'},\n F2: {keyCode: 113, code: 'F2', key: 'F2'},\n F3: {keyCode: 114, code: 'F3', key: 'F3'},\n F4: {keyCode: 115, code: 'F4', key: 'F4'},\n F5: {keyCode: 116, code: 'F5', key: 'F5'},\n F6: {keyCode: 117, code: 'F6', key: 'F6'},\n F7: {keyCode: 118, code: 'F7', key: 'F7'},\n F8: {keyCode: 119, code: 'F8', key: 'F8'},\n F9: {keyCode: 120, code: 'F9', key: 'F9'},\n F10: {keyCode: 121, code: 'F10', key: 'F10'},\n F11: {keyCode: 122, code: 'F11', key: 'F11'},\n F12: {keyCode: 123, code: 'F12', key: 'F12'},\n F13: {keyCode: 124, code: 'F13', key: 'F13'},\n F14: {keyCode: 125, code: 'F14', key: 'F14'},\n F15: {keyCode: 126, code: 'F15', key: 'F15'},\n F16: {keyCode: 127, code: 'F16', key: 'F16'},\n F17: {keyCode: 128, code: 'F17', key: 'F17'},\n F18: {keyCode: 129, code: 'F18', key: 'F18'},\n F19: {keyCode: 130, code: 'F19', key: 'F19'},\n F20: {keyCode: 131, code: 'F20', key: 'F20'},\n F21: {keyCode: 132, code: 'F21', key: 'F21'},\n F22: {keyCode: 133, code: 'F22', key: 'F22'},\n F23: {keyCode: 134, code: 'F23', key: 'F23'},\n F24: {keyCode: 135, code: 'F24', key: 'F24'},\n NumLock: {keyCode: 144, code: 'NumLock', key: 'NumLock'},\n ScrollLock: {keyCode: 145, code: 'ScrollLock', key: 'ScrollLock'},\n AudioVolumeMute: {\n keyCode: 173,\n code: 'AudioVolumeMute',\n key: 'AudioVolumeMute',\n },\n AudioVolumeDown: {\n keyCode: 174,\n code: 'AudioVolumeDown',\n key: 'AudioVolumeDown',\n },\n AudioVolumeUp: {keyCode: 175, code: 'AudioVolumeUp', key: 'AudioVolumeUp'},\n MediaTrackNext: {\n keyCode: 176,\n code: 'MediaTrackNext',\n key: 'MediaTrackNext',\n },\n MediaTrackPrevious: {\n keyCode: 177,\n code: 'MediaTrackPrevious',\n key: 'MediaTrackPrevious',\n },\n MediaStop: {keyCode: 178, code: 'MediaStop', key: 'MediaStop'},\n MediaPlayPause: {\n keyCode: 179,\n code: 'MediaPlayPause',\n key: 'MediaPlayPause',\n },\n Semicolon: {keyCode: 186, code: 'Semicolon', shiftKey: ':', key: ';'},\n Equal: {keyCode: 187, code: 'Equal', shiftKey: '+', key: '='},\n NumpadEqual: {keyCode: 187, code: 'NumpadEqual', key: '=', location: 3},\n Comma: {keyCode: 188, code: 'Comma', shiftKey: '<', key: ','},\n Minus: {keyCode: 189, code: 'Minus', shiftKey: '_', key: '-'},\n Period: {keyCode: 190, code: 'Period', shiftKey: '>', key: '.'},\n Slash: {keyCode: 191, code: 'Slash', shiftKey: '?', key: '/'},\n Backquote: {keyCode: 192, code: 'Backquote', shiftKey: '~', key: '`'},\n BracketLeft: {keyCode: 219, code: 'BracketLeft', shiftKey: '{', key: '['},\n Backslash: {keyCode: 220, code: 'Backslash', shiftKey: '|', key: '\\\\'},\n BracketRight: {keyCode: 221, code: 'BracketRight', shiftKey: '}', key: ']'},\n Quote: {keyCode: 222, code: 'Quote', shiftKey: '\"', key: \"'\"},\n AltGraph: {keyCode: 225, code: 'AltGraph', key: 'AltGraph'},\n Props: {keyCode: 247, code: 'Props', key: 'CrSel'},\n Cancel: {keyCode: 3, key: 'Cancel', code: 'Abort'},\n Clear: {keyCode: 12, key: 'Clear', code: 'Numpad5', location: 3},\n Shift: {keyCode: 16, key: 'Shift', code: 'ShiftLeft', location: 1},\n Control: {keyCode: 17, key: 'Control', code: 'ControlLeft', location: 1},\n Alt: {keyCode: 18, key: 'Alt', code: 'AltLeft', location: 1},\n Accept: {keyCode: 30, key: 'Accept'},\n ModeChange: {keyCode: 31, key: 'ModeChange'},\n ' ': {keyCode: 32, key: ' ', code: 'Space'},\n Print: {keyCode: 42, key: 'Print'},\n Execute: {keyCode: 43, key: 'Execute', code: 'Open'},\n '\\u0000': {keyCode: 46, key: '\\u0000', code: 'NumpadDecimal', location: 3},\n a: {keyCode: 65, key: 'a', code: 'KeyA'},\n b: {keyCode: 66, key: 'b', code: 'KeyB'},\n c: {keyCode: 67, key: 'c', code: 'KeyC'},\n d: {keyCode: 68, key: 'd', code: 'KeyD'},\n e: {keyCode: 69, key: 'e', code: 'KeyE'},\n f: {keyCode: 70, key: 'f', code: 'KeyF'},\n g: {keyCode: 71, key: 'g', code: 'KeyG'},\n h: {keyCode: 72, key: 'h', code: 'KeyH'},\n i: {keyCode: 73, key: 'i', code: 'KeyI'},\n j: {keyCode: 74, key: 'j', code: 'KeyJ'},\n k: {keyCode: 75, key: 'k', code: 'KeyK'},\n l: {keyCode: 76, key: 'l', code: 'KeyL'},\n m: {keyCode: 77, key: 'm', code: 'KeyM'},\n n: {keyCode: 78, key: 'n', code: 'KeyN'},\n o: {keyCode: 79, key: 'o', code: 'KeyO'},\n p: {keyCode: 80, key: 'p', code: 'KeyP'},\n q: {keyCode: 81, key: 'q', code: 'KeyQ'},\n r: {keyCode: 82, key: 'r', code: 'KeyR'},\n s: {keyCode: 83, key: 's', code: 'KeyS'},\n t: {keyCode: 84, key: 't', code: 'KeyT'},\n u: {keyCode: 85, key: 'u', code: 'KeyU'},\n v: {keyCode: 86, key: 'v', code: 'KeyV'},\n w: {keyCode: 87, key: 'w', code: 'KeyW'},\n x: {keyCode: 88, key: 'x', code: 'KeyX'},\n y: {keyCode: 89, key: 'y', code: 'KeyY'},\n z: {keyCode: 90, key: 'z', code: 'KeyZ'},\n Meta: {keyCode: 91, key: 'Meta', code: 'MetaLeft', location: 1},\n '*': {keyCode: 106, key: '*', code: 'NumpadMultiply', location: 3},\n '+': {keyCode: 107, key: '+', code: 'NumpadAdd', location: 3},\n '-': {keyCode: 109, key: '-', code: 'NumpadSubtract', location: 3},\n '/': {keyCode: 111, key: '/', code: 'NumpadDivide', location: 3},\n ';': {keyCode: 186, key: ';', code: 'Semicolon'},\n '=': {keyCode: 187, key: '=', code: 'Equal'},\n ',': {keyCode: 188, key: ',', code: 'Comma'},\n '.': {keyCode: 190, key: '.', code: 'Period'},\n '`': {keyCode: 192, key: '`', code: 'Backquote'},\n '[': {keyCode: 219, key: '[', code: 'BracketLeft'},\n '\\\\': {keyCode: 220, key: '\\\\', code: 'Backslash'},\n ']': {keyCode: 221, key: ']', code: 'BracketRight'},\n \"'\": {keyCode: 222, key: \"'\", code: 'Quote'},\n Attn: {keyCode: 246, key: 'Attn'},\n CrSel: {keyCode: 247, key: 'CrSel', code: 'Props'},\n ExSel: {keyCode: 248, key: 'ExSel'},\n EraseEof: {keyCode: 249, key: 'EraseEof'},\n Play: {keyCode: 250, key: 'Play'},\n ZoomOut: {keyCode: 251, key: 'ZoomOut'},\n ')': {keyCode: 48, key: ')', code: 'Digit0'},\n '!': {keyCode: 49, key: '!', code: 'Digit1'},\n '@': {keyCode: 50, key: '@', code: 'Digit2'},\n '#': {keyCode: 51, key: '#', code: 'Digit3'},\n $: {keyCode: 52, key: '$', code: 'Digit4'},\n '%': {keyCode: 53, key: '%', code: 'Digit5'},\n '^': {keyCode: 54, key: '^', code: 'Digit6'},\n '&': {keyCode: 55, key: '&', code: 'Digit7'},\n '(': {keyCode: 57, key: '(', code: 'Digit9'},\n A: {keyCode: 65, key: 'A', code: 'KeyA'},\n B: {keyCode: 66, key: 'B', code: 'KeyB'},\n C: {keyCode: 67, key: 'C', code: 'KeyC'},\n D: {keyCode: 68, key: 'D', code: 'KeyD'},\n E: {keyCode: 69, key: 'E', code: 'KeyE'},\n F: {keyCode: 70, key: 'F', code: 'KeyF'},\n G: {keyCode: 71, key: 'G', code: 'KeyG'},\n H: {keyCode: 72, key: 'H', code: 'KeyH'},\n I: {keyCode: 73, key: 'I', code: 'KeyI'},\n J: {keyCode: 74, key: 'J', code: 'KeyJ'},\n K: {keyCode: 75, key: 'K', code: 'KeyK'},\n L: {keyCode: 76, key: 'L', code: 'KeyL'},\n M: {keyCode: 77, key: 'M', code: 'KeyM'},\n N: {keyCode: 78, key: 'N', code: 'KeyN'},\n O: {keyCode: 79, key: 'O', code: 'KeyO'},\n P: {keyCode: 80, key: 'P', code: 'KeyP'},\n Q: {keyCode: 81, key: 'Q', code: 'KeyQ'},\n R: {keyCode: 82, key: 'R', code: 'KeyR'},\n S: {keyCode: 83, key: 'S', code: 'KeyS'},\n T: {keyCode: 84, key: 'T', code: 'KeyT'},\n U: {keyCode: 85, key: 'U', code: 'KeyU'},\n V: {keyCode: 86, key: 'V', code: 'KeyV'},\n W: {keyCode: 87, key: 'W', code: 'KeyW'},\n X: {keyCode: 88, key: 'X', code: 'KeyX'},\n Y: {keyCode: 89, key: 'Y', code: 'KeyY'},\n Z: {keyCode: 90, key: 'Z', code: 'KeyZ'},\n ':': {keyCode: 186, key: ':', code: 'Semicolon'},\n '<': {keyCode: 188, key: '<', code: 'Comma'},\n _: {keyCode: 189, key: '_', code: 'Minus'},\n '>': {keyCode: 190, key: '>', code: 'Period'},\n '?': {keyCode: 191, key: '?', code: 'Slash'},\n '~': {keyCode: 192, key: '~', code: 'Backquote'},\n '{': {keyCode: 219, key: '{', code: 'BracketLeft'},\n '|': {keyCode: 220, key: '|', code: 'Backslash'},\n '}': {keyCode: 221, key: '}', code: 'BracketRight'},\n '\"': {keyCode: 222, key: '\"', code: 'Quote'},\n SoftLeft: {key: 'SoftLeft', code: 'SoftLeft', location: 4},\n SoftRight: {key: 'SoftRight', code: 'SoftRight', location: 4},\n Camera: {keyCode: 44, key: 'Camera', code: 'Camera', location: 4},\n Call: {key: 'Call', code: 'Call', location: 4},\n EndCall: {keyCode: 95, key: 'EndCall', code: 'EndCall', location: 4},\n VolumeDown: {\n keyCode: 182,\n key: 'VolumeDown',\n code: 'VolumeDown',\n location: 4,\n },\n VolumeUp: {keyCode: 183, key: 'VolumeUp', code: 'VolumeUp', location: 4},\n};\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {CDPSession} from '../api/CDPSession.js';\nimport type {Point} from '../api/ElementHandle.js';\nimport {\n Keyboard,\n Mouse,\n MouseButton,\n Touchscreen,\n type TouchHandle,\n type KeyDownOptions,\n type KeyPressOptions,\n type KeyboardTypeOptions,\n type MouseClickOptions,\n type MouseMoveOptions,\n type MouseOptions,\n type MouseWheelOptions,\n} from '../api/Input.js';\nimport {TouchError} from '../common/Errors.js';\nimport {\n _keyDefinitions,\n type KeyDefinition,\n type KeyInput,\n} from '../common/USKeyboardLayout.js';\nimport {assert} from '../util/assert.js';\n\ntype KeyDescription = Required<\n Pick<KeyDefinition, 'keyCode' | 'key' | 'text' | 'code' | 'location'>\n>;\n\n/**\n * @internal\n */\nexport class CdpKeyboard extends Keyboard {\n #client: CDPSession;\n #pressedKeys = new Set<string>();\n\n _modifiers = 0;\n\n constructor(client: CDPSession) {\n super();\n this.#client = client;\n }\n\n updateClient(client: CDPSession): void {\n this.#client = client;\n }\n\n override async down(\n key: KeyInput,\n options: Readonly<KeyDownOptions> = {\n text: undefined,\n commands: [],\n },\n ): Promise<void> {\n const description = this.#keyDescriptionForString(key);\n\n const autoRepeat = this.#pressedKeys.has(description.code);\n this.#pressedKeys.add(description.code);\n this._modifiers |= this.#modifierBit(description.key);\n\n const text = options.text === undefined ? description.text : options.text;\n await this.#client.send('Input.dispatchKeyEvent', {\n type: text ? 'keyDown' : 'rawKeyDown',\n modifiers: this._modifiers,\n windowsVirtualKeyCode: description.keyCode,\n code: description.code,\n key: description.key,\n text: text,\n unmodifiedText: text,\n autoRepeat,\n location: description.location,\n isKeypad: description.location === 3,\n commands: options.commands,\n });\n }\n\n #modifierBit(key: string): number {\n if (key === 'Alt') {\n return 1;\n }\n if (key === 'Control') {\n return 2;\n }\n if (key === 'Meta') {\n return 4;\n }\n if (key === 'Shift') {\n return 8;\n }\n return 0;\n }\n\n #keyDescriptionForString(keyString: KeyInput): KeyDescription {\n const shift = this._modifiers & 8;\n const description = {\n key: '',\n keyCode: 0,\n code: '',\n text: '',\n location: 0,\n };\n\n const definition = _keyDefinitions[keyString];\n assert(definition, `Unknown key: \"${keyString}\"`);\n\n if (definition.key) {\n description.key = definition.key;\n }\n if (shift && definition.shiftKey) {\n description.key = definition.shiftKey;\n }\n\n if (definition.keyCode) {\n description.keyCode = definition.keyCode;\n }\n if (shift && definition.shiftKeyCode) {\n description.keyCode = definition.shiftKeyCode;\n }\n\n if (definition.code) {\n description.code = definition.code;\n }\n\n if (definition.location) {\n description.location = definition.location;\n }\n\n if (description.key.length === 1) {\n description.text = description.key;\n }\n\n if (definition.text) {\n description.text = definition.text;\n }\n if (shift && definition.shiftText) {\n description.text = definition.shiftText;\n }\n\n // if any modifiers besides shift are pressed, no text should be sent\n if (this._modifiers & ~8) {\n description.text = '';\n }\n\n return description;\n }\n\n override async up(key: KeyInput): Promise<void> {\n const description = this.#keyDescriptionForString(key);\n\n this._modifiers &= ~this.#modifierBit(description.key);\n this.#pressedKeys.delete(description.code);\n await this.#client.send('Input.dispatchKeyEvent', {\n type: 'keyUp',\n modifiers: this._modifiers,\n key: description.key,\n windowsVirtualKeyCode: description.keyCode,\n code: description.code,\n location: description.location,\n });\n }\n\n override async sendCharacter(char: string): Promise<void> {\n await this.#client.send('Input.insertText', {text: char});\n }\n\n private charIsKey(char: string): char is KeyInput {\n return !!_keyDefinitions[char as KeyInput];\n }\n\n override async type(\n text: string,\n options: Readonly<KeyboardTypeOptions> = {},\n ): Promise<void> {\n const delay = options.delay || undefined;\n for (const char of text) {\n if (this.charIsKey(char)) {\n await this.press(char, {delay});\n } else {\n if (delay) {\n await new Promise(f => {\n return setTimeout(f, delay);\n });\n }\n await this.sendCharacter(char);\n }\n }\n }\n\n override async press(\n key: KeyInput,\n options: Readonly<KeyPressOptions> = {},\n ): Promise<void> {\n const {delay = null} = options;\n await this.down(key, options);\n if (delay) {\n await new Promise(f => {\n return setTimeout(f, options.delay);\n });\n }\n await this.up(key);\n }\n}\n\n/**\n * This must follow {@link Protocol.Input.DispatchMouseEventRequest.buttons}.\n */\nconst enum MouseButtonFlag {\n None = 0,\n Left = 1,\n Right = 1 << 1,\n Middle = 1 << 2,\n Back = 1 << 3,\n Forward = 1 << 4,\n}\n\nconst getFlag = (button: MouseButton): MouseButtonFlag => {\n switch (button) {\n case MouseButton.Left:\n return MouseButtonFlag.Left;\n case MouseButton.Right:\n return MouseButtonFlag.Right;\n case MouseButton.Middle:\n return MouseButtonFlag.Middle;\n case MouseButton.Back:\n return MouseButtonFlag.Back;\n case MouseButton.Forward:\n return MouseButtonFlag.Forward;\n }\n};\n\n/**\n * This should match\n * https://source.chromium.org/chromium/chromium/src/+/refs/heads/main:content/browser/renderer_host/input/web_input_event_builders_mac.mm;drc=a61b95c63b0b75c1cfe872d9c8cdf927c226046e;bpv=1;bpt=1;l=221.\n */\nconst getButtonFromPressedButtons = (\n buttons: number,\n): Protocol.Input.MouseButton => {\n if (buttons & MouseButtonFlag.Left) {\n return MouseButton.Left;\n } else if (buttons & MouseButtonFlag.Right) {\n return MouseButton.Right;\n } else if (buttons & MouseButtonFlag.Middle) {\n return MouseButton.Middle;\n } else if (buttons & MouseButtonFlag.Back) {\n return MouseButton.Back;\n } else if (buttons & MouseButtonFlag.Forward) {\n return MouseButton.Forward;\n }\n return 'none';\n};\n\ninterface MouseState {\n /**\n * The current position of the mouse.\n */\n position: Point;\n /**\n * The buttons that are currently being pressed.\n */\n buttons: number;\n}\n\n/**\n * @internal\n */\nexport class CdpMouse extends Mouse {\n #client: CDPSession;\n #keyboard: CdpKeyboard;\n\n constructor(client: CDPSession, keyboard: CdpKeyboard) {\n super();\n this.#client = client;\n this.#keyboard = keyboard;\n }\n\n updateClient(client: CDPSession): void {\n this.#client = client;\n }\n\n #_state: Readonly<MouseState> = {\n position: {x: 0, y: 0},\n buttons: MouseButtonFlag.None,\n };\n get #state(): MouseState {\n return Object.assign({...this.#_state}, ...this.#transactions);\n }\n\n // Transactions can run in parallel, so we store each of them in this array.\n #transactions: Array<Partial<MouseState>> = [];\n #createTransaction(): {\n update: (updates: Partial<MouseState>) => void;\n commit: () => void;\n rollback: () => void;\n } {\n const transaction: Partial<MouseState> = {};\n this.#transactions.push(transaction);\n const popTransaction = () => {\n this.#transactions.splice(this.#transactions.indexOf(transaction), 1);\n };\n return {\n update: (updates: Partial<MouseState>) => {\n Object.assign(transaction, updates);\n },\n commit: () => {\n this.#_state = {...this.#_state, ...transaction};\n popTransaction();\n },\n rollback: popTransaction,\n };\n }\n\n /**\n * This is a shortcut for a typical update, commit/rollback lifecycle based on\n * the error of the action.\n */\n async #withTransaction(\n action: (\n update: (updates: Partial<MouseState>) => void,\n ) => Promise<unknown>,\n ): Promise<void> {\n const {update, commit, rollback} = this.#createTransaction();\n try {\n await action(update);\n commit();\n } catch (error) {\n rollback();\n throw error;\n }\n }\n\n override async reset(): Promise<void> {\n const actions = [];\n for (const [flag, button] of [\n [MouseButtonFlag.Left, MouseButton.Left],\n [MouseButtonFlag.Middle, MouseButton.Middle],\n [MouseButtonFlag.Right, MouseButton.Right],\n [MouseButtonFlag.Forward, MouseButton.Forward],\n [MouseButtonFlag.Back, MouseButton.Back],\n ] as const) {\n if (this.#state.buttons & flag) {\n actions.push(this.up({button: button}));\n }\n }\n if (this.#state.position.x !== 0 || this.#state.position.y !== 0) {\n actions.push(this.move(0, 0));\n }\n await Promise.all(actions);\n }\n\n override async move(\n x: number,\n y: number,\n options: Readonly<MouseMoveOptions> = {},\n ): Promise<void> {\n const {steps = 1} = options;\n const from = this.#state.position;\n const to = {x, y};\n for (let i = 1; i <= steps; i++) {\n await this.#withTransaction(updateState => {\n updateState({\n position: {\n x: from.x + (to.x - from.x) * (i / steps),\n y: from.y + (to.y - from.y) * (i / steps),\n },\n });\n const {buttons, position} = this.#state;\n return this.#client.send('Input.dispatchMouseEvent', {\n type: 'mouseMoved',\n modifiers: this.#keyboard._modifiers,\n buttons,\n button: getButtonFromPressedButtons(buttons),\n ...position,\n });\n });\n }\n }\n\n override async down(options: Readonly<MouseOptions> = {}): Promise<void> {\n const {button = MouseButton.Left, clickCount = 1} = options;\n const flag = getFlag(button);\n if (!flag) {\n throw new Error(`Unsupported mouse button: ${button}`);\n }\n if (this.#state.buttons & flag) {\n throw new Error(`'${button}' is already pressed.`);\n }\n await this.#withTransaction(updateState => {\n updateState({\n buttons: this.#state.buttons | flag,\n });\n const {buttons, position} = this.#state;\n return this.#client.send('Input.dispatchMouseEvent', {\n type: 'mousePressed',\n modifiers: this.#keyboard._modifiers,\n clickCount,\n buttons,\n button,\n ...position,\n });\n });\n }\n\n override async up(options: Readonly<MouseOptions> = {}): Promise<void> {\n const {button = MouseButton.Left, clickCount = 1} = options;\n const flag = getFlag(button);\n if (!flag) {\n throw new Error(`Unsupported mouse button: ${button}`);\n }\n if (!(this.#state.buttons & flag)) {\n throw new Error(`'${button}' is not pressed.`);\n }\n await this.#withTransaction(updateState => {\n updateState({\n buttons: this.#state.buttons & ~flag,\n });\n const {buttons, position} = this.#state;\n return this.#client.send('Input.dispatchMouseEvent', {\n type: 'mouseReleased',\n modifiers: this.#keyboard._modifiers,\n clickCount,\n buttons,\n button,\n ...position,\n });\n });\n }\n\n override async click(\n x: number,\n y: number,\n options: Readonly<MouseClickOptions> = {},\n ): Promise<void> {\n const {delay, count = 1} = options;\n if (count < 1) {\n throw new Error('Click must occur a positive number of times.');\n }\n const actions: Array<Promise<void>> = [this.move(x, y)];\n\n for (let i = 1; i < count; ++i) {\n actions.push(\n this.down({...options, clickCount: i}),\n this.up({...options, clickCount: i}),\n );\n }\n\n actions.push(this.down({...options, clickCount: count}));\n if (typeof delay === 'number') {\n await Promise.all(actions);\n actions.length = 0;\n await new Promise(resolve => {\n setTimeout(resolve, delay);\n });\n }\n actions.push(this.up({...options, clickCount: count}));\n await Promise.all(actions);\n }\n\n override async wheel(\n options: Readonly<MouseWheelOptions> = {},\n ): Promise<void> {\n const {deltaX = 0, deltaY = 0} = options;\n const {position, buttons} = this.#state;\n await this.#client.send('Input.dispatchMouseEvent', {\n type: 'mouseWheel',\n pointerType: 'mouse',\n modifiers: this.#keyboard._modifiers,\n deltaY,\n deltaX,\n buttons,\n ...position,\n });\n }\n\n override async drag(\n start: Point,\n target: Point,\n ): Promise<Protocol.Input.DragData> {\n const promise = new Promise<Protocol.Input.DragData>(resolve => {\n this.#client.once('Input.dragIntercepted', event => {\n return resolve(event.data);\n });\n });\n await this.move(start.x, start.y);\n await this.down();\n await this.move(target.x, target.y);\n return await promise;\n }\n\n override async dragEnter(\n target: Point,\n data: Protocol.Input.DragData,\n ): Promise<void> {\n await this.#client.send('Input.dispatchDragEvent', {\n type: 'dragEnter',\n x: target.x,\n y: target.y,\n modifiers: this.#keyboard._modifiers,\n data,\n });\n }\n\n override async dragOver(\n target: Point,\n data: Protocol.Input.DragData,\n ): Promise<void> {\n await this.#client.send('Input.dispatchDragEvent', {\n type: 'dragOver',\n x: target.x,\n y: target.y,\n modifiers: this.#keyboard._modifiers,\n data,\n });\n }\n\n override async drop(\n target: Point,\n data: Protocol.Input.DragData,\n ): Promise<void> {\n await this.#client.send('Input.dispatchDragEvent', {\n type: 'drop',\n x: target.x,\n y: target.y,\n modifiers: this.#keyboard._modifiers,\n data,\n });\n }\n\n override async dragAndDrop(\n start: Point,\n target: Point,\n options: {delay?: number} = {},\n ): Promise<void> {\n const {delay = null} = options;\n const data = await this.drag(start, target);\n await this.dragEnter(target, data);\n await this.dragOver(target, data);\n if (delay) {\n await new Promise(resolve => {\n return setTimeout(resolve, delay);\n });\n }\n await this.drop(target, data);\n await this.up();\n }\n}\n\n/**\n * @internal\n */\nexport class CdpTouchHandle implements TouchHandle {\n #started = false;\n #touchScreen: CdpTouchscreen;\n #touchPoint: Protocol.Input.TouchPoint;\n #client: CDPSession;\n #keyboard: CdpKeyboard;\n\n constructor(\n client: CDPSession,\n touchScreen: CdpTouchscreen,\n keyboard: CdpKeyboard,\n touchPoint: Protocol.Input.TouchPoint,\n ) {\n this.#client = client;\n this.#touchScreen = touchScreen;\n this.#keyboard = keyboard;\n this.#touchPoint = touchPoint;\n }\n\n updateClient(client: CDPSession): void {\n this.#client = client;\n }\n\n async start(): Promise<void> {\n if (this.#started) {\n throw new TouchError('Touch has already started');\n }\n await this.#client.send('Input.dispatchTouchEvent', {\n type: 'touchStart',\n touchPoints: [this.#touchPoint],\n modifiers: this.#keyboard._modifiers,\n });\n this.#started = true;\n }\n\n move(x: number, y: number): Promise<void> {\n this.#touchPoint.x = Math.round(x);\n this.#touchPoint.y = Math.round(y);\n return this.#client.send('Input.dispatchTouchEvent', {\n type: 'touchMove',\n touchPoints: [this.#touchPoint],\n modifiers: this.#keyboard._modifiers,\n });\n }\n\n async end(): Promise<void> {\n await this.#client.send('Input.dispatchTouchEvent', {\n type: 'touchEnd',\n touchPoints: [this.#touchPoint],\n modifiers: this.#keyboard._modifiers,\n });\n this.#touchScreen.removeHandle(this);\n }\n}\n\n/**\n * @internal\n */\nexport class CdpTouchscreen extends Touchscreen {\n #client: CDPSession;\n #keyboard: CdpKeyboard;\n declare touches: CdpTouchHandle[];\n\n constructor(client: CDPSession, keyboard: CdpKeyboard) {\n super();\n this.#client = client;\n this.#keyboard = keyboard;\n }\n\n updateClient(client: CDPSession): void {\n this.#client = client;\n this.touches.forEach(t => {\n t.updateClient(client);\n });\n }\n\n override async touchStart(x: number, y: number): Promise<TouchHandle> {\n const id = this.idGenerator();\n const touchPoint: Protocol.Input.TouchPoint = {\n x: Math.round(x),\n y: Math.round(y),\n radiusX: 0.5,\n radiusY: 0.5,\n force: 0.5,\n id,\n };\n const touch = new CdpTouchHandle(\n this.#client,\n this,\n this.#keyboard,\n touchPoint,\n );\n await touch.start();\n this.touches.push(touch);\n return touch;\n }\n}\n","/**\n * @license\n * Copyright 2026 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {CDPSessionEvent} from '../api/CDPSession.js';\nimport type {RecordOptions} from '../api/Page.js';\nimport {ScreenRecording} from '../api/ScreenRecording.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {guarded} from '../util/decorators.js';\nimport {stringToTypedArray} from '../util/encoding.js';\n\nimport type {CdpPage} from './Page.js';\n\n/**\n * @internal\n */\nexport class CdpScreenRecording extends ScreenRecording {\n declare protected page: CdpPage;\n #streamHandle?: string;\n\n /**\n * @internal\n */\n constructor(page: CdpPage, options: RecordOptions = {}, logger: Logger) {\n super(page, options, logger);\n\n const {client} = this.page.mainFrame();\n client?.once?.(CDPSessionEvent.Disconnected, () => {\n void this.stop().catch(err => {\n this.logger(DEBUG_PREFIXES.error)?.(err);\n });\n });\n }\n\n /**\n * @internal\n */\n override async _start(): Promise<void> {\n const {client} = this.page.mainFrame();\n const frameRate = this.options.frameRate ?? this.options.fps;\n // @ts-expect-error Page.startScreenRecording is not yet in devtools-protocol\n const result = (await client.send('Page.startScreenRecording', {\n audio: this.options.audio,\n maxWidth: this.options.maxWidth,\n maxHeight: this.options.maxHeight,\n frameRate,\n })) as {stream: string};\n this.#streamHandle = result.stream;\n }\n\n /**\n * Stops the screen recording.\n *\n * @public\n */\n @guarded()\n override async stop(): Promise<void> {\n if (this.stopped) {\n return;\n }\n this.stopped = true;\n\n try {\n const {client} = this.page.mainFrame();\n await client\n // @ts-expect-error Page.stopScreenRecording is not yet in devtools-protocol\n .send('Page.stopScreenRecording')\n .catch(err => {\n this.logger(DEBUG_PREFIXES.error)?.(err);\n });\n\n if (!this.#streamHandle) {\n throw new Error('Screen recording stream handle is missing.');\n }\n\n let eof = false;\n while (!eof) {\n const {\n data,\n base64Encoded,\n eof: isEof,\n } = await client.send('IO.read', {handle: this.#streamHandle});\n eof = isEof;\n if (data) {\n const buffer = stringToTypedArray(data, base64Encoded ?? false);\n this.controller.enqueue(buffer);\n for (const dest of this.destinations) {\n dest.write(buffer);\n }\n }\n }\n await client.send('IO.close', {handle: this.#streamHandle}).catch(err => {\n this.logger(DEBUG_PREFIXES.error)?.(err);\n });\n } finally {\n await this.closeDestinations();\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {CDPSession} from '../api/CDPSession.js';\nimport type {Logger} from '../common/Debug.js';\nimport {\n getReadableAsTypedArray,\n getReadableFromProtocolStream,\n} from '../common/util.js';\nimport {assert} from '../util/assert.js';\nimport {Deferred} from '../util/Deferred.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\n\n/**\n * @public\n */\nexport interface TracingOptions {\n /**\n * The file path to write the trace to.\n * If no path is specified, the trace will not be written to disk, but can\n * still be retrieved as a `Uint8Array` from `tracing.stop()`.\n */\n path?: string;\n /**\n * Whether to capture screenshots in the trace.\n *\n * @defaultValue `false`\n */\n screenshots?: boolean;\n /**\n * The tracing categories to include/exclude.\n *\n * To exclude a category, prefix it with `-` (e.g., `-toplevel`).\n *\n * @defaultValue Default categories listed in the implementation.\n */\n categories?: string[];\n /**\n * Size of the trace buffer in kilobytes.\n * If not specified or zero is passed, the default value of 200 MB\n * (200,000 KB) is used by Chromium.\n */\n bufferSize?: number;\n}\n\n/**\n * The Tracing class exposes the tracing audit interface.\n * @remarks\n * You can use `tracing.start` and `tracing.stop` to create a trace file\n * which can be opened in Chrome DevTools or {@link https://chromedevtools.github.io/timeline-viewer/ | timeline viewer}.\n *\n * @example\n *\n * ```ts\n * await page.tracing.start({path: 'trace.json'});\n * await page.goto('https://www.google.com');\n * await page.tracing.stop();\n * ```\n *\n * @public\n */\nexport class Tracing {\n #client: CDPSession;\n #recording = false;\n #path?: string;\n #logger: Logger;\n\n /**\n * @internal\n */\n constructor(client: CDPSession, logger: Logger) {\n this.#client = client;\n this.#logger = logger;\n }\n\n /**\n * @internal\n */\n updateClient(client: CDPSession): void {\n this.#client = client;\n }\n\n /**\n * Starts a trace for the current page.\n * @remarks\n * Only one trace can be active at a time per browser.\n *\n * @param options - Optional `TracingOptions`.\n */\n async start(options: TracingOptions = {}): Promise<void> {\n assert(\n !this.#recording,\n 'Cannot start recording trace while already recording trace.',\n );\n\n const defaultCategories = [\n '-*',\n 'devtools.timeline',\n 'v8.execute',\n 'disabled-by-default-devtools.timeline',\n 'disabled-by-default-devtools.timeline.frame',\n 'toplevel',\n 'blink.console',\n 'blink.user_timing',\n 'latencyInfo',\n 'disabled-by-default-devtools.timeline.stack',\n 'disabled-by-default-v8.cpu_profiler',\n ];\n const {\n path,\n screenshots = false,\n categories = defaultCategories,\n bufferSize,\n } = options;\n\n if (screenshots) {\n categories.push('disabled-by-default-devtools.screenshot');\n }\n\n const excludedCategories = categories\n .filter(cat => {\n return cat.startsWith('-');\n })\n .map(cat => {\n return cat.slice(1);\n });\n const includedCategories = categories.filter(cat => {\n return !cat.startsWith('-');\n });\n\n this.#path = path;\n this.#recording = true;\n await this.#client.send('Tracing.start', {\n transferMode: 'ReturnAsStream',\n traceConfig: {\n excludedCategories,\n includedCategories,\n traceBufferSizeInKb: bufferSize,\n },\n });\n }\n\n /**\n * Stops a trace started with the `start` method.\n * @returns Promise which resolves to buffer with trace data.\n */\n async stop(): Promise<Uint8Array | undefined> {\n const contentDeferred = Deferred.create<Uint8Array | undefined>();\n this.#client.once('Tracing.tracingComplete', async event => {\n try {\n assert(event.stream, 'Missing \"stream\"');\n const readable = await getReadableFromProtocolStream(\n this.#client,\n event.stream,\n );\n const typedArray = await getReadableAsTypedArray(\n readable,\n this.#path,\n this.#logger,\n );\n contentDeferred.resolve(typedArray ?? undefined);\n } catch (error) {\n if (isErrorLike(error)) {\n contentDeferred.reject(error);\n } else {\n contentDeferred.reject(new Error(`Unknown error: ${error}`));\n }\n }\n });\n await this.#client.send('Tracing.end');\n this.#recording = false;\n return await contentDeferred.valueOrThrow();\n }\n}\n","/**\n * @license\n * Copyright 2026 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {CDPSession} from '../api/CDPSession.js';\nimport type {ElementHandle} from '../api/ElementHandle.js';\nimport type {Frame} from '../api/Frame.js';\nimport type {ConsoleMessageLocation} from '../common/ConsoleMessage.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {DisposableStack} from '../util/disposable.js';\n\nimport type {CdpFrame} from './Frame.js';\nimport type {FrameManager} from './FrameManager.js';\nimport {MAIN_WORLD} from './IsolatedWorlds.js';\n\n/**\n * Represents a registered WebMCP tool available on the page.\n *\n * @public\n */\nexport class WebMCPTool extends EventEmitter<{\n /** Emitted when invocation starts. */\n toolinvoked: WebMCPToolCall;\n}> {\n #webmcp: WebMCP;\n #backendNodeId?: number;\n #formElement?: ElementHandle<HTMLFormElement>;\n\n /**\n * Tool name.\n */\n name: string;\n /**\n * Tool description.\n */\n description: string;\n /**\n * Schema for the tool's input parameters.\n */\n inputSchema?: object;\n /**\n * Optional annotations for the tool.\n */\n annotations?: Protocol.WebMCP.Annotation;\n /**\n * Frame the tool was defined for.\n */\n frame: Frame;\n /**\n * Source location that defined the tool (if available).\n */\n location?: ConsoleMessageLocation;\n /**\n * @internal\n */\n rawStackTrace?: Protocol.Runtime.StackTrace;\n\n /**\n * @internal\n */\n constructor(webmcp: WebMCP, tool: Protocol.WebMCP.Tool, frame: Frame) {\n super();\n this.#webmcp = webmcp;\n this.name = tool.name;\n this.description = tool.description;\n this.inputSchema = tool.inputSchema;\n this.annotations = tool.annotations;\n this.frame = frame;\n this.#backendNodeId = tool.backendNodeId;\n if (tool.stackTrace?.callFrames.length) {\n this.location = {\n url: tool.stackTrace.callFrames[0]!.url,\n lineNumber: tool.stackTrace.callFrames[0]!.lineNumber,\n columnNumber: tool.stackTrace.callFrames[0]!.columnNumber,\n };\n }\n this.rawStackTrace = tool.stackTrace;\n }\n\n /**\n * The corresponding ElementHandle when tool was registered via a form.\n */\n get formElement(): Promise<ElementHandle<HTMLFormElement> | undefined> {\n return (async () => {\n if (this.#formElement && !this.#formElement.disposed) {\n return this.#formElement;\n }\n if (!this.#backendNodeId) {\n return undefined;\n }\n this.#formElement = (await (this.frame as CdpFrame).worlds[\n MAIN_WORLD\n ].adoptBackendNode(\n this.#backendNodeId,\n )) as ElementHandle<HTMLFormElement>;\n return this.#formElement;\n })();\n }\n\n /**\n * Executes tool with input parameters, matching tool's `inputSchema`.\n */\n async execute(\n input: object = {},\n options: WebMCPToolExecuteOptions = {},\n ): Promise<WebMCPToolCallResult> {\n const {invocationId} = await this.#webmcp.invokeTool(this, input);\n return await new Promise<WebMCPToolCallResult>(resolve => {\n const onAbort = () => {\n void this.#webmcp.cancelInvocation(invocationId);\n };\n const handler = (event: WebMCPToolCallResult) => {\n if (event.id === invocationId) {\n options.signal?.removeEventListener('abort', onAbort);\n this.#webmcp.off('toolresponded', handler);\n resolve(event);\n }\n };\n this.#webmcp.on('toolresponded', handler);\n if (options.signal?.aborted) {\n onAbort();\n } else {\n options.signal?.addEventListener('abort', onAbort, {once: true});\n }\n });\n }\n}\n\n/**\n * @public\n */\nexport interface WebMCPToolExecuteOptions {\n /**\n * A signal object that allows you to cancel the tool execution.\n */\n signal?: AbortSignal;\n}\n\n/**\n * @public\n */\nexport interface WebMCPToolsAddedEvent {\n /**\n * Array of tools that were added.\n */\n tools: WebMCPTool[];\n}\n\n/**\n * @public\n */\nexport interface WebMCPToolsRemovedEvent {\n /**\n * Array of tools that were removed.\n */\n tools: WebMCPTool[];\n}\n\n/**\n * @public\n */\nexport class WebMCPToolCall {\n /**\n * Tool invocation identifier.\n */\n id: string;\n /**\n * Tool that was called.\n */\n tool: WebMCPTool;\n /**\n * The input parameters used for the call.\n */\n input: object;\n\n #logger?: Logger;\n\n /**\n * @internal\n */\n constructor(\n invocationId: string,\n tool: WebMCPTool,\n input: string,\n logger?: Logger,\n ) {\n this.id = invocationId;\n this.tool = tool;\n this.#logger = logger;\n try {\n this.input = JSON.parse(input);\n } catch (error) {\n this.input = {};\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n }\n }\n}\n\n/**\n * @public\n */\nexport interface WebMCPToolCallResult {\n /**\n * Tool invocation identifier.\n */\n id: string;\n /**\n * The corresponding tool call if available.\n */\n call?: WebMCPToolCall;\n /**\n * Status of the invocation.\n */\n status: Protocol.WebMCP.InvocationStatus;\n /**\n * Output or error delivered as delivered to the agent. Missing if `status` is anything\n * other than Completed.\n */\n output?: any;\n /**\n * Error text.\n */\n errorText?: string;\n /**\n * The exception object, if the javascript tool threw an error.\n */\n exception?: Protocol.Runtime.RemoteObject;\n}\n\n/**\n * The experimental WebMCP class provides an API for the WebMCP API.\n *\n * See the\n * {@link https://pptr.dev/guides/webmcp|WebMCP guide}\n * for more details.\n *\n * @example\n *\n * ```ts\n * await page.goto('https://www.example.com');\n * const tools = page.webmcp.tools();\n * for (const tool of tools) {\n * console.log(`Tool found: ${tool.name} - ${tool.description}`);\n * }\n * ```\n *\n * @experimental\n * @public\n */\nexport class WebMCP extends EventEmitter<{\n /** Emitted when tools are added. */\n toolsadded: WebMCPToolsAddedEvent;\n /** Emitted when tools are removed. */\n toolsremoved: WebMCPToolsRemovedEvent;\n /** Emitted when a tool invocation starts. */\n toolinvoked: WebMCPToolCall;\n /** Emitted when a tool invocation completes or fails. */\n toolresponded: WebMCPToolCallResult;\n}> {\n #client: CDPSession;\n #frameManager: FrameManager;\n #tools = new Map<string, Map<string, WebMCPTool>>();\n #pendingCalls = new Map<string, WebMCPToolCall>();\n #logger?: Logger;\n #subscriptions = new DisposableStack();\n\n #onToolsAdded = (event: Protocol.WebMCP.ToolsAddedEvent) => {\n const tools: WebMCPTool[] = [];\n for (const tool of event.tools) {\n const frame = this.#frameManager.frame(tool.frameId);\n if (!frame) {\n continue;\n }\n\n const frameTools = this.#tools.get(tool.frameId) ?? new Map();\n if (!this.#tools.has(tool.frameId)) {\n this.#tools.set(tool.frameId, frameTools);\n this.#listenToContextDestroyed(frame as CdpFrame);\n }\n\n const addedTool = new WebMCPTool(this, tool, frame);\n frameTools.set(tool.name, addedTool);\n tools.push(addedTool);\n }\n\n this.emit('toolsadded', {tools});\n };\n\n #onToolsRemoved = (event: Protocol.WebMCP.ToolsRemovedEvent) => {\n const tools: WebMCPTool[] = [];\n event.tools.forEach(tool => {\n const removedTool = this.#tools.get(tool.frameId)?.get(tool.name);\n if (removedTool) {\n tools.push(removedTool);\n }\n this.#tools.get(tool.frameId)?.delete(tool.name);\n });\n this.emit('toolsremoved', {tools});\n };\n\n #onToolInvoked = (event: Protocol.WebMCP.ToolInvokedEvent) => {\n const tool = this.#tools.get(event.frameId)?.get(event.toolName);\n if (!tool) {\n return;\n }\n const call = new WebMCPToolCall(\n event.invocationId,\n tool,\n event.input,\n this.#logger,\n );\n this.#pendingCalls.set(call.id, call);\n tool.emit('toolinvoked', call);\n this.emit('toolinvoked', call);\n };\n\n #onToolResponded = (event: Protocol.WebMCP.ToolRespondedEvent) => {\n const call = this.#pendingCalls.get(event.invocationId);\n if (call) {\n this.#pendingCalls.delete(event.invocationId);\n }\n const response: WebMCPToolCallResult = {\n id: event.invocationId,\n call: call,\n status: event.status,\n output: event.output,\n errorText: event.errorText,\n exception: event.exception,\n };\n this.emit('toolresponded', response);\n };\n\n #onContextDisposed = (frame: CdpFrame) => {\n this.#pendingCalls.clear();\n const frameTools = this.#tools.get(frame._id);\n if (!frameTools) {\n return;\n }\n const tools = Array.from(frameTools.values());\n this.#tools.delete(frame._id);\n if (tools.length) {\n this.emit('toolsremoved', {tools});\n }\n };\n\n #listenToContextDestroyed(frame: CdpFrame): void {\n frame.mainRealm().context?.once('disposed', () => {\n this.#onContextDisposed(frame);\n });\n }\n\n /**\n * @internal\n */\n constructor(client: CDPSession, frameManager: FrameManager, logger?: Logger) {\n super(undefined, logger);\n this.#client = client;\n this.#frameManager = frameManager;\n this.#logger = logger;\n this.#bindListeners();\n }\n\n /**\n * @internal\n */\n async initialize(): Promise<void> {\n return await this.#client.send('WebMCP.enable').catch(err => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n }\n\n /**\n * @internal\n */\n async invokeTool(\n tool: WebMCPTool,\n input: object,\n ): Promise<{invocationId: string}> {\n return await this.#client.send('WebMCP.invokeTool', {\n frameId: tool.frame._id,\n toolName: tool.name,\n input,\n });\n }\n\n /**\n * @internal\n */\n async cancelInvocation(invocationId: string): Promise<void> {\n return await this.#client\n .send('WebMCP.cancelInvocation', {\n invocationId,\n })\n .catch(err => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n }\n\n /**\n * Gets all WebMCP tools defined by the page.\n */\n tools(): WebMCPTool[] {\n return Array.from(this.#tools.values()).flatMap(toolMap => {\n return Array.from(toolMap.values());\n });\n }\n\n #bindListeners(): void {\n const clientEmitter = this.#subscriptions.use(\n new EventEmitter(this.#client),\n );\n clientEmitter.on('WebMCP.toolsAdded', this.#onToolsAdded);\n clientEmitter.on('WebMCP.toolsRemoved', this.#onToolsRemoved);\n clientEmitter.on('WebMCP.toolInvoked', this.#onToolInvoked);\n clientEmitter.on('WebMCP.toolResponded', this.#onToolResponded);\n }\n\n /**\n * @internal\n */\n updateClient(client: CDPSession): void {\n this.#subscriptions.dispose();\n this.#subscriptions = new DisposableStack();\n this.#client = client;\n this.#bindListeners();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {firstValueFrom, from, raceWith} from '../../third_party/rxjs/rxjs.js';\nimport type {BluetoothEmulation} from '../api/BluetoothEmulation.js';\nimport type {Browser, WindowId} from '../api/Browser.js';\nimport type {BrowserContext} from '../api/BrowserContext.js';\nimport {CDPSessionEvent, type CDPSession} from '../api/CDPSession.js';\nimport type {DeviceRequestPrompt} from '../api/DeviceRequestPrompt.js';\nimport type {ElementHandle} from '../api/ElementHandle.js';\nimport type {Extension} from '../api/Extension.js';\nimport type {Frame, WaitForOptions} from '../api/Frame.js';\nimport type {HTTPResponse} from '../api/HTTPResponse.js';\nimport type {JSHandle} from '../api/JSHandle.js';\nimport type {\n Credentials,\n HeapSnapshotOptions,\n RecordOptions,\n ReloadOptions,\n} from '../api/Page.js';\nimport {\n Page,\n PageEvent,\n type GeolocationOptions,\n type MediaFeature,\n type Metrics,\n type NewDocumentScriptEvaluation,\n type ScreenshotClip,\n type ScreenshotOptions,\n type WaitTimeoutOptions,\n} from '../api/Page.js';\nimport {WebWorker, WebWorkerEvent} from '../api/WebWorker.js';\nimport {ConsoleMessage} from '../common/ConsoleMessage.js';\nimport type {\n Cookie,\n DeleteCookiesRequest,\n CookieParam,\n CookiePartitionKey,\n CookieSameSite,\n} from '../common/Cookie.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {TargetCloseError} from '../common/Errors.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {FileChooser} from '../common/FileChooser.js';\nimport {NetworkManagerEvent} from '../common/NetworkManagerEvents.js';\nimport type {PDFOptions} from '../common/PDFOptions.js';\nimport type {BindingPayload, HandleFor} from '../common/types.js';\nimport {\n evaluationString,\n getReadableAsTypedArray,\n getReadableFromProtocolStream,\n parsePDFOptions,\n timeout,\n validateDialogType,\n} from '../common/util.js';\nimport type {Viewport} from '../common/Viewport.js';\nimport {environment} from '../environment.js';\nimport type {Realm} from '../index-browser.js';\nimport {assert} from '../util/assert.js';\nimport {Deferred} from '../util/Deferred.js';\nimport {AsyncDisposableStack} from '../util/disposable.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\n\nimport {Binding} from './Binding.js';\nimport {CdpBluetoothEmulation} from './BluetoothEmulation.js';\nimport type {CdpBrowser} from './Browser.js';\nimport {CdpCDPSession} from './CdpSession.js';\nimport {isTargetClosedError} from './Connection.js';\nimport {Coverage} from './Coverage.js';\nimport {CdpDialog} from './Dialog.js';\nimport {EmulationManager} from './EmulationManager.js';\nimport type {CdpFrame} from './Frame.js';\nimport {FrameManager} from './FrameManager.js';\nimport {FrameManagerEvent} from './FrameManagerEvents.js';\nimport {CdpKeyboard, CdpMouse, CdpTouchscreen} from './Input.js';\nimport type {IsolatedWorld} from './IsolatedWorld.js';\nimport {MAIN_WORLD} from './IsolatedWorlds.js';\nimport {releaseObject} from './JSHandle.js';\nimport type {NetworkConditions} from './NetworkManager.js';\nimport {CdpScreenRecording} from './ScreenRecording.js';\nimport type {CdpTarget} from './Target.js';\nimport {TargetManagerEvent} from './TargetManageEvents.js';\nimport type {TargetManager} from './TargetManager.js';\nimport {Tracing} from './Tracing.js';\nimport {\n convertConsoleMessageLevel,\n createClientError,\n createConsoleMessage,\n pageBindingInitString,\n} from './utils.js';\nimport {WebMCP} from './WebMCP.js';\nimport {CdpWebWorker} from './WebWorker.js';\n\n/**\n * @internal\n */\nexport function convertSameSiteFromPuppeteerToCdp(\n sameSite: CookieSameSite | undefined,\n): Protocol.Network.CookieSameSite | undefined {\n switch (sameSite) {\n case 'Strict':\n case 'Lax':\n case 'None':\n return sameSite;\n default:\n return undefined;\n }\n}\n\n/**\n * @internal\n */\nexport class CdpPage extends Page {\n static async _create(\n client: CdpCDPSession,\n target: CdpTarget,\n defaultViewport: Viewport | null,\n logger: Logger,\n ): Promise<CdpPage> {\n const page = new CdpPage(client, target, logger);\n await page.#initialize();\n if (defaultViewport) {\n try {\n await page.setViewport(defaultViewport);\n } catch (err) {\n if (isErrorLike(err) && isTargetClosedError(err)) {\n page.logger?.(DEBUG_PREFIXES.error)?.(err);\n } else {\n throw err;\n }\n }\n }\n return page;\n }\n\n #closed = false;\n readonly #targetManager: TargetManager;\n readonly #cdpBluetoothEmulation: CdpBluetoothEmulation;\n\n #primaryTargetClient: CdpCDPSession;\n #primaryTarget: CdpTarget;\n #tabTargetClient: CDPSession;\n #tabTarget: CdpTarget;\n #keyboard: CdpKeyboard;\n #mouse: CdpMouse;\n #touchscreen: CdpTouchscreen;\n #frameManager: FrameManager;\n #emulationManager: EmulationManager;\n #tracing: Tracing;\n #webmcp: WebMCP;\n #bindings = new Map<string, Binding>();\n #exposedFunctions = new Map<string, string>();\n #coverage: Coverage;\n #viewport: Viewport | null;\n #workers = new Map<string, CdpWebWorker>();\n #fileChooserDeferreds = new Set<Deferred<FileChooser>>();\n #sessionCloseDeferred = Deferred.create<never, TargetCloseError>();\n #serviceWorkerBypassed = false;\n #userDragInterceptionEnabled = false;\n\n constructor(client: CdpCDPSession, target: CdpTarget, logger: Logger) {\n super(logger);\n this.#primaryTargetClient = client;\n this.#tabTargetClient = client.parentSession()!;\n assert(this.#tabTargetClient, 'Tab target session is not defined.');\n this.#tabTarget = (this.#tabTargetClient as CdpCDPSession).target();\n assert(this.#tabTarget, 'Tab target is not defined.');\n this._tabId = this.#tabTarget._getTargetInfo().targetId;\n this.#primaryTarget = target;\n this.#targetManager = target._targetManager();\n this.#keyboard = new CdpKeyboard(client);\n this.#mouse = new CdpMouse(client, this.#keyboard);\n this.#touchscreen = new CdpTouchscreen(client, this.#keyboard);\n this.#frameManager = new FrameManager(\n client,\n this,\n this._timeoutSettings,\n logger,\n );\n this.#emulationManager = new EmulationManager(client, this.logger);\n this.#tracing = new Tracing(client, this.logger);\n this.#webmcp = new WebMCP(client, this.#frameManager, logger);\n this.#coverage = new Coverage(client);\n this.#viewport = null;\n\n // Use browser context's connection, as current Bluetooth emulation in Chromium is\n // implemented on the browser context level, and not tight to the specific tab.\n this.#cdpBluetoothEmulation = new CdpBluetoothEmulation(\n this.#primaryTargetClient.connection(),\n );\n\n const frameManagerEmitter = new EventEmitter(this.#frameManager);\n frameManagerEmitter.on(FrameManagerEvent.FrameAttached, frame => {\n this.emit(PageEvent.FrameAttached, frame);\n });\n frameManagerEmitter.on(FrameManagerEvent.FrameDetached, frame => {\n this.emit(PageEvent.FrameDetached, frame);\n });\n frameManagerEmitter.on(FrameManagerEvent.FrameNavigated, frame => {\n this.emit(PageEvent.FrameNavigated, frame);\n });\n frameManagerEmitter.on(\n FrameManagerEvent.ConsoleApiCalled,\n ([world, event]) => {\n this.#onConsoleAPI(world, event);\n },\n );\n frameManagerEmitter.on(\n FrameManagerEvent.BindingCalled,\n ([world, event]) => {\n void this.#onBindingCalled(world, event);\n },\n );\n\n const networkManagerEmitter = new EventEmitter(\n this.#frameManager.networkManager,\n );\n networkManagerEmitter.on(NetworkManagerEvent.Request, request => {\n this.emit(PageEvent.Request, request);\n });\n networkManagerEmitter.on(\n NetworkManagerEvent.RequestServedFromCache,\n request => {\n this.emit(PageEvent.RequestServedFromCache, request!);\n },\n );\n networkManagerEmitter.on(NetworkManagerEvent.Response, response => {\n this.emit(PageEvent.Response, response);\n });\n networkManagerEmitter.on(NetworkManagerEvent.RequestFailed, request => {\n this.emit(PageEvent.RequestFailed, request);\n });\n networkManagerEmitter.on(NetworkManagerEvent.RequestFinished, request => {\n this.emit(PageEvent.RequestFinished, request);\n });\n\n this.#tabTargetClient.on(\n CDPSessionEvent.Swapped,\n this.#onActivation.bind(this),\n );\n\n this.#tabTargetClient.on(\n CDPSessionEvent.Ready,\n this.#onSecondaryTarget.bind(this),\n );\n\n this.#targetManager.on(\n TargetManagerEvent.TargetGone,\n this.#onDetachedFromTarget,\n );\n\n void this.#tabTarget._isClosedDeferred\n .valueOrThrow()\n .then(() => {\n this.#targetManager.off(\n TargetManagerEvent.TargetGone,\n this.#onDetachedFromTarget,\n );\n\n this.emit(PageEvent.Close, undefined);\n this.#closed = true;\n })\n .catch(error => {\n this.logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n\n this.#setupPrimaryTargetListeners();\n this.#attachExistingTargets();\n }\n\n #attachExistingTargets(): void {\n const queue = [];\n for (const childTarget of this.#targetManager.getChildTargets(\n this.#primaryTarget,\n )) {\n queue.push(childTarget);\n }\n let idx = 0;\n while (idx < queue.length) {\n const next = queue[idx] as CdpTarget;\n idx++;\n const session = next._session();\n if (session) {\n this.#onAttachedToTarget(session);\n }\n for (const childTarget of this.#targetManager.getChildTargets(next)) {\n queue.push(childTarget);\n }\n }\n }\n\n async #onActivation(newSession: CDPSession): Promise<void> {\n // TODO: Remove assert once we have separate Event type for CdpCDPSession.\n assert(\n newSession instanceof CdpCDPSession,\n 'CDPSession is not instance of CdpCDPSession',\n );\n this.#primaryTargetClient = newSession;\n this.#primaryTarget = newSession.target();\n assert(this.#primaryTarget, 'Missing target on swap');\n this.#keyboard.updateClient(newSession);\n this.#mouse.updateClient(newSession);\n this.#touchscreen.updateClient(newSession);\n this.#emulationManager.updateClient(newSession);\n this.#tracing.updateClient(newSession);\n this.#webmcp.updateClient(newSession);\n this.#coverage.updateClient(newSession);\n await this.#frameManager.swapFrameTree(newSession);\n this.#setupPrimaryTargetListeners();\n }\n\n async #onSecondaryTarget(session: CDPSession): Promise<void> {\n assert(session instanceof CdpCDPSession);\n if (session.target()._subtype() !== 'prerender') {\n return;\n }\n void this.#frameManager.registerSpeculativeSession(session).catch(error => {\n this.logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n void this.#emulationManager\n .registerSpeculativeSession(session)\n .catch(error => {\n this.logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }\n\n /**\n * Sets up listeners for the primary target. The primary target can change\n * during a navigation to a prerended page.\n */\n #setupPrimaryTargetListeners() {\n const clientEmitter = new EventEmitter(this.#primaryTargetClient);\n clientEmitter.on(CDPSessionEvent.Ready, this.#onAttachedToTarget);\n clientEmitter.on(CDPSessionEvent.Disconnected, () => {\n this.#sessionCloseDeferred.reject(new TargetCloseError('Target closed'));\n });\n clientEmitter.on('Page.domContentEventFired', () => {\n this.emit(PageEvent.DOMContentLoaded, undefined);\n });\n clientEmitter.on('Page.loadEventFired', () => {\n this.emit(PageEvent.Load, undefined);\n });\n clientEmitter.on('Page.javascriptDialogOpening', this.#onDialog.bind(this));\n clientEmitter.on(\n 'Runtime.exceptionThrown',\n this.#handleException.bind(this),\n );\n clientEmitter.on(\n 'Inspector.targetCrashed',\n this.#onTargetCrashed.bind(this),\n );\n clientEmitter.on('Performance.metrics', this.#emitMetrics.bind(this));\n clientEmitter.on('Log.entryAdded', this.#onLogEntryAdded.bind(this));\n clientEmitter.on('Page.fileChooserOpened', this.#onFileChooser.bind(this));\n }\n\n #onDetachedFromTarget = (target: CdpTarget) => {\n const sessionId = target._session()?.id();\n const worker = this.#workers.get(sessionId!);\n if (!worker) {\n return;\n }\n this.#workers.delete(sessionId!);\n this.emit(PageEvent.WorkerDestroyed, worker);\n };\n\n #onAttachedToTarget = (session: CDPSession) => {\n assert(session instanceof CdpCDPSession);\n this.#frameManager.onAttachedToTarget(session.target());\n if (session.target()._getTargetInfo().type === 'worker') {\n const worker = new CdpWebWorker(\n session,\n session.target().url(),\n session.target()._targetId,\n session.target().type(),\n this.#handleException.bind(this),\n this.#frameManager.networkManager,\n this.logger,\n );\n this.#workers.set(session.id(), worker);\n worker.internalEmitter.on(WebWorkerEvent.Console, message => {\n const noListenersForConsoleOnPage =\n this.listenerCount(PageEvent.Console) === 0;\n const noListenersForConsoleOnWorker =\n worker.listenerCount(WebWorkerEvent.Console) === 0;\n\n if (noListenersForConsoleOnPage && noListenersForConsoleOnWorker) {\n // eslint-disable-next-line max-len -- The comment is long.\n // eslint-disable-next-line @puppeteer/use-using -- These are not owned by this function.\n for (const arg of message.args()) {\n void arg.dispose().catch(error => {\n this.logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }\n return;\n }\n\n if (!noListenersForConsoleOnPage) {\n this.emit(PageEvent.Console, message);\n }\n });\n this.emit(PageEvent.WorkerCreated, worker);\n }\n session.on(CDPSessionEvent.Ready, this.#onAttachedToTarget);\n };\n\n async #initialize(): Promise<void> {\n try {\n await Promise.all([\n this.#frameManager.initialize(this.#primaryTargetClient),\n this.#primaryTargetClient.send('Performance.enable'),\n this.#primaryTargetClient.send('Log.enable'),\n this.#webmcp.initialize(),\n ]);\n } catch (err) {\n if (isErrorLike(err) && isTargetClosedError(err)) {\n this.logger?.(DEBUG_PREFIXES.error)?.(err);\n } else {\n throw err;\n }\n }\n }\n\n override async resize(params: {\n contentWidth: number;\n contentHeight: number;\n }): Promise<void> {\n const windowId = await this.windowId();\n await this.#primaryTargetClient.send('Browser.setContentsSize', {\n windowId: Number(windowId),\n width: params.contentWidth,\n height: params.contentHeight,\n });\n }\n\n override async windowId(): Promise<WindowId> {\n const {windowId} = await this.#primaryTargetClient.send(\n 'Browser.getWindowForTarget',\n );\n\n return windowId.toString();\n }\n\n async #onFileChooser(\n event: Protocol.Page.FileChooserOpenedEvent,\n ): Promise<void> {\n if (!this.#fileChooserDeferreds.size) {\n return;\n }\n\n const frame = this.#frameManager.frame(event.frameId);\n assert(frame, 'This should never happen.');\n\n // This is guaranteed to be an HTMLInputElement handle by the event.\n using handle = (await frame.worlds[MAIN_WORLD].adoptBackendNode(\n event.backendNodeId,\n )) as ElementHandle<HTMLInputElement>;\n\n const fileChooser = new FileChooser(\n handle.move(),\n event.mode !== 'selectSingle',\n );\n for (const promise of this.#fileChooserDeferreds) {\n promise.resolve(fileChooser);\n }\n this.#fileChooserDeferreds.clear();\n }\n\n _client(): CDPSession {\n return this.#primaryTargetClient;\n }\n\n _isUrlAllowed(url: string): boolean {\n return this.#targetManager.isUrlAllowed(url);\n }\n\n override isServiceWorkerBypassed(): boolean {\n return this.#serviceWorkerBypassed;\n }\n\n override isDragInterceptionEnabled(): boolean {\n return this.#userDragInterceptionEnabled;\n }\n\n override isJavaScriptEnabled(): boolean {\n return this.#emulationManager.javascriptEnabled;\n }\n\n override async openDevTools(): Promise<Page> {\n const pageTargetId = this.target()._targetId;\n const browser = this.browser() as CdpBrowser;\n const devtoolsTargetId = await browser._hasDevToolsTarget(\n this.target()._targetId,\n );\n if (devtoolsTargetId) {\n return await browser._getDevToolsTargetPage(devtoolsTargetId);\n }\n const devtoolsPage = await browser._createDevToolsPage(pageTargetId);\n return devtoolsPage;\n }\n\n override async hasDevTools(): Promise<boolean> {\n const browser = this.browser() as CdpBrowser;\n const targetId = await browser._hasDevToolsTarget(this.target()._targetId);\n return Boolean(targetId);\n }\n\n override async waitForFileChooser(\n options: WaitTimeoutOptions = {},\n ): Promise<FileChooser> {\n const needsEnable = this.#fileChooserDeferreds.size === 0;\n const {timeout = this._timeoutSettings.timeout()} = options;\n const deferred = Deferred.create<FileChooser>({\n message: `Waiting for \\`FileChooser\\` failed: ${timeout}ms exceeded`,\n timeout,\n });\n\n if (options.signal) {\n options.signal.addEventListener(\n 'abort',\n () => {\n deferred.reject(options.signal?.reason);\n },\n {once: true},\n );\n }\n\n this.#fileChooserDeferreds.add(deferred);\n let enablePromise: Promise<void> | undefined;\n if (needsEnable) {\n enablePromise = this.#primaryTargetClient.send(\n 'Page.setInterceptFileChooserDialog',\n {\n enabled: true,\n },\n );\n }\n try {\n const [result] = await Promise.all([\n deferred.valueOrThrow(),\n enablePromise,\n ]);\n return result;\n } catch (error) {\n this.#fileChooserDeferreds.delete(deferred);\n throw error;\n }\n }\n\n override async setGeolocation(options: GeolocationOptions): Promise<void> {\n return await this.#emulationManager.setGeolocation(options);\n }\n\n override target(): CdpTarget {\n return this.#primaryTarget;\n }\n\n override browser(): Browser {\n return this.#primaryTarget.browser();\n }\n\n override browserContext(): BrowserContext {\n return this.#primaryTarget.browserContext();\n }\n\n #onTargetCrashed(): void {\n this.emit(PageEvent.Error, new Error('Page crashed!'));\n }\n\n #onLogEntryAdded(event: Protocol.Log.EntryAddedEvent): void {\n const {level, text, args, source, url, lineNumber, stackTrace} =\n event.entry;\n if (args) {\n args.map(arg => {\n void releaseObject(this.#primaryTargetClient, arg, this.logger);\n });\n }\n if (source !== 'worker') {\n this.emit(\n PageEvent.Console,\n new ConsoleMessage(\n convertConsoleMessageLevel(level),\n text,\n [],\n [{url, lineNumber}],\n undefined,\n stackTrace,\n this.#primaryTarget._targetId,\n ),\n );\n }\n }\n\n override mainFrame(): CdpFrame {\n return this.#frameManager.mainFrame();\n }\n\n override get keyboard(): CdpKeyboard {\n return this.#keyboard;\n }\n\n override get touchscreen(): CdpTouchscreen {\n return this.#touchscreen;\n }\n\n override get coverage(): Coverage {\n return this.#coverage;\n }\n\n override get tracing(): Tracing {\n return this.#tracing;\n }\n\n override get webmcp(): WebMCP {\n return this.#webmcp;\n }\n\n override frames(): Frame[] {\n return this.#frameManager.frames();\n }\n\n override workers(): CdpWebWorker[] {\n return Array.from(this.#workers.values());\n }\n\n override async setRequestInterception(value: boolean): Promise<void> {\n return await this.#frameManager.networkManager.setRequestInterception(\n value,\n );\n }\n\n override async setBypassServiceWorker(bypass: boolean): Promise<void> {\n this.#serviceWorkerBypassed = bypass;\n return await this.#primaryTargetClient.send(\n 'Network.setBypassServiceWorker',\n {bypass},\n );\n }\n\n override async setDragInterception(enabled: boolean): Promise<void> {\n this.#userDragInterceptionEnabled = enabled;\n return await this.#primaryTargetClient.send('Input.setInterceptDrags', {\n enabled,\n });\n }\n\n override async setOfflineMode(enabled: boolean): Promise<void> {\n return await this.#frameManager.networkManager.setOfflineMode(enabled);\n }\n\n override async emulateNetworkConditions(\n networkConditions: NetworkConditions | null,\n ): Promise<void> {\n return await this.#frameManager.networkManager.emulateNetworkConditions(\n networkConditions,\n );\n }\n\n override async emulateFocusedPage(enabled: boolean): Promise<void> {\n return await this.#emulationManager.emulateFocus(enabled);\n }\n\n override setDefaultNavigationTimeout(timeout: number): void {\n this._timeoutSettings.setDefaultNavigationTimeout(timeout);\n }\n\n override setDefaultTimeout(timeout: number): void {\n this._timeoutSettings.setDefaultTimeout(timeout);\n }\n\n override getDefaultTimeout(): number {\n return this._timeoutSettings.timeout();\n }\n\n override getDefaultNavigationTimeout(): number {\n return this._timeoutSettings.navigationTimeout();\n }\n\n override async queryObjects<Prototype>(\n prototypeHandle: JSHandle<Prototype>,\n ): Promise<JSHandle<Prototype[]>> {\n assert(!prototypeHandle.disposed, 'Prototype JSHandle is disposed!');\n assert(\n prototypeHandle.id,\n 'Prototype JSHandle must not be referencing primitive value',\n );\n const response = await this.mainFrame().client.send(\n 'Runtime.queryObjects',\n {\n prototypeObjectId: prototypeHandle.id,\n },\n );\n return this.mainFrame()\n .mainRealm()\n .createCdpHandle(response.objects) as HandleFor<Prototype[]>;\n }\n\n override async cookies(...urls: string[]): Promise<Cookie[]> {\n const originalCookies = (\n await this.#primaryTargetClient.send('Network.getCookies', {\n urls: urls.length ? urls : [this.url()],\n })\n ).cookies;\n\n const unsupportedCookieAttributes = ['sourcePort'];\n const filterUnsupportedAttributes = (\n cookie: Protocol.Network.Cookie,\n ): Protocol.Network.Cookie => {\n for (const attr of unsupportedCookieAttributes) {\n delete (cookie as unknown as Record<string, unknown>)[attr];\n }\n return cookie;\n };\n return originalCookies.map(filterUnsupportedAttributes).map(cookie => {\n return {\n ...cookie,\n // TODO: a breaking change is needed in Puppeteer types to support other\n // partition keys.\n partitionKey: cookie.partitionKey\n ? cookie.partitionKey.topLevelSite\n : undefined,\n };\n });\n }\n\n override async deleteCookie(\n ...cookies: DeleteCookiesRequest[]\n ): Promise<void> {\n const pageURL = this.url();\n for (const cookie of cookies) {\n const item = {\n ...cookie,\n partitionKey: convertCookiesPartitionKeyFromPuppeteerToCdp(\n cookie.partitionKey,\n ),\n };\n if (!cookie.url && pageURL.startsWith('http')) {\n item.url = pageURL;\n }\n await this.#primaryTargetClient.send('Network.deleteCookies', item);\n if (pageURL.startsWith('http') && !item.partitionKey) {\n const url = new URL(pageURL);\n // Delete also cookies from the page's partition.\n await this.#primaryTargetClient.send('Network.deleteCookies', {\n ...item,\n partitionKey: {\n topLevelSite: url.origin.replace(`:${url.port}`, ''),\n hasCrossSiteAncestor: false,\n },\n });\n }\n }\n }\n\n override async setCookie(...cookies: CookieParam[]): Promise<void> {\n const pageURL = this.url();\n const startsWithHTTP = pageURL.startsWith('http');\n const items = cookies.map(cookie => {\n const item = Object.assign({}, cookie);\n if (!item.url && startsWithHTTP) {\n item.url = pageURL;\n }\n assert(\n item.url !== 'about:blank',\n `Blank page can not have cookie \"${item.name}\"`,\n );\n assert(\n !String.prototype.startsWith.call(item.url || '', 'data:'),\n `Data URL page can not have cookie \"${item.name}\"`,\n );\n return item;\n });\n await this.deleteCookie(...items);\n if (items.length) {\n await this.#primaryTargetClient.send('Network.setCookies', {\n cookies: items.map(cookieParam => {\n return {\n ...cookieParam,\n partitionKey: convertCookiesPartitionKeyFromPuppeteerToCdp(\n cookieParam.partitionKey,\n ),\n sameSite: convertSameSiteFromPuppeteerToCdp(cookieParam.sameSite),\n };\n }),\n });\n }\n }\n\n override async exposeFunction(\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n pptrFunction: Function | {default: Function},\n ): Promise<void> {\n if (this.#bindings.has(name)) {\n throw new Error(\n `Failed to add page binding with name ${name}: window['${name}'] already exists!`,\n );\n }\n const source = pageBindingInitString('exposedFun', name);\n let binding: Binding;\n switch (typeof pptrFunction) {\n case 'function':\n binding = new Binding(\n name,\n pptrFunction as (...args: unknown[]) => unknown,\n source,\n this.logger,\n );\n break;\n default:\n binding = new Binding(\n name,\n pptrFunction.default as (...args: unknown[]) => unknown,\n source,\n this.logger,\n );\n break;\n }\n this.#bindings.set(name, binding);\n const [{identifier}] = await Promise.all([\n this.#frameManager.evaluateOnNewDocument(source),\n this.#frameManager.addExposedFunctionBinding(binding),\n ]);\n this.#exposedFunctions.set(name, identifier);\n }\n\n override async removeExposedFunction(name: string): Promise<void> {\n const exposedFunctionId = this.#exposedFunctions.get(name);\n if (!exposedFunctionId) {\n throw new Error(`Function with name \"${name}\" does not exist`);\n }\n // #bindings must be updated together with #exposedFunctions.\n const binding = this.#bindings.get(name)!;\n this.#exposedFunctions.delete(name);\n this.#bindings.delete(name);\n await Promise.all([\n this.#frameManager.removeScriptToEvaluateOnNewDocument(exposedFunctionId),\n this.#frameManager.removeExposedFunctionBinding(binding),\n ]);\n }\n\n override async authenticate(credentials: Credentials | null): Promise<void> {\n return await this.#frameManager.networkManager.authenticate(credentials);\n }\n\n override async setExtraHTTPHeaders(\n headers: Record<string, string>,\n ): Promise<void> {\n return await this.#frameManager.networkManager.setExtraHTTPHeaders(headers);\n }\n\n override async setUserAgent(\n userAgentOrOptions:\n | string\n | {\n userAgent?: string;\n userAgentMetadata?: Protocol.Emulation.UserAgentMetadata;\n platform?: string;\n },\n userAgentMetadata?: Protocol.Emulation.UserAgentMetadata,\n ): Promise<void> {\n if (typeof userAgentOrOptions === 'string') {\n return await this.#frameManager.networkManager.setUserAgent(\n userAgentOrOptions,\n userAgentMetadata,\n );\n } else {\n const userAgent =\n userAgentOrOptions.userAgent ?? (await this.browser().userAgent());\n return await this.#frameManager.networkManager.setUserAgent(\n userAgent,\n userAgentOrOptions.userAgentMetadata,\n userAgentOrOptions.platform,\n );\n }\n }\n\n override async metrics(): Promise<Metrics> {\n const response = await this.#primaryTargetClient.send(\n 'Performance.getMetrics',\n );\n return this.#buildMetricsObject(response.metrics);\n }\n\n override async captureHeapSnapshot(\n options: HeapSnapshotOptions,\n ): Promise<void> {\n const stream = environment.value.createWriteStream(options.path);\n const streamPromise = new Promise<void>((resolve, reject) => {\n stream.on('error', reject);\n stream.on('finish', resolve);\n });\n\n const client = this.#primaryTargetClient;\n await client.send('HeapProfiler.enable');\n await client.send('HeapProfiler.collectGarbage');\n\n using clientEmitter = new EventEmitter(client);\n\n clientEmitter.on('HeapProfiler.addHeapSnapshotChunk', event => {\n stream.write(event.chunk);\n });\n\n try {\n await client.send('HeapProfiler.takeHeapSnapshot', {\n reportProgress: false,\n });\n } finally {\n await client.send('HeapProfiler.disable');\n }\n\n stream.end();\n await streamPromise;\n }\n\n #emitMetrics(event: Protocol.Performance.MetricsEvent): void {\n this.emit(PageEvent.Metrics, {\n title: event.title,\n metrics: this.#buildMetricsObject(event.metrics),\n });\n }\n\n #buildMetricsObject(metrics?: Protocol.Performance.Metric[]): Metrics {\n const result: Record<\n Protocol.Performance.Metric['name'],\n Protocol.Performance.Metric['value']\n > = {};\n for (const metric of metrics || []) {\n if (supportedMetrics.has(metric.name)) {\n result[metric.name] = metric.value;\n }\n }\n return result;\n }\n\n #handleException(exception: Protocol.Runtime.ExceptionThrownEvent): void {\n this.emit(\n PageEvent.PageError,\n createClientError(exception.exceptionDetails),\n );\n }\n\n #onConsoleAPI(\n world: IsolatedWorld,\n event: Protocol.Runtime.ConsoleAPICalledEvent,\n values?: JSHandle[],\n ): void {\n if (!values) {\n values = event.args.map(arg => {\n return world.createCdpHandle(arg);\n });\n }\n\n const hasPageConsoleListeners = this.listenerCount(PageEvent.Console) > 0;\n const hasWorkerConsoleListeners =\n world.environment instanceof WebWorker &&\n world.environment.listenerCount(WebWorkerEvent.Console) > 0;\n\n if (!hasPageConsoleListeners) {\n if (!hasWorkerConsoleListeners) {\n // eslint-disable-next-line max-len -- The comment is long.\n // eslint-disable-next-line @puppeteer/use-using -- These are not owned by this function.\n for (const value of values) {\n void value.dispose().catch(error => {\n this.logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n }\n }\n return;\n }\n\n let targetId;\n if (world.environment.client instanceof CdpCDPSession) {\n targetId = world.environment.client.target()._targetId;\n }\n\n this.emit(PageEvent.Console, createConsoleMessage(event, values, targetId));\n }\n\n async #onBindingCalled(\n world: IsolatedWorld,\n event: Protocol.Runtime.BindingCalledEvent,\n ): Promise<void> {\n let payload: BindingPayload;\n try {\n payload = JSON.parse(event.payload);\n } catch {\n // The binding was either called by something in the page or it was\n // called before our wrapper was initialized.\n return;\n }\n const {type, name, seq, args, isTrivial} = payload;\n if (type !== 'exposedFun') {\n return;\n }\n\n const context = world.context;\n if (!context) {\n return;\n }\n\n const binding = this.#bindings.get(name);\n await binding?.run(context, seq, args, isTrivial);\n }\n\n #onDialog(event: Protocol.Page.JavascriptDialogOpeningEvent): void {\n const type = validateDialogType(event.type);\n const dialog = new CdpDialog(\n this.#primaryTargetClient,\n type,\n event.message,\n event.defaultPrompt,\n );\n this.emit(PageEvent.Dialog, dialog);\n }\n\n override async reload(options?: ReloadOptions): Promise<HTTPResponse | null> {\n const [result] = await Promise.all([\n this.waitForNavigation({\n ...options,\n ignoreSameDocumentNavigation: true,\n }),\n this.#primaryTargetClient.send('Page.reload', {\n ignoreCache: options?.ignoreCache ?? false,\n }),\n ]);\n\n return result;\n }\n\n override async createCDPSession(): Promise<CDPSession> {\n return await this.target().createCDPSession();\n }\n\n override async goBack(\n options: WaitForOptions = {},\n ): Promise<HTTPResponse | null> {\n return await this.#go(-1, options);\n }\n\n override async goForward(\n options: WaitForOptions = {},\n ): Promise<HTTPResponse | null> {\n return await this.#go(+1, options);\n }\n\n async #go(\n delta: number,\n options: WaitForOptions,\n ): Promise<HTTPResponse | null> {\n const history = await this.#primaryTargetClient.send(\n 'Page.getNavigationHistory',\n );\n const entry = history.entries[history.currentIndex + delta];\n if (!entry) {\n throw new Error('History entry to navigate to not found.');\n }\n const result = await Promise.all([\n this.waitForNavigation(options),\n this.#primaryTargetClient.send('Page.navigateToHistoryEntry', {\n entryId: entry.id,\n }),\n ]);\n return result[0];\n }\n\n override async bringToFront(): Promise<void> {\n await this.#primaryTargetClient.send('Page.bringToFront');\n }\n\n override async setJavaScriptEnabled(enabled: boolean): Promise<void> {\n return await this.#emulationManager.setJavaScriptEnabled(enabled);\n }\n\n override async setBypassCSP(enabled: boolean): Promise<void> {\n await this.#primaryTargetClient.send('Page.setBypassCSP', {enabled});\n }\n\n override async triggerExtensionAction(extension: Extension): Promise<void> {\n return await extension.triggerAction(this);\n }\n\n override async emulateMediaType(type?: string): Promise<void> {\n return await this.#emulationManager.emulateMediaType(type);\n }\n\n override async emulateCPUThrottling(factor: number | null): Promise<void> {\n return await this.#emulationManager.emulateCPUThrottling(factor);\n }\n\n override async emulateMediaFeatures(\n features?: MediaFeature[],\n ): Promise<void> {\n return await this.#emulationManager.emulateMediaFeatures(features);\n }\n\n override async emulateTimezone(timezoneId?: string): Promise<void> {\n return await this.#emulationManager.emulateTimezone(timezoneId);\n }\n\n override async emulateLocale(locale?: string): Promise<void> {\n await this.#emulationManager.emulateLocale(locale);\n await this.#frameManager.networkManager.setAcceptLanguage(locale);\n }\n\n override async emulateIdleState(overrides?: {\n isUserActive: boolean;\n isScreenUnlocked: boolean;\n }): Promise<void> {\n return await this.#emulationManager.emulateIdleState(overrides);\n }\n\n override async emulateVisionDeficiency(\n type?: Protocol.Emulation.SetEmulatedVisionDeficiencyRequest['type'],\n ): Promise<void> {\n return await this.#emulationManager.emulateVisionDeficiency(type);\n }\n\n override async setViewport(viewport: Viewport | null): Promise<void> {\n const needsReload = await this.#emulationManager.emulateViewport(viewport);\n this.#viewport = viewport;\n if (needsReload) {\n await this.reload();\n }\n }\n\n override viewport(): Viewport | null {\n return this.#viewport;\n }\n\n override async evaluateOnNewDocument<\n Params extends unknown[],\n Func extends (...args: Params) => unknown = (...args: Params) => unknown,\n >(\n pageFunction: Func | string,\n ...args: Params\n ): Promise<NewDocumentScriptEvaluation> {\n const source = evaluationString(pageFunction, ...args);\n return await this.#frameManager.evaluateOnNewDocument(source);\n }\n\n override async removeScriptToEvaluateOnNewDocument(\n identifier: string,\n ): Promise<void> {\n return await this.#frameManager.removeScriptToEvaluateOnNewDocument(\n identifier,\n );\n }\n\n override async setCacheEnabled(enabled = true): Promise<void> {\n await this.#frameManager.networkManager.setCacheEnabled(enabled);\n }\n\n override async _screenshot(\n options: Readonly<ScreenshotOptions>,\n ): Promise<string> {\n const {\n fromSurface,\n omitBackground,\n optimizeForSpeed,\n quality,\n clip: userClip,\n type,\n captureBeyondViewport,\n } = options;\n\n await using stack = new AsyncDisposableStack();\n if (omitBackground && (type === 'png' || type === 'webp')) {\n await this.#emulationManager.setTransparentBackgroundColor();\n stack.defer(async () => {\n await this.#emulationManager\n .resetDefaultBackgroundColor()\n .catch(error => {\n this.logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n });\n }\n\n let clip = userClip;\n if (clip && !captureBeyondViewport) {\n const viewport = await this.mainFrame()\n .isolatedRealm()\n .evaluate(() => {\n const {\n height,\n pageLeft: x,\n pageTop: y,\n width,\n } = window.visualViewport!;\n return {x, y, height, width};\n });\n clip = getIntersectionRect(clip, viewport);\n }\n\n const {data} = await this.#primaryTargetClient.send(\n 'Page.captureScreenshot',\n {\n format: type,\n optimizeForSpeed,\n fromSurface,\n ...(quality !== undefined ? {quality: Math.round(quality)} : {}),\n ...(clip ? {clip: {...clip, scale: clip.scale ?? 1}} : {}),\n captureBeyondViewport,\n },\n );\n return data;\n }\n\n override async createPDFStream(\n options: PDFOptions = {},\n ): Promise<ReadableStream<Uint8Array>> {\n const {timeout: ms = this._timeoutSettings.timeout()} = options;\n const {\n landscape,\n displayHeaderFooter,\n headerTemplate,\n footerTemplate,\n printBackground,\n scale,\n width: paperWidth,\n height: paperHeight,\n margin,\n pageRanges,\n preferCSSPageSize,\n omitBackground,\n tagged: generateTaggedPDF,\n outline: generateDocumentOutline,\n waitForFonts,\n } = parsePDFOptions(options);\n\n if (omitBackground) {\n await this.#emulationManager.setTransparentBackgroundColor();\n }\n\n if (waitForFonts) {\n await firstValueFrom(\n from(\n this.mainFrame()\n .isolatedRealm()\n .evaluate(() => {\n return document.fonts.ready;\n }),\n ).pipe(raceWith(timeout(ms))),\n );\n }\n\n const printCommandPromise = this.#primaryTargetClient.send(\n 'Page.printToPDF',\n {\n transferMode: 'ReturnAsStream',\n landscape,\n displayHeaderFooter,\n headerTemplate,\n footerTemplate,\n printBackground,\n scale,\n paperWidth,\n paperHeight,\n marginTop: margin.top,\n marginBottom: margin.bottom,\n marginLeft: margin.left,\n marginRight: margin.right,\n pageRanges,\n preferCSSPageSize,\n generateTaggedPDF,\n generateDocumentOutline,\n },\n );\n\n const result = await firstValueFrom(\n from(printCommandPromise).pipe(raceWith(timeout(ms))),\n );\n\n if (omitBackground) {\n await this.#emulationManager.resetDefaultBackgroundColor();\n }\n\n assert(result.stream, '`stream` is missing from `Page.printToPDF');\n return await getReadableFromProtocolStream(\n this.#primaryTargetClient,\n result.stream,\n );\n }\n\n override async pdf(options: PDFOptions = {}): Promise<Uint8Array> {\n const {path = undefined} = options;\n const readable = await this.createPDFStream(options);\n const typedArray = await getReadableAsTypedArray(\n readable,\n path,\n this.logger,\n );\n assert(typedArray, 'Could not create typed array');\n return typedArray;\n }\n\n override async close(\n options: {runBeforeUnload?: boolean} = {runBeforeUnload: undefined},\n ): Promise<void> {\n using _guard = await this.browserContext().waitForScreenshotOperations();\n const connection = this.#primaryTargetClient.connection();\n assert(\n connection,\n 'Connection closed. Most likely the page has been closed.',\n );\n const runBeforeUnload = !!options.runBeforeUnload;\n if (runBeforeUnload) {\n await this.#primaryTargetClient.send('Page.close');\n } else {\n await connection.send('Target.closeTarget', {\n targetId: this.#primaryTarget._targetId,\n });\n await this.#tabTarget._isClosedDeferred.valueOrThrow();\n }\n }\n\n override isClosed(): boolean {\n return this.#closed;\n }\n\n override get mouse(): CdpMouse {\n return this.#mouse;\n }\n\n /**\n * This method is typically coupled with an action that triggers a device\n * request from an api such as WebBluetooth.\n *\n * :::caution\n *\n * This must be called before the device request is made. It will not return a\n * currently active device prompt.\n *\n * :::\n *\n * @example\n *\n * ```ts\n * const [devicePrompt] = Promise.all([\n * page.waitForDevicePrompt(),\n * page.click('#connect-bluetooth'),\n * ]);\n * await devicePrompt.select(\n * await devicePrompt.waitForDevice(({name}) => name.includes('My Device')),\n * );\n * ```\n */\n override async waitForDevicePrompt(\n options: WaitTimeoutOptions = {},\n ): Promise<DeviceRequestPrompt> {\n return await this.mainFrame().waitForDevicePrompt(options);\n }\n\n override get bluetooth(): BluetoothEmulation {\n return this.#cdpBluetoothEmulation;\n }\n\n override extensionRealms(): Realm[] {\n return this.mainFrame().extensionRealms();\n }\n\n /**\n * @internal\n */\n override createScreenRecording(\n options: Readonly<RecordOptions>,\n ): CdpScreenRecording {\n return new CdpScreenRecording(this, options, this.logger);\n }\n}\n\nconst supportedMetrics = new Set<string>([\n 'Timestamp',\n 'Documents',\n 'Frames',\n 'JSEventListeners',\n 'Nodes',\n 'LayoutCount',\n 'RecalcStyleCount',\n 'LayoutDuration',\n 'RecalcStyleDuration',\n 'ScriptDuration',\n 'TaskDuration',\n 'JSHeapUsedSize',\n 'JSHeapTotalSize',\n]);\n\n/** @see https://w3c.github.io/webdriver-bidi/#rectangle-intersection */\nfunction getIntersectionRect(\n clip: Readonly<ScreenshotClip>,\n viewport: Readonly<Protocol.DOM.Rect>,\n): ScreenshotClip {\n // Note these will already be normalized.\n const x = Math.max(clip.x, viewport.x);\n const y = Math.max(clip.y, viewport.y);\n return {\n x,\n y,\n width: Math.max(\n Math.min(clip.x + clip.width, viewport.x + viewport.width) - x,\n 0,\n ),\n height: Math.max(\n Math.min(clip.y + clip.height, viewport.y + viewport.height) - y,\n 0,\n ),\n };\n}\n\n/**\n * @internal\n */\nexport function convertCookiesPartitionKeyFromPuppeteerToCdp(\n partitionKey: CookiePartitionKey | string | undefined,\n): Protocol.Network.CookiePartitionKey | undefined {\n if (partitionKey === undefined) {\n return undefined;\n }\n if (typeof partitionKey === 'string') {\n return {\n topLevelSite: partitionKey,\n hasCrossSiteAncestor: false,\n };\n }\n return {\n topLevelSite: partitionKey.sourceOrigin,\n hasCrossSiteAncestor: partitionKey.hasCrossSiteAncestor ?? false,\n };\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {CreatePageOptions} from '../api/Browser.js';\nimport {\n WEB_PERMISSION_TO_PROTOCOL_PERMISSION,\n type Permission,\n type PermissionDescriptor,\n type PermissionState,\n} from '../api/Browser.js';\nimport {BrowserContext} from '../api/BrowserContext.js';\nimport type {Page} from '../api/Page.js';\nimport type {Cookie, CookieData} from '../common/Cookie.js';\nimport type {Logger} from '../common/Debug.js';\nimport type {DownloadBehavior} from '../common/DownloadBehavior.js';\nimport {assert} from '../util/assert.js';\n\nimport type {CdpBrowser} from './Browser.js';\nimport type {Connection} from './Connection.js';\nimport {\n convertCookiesPartitionKeyFromPuppeteerToCdp,\n convertSameSiteFromPuppeteerToCdp,\n} from './Page.js';\nimport type {CdpTarget} from './Target.js';\n\n/**\n * @internal\n */\nexport class CdpBrowserContext extends BrowserContext {\n #connection: Connection;\n #browser: CdpBrowser;\n #id?: string;\n\n constructor(\n connection: Connection,\n browser: CdpBrowser,\n contextId: string | undefined = undefined,\n logger: Logger,\n ) {\n super(logger);\n this.#connection = connection;\n this.#browser = browser;\n this.#id = contextId;\n }\n\n override get id(): string | undefined {\n return this.#id;\n }\n\n override targets(): CdpTarget[] {\n return this.#browser.targets().filter(target => {\n return target.browserContext() === this;\n });\n }\n\n override async pages(includeAll = false): Promise<Page[]> {\n const pages = await Promise.all(\n this.targets()\n .filter(target => {\n return (\n target.type() === 'page' ||\n ((target.type() === 'other' || includeAll) &&\n this.#browser._getIsPageTargetCallback()?.(target))\n );\n })\n .map(target => {\n return target.page();\n }),\n );\n return pages.filter(page => {\n return !!page;\n });\n }\n\n override async overridePermissions(\n origin: string,\n permissions: Permission[],\n ): Promise<void> {\n const protocolPermissions = permissions.map(permission => {\n const protocolPermission =\n WEB_PERMISSION_TO_PROTOCOL_PERMISSION.get(permission);\n if (!protocolPermission) {\n throw new Error('Unknown permission: ' + permission);\n }\n return protocolPermission;\n });\n await this.#connection.send('Browser.grantPermissions', {\n origin,\n browserContextId: this.#id || undefined,\n permissions: protocolPermissions,\n });\n }\n\n override async setPermission(\n origin: string | '*',\n ...permissions: Array<{\n permission: PermissionDescriptor;\n state: PermissionState;\n }>\n ): Promise<void> {\n await Promise.all(\n permissions.map(async permission => {\n const protocolPermission: Protocol.Browser.PermissionDescriptor = {\n name: permission.permission.name,\n userVisibleOnly: permission.permission.userVisibleOnly,\n sysex: permission.permission.sysex,\n allowWithoutSanitization:\n permission.permission.allowWithoutSanitization,\n panTiltZoom: permission.permission.panTiltZoom,\n };\n await this.#connection.send('Browser.setPermission', {\n origin: origin === '*' ? undefined : origin,\n browserContextId: this.#id || undefined,\n permission: protocolPermission,\n setting: permission.state as Protocol.Browser.PermissionSetting,\n });\n }),\n );\n }\n\n override async clearPermissionOverrides(): Promise<void> {\n await this.#connection.send('Browser.resetPermissions', {\n browserContextId: this.#id || undefined,\n });\n }\n\n override async newPage(options?: CreatePageOptions): Promise<Page> {\n using _guard = await this.waitForScreenshotOperations();\n return await this.#browser._createPageInContext(this.#id, options);\n }\n\n override browser(): CdpBrowser {\n return this.#browser;\n }\n\n override async close(): Promise<void> {\n assert(this.#id, 'Default BrowserContext cannot be closed!');\n await this.#browser._disposeContext(this.#id);\n }\n\n override async cookies(): Promise<Cookie[]> {\n const {cookies} = await this.#connection.send('Storage.getCookies', {\n browserContextId: this.#id,\n });\n return cookies.map(cookie => {\n return {\n ...cookie,\n partitionKey: cookie.partitionKey\n ? {\n sourceOrigin: cookie.partitionKey.topLevelSite,\n hasCrossSiteAncestor: cookie.partitionKey.hasCrossSiteAncestor,\n }\n : undefined,\n };\n });\n }\n\n override async setCookie(...cookies: CookieData[]): Promise<void> {\n return await this.#connection.send('Storage.setCookies', {\n browserContextId: this.#id,\n cookies: cookies.map(cookie => {\n return {\n ...cookie,\n partitionKey: convertCookiesPartitionKeyFromPuppeteerToCdp(\n cookie.partitionKey,\n ),\n sameSite: convertSameSiteFromPuppeteerToCdp(cookie.sameSite),\n };\n }),\n });\n }\n\n public async setDownloadBehavior(\n downloadBehavior: DownloadBehavior,\n ): Promise<void> {\n await this.#connection.send('Browser.setDownloadBehavior', {\n behavior: downloadBehavior.policy,\n downloadPath: downloadBehavior.downloadPath,\n browserContextId: this.#id,\n });\n }\n}\n","/**\n * @license\n * Copyright 2019 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {Browser} from '../api/Browser.js';\nimport type {BrowserContext} from '../api/BrowserContext.js';\nimport {PageEvent, type Page} from '../api/Page.js';\nimport {Target, TargetType} from '../api/Target.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport type {Viewport} from '../common/Viewport.js';\nimport {Deferred} from '../util/Deferred.js';\n\nimport type {CdpCDPSession} from './CdpSession.js';\nimport {CdpPage} from './Page.js';\nimport type {TargetManager} from './TargetManager.js';\nimport {CdpWebWorker} from './WebWorker.js';\n\n/**\n * @internal\n */\nexport enum InitializationStatus {\n SUCCESS = 'success',\n ABORTED = 'aborted',\n}\n\n/**\n * @internal\n */\nexport class CdpTarget extends Target {\n #browserContext?: BrowserContext;\n #session?: CdpCDPSession;\n #targetInfo: Protocol.Target.TargetInfo;\n #targetManager?: TargetManager;\n #sessionFactory:\n ((isAutoAttachEmulated: boolean) => Promise<CdpCDPSession>) | undefined;\n #logger: Logger;\n #childTargets = new Set<CdpTarget>();\n _initializedDeferred = Deferred.create<InitializationStatus>();\n _isClosedDeferred = Deferred.create<void>();\n _targetId: string;\n _asPagePromise?: Promise<Page>;\n /** @internal */\n pagePromise?: Promise<Page>;\n\n /**\n * To initialize the target for use, call initialize.\n *\n * @internal\n */\n constructor(\n targetInfo: Protocol.Target.TargetInfo,\n session: CdpCDPSession | undefined,\n browserContext: BrowserContext | undefined,\n targetManager: TargetManager | undefined,\n sessionFactory:\n ((isAutoAttachEmulated: boolean) => Promise<CdpCDPSession>) | undefined,\n logger: Logger,\n ) {\n super(logger);\n this.#session = session;\n this.#targetManager = targetManager;\n this.#targetInfo = targetInfo;\n this.#browserContext = browserContext;\n this._targetId = targetInfo.targetId;\n this.#sessionFactory = sessionFactory;\n this.#logger = logger;\n if (this.#session) {\n this.#session.setTarget(this);\n }\n }\n\n override async asPage(): Promise<Page> {\n if (this.pagePromise) {\n const page = await this.pagePromise;\n if (page) {\n return page;\n }\n }\n if (!this._asPagePromise) {\n const session = this._session();\n this._asPagePromise = (\n session\n ? Promise.resolve(session)\n : this._sessionFactory()(/* isAutoAttachEmulated=*/ false)\n ).then(client => {\n return CdpPage._create(client, this, null, this.#logger);\n });\n }\n return (await this._asPagePromise) ?? null;\n }\n\n _subtype(): string | undefined {\n return this.#targetInfo.subtype;\n }\n\n _session(): CdpCDPSession | undefined {\n return this.#session;\n }\n\n _addChildTarget(target: CdpTarget): void {\n this.#childTargets.add(target);\n }\n\n _removeChildTarget(target: CdpTarget): void {\n this.#childTargets.delete(target);\n }\n\n _childTargets(): ReadonlySet<CdpTarget> {\n return this.#childTargets;\n }\n\n protected _sessionFactory(): (\n isAutoAttachEmulated: boolean,\n ) => Promise<CdpCDPSession> {\n if (!this.#sessionFactory) {\n throw new Error('sessionFactory is not initialized');\n }\n return this.#sessionFactory;\n }\n\n override createCDPSession(): Promise<CdpCDPSession> {\n if (!this.#sessionFactory) {\n throw new Error('sessionFactory is not initialized');\n }\n return this.#sessionFactory(false).then(session => {\n session.setTarget(this);\n return session;\n });\n }\n\n override url(): string {\n return this.#targetInfo.url;\n }\n\n override type(): TargetType {\n const type = this.#targetInfo.type;\n switch (type) {\n case 'page':\n return TargetType.PAGE;\n case 'background_page':\n return TargetType.BACKGROUND_PAGE;\n case 'service_worker':\n return TargetType.SERVICE_WORKER;\n case 'shared_worker':\n return TargetType.SHARED_WORKER;\n case 'browser':\n return TargetType.BROWSER;\n case 'webview':\n return TargetType.WEBVIEW;\n case 'tab':\n return TargetType.TAB;\n default:\n return TargetType.OTHER;\n }\n }\n\n _targetManager(): TargetManager {\n if (!this.#targetManager) {\n throw new Error('targetManager is not initialized');\n }\n return this.#targetManager;\n }\n\n _getTargetInfo(): Protocol.Target.TargetInfo {\n return this.#targetInfo;\n }\n\n override browser(): Browser {\n if (!this.#browserContext) {\n throw new Error('browserContext is not initialized');\n }\n return this.#browserContext.browser();\n }\n\n override browserContext(): BrowserContext {\n if (!this.#browserContext) {\n throw new Error('browserContext is not initialized');\n }\n return this.#browserContext;\n }\n\n override opener(): Target | undefined {\n const {openerId} = this.#targetInfo;\n if (!openerId) {\n return;\n }\n return this.browser()\n .targets()\n .find(target => {\n return (target as CdpTarget)._targetId === openerId;\n });\n }\n\n _targetInfoChanged(targetInfo: Protocol.Target.TargetInfo): void {\n this.#targetInfo = targetInfo;\n this._checkIfInitialized();\n }\n\n _initialize(): void {\n this._initializedDeferred.resolve(InitializationStatus.SUCCESS);\n }\n\n _isTargetExposed(): boolean {\n return this.type() !== TargetType.TAB && !this._subtype();\n }\n\n protected _checkIfInitialized(): void {\n if (!this._initializedDeferred.resolved()) {\n this._initializedDeferred.resolve(InitializationStatus.SUCCESS);\n }\n }\n}\n\n/**\n * @internal\n */\nexport class PageTarget extends CdpTarget {\n #defaultViewport?: Viewport;\n\n constructor(\n targetInfo: Protocol.Target.TargetInfo,\n session: CdpCDPSession | undefined,\n browserContext: BrowserContext,\n targetManager: TargetManager,\n sessionFactory: (isAutoAttachEmulated: boolean) => Promise<CdpCDPSession>,\n defaultViewport: Viewport | null,\n logger: Logger,\n ) {\n super(\n targetInfo,\n session,\n browserContext,\n targetManager,\n sessionFactory,\n logger,\n );\n this.#defaultViewport = defaultViewport ?? undefined;\n }\n\n override _initialize(): void {\n void this._initializedDeferred\n .valueOrThrow()\n .then(async result => {\n if (result === InitializationStatus.ABORTED) {\n return;\n }\n const opener = this.opener();\n if (!(opener instanceof PageTarget)) {\n return;\n }\n if (!opener || !opener.pagePromise || this.type() !== 'page') {\n return true;\n }\n const openerPage = await opener.pagePromise;\n if (!openerPage.listenerCount(PageEvent.Popup)) {\n return true;\n }\n const popupPage = await this.page();\n openerPage.emit(PageEvent.Popup, popupPage);\n return true;\n })\n .catch(error => {\n this.logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n this._checkIfInitialized();\n }\n\n override async page(): Promise<Page | null> {\n if (!this.pagePromise) {\n const session = this._session();\n this.pagePromise = (\n session\n ? Promise.resolve(session)\n : this._sessionFactory()(/* isAutoAttachEmulated=*/ false)\n ).then(client => {\n return CdpPage._create(\n client,\n this,\n this.#defaultViewport ?? null,\n this.logger,\n );\n });\n }\n return (await this.pagePromise) ?? null;\n }\n\n override _checkIfInitialized(): void {\n if (this._initializedDeferred.resolved()) {\n return;\n }\n if (this._getTargetInfo().url !== '') {\n this._initializedDeferred.resolve(InitializationStatus.SUCCESS);\n }\n }\n}\n\n/**\n * @internal\n */\nexport class DevToolsTarget extends PageTarget {}\n\n/**\n * @internal\n */\nexport class WorkerTarget extends CdpTarget {\n #workerPromise?: Promise<CdpWebWorker>;\n\n override async worker(): Promise<CdpWebWorker | null> {\n if (!this.#workerPromise) {\n const session = this._session();\n this.#workerPromise = (\n session\n ? Promise.resolve(session)\n : this._sessionFactory()(/* isAutoAttachEmulated=*/ false)\n ).then(client => {\n return new CdpWebWorker(\n client,\n this._getTargetInfo().url,\n this._targetId,\n this.type(),\n () => {} /* exceptionThrown */,\n undefined /* networkManager */,\n this.logger,\n );\n });\n }\n return await this.#workerPromise;\n }\n}\n\n/**\n * @internal\n */\nexport class OtherTarget extends CdpTarget {}\n","/**\nCopyright 2020 Intel Corporation\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\n*/\n// node_modules/urlpattern-polyfill/dist/urlpattern.js\nvar Pe = Object.defineProperty;\nvar a = (e, t) => Pe(e, \"name\", { value: t, configurable: true });\nvar P = class {\n type = 3;\n name = \"\";\n prefix = \"\";\n value = \"\";\n suffix = \"\";\n modifier = 3;\n constructor(t, r, n, c, l, f) {\n this.type = t, this.name = r, this.prefix = n, this.value = c, this.suffix = l, this.modifier = f;\n }\n hasCustomName() {\n return this.name !== \"\" && typeof this.name != \"number\";\n }\n};\na(P, \"Part\");\nvar Re = /[$_\\p{ID_Start}]/u;\nvar Ee = /[$_\\u200C\\u200D\\p{ID_Continue}]/u;\nvar v = \".*\";\nfunction Oe(e, t) {\n return (t ? /^[\\x00-\\xFF]*$/ : /^[\\x00-\\x7F]*$/).test(e);\n}\na(Oe, \"isASCII\");\nfunction D(e, t = false) {\n let r = [], n = 0;\n for (; n < e.length; ) {\n let c = e[n], l = a(function(f) {\n if (!t) throw new TypeError(f);\n r.push({ type: \"INVALID_CHAR\", index: n, value: e[n++] });\n }, \"ErrorOrInvalid\");\n if (c === \"*\") {\n r.push({ type: \"ASTERISK\", index: n, value: e[n++] });\n continue;\n }\n if (c === \"+\" || c === \"?\") {\n r.push({ type: \"OTHER_MODIFIER\", index: n, value: e[n++] });\n continue;\n }\n if (c === \"\\\\\") {\n r.push({ type: \"ESCAPED_CHAR\", index: n++, value: e[n++] });\n continue;\n }\n if (c === \"{\") {\n r.push({ type: \"OPEN\", index: n, value: e[n++] });\n continue;\n }\n if (c === \"}\") {\n r.push({ type: \"CLOSE\", index: n, value: e[n++] });\n continue;\n }\n if (c === \":\") {\n let f = \"\", s = n + 1;\n for (; s < e.length; ) {\n let i = e.substr(s, 1);\n if (s === n + 1 && Re.test(i) || s !== n + 1 && Ee.test(i)) {\n f += e[s++];\n continue;\n }\n break;\n }\n if (!f) {\n l(`Missing parameter name at ${n}`);\n continue;\n }\n r.push({ type: \"NAME\", index: n, value: f }), n = s;\n continue;\n }\n if (c === \"(\") {\n let f = 1, s = \"\", i = n + 1, o = false;\n if (e[i] === \"?\") {\n l(`Pattern cannot start with \"?\" at ${i}`);\n continue;\n }\n for (; i < e.length; ) {\n if (!Oe(e[i], false)) {\n l(`Invalid character '${e[i]}' at ${i}.`), o = true;\n break;\n }\n if (e[i] === \"\\\\\") {\n s += e[i++] + e[i++];\n continue;\n }\n if (e[i] === \")\") {\n if (f--, f === 0) {\n i++;\n break;\n }\n } else if (e[i] === \"(\" && (f++, e[i + 1] !== \"?\")) {\n l(`Capturing groups are not allowed at ${i}`), o = true;\n break;\n }\n s += e[i++];\n }\n if (o) continue;\n if (f) {\n l(`Unbalanced pattern at ${n}`);\n continue;\n }\n if (!s) {\n l(`Missing pattern at ${n}`);\n continue;\n }\n r.push({ type: \"REGEX\", index: n, value: s }), n = i;\n continue;\n }\n r.push({ type: \"CHAR\", index: n, value: e[n++] });\n }\n return r.push({ type: \"END\", index: n, value: \"\" }), r;\n}\na(D, \"lexer\");\nfunction F(e, t = {}) {\n let r = D(e);\n t.delimiter ??= \"/#?\", t.prefixes ??= \"./\";\n let n = `[^${x(t.delimiter)}]+?`, c = [], l = 0, f = 0, s = \"\", i = /* @__PURE__ */ new Set(), o = a((u) => {\n if (f < r.length && r[f].type === u) return r[f++].value;\n }, \"tryConsume\"), h = a(() => o(\"OTHER_MODIFIER\") ?? o(\"ASTERISK\"), \"tryConsumeModifier\"), p = a((u) => {\n let d = o(u);\n if (d !== void 0) return d;\n let { type: g, index: y } = r[f];\n throw new TypeError(`Unexpected ${g} at ${y}, expected ${u}`);\n }, \"mustConsume\"), A = a(() => {\n let u = \"\", d;\n for (; d = o(\"CHAR\") ?? o(\"ESCAPED_CHAR\"); ) u += d;\n return u;\n }, \"consumeText\"), xe = a((u) => u, \"DefaultEncodePart\"), N = t.encodePart || xe, H = \"\", $ = a((u) => {\n H += u;\n }, \"appendToPendingFixedValue\"), M = a(() => {\n H.length && (c.push(new P(3, \"\", \"\", N(H), \"\", 3)), H = \"\");\n }, \"maybeAddPartFromPendingFixedValue\"), X = a((u, d, g, y, Z) => {\n let m = 3;\n switch (Z) {\n case \"?\":\n m = 1;\n break;\n case \"*\":\n m = 0;\n break;\n case \"+\":\n m = 2;\n break;\n }\n if (!d && !g && m === 3) {\n $(u);\n return;\n }\n if (M(), !d && !g) {\n if (!u) return;\n c.push(new P(3, \"\", \"\", N(u), \"\", m));\n return;\n }\n let S;\n g ? g === \"*\" ? S = v : S = g : S = n;\n let k = 2;\n S === n ? (k = 1, S = \"\") : S === v && (k = 0, S = \"\");\n let E;\n if (d ? E = d : g && (E = l++), i.has(E)) throw new TypeError(`Duplicate name '${E}'.`);\n i.add(E), c.push(new P(k, E, N(u), S, N(y), m));\n }, \"addPart\");\n for (; f < r.length; ) {\n let u = o(\"CHAR\"), d = o(\"NAME\"), g = o(\"REGEX\");\n if (!d && !g && (g = o(\"ASTERISK\")), d || g) {\n let m = u ?? \"\";\n t.prefixes.indexOf(m) === -1 && ($(m), m = \"\"), M();\n let S = h();\n X(m, d, g, \"\", S);\n continue;\n }\n let y = u ?? o(\"ESCAPED_CHAR\");\n if (y) {\n $(y);\n continue;\n }\n if (o(\"OPEN\")) {\n let m = A(), S = o(\"NAME\"), k = o(\"REGEX\");\n !S && !k && (k = o(\"ASTERISK\"));\n let E = A();\n p(\"CLOSE\");\n let be = h();\n X(m, S, k, E, be);\n continue;\n }\n M(), p(\"END\");\n }\n return c;\n}\na(F, \"parse\");\nfunction x(e) {\n return e.replace(/([.+*?^${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\na(x, \"escapeString\");\nfunction B(e) {\n return e && e.ignoreCase ? \"ui\" : \"u\";\n}\na(B, \"flags\");\nfunction q(e, t, r) {\n return W(F(e, r), t, r);\n}\na(q, \"stringToRegexp\");\nfunction T(e) {\n switch (e) {\n case 0:\n return \"*\";\n case 1:\n return \"?\";\n case 2:\n return \"+\";\n case 3:\n return \"\";\n }\n}\na(T, \"modifierToString\");\nfunction W(e, t, r = {}) {\n r.delimiter ??= \"/#?\", r.prefixes ??= \"./\", r.sensitive ??= false, r.strict ??= false, r.end ??= true, r.start ??= true, r.endsWith = \"\";\n let n = r.start ? \"^\" : \"\";\n for (let s of e) {\n if (s.type === 3) {\n s.modifier === 3 ? n += x(s.value) : n += `(?:${x(s.value)})${T(s.modifier)}`;\n continue;\n }\n t && t.push(s.name);\n let i = `[^${x(r.delimiter)}]+?`, o = s.value;\n if (s.type === 1 ? o = i : s.type === 0 && (o = v), !s.prefix.length && !s.suffix.length) {\n s.modifier === 3 || s.modifier === 1 ? n += `(${o})${T(s.modifier)}` : n += `((?:${o})${T(s.modifier)})`;\n continue;\n }\n if (s.modifier === 3 || s.modifier === 1) {\n n += `(?:${x(s.prefix)}(${o})${x(s.suffix)})`, n += T(s.modifier);\n continue;\n }\n n += `(?:${x(s.prefix)}`, n += `((?:${o})(?:`, n += x(s.suffix), n += x(s.prefix), n += `(?:${o}))*)${x(s.suffix)})`, s.modifier === 0 && (n += \"?\");\n }\n let c = `[${x(r.endsWith)}]|$`, l = `[${x(r.delimiter)}]`;\n if (r.end) return r.strict || (n += `${l}?`), r.endsWith.length ? n += `(?=${c})` : n += \"$\", new RegExp(n, B(r));\n r.strict || (n += `(?:${l}(?=${c}))?`);\n let f = false;\n if (e.length) {\n let s = e[e.length - 1];\n s.type === 3 && s.modifier === 3 && (f = r.delimiter.indexOf(s) > -1);\n }\n return f || (n += `(?=${l}|${c})`), new RegExp(n, B(r));\n}\na(W, \"partsToRegexp\");\nvar b = { delimiter: \"\", prefixes: \"\", sensitive: true, strict: true };\nvar J = { delimiter: \".\", prefixes: \"\", sensitive: true, strict: true };\nvar Q = { delimiter: \"/\", prefixes: \"/\", sensitive: true, strict: true };\nfunction ee(e, t) {\n return e.length ? e[0] === \"/\" ? true : !t || e.length < 2 ? false : (e[0] == \"\\\\\" || e[0] == \"{\") && e[1] == \"/\" : false;\n}\na(ee, \"isAbsolutePathname\");\nfunction te(e, t) {\n return e.startsWith(t) ? e.substring(t.length, e.length) : e;\n}\na(te, \"maybeStripPrefix\");\nfunction ke(e, t) {\n return e.endsWith(t) ? e.substr(0, e.length - t.length) : e;\n}\na(ke, \"maybeStripSuffix\");\nfunction _(e) {\n return !e || e.length < 2 ? false : e[0] === \"[\" || (e[0] === \"\\\\\" || e[0] === \"{\") && e[1] === \"[\";\n}\na(_, \"treatAsIPv6Hostname\");\nvar re = [\"ftp\", \"file\", \"http\", \"https\", \"ws\", \"wss\"];\nfunction U(e) {\n if (!e) return true;\n for (let t of re) if (e.test(t)) return true;\n return false;\n}\na(U, \"isSpecialScheme\");\nfunction ne(e, t) {\n if (e = te(e, \"#\"), t || e === \"\") return e;\n let r = new URL(\"https://example.com\");\n return r.hash = e, r.hash ? r.hash.substring(1, r.hash.length) : \"\";\n}\na(ne, \"canonicalizeHash\");\nfunction se(e, t) {\n if (e = te(e, \"?\"), t || e === \"\") return e;\n let r = new URL(\"https://example.com\");\n return r.search = e, r.search ? r.search.substring(1, r.search.length) : \"\";\n}\na(se, \"canonicalizeSearch\");\nfunction ie(e, t) {\n return t || e === \"\" ? e : _(e) ? K(e) : j(e);\n}\na(ie, \"canonicalizeHostname\");\nfunction ae(e, t) {\n if (t || e === \"\") return e;\n let r = new URL(\"https://example.com\");\n return r.password = e, r.password;\n}\na(ae, \"canonicalizePassword\");\nfunction oe(e, t) {\n if (t || e === \"\") return e;\n let r = new URL(\"https://example.com\");\n return r.username = e, r.username;\n}\na(oe, \"canonicalizeUsername\");\nfunction ce(e, t, r) {\n if (r || e === \"\") return e;\n if (t && !re.includes(t)) return new URL(`${t}:${e}`).pathname;\n let n = e[0] == \"/\";\n return e = new URL(n ? e : \"/-\" + e, \"https://example.com\").pathname, n || (e = e.substring(2, e.length)), e;\n}\na(ce, \"canonicalizePathname\");\nfunction le(e, t, r) {\n return z(t) === e && (e = \"\"), r || e === \"\" ? e : G(e);\n}\na(le, \"canonicalizePort\");\nfunction fe(e, t) {\n return e = ke(e, \":\"), t || e === \"\" ? e : w(e);\n}\na(fe, \"canonicalizeProtocol\");\nfunction z(e) {\n switch (e) {\n case \"ws\":\n case \"http\":\n return \"80\";\n case \"wws\":\n case \"https\":\n return \"443\";\n case \"ftp\":\n return \"21\";\n default:\n return \"\";\n }\n}\na(z, \"defaultPortForProtocol\");\nfunction w(e) {\n if (e === \"\") return e;\n if (/^[-+.A-Za-z0-9]*$/.test(e)) return e.toLowerCase();\n throw new TypeError(`Invalid protocol '${e}'.`);\n}\na(w, \"protocolEncodeCallback\");\nfunction he(e) {\n if (e === \"\") return e;\n let t = new URL(\"https://example.com\");\n return t.username = e, t.username;\n}\na(he, \"usernameEncodeCallback\");\nfunction ue(e) {\n if (e === \"\") return e;\n let t = new URL(\"https://example.com\");\n return t.password = e, t.password;\n}\na(ue, \"passwordEncodeCallback\");\nfunction j(e) {\n if (e === \"\") return e;\n if (/[\\t\\n\\r #%/:<>?@[\\]^\\\\|]/g.test(e)) throw new TypeError(`Invalid hostname '${e}'`);\n let t = new URL(\"https://example.com\");\n return t.hostname = e, t.hostname;\n}\na(j, \"hostnameEncodeCallback\");\nfunction K(e) {\n if (e === \"\") return e;\n if (/[^0-9a-fA-F[\\]:]/g.test(e)) throw new TypeError(`Invalid IPv6 hostname '${e}'`);\n return e.toLowerCase();\n}\na(K, \"ipv6HostnameEncodeCallback\");\nfunction G(e) {\n if (e === \"\" || /^[0-9]*$/.test(e) && parseInt(e) <= 65535) return e;\n throw new TypeError(`Invalid port '${e}'.`);\n}\na(G, \"portEncodeCallback\");\nfunction de(e) {\n if (e === \"\") return e;\n let t = new URL(\"https://example.com\");\n return t.pathname = e[0] !== \"/\" ? \"/-\" + e : e, e[0] !== \"/\" ? t.pathname.substring(2, t.pathname.length) : t.pathname;\n}\na(de, \"standardURLPathnameEncodeCallback\");\nfunction pe(e) {\n return e === \"\" ? e : new URL(`data:${e}`).pathname;\n}\na(pe, \"pathURLPathnameEncodeCallback\");\nfunction ge(e) {\n if (e === \"\") return e;\n let t = new URL(\"https://example.com\");\n return t.search = e, t.search.substring(1, t.search.length);\n}\na(ge, \"searchEncodeCallback\");\nfunction me(e) {\n if (e === \"\") return e;\n let t = new URL(\"https://example.com\");\n return t.hash = e, t.hash.substring(1, t.hash.length);\n}\na(me, \"hashEncodeCallback\");\nvar C = class {\n #i;\n #n = [];\n #t = {};\n #e = 0;\n #s = 1;\n #l = 0;\n #o = 0;\n #d = 0;\n #p = 0;\n #g = false;\n constructor(t) {\n this.#i = t;\n }\n get result() {\n return this.#t;\n }\n parse() {\n for (this.#n = D(this.#i, true); this.#e < this.#n.length; this.#e += this.#s) {\n if (this.#s = 1, this.#n[this.#e].type === \"END\") {\n if (this.#o === 0) {\n this.#b(), this.#f() ? this.#r(9, 1) : this.#h() ? this.#r(8, 1) : this.#r(7, 0);\n continue;\n } else if (this.#o === 2) {\n this.#u(5);\n continue;\n }\n this.#r(10, 0);\n break;\n }\n if (this.#d > 0) if (this.#A()) this.#d -= 1;\n else continue;\n if (this.#T()) {\n this.#d += 1;\n continue;\n }\n switch (this.#o) {\n case 0:\n this.#P() && this.#u(1);\n break;\n case 1:\n if (this.#P()) {\n this.#C();\n let t = 7, r = 1;\n this.#E() ? (t = 2, r = 3) : this.#g && (t = 2), this.#r(t, r);\n }\n break;\n case 2:\n this.#S() ? this.#u(3) : (this.#x() || this.#h() || this.#f()) && this.#u(5);\n break;\n case 3:\n this.#O() ? this.#r(4, 1) : this.#S() && this.#r(5, 1);\n break;\n case 4:\n this.#S() && this.#r(5, 1);\n break;\n case 5:\n this.#y() ? this.#p += 1 : this.#w() && (this.#p -= 1), this.#k() && !this.#p ? this.#r(6, 1) : this.#x() ? this.#r(7, 0) : this.#h() ? this.#r(8, 1) : this.#f() && this.#r(9, 1);\n break;\n case 6:\n this.#x() ? this.#r(7, 0) : this.#h() ? this.#r(8, 1) : this.#f() && this.#r(9, 1);\n break;\n case 7:\n this.#h() ? this.#r(8, 1) : this.#f() && this.#r(9, 1);\n break;\n case 8:\n this.#f() && this.#r(9, 1);\n break;\n case 9:\n break;\n case 10:\n break;\n }\n }\n this.#t.hostname !== void 0 && this.#t.port === void 0 && (this.#t.port = \"\");\n }\n #r(t, r) {\n switch (this.#o) {\n case 0:\n break;\n case 1:\n this.#t.protocol = this.#c();\n break;\n case 2:\n break;\n case 3:\n this.#t.username = this.#c();\n break;\n case 4:\n this.#t.password = this.#c();\n break;\n case 5:\n this.#t.hostname = this.#c();\n break;\n case 6:\n this.#t.port = this.#c();\n break;\n case 7:\n this.#t.pathname = this.#c();\n break;\n case 8:\n this.#t.search = this.#c();\n break;\n case 9:\n this.#t.hash = this.#c();\n break;\n case 10:\n break;\n }\n this.#o !== 0 && t !== 10 && ([1, 2, 3, 4].includes(this.#o) && [6, 7, 8, 9].includes(t) && (this.#t.hostname ??= \"\"), [1, 2, 3, 4, 5, 6].includes(this.#o) && [8, 9].includes(t) && (this.#t.pathname ??= this.#g ? \"/\" : \"\"), [1, 2, 3, 4, 5, 6, 7].includes(this.#o) && t === 9 && (this.#t.search ??= \"\")), this.#R(t, r);\n }\n #R(t, r) {\n this.#o = t, this.#l = this.#e + r, this.#e += r, this.#s = 0;\n }\n #b() {\n this.#e = this.#l, this.#s = 0;\n }\n #u(t) {\n this.#b(), this.#o = t;\n }\n #m(t) {\n return t < 0 && (t = this.#n.length - t), t < this.#n.length ? this.#n[t] : this.#n[this.#n.length - 1];\n }\n #a(t, r) {\n let n = this.#m(t);\n return n.value === r && (n.type === \"CHAR\" || n.type === \"ESCAPED_CHAR\" || n.type === \"INVALID_CHAR\");\n }\n #P() {\n return this.#a(this.#e, \":\");\n }\n #E() {\n return this.#a(this.#e + 1, \"/\") && this.#a(this.#e + 2, \"/\");\n }\n #S() {\n return this.#a(this.#e, \"@\");\n }\n #O() {\n return this.#a(this.#e, \":\");\n }\n #k() {\n return this.#a(this.#e, \":\");\n }\n #x() {\n return this.#a(this.#e, \"/\");\n }\n #h() {\n if (this.#a(this.#e, \"?\")) return true;\n if (this.#n[this.#e].value !== \"?\") return false;\n let t = this.#m(this.#e - 1);\n return t.type !== \"NAME\" && t.type !== \"REGEX\" && t.type !== \"CLOSE\" && t.type !== \"ASTERISK\";\n }\n #f() {\n return this.#a(this.#e, \"#\");\n }\n #T() {\n return this.#n[this.#e].type == \"OPEN\";\n }\n #A() {\n return this.#n[this.#e].type == \"CLOSE\";\n }\n #y() {\n return this.#a(this.#e, \"[\");\n }\n #w() {\n return this.#a(this.#e, \"]\");\n }\n #c() {\n let t = this.#n[this.#e], r = this.#m(this.#l).index;\n return this.#i.substring(r, t.index);\n }\n #C() {\n let t = {};\n Object.assign(t, b), t.encodePart = w;\n let r = q(this.#c(), void 0, t);\n this.#g = U(r);\n }\n};\na(C, \"Parser\");\nvar V = [\"protocol\", \"username\", \"password\", \"hostname\", \"port\", \"pathname\", \"search\", \"hash\"];\nvar O = \"*\";\nfunction Se(e, t) {\n if (typeof e != \"string\") throw new TypeError(\"parameter 1 is not of type 'string'.\");\n let r = new URL(e, t);\n return { protocol: r.protocol.substring(0, r.protocol.length - 1), username: r.username, password: r.password, hostname: r.hostname, port: r.port, pathname: r.pathname, search: r.search !== \"\" ? r.search.substring(1, r.search.length) : void 0, hash: r.hash !== \"\" ? r.hash.substring(1, r.hash.length) : void 0 };\n}\na(Se, \"extractValues\");\nfunction R(e, t) {\n return t ? I(e) : e;\n}\na(R, \"processBaseURLString\");\nfunction L(e, t, r) {\n let n;\n if (typeof t.baseURL == \"string\") try {\n n = new URL(t.baseURL), t.protocol === void 0 && (e.protocol = R(n.protocol.substring(0, n.protocol.length - 1), r)), !r && t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && t.username === void 0 && (e.username = R(n.username, r)), !r && t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && t.username === void 0 && t.password === void 0 && (e.password = R(n.password, r)), t.protocol === void 0 && t.hostname === void 0 && (e.hostname = R(n.hostname, r)), t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && (e.port = R(n.port, r)), t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && t.pathname === void 0 && (e.pathname = R(n.pathname, r)), t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && t.pathname === void 0 && t.search === void 0 && (e.search = R(n.search.substring(1, n.search.length), r)), t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && t.pathname === void 0 && t.search === void 0 && t.hash === void 0 && (e.hash = R(n.hash.substring(1, n.hash.length), r));\n } catch {\n throw new TypeError(`invalid baseURL '${t.baseURL}'.`);\n }\n if (typeof t.protocol == \"string\" && (e.protocol = fe(t.protocol, r)), typeof t.username == \"string\" && (e.username = oe(t.username, r)), typeof t.password == \"string\" && (e.password = ae(t.password, r)), typeof t.hostname == \"string\" && (e.hostname = ie(t.hostname, r)), typeof t.port == \"string\" && (e.port = le(t.port, e.protocol, r)), typeof t.pathname == \"string\") {\n if (e.pathname = t.pathname, n && !ee(e.pathname, r)) {\n let c = n.pathname.lastIndexOf(\"/\");\n c >= 0 && (e.pathname = R(n.pathname.substring(0, c + 1), r) + e.pathname);\n }\n e.pathname = ce(e.pathname, e.protocol, r);\n }\n return typeof t.search == \"string\" && (e.search = se(t.search, r)), typeof t.hash == \"string\" && (e.hash = ne(t.hash, r)), e;\n}\na(L, \"applyInit\");\nfunction I(e) {\n return e.replace(/([+*?:{}()\\\\])/g, \"\\\\$1\");\n}\na(I, \"escapePatternString\");\nfunction Te(e) {\n return e.replace(/([.+*?^${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\na(Te, \"escapeRegexpString\");\nfunction Ae(e, t) {\n t.delimiter ??= \"/#?\", t.prefixes ??= \"./\", t.sensitive ??= false, t.strict ??= false, t.end ??= true, t.start ??= true, t.endsWith = \"\";\n let r = \".*\", n = `[^${Te(t.delimiter)}]+?`, c = /[$_\\u200C\\u200D\\p{ID_Continue}]/u, l = \"\";\n for (let f = 0; f < e.length; ++f) {\n let s = e[f];\n if (s.type === 3) {\n if (s.modifier === 3) {\n l += I(s.value);\n continue;\n }\n l += `{${I(s.value)}}${T(s.modifier)}`;\n continue;\n }\n let i = s.hasCustomName(), o = !!s.suffix.length || !!s.prefix.length && (s.prefix.length !== 1 || !t.prefixes.includes(s.prefix)), h = f > 0 ? e[f - 1] : null, p = f < e.length - 1 ? e[f + 1] : null;\n if (!o && i && s.type === 1 && s.modifier === 3 && p && !p.prefix.length && !p.suffix.length) if (p.type === 3) {\n let A = p.value.length > 0 ? p.value[0] : \"\";\n o = c.test(A);\n } else o = !p.hasCustomName();\n if (!o && !s.prefix.length && h && h.type === 3) {\n let A = h.value[h.value.length - 1];\n o = t.prefixes.includes(A);\n }\n o && (l += \"{\"), l += I(s.prefix), i && (l += `:${s.name}`), s.type === 2 ? l += `(${s.value})` : s.type === 1 ? i || (l += `(${n})`) : s.type === 0 && (!i && (!h || h.type === 3 || h.modifier !== 3 || o || s.prefix !== \"\") ? l += \"*\" : l += `(${r})`), s.type === 1 && i && s.suffix.length && c.test(s.suffix[0]) && (l += \"\\\\\"), l += I(s.suffix), o && (l += \"}\"), s.modifier !== 3 && (l += T(s.modifier));\n }\n return l;\n}\na(Ae, \"partsToPattern\");\nvar Y = class {\n #i;\n #n = {};\n #t = {};\n #e = {};\n #s = {};\n #l = false;\n constructor(t = {}, r, n) {\n try {\n let c;\n if (typeof r == \"string\" ? c = r : n = r, typeof t == \"string\") {\n let i = new C(t);\n if (i.parse(), t = i.result, c === void 0 && typeof t.protocol != \"string\") throw new TypeError(\"A base URL must be provided for a relative constructor string.\");\n t.baseURL = c;\n } else {\n if (!t || typeof t != \"object\") throw new TypeError(\"parameter 1 is not of type 'string' and cannot convert to dictionary.\");\n if (c) throw new TypeError(\"parameter 1 is not of type 'string'.\");\n }\n typeof n > \"u\" && (n = { ignoreCase: false });\n let l = { ignoreCase: n.ignoreCase === true }, f = { pathname: O, protocol: O, username: O, password: O, hostname: O, port: O, search: O, hash: O };\n this.#i = L(f, t, true), z(this.#i.protocol) === this.#i.port && (this.#i.port = \"\");\n let s;\n for (s of V) {\n if (!(s in this.#i)) continue;\n let i = {}, o = this.#i[s];\n switch (this.#t[s] = [], s) {\n case \"protocol\":\n Object.assign(i, b), i.encodePart = w;\n break;\n case \"username\":\n Object.assign(i, b), i.encodePart = he;\n break;\n case \"password\":\n Object.assign(i, b), i.encodePart = ue;\n break;\n case \"hostname\":\n Object.assign(i, J), _(o) ? i.encodePart = K : i.encodePart = j;\n break;\n case \"port\":\n Object.assign(i, b), i.encodePart = G;\n break;\n case \"pathname\":\n U(this.#n.protocol) ? (Object.assign(i, Q, l), i.encodePart = de) : (Object.assign(i, b, l), i.encodePart = pe);\n break;\n case \"search\":\n Object.assign(i, b, l), i.encodePart = ge;\n break;\n case \"hash\":\n Object.assign(i, b, l), i.encodePart = me;\n break;\n }\n try {\n this.#s[s] = F(o, i), this.#n[s] = W(this.#s[s], this.#t[s], i), this.#e[s] = Ae(this.#s[s], i), this.#l = this.#l || this.#s[s].some((h) => h.type === 2);\n } catch {\n throw new TypeError(`invalid ${s} pattern '${this.#i[s]}'.`);\n }\n }\n } catch (c) {\n throw new TypeError(`Failed to construct 'URLPattern': ${c.message}`);\n }\n }\n get [Symbol.toStringTag]() {\n return \"URLPattern\";\n }\n test(t = {}, r) {\n let n = { pathname: \"\", protocol: \"\", username: \"\", password: \"\", hostname: \"\", port: \"\", search: \"\", hash: \"\" };\n if (typeof t != \"string\" && r) throw new TypeError(\"parameter 1 is not of type 'string'.\");\n if (typeof t > \"u\") return false;\n try {\n typeof t == \"object\" ? n = L(n, t, false) : n = L(n, Se(t, r), false);\n } catch {\n return false;\n }\n let c;\n for (c of V) if (!this.#n[c].exec(n[c])) return false;\n return true;\n }\n exec(t = {}, r) {\n let n = { pathname: \"\", protocol: \"\", username: \"\", password: \"\", hostname: \"\", port: \"\", search: \"\", hash: \"\" };\n if (typeof t != \"string\" && r) throw new TypeError(\"parameter 1 is not of type 'string'.\");\n if (typeof t > \"u\") return;\n try {\n typeof t == \"object\" ? n = L(n, t, false) : n = L(n, Se(t, r), false);\n } catch {\n return null;\n }\n let c = {};\n r ? c.inputs = [t, r] : c.inputs = [t];\n let l;\n for (l of V) {\n let f = this.#n[l].exec(n[l]);\n if (!f) return null;\n let s = {};\n for (let [i, o] of this.#t[l].entries()) if (typeof o == \"string\" || typeof o == \"number\") {\n let h = f[i + 1];\n s[o] = h;\n }\n c[l] = { input: n[l] ?? \"\", groups: s };\n }\n return c;\n }\n static compareComponent(t, r, n) {\n let c = a((i, o) => {\n for (let h of [\"type\", \"modifier\", \"prefix\", \"value\", \"suffix\"]) {\n if (i[h] < o[h]) return -1;\n if (i[h] === o[h]) continue;\n return 1;\n }\n return 0;\n }, \"comparePart\"), l = new P(3, \"\", \"\", \"\", \"\", 3), f = new P(0, \"\", \"\", \"\", \"\", 3), s = a((i, o) => {\n let h = 0;\n for (; h < Math.min(i.length, o.length); ++h) {\n let p = c(i[h], o[h]);\n if (p) return p;\n }\n return i.length === o.length ? 0 : c(i[h] ?? l, o[h] ?? l);\n }, \"comparePartList\");\n return !r.#e[t] && !n.#e[t] ? 0 : r.#e[t] && !n.#e[t] ? s(r.#s[t], [f]) : !r.#e[t] && n.#e[t] ? s([f], n.#s[t]) : s(r.#s[t], n.#s[t]);\n }\n get protocol() {\n return this.#e.protocol;\n }\n get username() {\n return this.#e.username;\n }\n get password() {\n return this.#e.password;\n }\n get hostname() {\n return this.#e.hostname;\n }\n get port() {\n return this.#e.port;\n }\n get pathname() {\n return this.#e.pathname;\n }\n get search() {\n return this.#e.search;\n }\n get hash() {\n return this.#e.hash;\n }\n get hasRegExpGroups() {\n return this.#l;\n }\n};\na(Y, \"URLPattern\");\n\n// node_modules/urlpattern-polyfill/index.js\nif (!globalThis.URLPattern) {\n globalThis.URLPattern = Y;\n}\nexport {\n Y as URLPattern\n};\n","/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport {URLPattern} from '../../third_party/urlpattern-polyfill/urlpattern-polyfill.js';\nimport type {TargetFilterCallback} from '../api/Browser.js';\nimport type {CDPSession} from '../api/CDPSession.js';\nimport {CDPSessionEvent} from '../api/CDPSession.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {assert} from '../util/assert.js';\nimport {Deferred} from '../util/Deferred.js';\nimport {DisposableStack} from '../util/disposable.js';\n\nimport {CdpCDPSession} from './CdpSession.js';\nimport type {Connection} from './Connection.js';\nimport type {CdpTarget} from './Target.js';\nimport {InitializationStatus} from './Target.js';\nimport type {TargetManagerEvents} from './TargetManageEvents.js';\nimport {TargetManagerEvent} from './TargetManageEvents.js';\n\n/**\n * @internal\n */\nexport type TargetFactory = (\n targetInfo: Protocol.Target.TargetInfo,\n session?: CdpCDPSession,\n parentSession?: CdpCDPSession,\n) => CdpTarget;\n\nfunction isPageTargetBecomingPrimary(\n target: CdpTarget,\n newTargetInfo: Protocol.Target.TargetInfo,\n): boolean {\n return Boolean(target._subtype()) && !newTargetInfo.subtype;\n}\n\n/**\n * TargetManager encapsulates all interactions with CDP targets and is\n * responsible for coordinating the configuration of targets with the rest of\n * Puppeteer. Code outside of this class should not subscribe `Target.*` events\n * and only use the TargetManager events.\n *\n * TargetManager uses the CDP's auto-attach mechanism to intercept\n * new targets and allow the rest of Puppeteer to configure listeners while\n * the target is paused.\n *\n * @internal\n */\nexport class TargetManager\n extends EventEmitter<TargetManagerEvents>\n implements TargetManager\n{\n #connection: Connection;\n /**\n * Keeps track of the following events: 'Target.targetCreated',\n * 'Target.targetDestroyed', 'Target.targetInfoChanged'.\n *\n * A target becomes discovered when 'Target.targetCreated' is received.\n * A target is removed from this map once 'Target.targetDestroyed' is\n * received.\n *\n * `targetFilterCallback` has no effect on this map.\n */\n #discoveredTargetsByTargetId = new Map<string, Protocol.Target.TargetInfo>();\n /**\n * A target is added to this map once TargetManager has created\n * a Target and attached at least once to it.\n */\n #attachedTargetsByTargetId = new Map<string, CdpTarget>();\n /**\n * Tracks which sessions attach to which target.\n */\n #attachedTargetsBySessionId = new Map<string, CdpTarget>();\n /**\n * If a target was filtered out by `targetFilterCallback`, we still receive\n * events about it from CDP, but we don't forward them to the rest of Puppeteer.\n */\n #ignoredTargets = new Set<string>();\n #targetFilterCallback: TargetFilterCallback | undefined;\n #targetFactory: TargetFactory;\n\n #subscriptions = new DisposableStack();\n #attachmentSubscriptions = new WeakMap<\n CDPSession | Connection,\n DisposableStack\n >();\n\n #initializeDeferred = Deferred.create<void>();\n #waitForInitiallyDiscoveredTargets = true;\n\n #discoveryFilter: Protocol.Target.FilterEntry[] = [{}];\n // IDs of tab targets detected while running the initial Target.setAutoAttach\n // request. These are the targets whose initialization we want to await for\n // before resolving puppeteer.connect() or launch() to avoid flakiness.\n // Whenever a sub-target whose parent is a tab target is attached, we remove\n // the tab target from this list. Once the list is empty, we resolve the\n // initializeDeferred.\n #targetsIdsForInit = new Set<string>();\n // This is false until the connection-level Target.setAutoAttach request is\n // done. It indicates whethere we are running the initial auto-attach step or\n // if we are handling targets after that.\n #initialAttachDone = false;\n #blocklist: Array<{pattern: URLPattern; rule: string}> = [];\n #allowlist: Array<{pattern: URLPattern; rule: string}> = [];\n #logger?: Logger;\n\n constructor(\n connection: Connection,\n targetFactory: TargetFactory,\n targetFilterCallback?: TargetFilterCallback,\n waitForInitiallyDiscoveredTargets = true,\n blocklist?: string[],\n allowlist?: string[],\n logger?: Logger,\n ) {\n super(undefined, logger);\n if (blocklist && allowlist) {\n throw new Error('Cannot specify both blockList and allowList');\n }\n\n this.#connection = connection;\n this.#targetFilterCallback = targetFilterCallback;\n this.#targetFactory = targetFactory;\n this.#waitForInitiallyDiscoveredTargets = waitForInitiallyDiscoveredTargets;\n this.#logger = logger;\n\n this.#blocklist = this.#mapPatterns(blocklist);\n this.#allowlist = this.#mapPatterns(allowlist);\n\n const connectionEmitter = this.#subscriptions.use(\n new EventEmitter(this.#connection),\n );\n connectionEmitter.on('Target.targetCreated', this.#onTargetCreated);\n connectionEmitter.on('Target.targetDestroyed', this.#onTargetDestroyed);\n connectionEmitter.on('Target.targetInfoChanged', this.#onTargetInfoChanged);\n connectionEmitter.on(\n CDPSessionEvent.SessionDetached,\n this.#onSessionDetached,\n );\n this.#setupAttachmentListeners(this.#connection);\n }\n\n async initialize(): Promise<void> {\n await this.#connection.send('Target.setDiscoverTargets', {\n discover: true,\n filter: this.#discoveryFilter,\n });\n\n await this.#connection.send('Target.setAutoAttach', {\n waitForDebuggerOnStart: true,\n flatten: true,\n autoAttach: true,\n filter: [\n {\n type: 'page',\n exclude: true,\n },\n ...this.#discoveryFilter,\n ],\n });\n this.#initialAttachDone = true;\n this.#finishInitializationIfReady();\n await this.#initializeDeferred.valueOrThrow();\n }\n\n addToIgnoreTarget(targetId: string): void {\n this.#ignoredTargets.add(targetId);\n }\n\n getChildTargets(target: CdpTarget): ReadonlySet<CdpTarget> {\n return target._childTargets();\n }\n\n dispose(): void {\n this.#subscriptions.dispose();\n this.#removeAttachmentListeners(this.#connection);\n }\n\n getAvailableTargets(): ReadonlyMap<string, CdpTarget> {\n return this.#attachedTargetsByTargetId;\n }\n\n getDiscoveredTargetInfos(): ReadonlyMap<string, Protocol.Target.TargetInfo> {\n return this.#discoveredTargetsByTargetId;\n }\n\n #setupAttachmentListeners(session: CDPSession | Connection): void {\n assert(!this.#attachmentSubscriptions.has(session));\n const subscriptions = new DisposableStack();\n const sessionEmitter = subscriptions.use(new EventEmitter(session));\n\n sessionEmitter.on('Target.attachedToTarget', event => {\n void this.#onAttachedToTarget(session, event);\n });\n\n sessionEmitter.on('Target.detachedFromTarget', event => {\n return this.#onDetachedFromTarget(session, event);\n });\n\n this.#attachmentSubscriptions.set(session, subscriptions);\n }\n\n #removeAttachmentListeners(session: CDPSession | Connection): void {\n const subscriptions = this.#attachmentSubscriptions.get(session);\n if (subscriptions) {\n subscriptions.dispose();\n this.#attachmentSubscriptions.delete(session);\n }\n }\n\n #silentDetach = async (\n session: CdpCDPSession,\n parentSession: Connection | CDPSession,\n ): Promise<void> => {\n await session.send('Runtime.runIfWaitingForDebugger').catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n // We don't use `session.detach()` because that dispatches all commands on\n // the connection instead of the parent session.\n await parentSession\n .send('Target.detachFromTarget', {\n sessionId: session.id(),\n })\n .catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n };\n\n #getParentTarget = (\n parentSession: Connection | CDPSession,\n ): CdpTarget | null => {\n return parentSession instanceof CdpCDPSession\n ? parentSession.target()\n : null;\n };\n\n #onSessionDetached = (session: CDPSession) => {\n this.#removeAttachmentListeners(session);\n };\n\n #onTargetCreated = async (event: Protocol.Target.TargetCreatedEvent) => {\n this.#discoveredTargetsByTargetId.set(\n event.targetInfo.targetId,\n event.targetInfo,\n );\n\n this.emit(TargetManagerEvent.TargetDiscovered, event.targetInfo);\n\n // The connection is already attached to the browser target implicitly,\n // therefore, no new CDPSession is created and we have special handling\n // here.\n if (event.targetInfo.type === 'browser' && event.targetInfo.attached) {\n if (this.#attachedTargetsByTargetId.has(event.targetInfo.targetId)) {\n return;\n }\n const target = this.#targetFactory(event.targetInfo, undefined);\n target._initialize();\n this.#attachedTargetsByTargetId.set(event.targetInfo.targetId, target);\n }\n };\n\n #onTargetDestroyed = (event: Protocol.Target.TargetDestroyedEvent) => {\n const targetInfo = this.#discoveredTargetsByTargetId.get(event.targetId);\n this.#discoveredTargetsByTargetId.delete(event.targetId);\n this.#finishInitializationIfReady(event.targetId);\n\n if (targetInfo?.type === 'service_worker') {\n // Special case for service workers: report TargetGone event when\n // the worker is destroyed.\n const target = this.#attachedTargetsByTargetId.get(event.targetId);\n if (target) {\n this.emit(TargetManagerEvent.TargetGone, target);\n this.#attachedTargetsByTargetId.delete(event.targetId);\n }\n }\n };\n\n #onTargetInfoChanged = (event: Protocol.Target.TargetInfoChangedEvent) => {\n this.#discoveredTargetsByTargetId.set(\n event.targetInfo.targetId,\n event.targetInfo,\n );\n\n if (\n this.#ignoredTargets.has(event.targetInfo.targetId) ||\n !event.targetInfo.attached\n ) {\n return;\n }\n\n const target = this.#attachedTargetsByTargetId.get(\n event.targetInfo.targetId,\n );\n if (!target) {\n return;\n }\n const previousURL = target.url();\n const wasInitialized =\n target._initializedDeferred.value() === InitializationStatus.SUCCESS;\n\n if (isPageTargetBecomingPrimary(target, event.targetInfo)) {\n const session = target._session();\n assert(\n session,\n 'Target that is being activated is missing a CDPSession.',\n );\n session.parentSession()?.emit(CDPSessionEvent.Swapped, session);\n }\n\n target._targetInfoChanged(event.targetInfo);\n\n if (wasInitialized && previousURL !== target.url()) {\n this.emit(TargetManagerEvent.TargetChanged, {\n target,\n wasInitialized,\n previousURL,\n });\n }\n };\n\n #onAttachedToTarget = async (\n parentSession: Connection | CDPSession,\n event: Protocol.Target.AttachedToTargetEvent,\n ) => {\n const targetInfo = event.targetInfo;\n const session = this.#connection._session(event.sessionId);\n if (!session) {\n throw new Error(`Session ${event.sessionId} was not created.`);\n }\n\n if (!this.#connection.isAutoAttached(targetInfo.targetId)) {\n await this.#maybeSetupNetworkConditions(session, targetInfo);\n return;\n }\n\n // If we connect to a browser that is already open,\n // immediately detach from any tab that is on the blocklist.\n if (!this.#initialAttachDone && !this.isUrlAllowed(targetInfo.url)) {\n await this.#silentDetach(session, parentSession);\n return;\n }\n\n // Special case for service workers: being attached to service workers will\n // prevent them from ever being destroyed. Therefore, we silently detach\n // from service workers unless the connection was manually created via\n // `page.worker()`. To determine this, we use\n // `this.#connection.isAutoAttached(targetInfo.targetId)`. In the future, we\n // should determine if a target is auto-attached or not with the help of\n // CDP.\n if (targetInfo.type === 'service_worker') {\n if (!this.isUrlAllowed(targetInfo.url)) {\n await Promise.all([\n this.#maybeSetupNetworkConditions(session, targetInfo),\n session.send('Runtime.runIfWaitingForDebugger'),\n ]).catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n return;\n }\n await this.#silentDetach(session, parentSession);\n if (\n this.#attachedTargetsByTargetId.has(targetInfo.targetId) ||\n this.#ignoredTargets.has(targetInfo.targetId) ||\n !this.#discoveredTargetsByTargetId.has(targetInfo.targetId)\n ) {\n return;\n }\n const target = this.#targetFactory(targetInfo);\n target._initialize();\n this.#attachedTargetsByTargetId.set(targetInfo.targetId, target);\n this.emit(TargetManagerEvent.TargetAvailable, target);\n return;\n }\n\n let target = this.#attachedTargetsByTargetId.get(targetInfo.targetId);\n const isExistingTarget = target !== undefined;\n\n if (!target) {\n target = this.#targetFactory(\n targetInfo,\n session,\n parentSession instanceof CdpCDPSession ? parentSession : undefined,\n );\n }\n\n const parentTarget = this.#getParentTarget(parentSession);\n\n if (this.#targetFilterCallback && !this.#targetFilterCallback(target)) {\n this.#ignoredTargets.add(targetInfo.targetId);\n if (parentTarget?.type() === 'tab') {\n this.#finishInitializationIfReady(parentTarget._targetId);\n }\n await this.#silentDetach(session, parentSession);\n return;\n }\n\n if (\n this.#waitForInitiallyDiscoveredTargets &&\n event.targetInfo.type === 'tab' &&\n !this.#initialAttachDone\n ) {\n this.#targetsIdsForInit.add(event.targetInfo.targetId);\n }\n\n this.#setupAttachmentListeners(session);\n\n if (isExistingTarget) {\n session.setTarget(target);\n this.#attachedTargetsBySessionId.set(session.id(), target);\n } else {\n target._initialize();\n this.#attachedTargetsByTargetId.set(targetInfo.targetId, target);\n this.#attachedTargetsBySessionId.set(session.id(), target);\n }\n\n parentTarget?._addChildTarget(target);\n\n parentSession.emit(CDPSessionEvent.Ready, session);\n\n if (!isExistingTarget) {\n this.emit(TargetManagerEvent.TargetAvailable, target);\n }\n if (parentTarget?.type() === 'tab') {\n this.#finishInitializationIfReady(parentTarget._targetId);\n }\n\n // The browser might be shutting down here, so we\n // ignore potential errors.\n await Promise.all([\n session.send('Target.setAutoAttach', {\n waitForDebuggerOnStart: true,\n flatten: true,\n autoAttach: true,\n filter: this.#discoveryFilter,\n }),\n this.#maybeSetupNetworkConditions(session, targetInfo),\n session.send('Runtime.runIfWaitingForDebugger'),\n ]).catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n };\n\n #finishInitializationIfReady(targetId?: string): void {\n if (targetId !== undefined) {\n this.#targetsIdsForInit.delete(targetId);\n }\n // If we are still initializing it might be that we have not learned about\n // some targets yet.\n if (!this.#initialAttachDone) {\n return;\n }\n if (this.#targetsIdsForInit.size === 0) {\n this.#initializeDeferred.resolve();\n }\n }\n\n #onDetachedFromTarget = (\n parentSession: Connection | CDPSession,\n event: Protocol.Target.DetachedFromTargetEvent,\n ) => {\n const target = this.#attachedTargetsBySessionId.get(event.sessionId);\n this.#attachedTargetsBySessionId.delete(event.sessionId);\n\n if (!target) {\n return;\n }\n\n if (parentSession instanceof CdpCDPSession) {\n parentSession.target()._removeChildTarget(target);\n }\n this.#attachedTargetsByTargetId.delete(target._targetId);\n this.emit(TargetManagerEvent.TargetGone, target);\n };\n\n /**\n * Helper to validate URL against blocklist patterns\n */\n isUrlAllowed = (url: string): boolean => {\n if (this.#blocklist.length === 0 && this.#allowlist.length === 0) {\n return true;\n }\n\n // Always allow internal or setup pages\n if (!url || url === 'about:blank') {\n return true;\n }\n\n for (const item of this.#blocklist) {\n if (item.pattern.test(url)) {\n return false;\n }\n }\n\n if (this.#allowlist.length > 0) {\n for (const item of this.#allowlist) {\n if (item.pattern.test(url)) {\n return true;\n }\n }\n return false;\n }\n\n return true;\n };\n\n #mapPatterns(rules?: string[]): Array<{pattern: URLPattern; rule: string}> {\n const result: Array<{pattern: URLPattern; rule: string}> = [];\n for (const rule of rules ?? []) {\n result.push({pattern: new URLPattern(rule), rule});\n }\n return result;\n }\n\n #maybeSetupNetworkConditions = async (\n session: CDPSession,\n targetInfo: Protocol.Target.TargetInfo,\n ): Promise<void> => {\n if (this.#blocklist.length === 0 && this.#allowlist.length === 0) {\n return;\n }\n\n const matchedNetworkConditions = [];\n for (const item of this.#blocklist) {\n matchedNetworkConditions.push({\n urlPattern: item.rule,\n offline: true,\n latency: 0,\n downloadThroughput: -1,\n uploadThroughput: -1,\n });\n }\n\n if (this.#allowlist.length > 0) {\n for (const item of this.#allowlist) {\n matchedNetworkConditions.push({\n urlPattern: item.rule,\n offline: false,\n latency: 0,\n downloadThroughput: -1,\n uploadThroughput: -1,\n });\n }\n matchedNetworkConditions.push({\n urlPattern: '',\n offline: true,\n latency: 0,\n downloadThroughput: -1,\n uploadThroughput: -1,\n });\n }\n\n const needsNetwork =\n targetInfo.type === 'worker' ||\n targetInfo.type === 'service_worker' ||\n targetInfo.type === 'shared_worker';\n\n const promises = [];\n if (needsNetwork) {\n promises.push(session.send('Network.enable'));\n }\n promises.push(\n session.send('Network.emulateNetworkConditionsByRule', {\n offline: this.#blocklist.length > 0 ? true : undefined,\n matchedNetworkConditions,\n }),\n );\n await Promise.all(promises).catch(error => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n };\n}\n","/**\n * @license\n * Copyright 2026 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {Page, Target, WebWorker} from '../api/api.js';\nimport {Extension} from '../api/api.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\n\nimport type {CdpBrowser} from './Browser.js';\nimport {isTargetClosedError} from './Connection.js';\n\nexport class CdpExtension extends Extension {\n // needed to access the CDPSession to trigger an extension action.\n #browser: CdpBrowser;\n #logger?: Logger;\n\n /*\n * @internal\n */\n constructor(\n id: string,\n version: string,\n name: string,\n path: string,\n enabled: boolean,\n browser: CdpBrowser,\n logger?: Logger,\n ) {\n super(id, version, name, path, enabled);\n this.#browser = browser;\n this.#logger = logger;\n }\n\n async workers(): Promise<WebWorker[]> {\n const targets = this.#browser.targets();\n\n const extensionWorkers = targets.filter((target: Target) => {\n const targetUrl = target.url();\n return (\n target.type() === 'service_worker' &&\n targetUrl.startsWith('chrome-extension://' + this.id)\n );\n });\n\n const workers = await Promise.all(\n extensionWorkers.map(async target => {\n try {\n return await target.worker();\n } catch (err) {\n if (this.#canIgnoreError(err)) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n return null;\n }\n throw err;\n }\n }),\n );\n\n return workers.filter((worker): worker is WebWorker => {\n return worker !== null;\n });\n }\n\n async pages(): Promise<Page[]> {\n const targets = this.#browser.targets();\n\n const extensionPages = targets.filter((target: Target) => {\n const targetUrl = target.url();\n return (\n (target.type() === 'page' || target.type() === 'background_page') &&\n targetUrl.startsWith('chrome-extension://' + this.id)\n );\n });\n\n const pages = await Promise.all(\n extensionPages.map(async target => {\n try {\n return await target.asPage();\n } catch (err) {\n if (this.#canIgnoreError(err)) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n return null;\n }\n throw err;\n }\n }),\n );\n\n return pages.filter((page): page is Page => {\n return page !== null;\n });\n }\n\n async triggerAction(page: Page): Promise<void> {\n await this.#browser._connection.send('Extensions.triggerAction', {\n id: this.id,\n targetId: page._tabId,\n });\n }\n\n #canIgnoreError(error: unknown): boolean {\n return (\n isErrorLike(error) &&\n (isTargetClosedError(error) ||\n error.message.includes('No target with given id found'))\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {ChildProcess} from 'node:child_process';\n\nimport type {Protocol} from 'devtools-protocol';\n\nimport type {\n CreatePageOptions,\n DebugInfo,\n ExtensionInstallOptions,\n} from '../api/Browser.js';\nimport {\n Browser as BrowserBase,\n BrowserEvent,\n type BrowserCloseCallback,\n type BrowserContextOptions,\n type IsPageTargetCallback,\n type TargetFilterCallback,\n type ScreenInfo,\n type AddScreenParams,\n type WindowBounds,\n type WindowId,\n type InstallPWAOptions,\n type UninstallPWAOptions,\n type LaunchPWAOptions,\n type GetPWAStateOptions,\n type PWAState,\n} from '../api/Browser.js';\nimport {BrowserContextEvent} from '../api/BrowserContext.js';\nimport {CDPSessionEvent} from '../api/CDPSession.js';\nimport type {Extension} from '../api/Extension.js';\nimport type {Page} from '../api/Page.js';\nimport type {Target} from '../api/Target.js';\nimport type {Logger} from '../common/Debug.js';\nimport type {DownloadBehavior} from '../common/DownloadBehavior.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport type {Viewport} from '../common/Viewport.js';\nimport {Deferred} from '../util/Deferred.js';\nimport {DisposableStack} from '../util/disposable.js';\n\nimport {CdpBrowserContext} from './BrowserContext.js';\nimport type {CdpCDPSession} from './CdpSession.js';\nimport type {Connection} from './Connection.js';\nimport {CdpExtension} from './Extension.js';\nimport {\n DevToolsTarget,\n InitializationStatus,\n OtherTarget,\n PageTarget,\n WorkerTarget,\n type CdpTarget,\n} from './Target.js';\nimport {TargetManagerEvent} from './TargetManageEvents.js';\nimport {TargetManager} from './TargetManager.js';\n\n/**\n * @internal\n */\nfunction isDevToolsPageTarget(url: string): boolean {\n return url.startsWith('devtools://devtools/bundled/devtools_app.html');\n}\n\n/**\n * @internal\n */\nexport class CdpBrowser extends BrowserBase {\n readonly protocol = 'cdp';\n\n static async _create(\n connection: Connection,\n contextIds: string[],\n acceptInsecureCerts: boolean,\n defaultViewport: Viewport | null | undefined = undefined,\n downloadBehavior: DownloadBehavior | undefined = undefined,\n process: ChildProcess | undefined = undefined,\n closeCallback: BrowserCloseCallback | undefined = undefined,\n targetFilterCallback: TargetFilterCallback | undefined = undefined,\n isPageTargetCallback: IsPageTargetCallback | undefined = undefined,\n waitForInitiallyDiscoveredTargets = true,\n networkEnabled = true,\n issuesEnabled = true,\n handleDevToolsAsPage = false,\n blocklist: string[] | undefined = undefined,\n allowlist: string[] | undefined = undefined,\n logger: Logger,\n ): Promise<CdpBrowser> {\n const browser = new CdpBrowser(\n connection,\n contextIds,\n defaultViewport,\n process,\n closeCallback,\n targetFilterCallback,\n isPageTargetCallback,\n waitForInitiallyDiscoveredTargets,\n networkEnabled,\n issuesEnabled,\n handleDevToolsAsPage,\n blocklist,\n allowlist,\n logger,\n );\n\n if (allowlist) {\n const version = await browser.#getVersion();\n const majorVersion = parseInt(\n version.product.match(/\\d+/)?.[0] ?? '0',\n 10,\n );\n if (majorVersion < 149) {\n throw new Error('The allowlist option require Chrome 149 or greater.');\n }\n }\n if (acceptInsecureCerts) {\n await connection.send('Security.setIgnoreCertificateErrors', {\n ignore: true,\n });\n }\n await browser._attach(downloadBehavior);\n return browser;\n }\n #defaultViewport?: Viewport | null;\n #process?: ChildProcess;\n #connection: Connection;\n #closeCallback: BrowserCloseCallback;\n #targetFilterCallback: TargetFilterCallback;\n #isPageTargetCallback!: IsPageTargetCallback;\n #defaultContext: CdpBrowserContext;\n #contexts = new Map<string, CdpBrowserContext>();\n #networkEnabled = true;\n #issuesEnabled = true;\n #targetManager: TargetManager;\n #handleDevToolsAsPage = false;\n #extensions = new Map<string, Extension>();\n #version?: Deferred<Protocol.Browser.GetVersionResponse>;\n #hasNetworkRestrictions = false;\n #subscriptions = new DisposableStack();\n\n constructor(\n connection: Connection,\n contextIds: string[],\n defaultViewport: Viewport | null | undefined = undefined,\n process: ChildProcess | undefined = undefined,\n closeCallback: BrowserCloseCallback | undefined = undefined,\n targetFilterCallback: TargetFilterCallback | undefined = undefined,\n isPageTargetCallback: IsPageTargetCallback | undefined = undefined,\n waitForInitiallyDiscoveredTargets = true,\n networkEnabled = true,\n issuesEnabled = true,\n handleDevToolsAsPage = false,\n blocklist: string[] | undefined = undefined,\n allowlist: string[] | undefined = undefined,\n logger: Logger,\n ) {\n super(logger);\n this.#networkEnabled = networkEnabled;\n this.#issuesEnabled = issuesEnabled;\n this.#defaultViewport = defaultViewport;\n this.#process = process;\n this.#connection = connection;\n this.#closeCallback = closeCallback || (() => {});\n this.#targetFilterCallback =\n targetFilterCallback ||\n (() => {\n return true;\n });\n this.#handleDevToolsAsPage = handleDevToolsAsPage;\n this.#setIsPageTargetCallback(isPageTargetCallback);\n this.#hasNetworkRestrictions = Boolean(\n (blocklist && blocklist.length > 0) ||\n (allowlist && allowlist.length > 0),\n );\n connection.rejectEmulateNetworkConditionsCalls =\n this.#hasNetworkRestrictions;\n this.#targetManager = new TargetManager(\n connection,\n this.#createTarget,\n this.#targetFilterCallback,\n waitForInitiallyDiscoveredTargets,\n blocklist,\n allowlist,\n logger,\n );\n this.#defaultContext = new CdpBrowserContext(\n this.#connection,\n this,\n undefined,\n logger,\n );\n for (const contextId of contextIds) {\n this.#contexts.set(\n contextId,\n new CdpBrowserContext(this.#connection, this, contextId, logger),\n );\n }\n }\n\n #emitDisconnected = () => {\n this.emit(BrowserEvent.Disconnected, undefined);\n };\n\n async _attach(downloadBehavior: DownloadBehavior | undefined): Promise<void> {\n const connectionEmitter = this.#subscriptions.use(\n new EventEmitter(this.#connection),\n );\n connectionEmitter.on(CDPSessionEvent.Disconnected, this.#emitDisconnected);\n if (downloadBehavior) {\n await this.#defaultContext.setDownloadBehavior(downloadBehavior);\n }\n const targetManagerEmitter = this.#subscriptions.use(\n new EventEmitter(this.#targetManager),\n );\n targetManagerEmitter.on(\n TargetManagerEvent.TargetAvailable,\n this.#onAttachedToTarget,\n );\n targetManagerEmitter.on(\n TargetManagerEvent.TargetGone,\n this.#onDetachedFromTarget,\n );\n targetManagerEmitter.on(\n TargetManagerEvent.TargetChanged,\n this.#onTargetChanged,\n );\n targetManagerEmitter.on(\n TargetManagerEvent.TargetDiscovered,\n this.#onTargetDiscovered,\n );\n await this.#targetManager.initialize();\n }\n\n _detach(): void {\n this.#subscriptions.dispose();\n }\n\n override process(): ChildProcess | null {\n return this.#process ?? null;\n }\n\n _targetManager(): TargetManager {\n return this.#targetManager;\n }\n\n #setIsPageTargetCallback(isPageTargetCallback?: IsPageTargetCallback): void {\n this.#isPageTargetCallback =\n isPageTargetCallback ||\n ((target: Target): boolean => {\n return (\n target.type() === 'page' ||\n target.type() === 'background_page' ||\n target.type() === 'webview' ||\n (this.#handleDevToolsAsPage &&\n target.type() === 'other' &&\n isDevToolsPageTarget(target.url()))\n );\n });\n }\n\n _getIsPageTargetCallback(): IsPageTargetCallback | undefined {\n return this.#isPageTargetCallback;\n }\n\n override async createBrowserContext(\n options: BrowserContextOptions = {},\n ): Promise<CdpBrowserContext> {\n const {proxyServer, proxyBypassList, downloadBehavior} = options;\n\n const {browserContextId} = await this.#connection.send(\n 'Target.createBrowserContext',\n {\n proxyServer,\n proxyBypassList: proxyBypassList && proxyBypassList.join(','),\n },\n );\n const context = new CdpBrowserContext(\n this.#connection,\n this,\n browserContextId,\n this.logger,\n );\n if (downloadBehavior) {\n await context.setDownloadBehavior(downloadBehavior);\n }\n this.#contexts.set(browserContextId, context);\n return context;\n }\n\n override browserContexts(): CdpBrowserContext[] {\n return [this.#defaultContext, ...Array.from(this.#contexts.values())];\n }\n\n override defaultBrowserContext(): CdpBrowserContext {\n return this.#defaultContext;\n }\n\n async _disposeContext(contextId?: string): Promise<void> {\n if (!contextId) {\n return;\n }\n await this.#connection.send('Target.disposeBrowserContext', {\n browserContextId: contextId,\n });\n this.#contexts.delete(contextId);\n }\n\n #createTarget = (\n targetInfo: Protocol.Target.TargetInfo,\n session?: CdpCDPSession,\n ) => {\n const {browserContextId} = targetInfo;\n const context =\n browserContextId && this.#contexts.has(browserContextId)\n ? this.#contexts.get(browserContextId)\n : this.#defaultContext;\n\n if (!context) {\n throw new Error('Missing browser context');\n }\n\n const createSession = (isAutoAttachEmulated: boolean) => {\n return this.#connection._createSession(targetInfo, isAutoAttachEmulated);\n };\n const otherTarget = new OtherTarget(\n targetInfo,\n session,\n context,\n this.#targetManager,\n createSession,\n this.logger,\n );\n if (targetInfo.url && isDevToolsPageTarget(targetInfo.url)) {\n return new DevToolsTarget(\n targetInfo,\n session,\n context,\n this.#targetManager,\n createSession,\n this.#defaultViewport ?? null,\n this.logger,\n );\n }\n if (this.#isPageTargetCallback(otherTarget)) {\n return new PageTarget(\n targetInfo,\n session,\n context,\n this.#targetManager,\n createSession,\n this.#defaultViewport ?? null,\n this.logger,\n );\n }\n if (\n targetInfo.type === 'service_worker' ||\n targetInfo.type === 'shared_worker'\n ) {\n return new WorkerTarget(\n targetInfo,\n session,\n context,\n this.#targetManager,\n createSession,\n this.logger,\n );\n }\n return otherTarget;\n };\n\n #onAttachedToTarget = async (target: CdpTarget) => {\n if (\n target._isTargetExposed() &&\n (await target._initializedDeferred.valueOrThrow()) ===\n InitializationStatus.SUCCESS\n ) {\n this.emit(BrowserEvent.TargetCreated, target);\n target.browserContext().emit(BrowserContextEvent.TargetCreated, target);\n }\n };\n\n #onDetachedFromTarget = async (target: CdpTarget): Promise<void> => {\n target._initializedDeferred.resolve(InitializationStatus.ABORTED);\n target._isClosedDeferred.resolve();\n if (\n target._isTargetExposed() &&\n (await target._initializedDeferred.valueOrThrow()) ===\n InitializationStatus.SUCCESS\n ) {\n this.emit(BrowserEvent.TargetDestroyed, target);\n target.browserContext().emit(BrowserContextEvent.TargetDestroyed, target);\n }\n };\n\n #onTargetChanged = ({target}: {target: CdpTarget}): void => {\n this.emit(BrowserEvent.TargetChanged, target);\n target.browserContext().emit(BrowserContextEvent.TargetChanged, target);\n };\n\n #onTargetDiscovered = (targetInfo: Protocol.Target.TargetInfo): void => {\n this.emit(BrowserEvent.TargetDiscovered, targetInfo);\n };\n\n override wsEndpoint(): string {\n return this.#connection.url();\n }\n\n override async newPage(options?: CreatePageOptions): Promise<Page> {\n return await this.#defaultContext.newPage(options);\n }\n\n async _createPageInContext(\n contextId?: string,\n options?: CreatePageOptions,\n ): Promise<Page> {\n const hasTargets =\n this.targets().filter(t => {\n return t.browserContext().id === contextId;\n }).length > 0;\n const windowBounds =\n options?.type === 'window' ? options.windowBounds : undefined;\n const {targetId} = await this.#connection.send('Target.createTarget', {\n url: 'about:blank',\n browserContextId: contextId || undefined,\n left: windowBounds?.left,\n top: windowBounds?.top,\n width: windowBounds?.width,\n height: windowBounds?.height,\n windowState: windowBounds?.windowState,\n // Works around crbug.com/454825274.\n newWindow: hasTargets && options?.type === 'window' ? true : undefined,\n background: options?.background,\n });\n const target = (await this.waitForTarget(t => {\n return (t as CdpTarget)._targetId === targetId;\n })) as CdpTarget;\n if (!target) {\n throw new Error(`Missing target for page (id = ${targetId})`);\n }\n const initialized =\n (await target._initializedDeferred.valueOrThrow()) ===\n InitializationStatus.SUCCESS;\n if (!initialized) {\n throw new Error(`Failed to create target for page (id = ${targetId})`);\n }\n const page = await target.page();\n if (!page) {\n throw new Error(\n `Failed to create a page for context (id = ${contextId})`,\n );\n }\n return page;\n }\n\n async _createDevToolsPage(pageTargetId: string): Promise<Page> {\n const openDevToolsResponse = await this.#connection.send(\n 'Target.openDevTools',\n {\n targetId: pageTargetId,\n },\n );\n return await this._getDevToolsTargetPage(openDevToolsResponse.targetId);\n }\n\n async _getDevToolsTargetPage(devtoolsTargetId: string): Promise<Page> {\n const target = (await this.waitForTarget(t => {\n return (t as CdpTarget)._targetId === devtoolsTargetId;\n })) as CdpTarget;\n if (!target) {\n throw new Error(\n `Missing target for DevTools page (id = ${devtoolsTargetId})`,\n );\n }\n const initialized =\n (await target._initializedDeferred.valueOrThrow()) ===\n InitializationStatus.SUCCESS;\n if (!initialized) {\n throw new Error(\n `Failed to create target for DevTools page (id = ${devtoolsTargetId})`,\n );\n }\n const page = await target.page();\n if (!page) {\n throw new Error(\n `Failed to create a DevTools Page for target (id = ${devtoolsTargetId})`,\n );\n }\n return page;\n }\n\n async _hasDevToolsTarget(pageTargetId: string): Promise<string | undefined> {\n const response = await this.#connection.send('Target.getDevToolsTarget', {\n targetId: pageTargetId,\n });\n return response.targetId;\n }\n\n override async installExtension(\n path: string,\n options?: ExtensionInstallOptions,\n ): Promise<string> {\n const {id} = await this.#connection.send('Extensions.loadUnpacked', {\n path,\n enableInIncognito: options?.enabledInIncognito ?? false,\n });\n this.#extensions.delete(id);\n return id;\n }\n\n override async uninstallExtension(id: string): Promise<void> {\n await this.#connection.send('Extensions.uninstall', {id});\n\n // Currently sending the Extensions.uninstall command does not trigger\n // the Target.targetDestroyed event for service workers. This causes\n // flakiness in the extension tests.\n // TODO(nroscino): Remove this once the event is correctly emitted.\n const targetDestroyedPromises = [];\n for (const [targetId, targetInfo] of this._targetManager()\n .getDiscoveredTargetInfos()\n .entries()) {\n if (targetInfo.url.includes(id) && targetInfo.type === 'service_worker') {\n this._targetManager().addToIgnoreTarget(targetId);\n targetDestroyedPromises.push(\n new Promise(resolve => {\n return setTimeout(() => {\n this.#connection.emit('Target.targetDestroyed', {\n targetId: targetId,\n });\n resolve(null);\n }, 0);\n }),\n );\n }\n }\n await Promise.all(targetDestroyedPromises);\n\n this.#extensions.delete(id);\n }\n\n override async installPWA(options: InstallPWAOptions): Promise<string> {\n if (this.#hasNetworkRestrictions) {\n throw new Error(\n 'PWA APIs are not supported when network restrictions are configured.',\n );\n }\n await this.#connection.send('PWA.install', {\n manifestId: options.manifestId,\n installUrlOrBundleUrl: options.installUrlOrBundleUrl,\n });\n if (options.displayMode) {\n await this.#connection.send('PWA.changeAppUserSettings', {\n manifestId: options.manifestId,\n displayMode: options.displayMode,\n });\n }\n return options.manifestId;\n }\n\n override async uninstallPWA(options: UninstallPWAOptions): Promise<void> {\n if (this.#hasNetworkRestrictions) {\n throw new Error(\n 'PWA APIs are not supported when network restrictions are configured.',\n );\n }\n await this.#connection.send('PWA.uninstall', {\n manifestId: options.manifestId,\n });\n }\n\n override async launchPWA(options: LaunchPWAOptions): Promise<Page> {\n if (this.#hasNetworkRestrictions) {\n throw new Error(\n 'PWA APIs are not supported when network restrictions are configured.',\n );\n }\n // `PWA.launch` resolves with the id of the launched *tab* target (see the\n // CDP `PWA.LaunchResponse` docs). Tab targets sit above page targets in the\n // target hierarchy and are not exposed through `browser.targets()`, so the\n // returned id can't be awaited directly.\n const {targetId: tabTargetId} = await this.#connection.send('PWA.launch', {\n manifestId: options.manifestId,\n url: options.url,\n });\n const target = (await this.waitForTarget(\n candidate => {\n const tab = this.#targetManager.getAvailableTargets().get(tabTargetId);\n if (tab?.type() !== 'tab') {\n return false;\n }\n for (const child of tab._childTargets()) {\n if (child === candidate) {\n return true;\n }\n }\n return false;\n },\n {timeout: options.timeout},\n )) as CdpTarget;\n const page = await target.page();\n if (!page) {\n throw new Error(\n `Failed to create a page for the launched PWA (manifestId = ${options.manifestId})`,\n );\n }\n return page;\n }\n\n override async getPWAState(options: GetPWAStateOptions): Promise<PWAState> {\n if (this.#hasNetworkRestrictions) {\n throw new Error(\n 'PWA APIs are not supported when network restrictions are configured.',\n );\n }\n const {badgeCount, fileHandlers} = await this.#connection.send(\n 'PWA.getOsAppState',\n {manifestId: options.manifestId},\n );\n return {badgeCount, fileHandlers};\n }\n\n override async screens(): Promise<ScreenInfo[]> {\n const {screenInfos} = await this.#connection.send(\n 'Emulation.getScreenInfos',\n );\n return screenInfos;\n }\n\n override async addScreen(params: AddScreenParams): Promise<ScreenInfo> {\n const {screenInfo} = await this.#connection.send(\n 'Emulation.addScreen',\n params,\n );\n return screenInfo;\n }\n\n override async removeScreen(screenId: string): Promise<void> {\n return await this.#connection.send('Emulation.removeScreen', {screenId});\n }\n\n override async getWindowBounds(windowId: WindowId): Promise<WindowBounds> {\n const {bounds} = await this.#connection.send('Browser.getWindowBounds', {\n windowId: Number(windowId),\n });\n return bounds;\n }\n\n override async setWindowBounds(\n windowId: WindowId,\n windowBounds: WindowBounds,\n ): Promise<void> {\n await this.#connection.send('Browser.setWindowBounds', {\n windowId: Number(windowId),\n bounds: windowBounds,\n });\n }\n\n override targets(): CdpTarget[] {\n return Array.from(\n this.#targetManager.getAvailableTargets().values(),\n ).filter(target => {\n return (\n target._isTargetExposed() &&\n target._initializedDeferred.value() === InitializationStatus.SUCCESS\n );\n });\n }\n\n override target(): CdpTarget {\n const browserTarget = this.targets().find(target => {\n return target.type() === 'browser';\n });\n if (!browserTarget) {\n throw new Error('Browser target is not found');\n }\n return browserTarget;\n }\n\n override async version(): Promise<string> {\n const version = await this.#getVersion();\n return version.product;\n }\n\n override async userAgent(): Promise<string> {\n const version = await this.#getVersion();\n return version.userAgent;\n }\n\n override async close(): Promise<void> {\n await this.#closeCallback.call(null);\n await this.disconnect();\n }\n\n override disconnect(): Promise<void> {\n this.#targetManager.dispose();\n this.#connection.dispose();\n this._detach();\n return Promise.resolve();\n }\n\n /**\n * @internal\n */\n get _connection(): Connection {\n return this.#connection;\n }\n\n override get connected(): boolean {\n return !this.#connection._closed;\n }\n\n async #getVersion(): Promise<Protocol.Browser.GetVersionResponse> {\n if (!this.#version) {\n this.#version = Deferred.create<Protocol.Browser.GetVersionResponse>();\n try {\n this.#version.resolve(\n await this.#connection.send('Browser.getVersion'),\n );\n } catch (error) {\n this.#version.reject(error as Error);\n }\n }\n return await this.#version.valueOrThrow();\n }\n\n override get debugInfo(): DebugInfo {\n return {\n pendingProtocolErrors: this.#connection.getPendingProtocolErrors(),\n };\n }\n\n override isNetworkEnabled(): boolean {\n return this.#networkEnabled;\n }\n\n override async extensions(): Promise<Map<string, Extension>> {\n const response = await this.#connection.send('Extensions.getExtensions');\n\n const extensionsMap = new Map<string, Extension>();\n\n for (const currExtension of response.extensions) {\n if (this.#extensions.has(currExtension.id)) {\n extensionsMap.set(\n currExtension.id,\n this.#extensions.get(currExtension.id)!,\n );\n } else {\n const newExtension = new CdpExtension(\n currExtension.id,\n currExtension.version,\n currExtension.name,\n currExtension.path,\n currExtension.enabled,\n this,\n this.logger,\n );\n\n extensionsMap.set(currExtension.id, newExtension);\n }\n }\n\n this.#extensions = extensionsMap;\n return this.#extensions;\n }\n\n override isIssuesEnabled(): boolean {\n return this.#issuesEnabled;\n }\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {ConnectionTransport} from '../common/ConnectionTransport.js';\nimport type {ConnectOptions} from '../common/ConnectOptions.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {DEFAULT_VIEWPORT} from '../common/util.js';\nimport {createIncrementalIdGenerator} from '../util/incremental-id-generator.js';\n\nimport {CdpBrowser} from './Browser.js';\nimport {Connection} from './Connection.js';\n\n/**\n * Users should never call this directly; it's called when calling\n * `puppeteer.connect` with `protocol: 'cdp'`.\n *\n * @internal\n */\nexport async function _connectToCdpBrowser(\n connectionTransport: ConnectionTransport,\n url: string,\n options: ConnectOptions,\n logger: Logger,\n): Promise<CdpBrowser> {\n const {\n acceptInsecureCerts = false,\n networkEnabled = true,\n issuesEnabled = true,\n defaultViewport = DEFAULT_VIEWPORT,\n downloadBehavior,\n targetFilter,\n _isPageTarget: isPageTarget,\n slowMo = 0,\n protocolTimeout,\n handleDevToolsAsPage,\n idGenerator = createIncrementalIdGenerator(),\n blocklist,\n allowlist,\n } = options;\n\n const log = options.logger ?? logger;\n\n const connection = new Connection(\n url,\n connectionTransport,\n slowMo,\n protocolTimeout,\n /* rawErrors */ false,\n idGenerator,\n log,\n );\n\n const {browserContextIds} = await connection.send(\n 'Target.getBrowserContexts',\n );\n const browser = await CdpBrowser._create(\n connection,\n browserContextIds,\n acceptInsecureCerts,\n defaultViewport,\n downloadBehavior,\n undefined,\n () => {\n return connection.send('Browser.close').catch(error => {\n log?.(DEBUG_PREFIXES.error)?.(error);\n });\n },\n targetFilter,\n isPageTarget,\n undefined,\n networkEnabled,\n issuesEnabled,\n handleDevToolsAsPage,\n blocklist,\n allowlist,\n log,\n );\n return browser;\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {ConnectionTransport} from '../common/ConnectionTransport.js';\n\nconst tabTargetInfo = {\n targetId: 'tabTargetId',\n type: 'tab',\n title: 'tab',\n url: 'about:blank',\n attached: false,\n canAccessOpener: false,\n};\n\nconst pageTargetInfo = {\n targetId: 'pageTargetId',\n type: 'page',\n title: 'page',\n url: 'about:blank',\n attached: false,\n canAccessOpener: false,\n};\n\n/**\n * Experimental ExtensionTransport allows establishing a connection via\n * chrome.debugger API if Puppeteer runs in an extension. Since Chrome\n * DevTools Protocol is restricted for extensions, the transport\n * implements missing commands and events.\n *\n * @experimental\n * @public\n */\nexport class ExtensionTransport implements ConnectionTransport {\n static async connectTab(tabId: number): Promise<ExtensionTransport> {\n await chrome.debugger.attach({tabId}, '1.3');\n return new ExtensionTransport(tabId);\n }\n\n onmessage?: (message: string) => void;\n onclose?: () => void;\n\n #tabId: number;\n\n /**\n * @internal\n */\n constructor(tabId: number) {\n this.#tabId = tabId;\n chrome.debugger.onEvent.addListener(this.#debuggerEventHandler);\n }\n\n #debuggerEventHandler = (\n source: chrome.debugger.Debuggee,\n method: string,\n params?: object | undefined,\n ): void => {\n if (source.tabId !== this.#tabId) {\n return;\n }\n this.#dispatchResponse({\n // @ts-expect-error sessionId is not in stable yet.\n sessionId: source.sessionId ?? 'pageTargetSessionId',\n method: method,\n params: params,\n });\n };\n\n #dispatchResponse(message: object): void {\n // Dispatch in a new task like other transports.\n setTimeout(() => {\n this.onmessage?.(JSON.stringify(message));\n }, 0);\n }\n\n send(message: string): void {\n const parsed = JSON.parse(message);\n switch (parsed.method) {\n case 'Browser.getVersion': {\n this.#dispatchResponse({\n id: parsed.id,\n sessionId: parsed.sessionId,\n method: parsed.method,\n result: {\n protocolVersion: '1.3',\n product: 'chrome',\n revision: 'unknown',\n userAgent: 'chrome',\n jsVersion: 'unknown',\n },\n });\n return;\n }\n case 'Target.getBrowserContexts': {\n this.#dispatchResponse({\n id: parsed.id,\n sessionId: parsed.sessionId,\n method: parsed.method,\n result: {\n browserContextIds: [],\n },\n });\n return;\n }\n case 'Target.setDiscoverTargets': {\n this.#dispatchResponse({\n method: 'Target.targetCreated',\n params: {\n targetInfo: tabTargetInfo,\n },\n });\n this.#dispatchResponse({\n method: 'Target.targetCreated',\n params: {\n targetInfo: pageTargetInfo,\n },\n });\n this.#dispatchResponse({\n id: parsed.id,\n sessionId: parsed.sessionId,\n method: parsed.method,\n result: {},\n });\n return;\n }\n case 'Target.setAutoAttach': {\n if (parsed.sessionId === 'tabTargetSessionId') {\n this.#dispatchResponse({\n method: 'Target.attachedToTarget',\n sessionId: 'tabTargetSessionId',\n params: {\n targetInfo: pageTargetInfo,\n sessionId: 'pageTargetSessionId',\n },\n });\n this.#dispatchResponse({\n id: parsed.id,\n sessionId: parsed.sessionId,\n method: parsed.method,\n result: {},\n });\n return;\n } else if (!parsed.sessionId) {\n this.#dispatchResponse({\n method: 'Target.attachedToTarget',\n params: {\n targetInfo: tabTargetInfo,\n sessionId: 'tabTargetSessionId',\n },\n });\n this.#dispatchResponse({\n id: parsed.id,\n sessionId: parsed.sessionId,\n method: parsed.method,\n result: {},\n });\n return;\n }\n }\n }\n if (parsed.sessionId === 'pageTargetSessionId') {\n delete parsed.sessionId;\n }\n chrome.debugger\n .sendCommand(\n {tabId: this.#tabId, sessionId: parsed.sessionId},\n parsed.method,\n parsed.params,\n )\n .then(response => {\n this.#dispatchResponse({\n id: parsed.id,\n sessionId: parsed.sessionId ?? 'pageTargetSessionId',\n method: parsed.method,\n result: response,\n });\n })\n .catch(err => {\n this.#dispatchResponse({\n id: parsed.id,\n sessionId: parsed.sessionId ?? 'pageTargetSessionId',\n method: parsed.method,\n error: {\n code: err?.code,\n data: err?.data,\n message: err?.message ?? 'CDP error had no message',\n },\n });\n });\n }\n\n close(): void {\n chrome.debugger.onEvent.removeListener(this.#debuggerEventHandler);\n void chrome.debugger.detach({tabId: this.#tabId});\n }\n}\n","/**\n * @license\n * Copyright 2021 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {NetworkConditions} from './NetworkManager.js';\n\n/**\n * A list of pre-defined network conditions to be used with\n * {@link Page.emulateNetworkConditions}.\n *\n * @example\n *\n * ```ts\n * import {PredefinedNetworkConditions} from 'puppeteer';\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.emulateNetworkConditions(PredefinedNetworkConditions['Slow 3G']);\n * await page.goto('https://www.google.com');\n * await page.emulateNetworkConditions(PredefinedNetworkConditions['Fast 3G']);\n * await page.goto('https://www.google.com');\n * // alias to Fast 3G.\n * await page.emulateNetworkConditions(PredefinedNetworkConditions['Slow 4G']);\n * await page.goto('https://www.google.com');\n * await page.emulateNetworkConditions(PredefinedNetworkConditions['Fast 4G']);\n * await page.goto('https://www.google.com');\n * // other actions...\n * await browser.close();\n * ```\n *\n * @public\n */\nexport const PredefinedNetworkConditions = Object.freeze({\n // Generally aligned with DevTools\n // https://source.chromium.org/chromium/chromium/src/+/main:third_party/devtools-frontend/src/front_end/core/sdk/NetworkManager.ts;l=398;drc=225e1240f522ca684473f541ae6dae6cd766dd33.\n 'Slow 3G': {\n // ~500Kbps down\n download: ((500 * 1000) / 8) * 0.8,\n // ~500Kbps up\n upload: ((500 * 1000) / 8) * 0.8,\n // 400ms RTT\n latency: 400 * 5,\n } as NetworkConditions,\n 'Fast 3G': {\n // ~1.6 Mbps down\n download: ((1.6 * 1000 * 1000) / 8) * 0.9,\n // ~0.75 Mbps up\n upload: ((750 * 1000) / 8) * 0.9,\n // 150ms RTT\n latency: 150 * 3.75,\n } as NetworkConditions,\n // alias to Fast 3G to align with Lighthouse (crbug.com/342406608)\n // and DevTools (crbug.com/342406608),\n 'Slow 4G': {\n // ~1.6 Mbps down\n download: ((1.6 * 1000 * 1000) / 8) * 0.9,\n // ~0.75 Mbps up\n upload: ((750 * 1000) / 8) * 0.9,\n // 150ms RTT\n latency: 150 * 3.75,\n } as NetworkConditions,\n 'Fast 4G': {\n // 9 Mbps down\n download: ((9 * 1000 * 1000) / 8) * 0.9,\n // 1.5 Mbps up\n upload: ((1.5 * 1000 * 1000) / 8) * 0.9,\n // 60ms RTT\n latency: 60 * 2.75,\n } as NetworkConditions,\n});\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Viewport} from './Viewport.js';\n\n/**\n * @public\n */\nexport interface Device {\n userAgent: string;\n viewport: Viewport;\n}\n\nconst knownDevices = [\n {\n name: 'Blackberry PlayBook',\n userAgent:\n 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',\n viewport: {\n width: 600,\n height: 1024,\n deviceScaleFactor: 1,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Blackberry PlayBook landscape',\n userAgent:\n 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',\n viewport: {\n width: 1024,\n height: 600,\n deviceScaleFactor: 1,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'BlackBerry Z30',\n userAgent:\n 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',\n viewport: {\n width: 360,\n height: 640,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'BlackBerry Z30 landscape',\n userAgent:\n 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',\n viewport: {\n width: 640,\n height: 360,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Galaxy Note 3',\n userAgent:\n 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',\n viewport: {\n width: 360,\n height: 640,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Galaxy Note 3 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',\n viewport: {\n width: 640,\n height: 360,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Galaxy Note II',\n userAgent:\n 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',\n viewport: {\n width: 360,\n height: 640,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Galaxy Note II landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',\n viewport: {\n width: 640,\n height: 360,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Galaxy S III',\n userAgent:\n 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',\n viewport: {\n width: 360,\n height: 640,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Galaxy S III landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',\n viewport: {\n width: 640,\n height: 360,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Galaxy S5',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 360,\n height: 640,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Galaxy S5 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 640,\n height: 360,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Galaxy S8',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36',\n viewport: {\n width: 360,\n height: 740,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Galaxy S8 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36',\n viewport: {\n width: 740,\n height: 360,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Galaxy S9+',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36',\n viewport: {\n width: 320,\n height: 658,\n deviceScaleFactor: 4.5,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Galaxy S9+ landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36',\n viewport: {\n width: 658,\n height: 320,\n deviceScaleFactor: 4.5,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Galaxy Tab S4',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36',\n viewport: {\n width: 712,\n height: 1138,\n deviceScaleFactor: 2.25,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Galaxy Tab S4 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36',\n viewport: {\n width: 1138,\n height: 712,\n deviceScaleFactor: 2.25,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPad',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',\n viewport: {\n width: 768,\n height: 1024,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPad landscape',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',\n viewport: {\n width: 1024,\n height: 768,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPad (gen 6)',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 768,\n height: 1024,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPad (gen 6) landscape',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 1024,\n height: 768,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPad (gen 7)',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 810,\n height: 1080,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPad (gen 7) landscape',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 1080,\n height: 810,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPad Mini',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',\n viewport: {\n width: 768,\n height: 1024,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPad Mini landscape',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',\n viewport: {\n width: 1024,\n height: 768,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPad Pro',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',\n viewport: {\n width: 1024,\n height: 1366,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPad Pro landscape',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',\n viewport: {\n width: 1366,\n height: 1024,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPad Pro 11',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 834,\n height: 1194,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPad Pro 11 landscape',\n userAgent:\n 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 1194,\n height: 834,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 4',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',\n viewport: {\n width: 320,\n height: 480,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 4 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',\n viewport: {\n width: 480,\n height: 320,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 5',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',\n viewport: {\n width: 320,\n height: 568,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 5 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',\n viewport: {\n width: 568,\n height: 320,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 6',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 375,\n height: 667,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 6 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 667,\n height: 375,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 6 Plus',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 414,\n height: 736,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 6 Plus landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 736,\n height: 414,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 7',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 375,\n height: 667,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 7 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 667,\n height: 375,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 7 Plus',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 414,\n height: 736,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 7 Plus landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 736,\n height: 414,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 8',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 375,\n height: 667,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 8 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 667,\n height: 375,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 8 Plus',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 414,\n height: 736,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 8 Plus landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 736,\n height: 414,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone SE',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',\n viewport: {\n width: 320,\n height: 568,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone SE landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',\n viewport: {\n width: 568,\n height: 320,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone SE (3rd gen)',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/26.5 Mobile/19E241 Safari/602.1',\n viewport: {\n width: 375,\n height: 667,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone SE (3rd gen) landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/26.5 Mobile/19E241 Safari/602.1',\n viewport: {\n width: 667,\n height: 375,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone X',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 375,\n height: 812,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone X landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',\n viewport: {\n width: 812,\n height: 375,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone XR',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 414,\n height: 896,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone XR landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 896,\n height: 414,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 11',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 414,\n height: 828,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 11 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 828,\n height: 414,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 11 Pro',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 375,\n height: 812,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 11 Pro landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 812,\n height: 375,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 11 Pro Max',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 414,\n height: 896,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 11 Pro Max landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 896,\n height: 414,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 12',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 390,\n height: 844,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 12 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 844,\n height: 390,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 12 Pro',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 390,\n height: 844,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 12 Pro landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 844,\n height: 390,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 12 Pro Max',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 428,\n height: 926,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 12 Pro Max landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 926,\n height: 428,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 12 Mini',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 375,\n height: 812,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 12 Mini landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 812,\n height: 375,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 13',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 390,\n height: 844,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 13 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 844,\n height: 390,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 13 Pro',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 390,\n height: 844,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 13 Pro landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 844,\n height: 390,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 13 Pro Max',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 428,\n height: 926,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 13 Pro Max landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 926,\n height: 428,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 13 Mini',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 375,\n height: 812,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 13 Mini landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 812,\n height: 375,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 14',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 390,\n height: 663,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 14 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 750,\n height: 340,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 14 Plus',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 428,\n height: 745,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 14 Plus landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 832,\n height: 378,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 14 Pro',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 393,\n height: 659,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 14 Pro landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 734,\n height: 343,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 14 Pro Max',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 430,\n height: 739,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 14 Pro Max landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 814,\n height: 380,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 15',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 393,\n height: 659,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 15 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 734,\n height: 343,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 15 Plus',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 430,\n height: 739,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 15 Plus landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 814,\n height: 380,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 15 Pro',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 393,\n height: 659,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 15 Pro landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 734,\n height: 343,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 15 Pro Max',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 430,\n height: 739,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 15 Pro Max landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 814,\n height: 380,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 16',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 393,\n height: 659,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 16 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 734,\n height: 343,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 16 Plus',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 430,\n height: 739,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 16 Plus landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 814,\n height: 380,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 16 Pro',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 402,\n height: 681,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 16 Pro landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 756,\n height: 352,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 16 Pro Max',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 440,\n height: 763,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 16 Pro Max landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 838,\n height: 390,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 16e',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 390,\n height: 651,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 16e landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 726,\n height: 340,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 17',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 402,\n height: 681,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 17 landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 756,\n height: 352,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone Air',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 420,\n height: 719,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone Air landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 794,\n height: 370,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 17 Pro',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 402,\n height: 681,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 17 Pro landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 756,\n height: 352,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 17 Pro Max',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 440,\n height: 763,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 17 Pro Max landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 838,\n height: 390,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'iPhone 17e',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 390,\n height: 651,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'iPhone 17e landscape',\n userAgent:\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',\n viewport: {\n width: 726,\n height: 340,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'JioPhone 2',\n userAgent:\n 'Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5',\n viewport: {\n width: 240,\n height: 320,\n deviceScaleFactor: 1,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'JioPhone 2 landscape',\n userAgent:\n 'Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5',\n viewport: {\n width: 320,\n height: 240,\n deviceScaleFactor: 1,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Kindle Fire HDX',\n userAgent:\n 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',\n viewport: {\n width: 800,\n height: 1280,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Kindle Fire HDX landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',\n viewport: {\n width: 1280,\n height: 800,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'LG Optimus L70',\n userAgent:\n 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 384,\n height: 640,\n deviceScaleFactor: 1.25,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'LG Optimus L70 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 640,\n height: 384,\n deviceScaleFactor: 1.25,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Microsoft Lumia 550',\n userAgent:\n 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',\n viewport: {\n width: 640,\n height: 360,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Microsoft Lumia 950',\n userAgent:\n 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',\n viewport: {\n width: 360,\n height: 640,\n deviceScaleFactor: 4,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Microsoft Lumia 950 landscape',\n userAgent:\n 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',\n viewport: {\n width: 640,\n height: 360,\n deviceScaleFactor: 4,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Nexus 10',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36',\n viewport: {\n width: 800,\n height: 1280,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Nexus 10 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36',\n viewport: {\n width: 1280,\n height: 800,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Nexus 4',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 384,\n height: 640,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Nexus 4 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 640,\n height: 384,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Nexus 5',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 360,\n height: 640,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Nexus 5 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 640,\n height: 360,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Nexus 5X',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 412,\n height: 732,\n deviceScaleFactor: 2.625,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Nexus 5X landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 732,\n height: 412,\n deviceScaleFactor: 2.625,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Nexus 6',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 412,\n height: 732,\n deviceScaleFactor: 3.5,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Nexus 6 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 732,\n height: 412,\n deviceScaleFactor: 3.5,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Nexus 6P',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 412,\n height: 732,\n deviceScaleFactor: 3.5,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Nexus 6P landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 732,\n height: 412,\n deviceScaleFactor: 3.5,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Nexus 7',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36',\n viewport: {\n width: 600,\n height: 960,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Nexus 7 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36',\n viewport: {\n width: 960,\n height: 600,\n deviceScaleFactor: 2,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Nokia Lumia 520',\n userAgent:\n 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',\n viewport: {\n width: 320,\n height: 533,\n deviceScaleFactor: 1.5,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Nokia Lumia 520 landscape',\n userAgent:\n 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',\n viewport: {\n width: 533,\n height: 320,\n deviceScaleFactor: 1.5,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Nokia N9',\n userAgent:\n 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',\n viewport: {\n width: 480,\n height: 854,\n deviceScaleFactor: 1,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Nokia N9 landscape',\n userAgent:\n 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',\n viewport: {\n width: 854,\n height: 480,\n deviceScaleFactor: 1,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Pixel 2',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 411,\n height: 731,\n deviceScaleFactor: 2.625,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Pixel 2 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 731,\n height: 411,\n deviceScaleFactor: 2.625,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Pixel 2 XL',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 411,\n height: 823,\n deviceScaleFactor: 3.5,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Pixel 2 XL landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',\n viewport: {\n width: 823,\n height: 411,\n deviceScaleFactor: 3.5,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Pixel 3',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36',\n viewport: {\n width: 393,\n height: 786,\n deviceScaleFactor: 2.75,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Pixel 3 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36',\n viewport: {\n width: 786,\n height: 393,\n deviceScaleFactor: 2.75,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Pixel 4',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36',\n viewport: {\n width: 353,\n height: 745,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Pixel 4 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36',\n viewport: {\n width: 745,\n height: 353,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Pixel 4a (5G)',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',\n viewport: {\n width: 353,\n height: 745,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Pixel 4a (5G) landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',\n viewport: {\n width: 745,\n height: 353,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Pixel 5',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',\n viewport: {\n width: 393,\n height: 851,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Pixel 5 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',\n viewport: {\n width: 851,\n height: 393,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n {\n name: 'Moto G4',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',\n viewport: {\n width: 360,\n height: 640,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: false,\n },\n },\n {\n name: 'Moto G4 landscape',\n userAgent:\n 'Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',\n viewport: {\n width: 640,\n height: 360,\n deviceScaleFactor: 3,\n isMobile: true,\n hasTouch: true,\n isLandscape: true,\n },\n },\n] as const;\n\nconst knownDevicesByName = {} as Record<\n (typeof knownDevices)[number]['name'],\n Device\n>;\n\nfor (const device of knownDevices) {\n knownDevicesByName[device.name] = device;\n}\n\n/**\n * A list of devices to be used with {@link Page.emulate}.\n *\n * @example\n *\n * ```ts\n * import {KnownDevices} from 'puppeteer';\n * const iPhone = KnownDevices['iPhone 17 Pro'];\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.emulate(iPhone);\n * await page.goto('https://www.google.com');\n * // other actions...\n * await browser.close();\n * ```\n *\n * @public\n */\nexport const KnownDevices = Object.freeze(knownDevicesByName);\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {BrowserCloseCallback} from '../api/Browser.js';\nimport {Connection} from '../cdp/Connection.js';\nimport type {ConnectionTransport} from '../common/ConnectionTransport.js';\nimport type {ConnectOptions} from '../common/ConnectOptions.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {ProtocolError, UnsupportedOperation} from '../common/Errors.js';\nimport {DEFAULT_VIEWPORT} from '../common/util.js';\nimport {createIncrementalIdGenerator} from '../util/incremental-id-generator.js';\n\nimport type {BidiBrowser} from './Browser.js';\nimport type {BidiConnection} from './Connection.js';\n\n/**\n * Users should never call this directly; it's called when calling `puppeteer.connect`\n * with `protocol: 'webDriverBiDi'`. This method attaches Puppeteer to an existing browser\n * instance. First it tries to connect to the browser using pure BiDi. If the protocol is\n * not supported, connects to the browser using BiDi over CDP.\n *\n * @internal\n */\nexport async function _connectToBiDiBrowser(\n connectionTransport: ConnectionTransport,\n url: string,\n options: ConnectOptions,\n logger: Logger,\n): Promise<BidiBrowser> {\n const {\n acceptInsecureCerts = false,\n networkEnabled = true,\n issuesEnabled = true,\n defaultViewport = DEFAULT_VIEWPORT,\n } = options;\n\n const {bidiConnection, cdpConnection, closeCallback} =\n await getBiDiConnection(connectionTransport, url, options, logger);\n const BiDi = await import(/* webpackIgnore: true */ './bidi.js');\n const bidiBrowser = await BiDi.BidiBrowser.create({\n connection: bidiConnection,\n cdpConnection,\n closeCallback,\n process: undefined,\n defaultViewport: defaultViewport,\n acceptInsecureCerts: acceptInsecureCerts,\n networkEnabled,\n issuesEnabled,\n capabilities: options.capabilities,\n logger,\n });\n return bidiBrowser;\n}\n\n/**\n * Returns a BiDiConnection established to the endpoint specified by the options and a\n * callback closing the browser. Callback depends on whether the connection is pure BiDi\n * or BiDi over CDP.\n * The method tries to connect to the browser using pure BiDi protocol, and falls back\n * to BiDi over CDP.\n */\nasync function getBiDiConnection(\n connectionTransport: ConnectionTransport,\n url: string,\n options: ConnectOptions,\n logger: Logger,\n): Promise<{\n cdpConnection?: Connection;\n bidiConnection: BidiConnection;\n closeCallback: BrowserCloseCallback;\n}> {\n const BiDi = await import(/* webpackIgnore: true */ './bidi.js');\n const {\n slowMo = 0,\n protocolTimeout,\n idGenerator = createIncrementalIdGenerator(),\n } = options;\n\n // Try pure BiDi first.\n const pureBidiConnection = new BiDi.BidiConnection(\n url,\n connectionTransport,\n idGenerator,\n slowMo,\n protocolTimeout,\n options.logger ?? logger,\n );\n try {\n const result = await pureBidiConnection.send('session.status', {});\n if ('type' in result && result.type === 'success') {\n // The `browserWSEndpoint` points to an endpoint supporting pure WebDriver BiDi.\n return {\n bidiConnection: pureBidiConnection,\n closeCallback: async () => {\n await pureBidiConnection.send('browser.close', {}).catch(error => {\n logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n },\n };\n }\n } catch (e) {\n if (!(e instanceof ProtocolError)) {\n // Unexpected exception not related to BiDi / CDP. Rethrow.\n throw e;\n }\n }\n // Unbind the connection to avoid memory leaks.\n pureBidiConnection.unbind();\n\n // Fall back to CDP over BiDi reusing the WS connection.\n const cdpConnection = new Connection(\n url,\n connectionTransport,\n slowMo,\n protocolTimeout,\n /* rawErrors= */ true,\n idGenerator,\n options.logger ?? logger,\n );\n\n const version = await cdpConnection.send('Browser.getVersion');\n if (version.product.toLowerCase().includes('firefox')) {\n throw new UnsupportedOperation(\n 'Firefox is not supported in BiDi over CDP mode.',\n );\n }\n\n const bidiOverCdpConnection = await BiDi.connectBidiOverCdp(\n cdpConnection,\n logger,\n );\n return {\n cdpConnection,\n bidiConnection: bidiOverCdpConnection,\n closeCallback: async () => {\n // In case of BiDi over CDP, we need to close browser via CDP.\n await cdpConnection.send('Browser.close').catch(error => {\n logger?.(DEBUG_PREFIXES.error)?.(error);\n });\n },\n };\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {URLPattern} from '../../third_party/urlpattern-polyfill/urlpattern-polyfill.js';\nimport type {Browser} from '../api/Browser.js';\nimport {_connectToBiDiBrowser} from '../bidi/BrowserConnector.js';\nimport {_connectToCdpBrowser} from '../cdp/BrowserConnector.js';\nimport {environment, isNode} from '../environment.js';\nimport {assert} from '../util/assert.js';\nimport {isErrorLike} from '../util/ErrorLike.js';\n\nimport type {ConnectionTransport} from './ConnectionTransport.js';\nimport type {ConnectOptions} from './ConnectOptions.js';\nimport type {Logger} from './Debug.js';\n\nconst getWebSocketTransportClass = async () => {\n return isNode\n ? (await import('../node/NodeWebSocketTransport.js')).NodeWebSocketTransport\n : (await import('../common/BrowserWebSocketTransport.js'))\n .BrowserWebSocketTransport;\n};\n\n/**\n * Users should never call this directly; it's called when calling\n * `puppeteer.connect`. This method attaches Puppeteer to an existing browser instance.\n *\n * @internal\n */\nexport function assertSupportedUrlRestrictions(options: {\n allowlist?: string[];\n blocklist?: string[];\n protocol?: string;\n}): void {\n if (options.blocklist && options.allowlist) {\n throw new Error('Cannot specify both blocklist and allowlist');\n }\n if (\n options.protocol === 'webDriverBiDi' &&\n (options.blocklist || options.allowlist)\n ) {\n throw new Error(\n 'blocklist and allowlist are only supported with the CDP protocol',\n );\n }\n if (options.blocklist) {\n for (const rule of options.blocklist) {\n new URLPattern(rule);\n }\n }\n if (options.allowlist) {\n for (const rule of options.allowlist) {\n new URLPattern(rule);\n }\n }\n}\n\n/**\n * @internal\n */\nexport async function _connectToBrowser(\n options: ConnectOptions & {logger: Logger},\n): Promise<Browser> {\n assertSupportedUrlRestrictions(options);\n const {connectionTransport, endpointUrl} =\n await getConnectionTransport(options);\n\n if (options.protocol === 'webDriverBiDi') {\n const bidiBrowser = await _connectToBiDiBrowser(\n connectionTransport,\n endpointUrl,\n options,\n options.logger,\n );\n return bidiBrowser;\n } else {\n const cdpBrowser = await _connectToCdpBrowser(\n connectionTransport,\n endpointUrl,\n options,\n options.logger,\n );\n return cdpBrowser;\n }\n}\n\n/**\n * Establishes a websocket connection by given options and returns both transport and\n * endpoint url the transport is connected to.\n * @internal\n */\nasync function getConnectionTransport(\n options: ConnectOptions & {logger: Logger},\n): Promise<{connectionTransport: ConnectionTransport; endpointUrl: string}> {\n const {browserWSEndpoint, browserURL, channel, transport} = options;\n // `wsOptions.headers` supersedes the deprecated top-level `headers`.\n const headers = options.wsOptions?.headers ?? options.headers ?? {};\n const wsOptions = options.wsOptions ?? {};\n\n assert(\n Number(!!browserWSEndpoint) +\n Number(!!browserURL) +\n Number(!!transport) +\n Number(!!channel) ===\n 1,\n 'Exactly one of browserWSEndpoint, browserURL, transport or channel must be passed to puppeteer.connect',\n );\n\n if (transport) {\n return {connectionTransport: transport, endpointUrl: ''};\n } else if (browserWSEndpoint) {\n const WebSocketClass = await getWebSocketTransportClass();\n const connectionTransport: ConnectionTransport =\n await WebSocketClass.create(\n browserWSEndpoint,\n headers,\n options.logger,\n wsOptions,\n );\n return {\n connectionTransport: connectionTransport,\n endpointUrl: browserWSEndpoint,\n };\n } else if (browserURL) {\n const connectionURL = await getWSEndpoint(browserURL, headers);\n const WebSocketClass = await getWebSocketTransportClass();\n const connectionTransport: ConnectionTransport =\n await WebSocketClass.create(\n connectionURL,\n headers,\n options.logger,\n wsOptions,\n );\n return {\n connectionTransport: connectionTransport,\n endpointUrl: connectionURL,\n };\n } else if (options.channel && isNode) {\n const {detectBrowserPlatform, resolveDefaultUserDataDir, Browser} =\n await import('@puppeteer/browsers');\n const platform = detectBrowserPlatform();\n if (!platform) {\n throw new Error('Could not detect required browser platform');\n }\n const {convertPuppeteerChannelToBrowsersChannel} =\n await import('../node/LaunchOptions.js');\n const {join} = await import('node:path');\n const userDataDir = resolveDefaultUserDataDir(\n Browser.CHROME,\n platform,\n convertPuppeteerChannelToBrowsersChannel(options.channel),\n );\n const portPath = join(userDataDir, 'DevToolsActivePort');\n try {\n const fileContent = await environment.value.readFile(portPath, 'ascii');\n const [rawPort, rawPath] = fileContent\n .split('\\n')\n .map(line => {\n return line.trim();\n })\n .filter(line => {\n return !!line;\n });\n if (!rawPort || !rawPath) {\n throw new Error(`Invalid DevToolsActivePort '${fileContent}' found`);\n }\n const port = parseInt(rawPort, 10);\n if (isNaN(port) || port <= 0 || port > 65535) {\n throw new Error(`Invalid port '${rawPort}' found`);\n }\n const browserWSEndpoint = `ws://localhost:${port}${rawPath}`;\n const WebSocketClass = await getWebSocketTransportClass();\n const connectionTransport = await WebSocketClass.create(\n browserWSEndpoint,\n headers,\n options.logger,\n wsOptions,\n );\n return {\n connectionTransport: connectionTransport,\n endpointUrl: browserWSEndpoint,\n };\n } catch (error) {\n throw new Error(\n `Could not find DevToolsActivePort for ${options.channel} at ${portPath}`,\n {\n cause: error,\n },\n );\n }\n }\n throw new Error('Invalid connection options');\n}\n\nasync function getWSEndpoint(\n browserURL: string,\n headers?: Record<string, string>,\n): Promise<string> {\n const endpointURL = new URL('/json/version', browserURL);\n\n try {\n const result = await globalThis.fetch(endpointURL.toString(), {\n method: 'GET',\n headers,\n });\n if (!result.ok) {\n throw new Error(`HTTP ${result.statusText}`);\n }\n const data = await result.json();\n return data.webSocketDebuggerUrl;\n } catch (error) {\n if (isErrorLike(error)) {\n error.message =\n `Failed to fetch browser webSocket URL from ${endpointURL}: ` +\n error.message;\n }\n throw error;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {Browser} from '../api/Browser.js';\n\nimport {_connectToBrowser} from './BrowserConnector.js';\nimport type {ConnectOptions} from './ConnectOptions.js';\nimport {\n type CustomQueryHandler,\n customQueryHandlers,\n} from './CustomQueryHandler.js';\nimport {debug} from './Debug.js';\n\n/**\n * Settings that are common to the Puppeteer class, regardless of environment.\n *\n * @internal\n */\nexport interface CommonPuppeteerSettings {\n isPuppeteerCore: boolean;\n}\n\n/**\n * The main Puppeteer class.\n *\n * IMPORTANT: if you are using Puppeteer in a Node environment, you will get an\n * instance of {@link PuppeteerNode} when you import or require `puppeteer`.\n * That class extends `Puppeteer`, so has all the methods documented below as\n * well as all that are defined on {@link PuppeteerNode}.\n *\n * @public\n */\nexport class Puppeteer {\n /**\n * Operations for {@link CustomQueryHandler | custom query handlers}. See\n * {@link CustomQueryHandlerRegistry}.\n *\n * @internal\n */\n static customQueryHandlers = customQueryHandlers;\n\n /**\n * Registers a {@link CustomQueryHandler | custom query handler}.\n *\n * @remarks\n * After registration, the handler can be used everywhere where a selector is\n * expected by prepending the selection string with `<name>/`. The name is only\n * allowed to consist of lower- and upper case latin letters.\n *\n * @example\n *\n * ```\n * import {Puppeteer}, puppeteer from 'puppeteer';\n *\n * Puppeteer.registerCustomQueryHandler('text', { … });\n * const aHandle = await page.$('text/…');\n * ```\n *\n * @param name - The name that the custom query handler will be registered\n * under.\n * @param queryHandler - The {@link CustomQueryHandler | custom query handler}\n * to register.\n *\n * @public\n */\n static registerCustomQueryHandler(\n name: string,\n queryHandler: CustomQueryHandler,\n ): void {\n return this.customQueryHandlers.register(name, queryHandler);\n }\n\n /**\n * Unregisters a custom query handler for a given name.\n */\n static unregisterCustomQueryHandler(name: string): void {\n return this.customQueryHandlers.unregister(name);\n }\n\n /**\n * Gets the names of all custom query handlers.\n */\n static customQueryHandlerNames(): string[] {\n return this.customQueryHandlers.names();\n }\n\n /**\n * Unregisters all custom query handlers.\n */\n static clearCustomQueryHandlers(): void {\n return this.customQueryHandlers.clear();\n }\n\n /**\n * @internal\n */\n _isPuppeteerCore: boolean;\n /**\n * @internal\n */\n protected _changedBrowsers = false;\n\n /**\n * @internal\n */\n constructor(settings: CommonPuppeteerSettings) {\n this._isPuppeteerCore = settings.isPuppeteerCore;\n\n this.connect = this.connect.bind(this);\n }\n\n /**\n * This method attaches Puppeteer to an existing browser instance.\n *\n * @remarks\n *\n * @param options - Set of configurable options to set on the browser.\n * @returns Promise which resolves to browser instance.\n */\n connect(options: ConnectOptions): Promise<Browser> {\n const withLogger = {\n logger: debug,\n ...options,\n };\n return _connectToBrowser(withLogger);\n }\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @internal\n */\nexport class TaskQueue {\n #chain: Promise<void>;\n\n constructor() {\n this.#chain = Promise.resolve();\n }\n\n postTask<T>(task: () => Promise<T>): Promise<T> {\n const result = this.#chain.then(task);\n this.#chain = result.then(\n () => {\n return undefined;\n },\n () => {\n return undefined;\n },\n );\n return result;\n }\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @internal\n */\nexport const PUPPETEER_REVISIONS = Object.freeze({\n chrome: '152.0.7977.75',\n 'chrome-headless-shell': '152.0.7977.75',\n firefox: 'stable_155.0',\n});\n"],"mappings":"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","names":["SuppressedError","handler","b","b2","P","_","v","q","a","v2","timeout","x","source","source","source","source","source","a","b","v","_","concat","context","x","filter","CDPSessionEvent","map","iterator","size","context","__addDisposableResource","context","timeout","selector","visible","_","from","QueryHandler","_","__addDisposableResource","context","propertyName","map","__addDisposableResource","LocatorEvent","timeout","__addDisposableResource","_","result","ElementHandle","__esDecorate","__runInitializers","QueryHandler","__addDisposableResource","elements","results","visibility","context","tagName","x","y","source","values","box","offsets","FrameEvent","__esDecorate","__runInitializers","__addDisposableResource","document","QueryHandler","type","content","InterceptResolutionAction","v","x","timeout","__esDecorate","__runInitializers","x","__addDisposableResource","x","createFunction","context","timeout","TargetType","WebWorkerEvent","root","__addDisposableResource","node","context","__addDisposableResource","stack","error","NetworkManagerEvent","timeout","timeout","a","b","__esDecorate","__setFunctionName","__runInitializers","source","filter","timeout","__esDecorate","__runInitializers","_","__addDisposableResource","exceptionDetails","remoteObject","rewriteError","context","FrameManagerEvent","context","timeout","__esDecorate","__runInitializers","timeout","url","referrerPolicy","error","v","requestWillBeSentEvent","request","extraInfo","__addDisposableResource","source","identifier","context","x","from","__esDecorate","__runInitializers","__addDisposableResource","timeout","source","supportedMetrics","context","x","__addDisposableResource","InitializationStatus","target","process","context","source","Browser","browserWSEndpoint"]}
|