browser-debugger-cli 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__testfixtures__/cdpMessages.d.ts +1 -1
- package/dist/__testfixtures__/connectionTargets.d.ts +1 -1
- package/dist/__tests__/fixtures/schema-v0.2.1.golden.json +47 -0
- package/dist/__tests__/schema.contract.test.d.ts +19 -0
- package/dist/__tests__/schema.contract.test.d.ts.map +1 -0
- package/dist/__tests__/schema.contract.test.js +236 -0
- package/dist/__tests__/schema.contract.test.js.map +1 -0
- package/dist/__testutils__/assertions.d.ts +1 -1
- package/dist/__testutils__/testFixtures.d.ts +1 -1
- package/dist/cli/commands/cdp.js +1 -1
- package/dist/cli/commands/cleanup.d.ts.map +1 -1
- package/dist/cli/commands/cleanup.js +12 -13
- package/dist/cli/commands/cleanup.js.map +1 -1
- package/dist/cli/commands/console.js +2 -2
- package/dist/cli/commands/details.js +3 -3
- package/dist/cli/commands/details.js.map +1 -1
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +1 -1
- package/dist/cli/commands/dom/helpers/errorHandler.js +4 -3
- package/dist/cli/commands/dom/helpers/errorHandler.js.map +1 -1
- package/dist/cli/commands/dom/index.js +1 -1
- package/dist/cli/commands/dom.d.ts.map +1 -0
- package/dist/cli/commands/dom.js +257 -0
- package/dist/cli/commands/dom.js.map +1 -0
- package/dist/cli/commands/domErrorHandler.d.ts +45 -0
- package/dist/cli/commands/domErrorHandler.d.ts.map +1 -0
- package/dist/cli/commands/domErrorHandler.js +71 -0
- package/dist/cli/commands/domErrorHandler.js.map +1 -0
- package/dist/cli/commands/domEvalHelpers.d.ts +52 -0
- package/dist/cli/commands/domEvalHelpers.d.ts.map +1 -0
- package/dist/cli/commands/domEvalHelpers.js +76 -0
- package/dist/cli/commands/domEvalHelpers.js.map +1 -0
- package/dist/cli/commands/domOptionsBuilder.d.ts +35 -0
- package/dist/cli/commands/domOptionsBuilder.d.ts.map +1 -0
- package/dist/cli/commands/domOptionsBuilder.js +51 -0
- package/dist/cli/commands/domOptionsBuilder.js.map +1 -0
- package/dist/cli/{collectors/helpers/selectorParser.d.ts → commands/domSelectorParser.d.ts} +1 -1
- package/dist/cli/commands/domSelectorParser.d.ts.map +1 -0
- package/dist/cli/{collectors/helpers/selectorParser.js → commands/domSelectorParser.js} +1 -1
- package/dist/cli/commands/domSelectorParser.js.map +1 -0
- package/dist/cli/commands/network.d.ts.map +1 -1
- package/dist/cli/commands/network.js +8 -5
- package/dist/cli/commands/network.js.map +1 -1
- package/dist/cli/commands/peek.d.ts.map +1 -1
- package/dist/cli/commands/peek.js +7 -7
- package/dist/cli/commands/peek.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +19 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +13 -10
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.d.ts.map +1 -1
- package/dist/cli/commands/stop.js +7 -6
- package/dist/cli/commands/stop.js.map +1 -1
- package/dist/cli/formatters/detailsFormatter.d.ts +1 -1
- package/dist/cli/formatters/previewFormatter.d.ts +1 -1
- package/dist/cli/formatters/previewFormatter.js +1 -1
- package/dist/cli/formatters/previewFormatter.js.map +1 -1
- package/dist/cli/formatters/statusFormatter.d.ts +6 -1
- package/dist/cli/formatters/statusFormatter.d.ts.map +1 -1
- package/dist/cli/formatters/statusFormatter.js +49 -4
- package/dist/cli/formatters/statusFormatter.js.map +1 -1
- package/dist/cli/handlers/CommandRunner.d.ts.map +1 -1
- package/dist/cli/handlers/CommandRunner.js +5 -5
- package/dist/cli/handlers/CommandRunner.js.map +1 -1
- package/dist/cli/handlers/OutputBuilder.d.ts +1 -1
- package/dist/cli/handlers/daemonSessionController.d.ts +1 -1
- package/dist/cli/handlers/daemonSessionController.d.ts.map +1 -1
- package/dist/cli/handlers/daemonSessionController.js +16 -45
- package/dist/cli/handlers/daemonSessionController.js.map +1 -1
- package/dist/cli/handlers/landingPage.d.ts +8 -0
- package/dist/cli/handlers/landingPage.d.ts.map +1 -0
- package/dist/cli/handlers/landingPage.js +8 -0
- package/dist/cli/handlers/landingPage.js.map +1 -0
- package/dist/cli/registry.js +10 -10
- package/dist/cli/registry.js.map +1 -1
- package/dist/collectors/__tests__/network.contract.test.js +25 -10
- package/dist/collectors/__tests__/network.contract.test.js.map +1 -1
- package/dist/collectors/console.d.ts +1 -1
- package/dist/collectors/console.js.map +1 -1
- package/dist/collectors/dom.d.ts +1 -1
- package/dist/collectors/network.d.ts +1 -1
- package/dist/collectors/network.js.map +1 -1
- package/dist/commandRegistry.d.ts +11 -0
- package/dist/commandRegistry.d.ts.map +1 -0
- package/dist/commandRegistry.js +45 -0
- package/dist/commandRegistry.js.map +1 -0
- package/dist/commands/__tests__/cdp.contract.test.d.ts +24 -0
- package/dist/commands/__tests__/cdp.contract.test.d.ts.map +1 -0
- package/dist/commands/__tests__/cdp.contract.test.js +466 -0
- package/dist/commands/__tests__/cdp.contract.test.js.map +1 -0
- package/dist/commands/__tests__/domEval.contract.test.d.ts +17 -0
- package/dist/commands/__tests__/domEval.contract.test.d.ts.map +1 -0
- package/dist/commands/__tests__/domEval.contract.test.js +231 -0
- package/dist/commands/__tests__/domEval.contract.test.js.map +1 -0
- package/dist/commands/cdp.d.ts +8 -0
- package/dist/commands/cdp.d.ts.map +1 -0
- package/dist/commands/cdp.js +45 -0
- package/dist/commands/cdp.js.map +1 -0
- package/dist/commands/cleanup.d.ts +8 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +170 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/console.d.ts +8 -0
- package/dist/commands/console.d.ts.map +1 -0
- package/dist/commands/console.js +92 -0
- package/dist/commands/console.js.map +1 -0
- package/dist/commands/details.d.ts +8 -0
- package/dist/commands/details.d.ts.map +1 -0
- package/dist/commands/details.js +68 -0
- package/dist/commands/details.js.map +1 -0
- package/dist/commands/dom.d.ts +8 -0
- package/dist/commands/dom.d.ts.map +1 -0
- package/dist/commands/dom.js +249 -0
- package/dist/commands/dom.js.map +1 -0
- package/dist/commands/domErrorHandler.d.ts +45 -0
- package/dist/commands/domErrorHandler.d.ts.map +1 -0
- package/dist/commands/domErrorHandler.js +71 -0
- package/dist/commands/domErrorHandler.js.map +1 -0
- package/dist/commands/domEvalHelpers.d.ts +48 -0
- package/dist/commands/domEvalHelpers.d.ts.map +1 -0
- package/dist/commands/domEvalHelpers.js +72 -0
- package/dist/commands/domEvalHelpers.js.map +1 -0
- package/dist/commands/domOptionsBuilder.d.ts +35 -0
- package/dist/commands/domOptionsBuilder.d.ts.map +1 -0
- package/dist/commands/domOptionsBuilder.js +51 -0
- package/dist/commands/domOptionsBuilder.js.map +1 -0
- package/dist/commands/domSelectorParser.d.ts +20 -0
- package/dist/commands/domSelectorParser.d.ts.map +1 -0
- package/dist/commands/domSelectorParser.js +20 -0
- package/dist/commands/domSelectorParser.js.map +1 -0
- package/dist/commands/network.d.ts +8 -0
- package/dist/commands/network.d.ts.map +1 -0
- package/dist/commands/network.js +41 -0
- package/dist/commands/network.js.map +1 -0
- package/dist/commands/peek.d.ts +8 -0
- package/dist/commands/peek.d.ts.map +1 -0
- package/dist/commands/peek.js +115 -0
- package/dist/commands/peek.js.map +1 -0
- package/dist/commands/shared/CommandRunner.d.ts +62 -0
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -0
- package/dist/commands/shared/CommandRunner.js +97 -0
- package/dist/commands/shared/CommandRunner.js.map +1 -0
- package/dist/commands/shared/OutputBuilder.d.ts +60 -0
- package/dist/commands/shared/OutputBuilder.d.ts.map +1 -0
- package/dist/commands/shared/OutputBuilder.js +138 -0
- package/dist/commands/shared/OutputBuilder.js.map +1 -0
- package/dist/commands/shared/commonOptions.d.ts +54 -0
- package/dist/commands/shared/commonOptions.d.ts.map +1 -0
- package/dist/commands/shared/commonOptions.js +65 -0
- package/dist/commands/shared/commonOptions.js.map +1 -0
- package/dist/commands/shared/daemonSessionController.d.ts +23 -0
- package/dist/commands/shared/daemonSessionController.d.ts.map +1 -0
- package/dist/commands/shared/daemonSessionController.js +79 -0
- package/dist/commands/shared/daemonSessionController.js.map +1 -0
- package/dist/commands/shared/landingPage.d.ts +8 -0
- package/dist/commands/shared/landingPage.d.ts.map +1 -0
- package/dist/commands/shared/landingPage.js +8 -0
- package/dist/commands/shared/landingPage.js.map +1 -0
- package/dist/commands/shared/sessionController.d.ts +21 -0
- package/dist/commands/shared/sessionController.d.ts.map +1 -0
- package/dist/commands/shared/sessionController.js +54 -0
- package/dist/commands/shared/sessionController.js.map +1 -0
- package/dist/commands/start.d.ts +9 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +85 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/{cli/commands/query.d.ts → commands/status.d.ts} +3 -3
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +88 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +8 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +152 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands.d.ts +11 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +45 -0
- package/dist/commands.js.map +1 -0
- package/dist/connection/__tests__/cdp.contract.test.d.ts.map +1 -1
- package/dist/connection/__tests__/cdp.contract.test.js +1 -2
- package/dist/connection/__tests__/cdp.contract.test.js.map +1 -1
- package/dist/connection/__tests__/finder.contract.test.js +1 -1
- package/dist/connection/__tests__/finder.contract.test.js.map +1 -1
- package/dist/connection/cdp.d.ts +1 -1
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/domOperations.d.ts +48 -0
- package/dist/connection/domOperations.d.ts.map +1 -0
- package/dist/connection/domOperations.js +104 -0
- package/dist/connection/domOperations.js.map +1 -0
- package/dist/connection/finder.js.map +1 -1
- package/dist/connection/launcher.d.ts +7 -3
- package/dist/connection/launcher.d.ts.map +1 -1
- package/dist/connection/launcher.js +82 -21
- package/dist/connection/launcher.js.map +1 -1
- package/dist/constants.d.ts +17 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +28 -0
- package/dist/constants.js.map +1 -1
- package/dist/daemon/__tests__/ipcServer.contract.test.js +25 -11
- package/dist/daemon/__tests__/ipcServer.contract.test.js.map +1 -1
- package/dist/daemon/ipcServer.d.ts.map +1 -1
- package/dist/daemon/ipcServer.js +86 -6
- package/dist/daemon/ipcServer.js.map +1 -1
- package/dist/daemon/launcher.d.ts.map +1 -1
- package/dist/daemon/launcher.js +8 -6
- package/dist/daemon/launcher.js.map +1 -1
- package/dist/daemon/startSession.d.ts +2 -2
- package/dist/daemon/startSession.d.ts.map +1 -1
- package/dist/daemon/startSession.js +14 -11
- package/dist/daemon/startSession.js.map +1 -1
- package/dist/daemon/worker.d.ts +1 -1
- package/dist/daemon/worker.js +179 -52
- package/dist/daemon/worker.js.map +1 -1
- package/dist/{cli/collectors/helpers/domCache.d.ts → dom/cache.d.ts} +1 -5
- package/dist/dom/cache.d.ts.map +1 -0
- package/dist/{cli/collectors/helpers/domCache.js → dom/cache.js} +5 -19
- package/dist/dom/cache.js.map +1 -0
- package/dist/dom/index.d.ts +9 -0
- package/dist/dom/index.d.ts.map +1 -0
- package/dist/dom/index.js +9 -0
- package/dist/dom/index.js.map +1 -0
- package/dist/{cli/collectors/helpers/domQuery.d.ts → dom/query.d.ts} +5 -2
- package/dist/dom/query.d.ts.map +1 -0
- package/dist/{cli/collectors/helpers/domQuery.js → dom/query.js} +11 -7
- package/dist/dom/query.js.map +1 -0
- package/dist/index.js +117 -35
- package/dist/index.js.map +1 -1
- package/dist/ipc/__tests__/client.contract.test.js +11 -1
- package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
- package/dist/ipc/client.d.ts +17 -4
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +26 -6
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/commands.d.ts +52 -1
- package/dist/ipc/commands.d.ts.map +1 -1
- package/dist/ipc/commands.js +8 -0
- package/dist/ipc/commands.js.map +1 -1
- package/dist/ipc/types.d.ts +34 -3
- package/dist/ipc/types.d.ts.map +1 -1
- package/dist/ipc/types.js.map +1 -1
- package/dist/session/metadata.d.ts +2 -2
- package/dist/session/metadata.d.ts.map +1 -1
- package/dist/session/output.d.ts +1 -1
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +4 -3
- package/dist/session/process.js.map +1 -1
- package/dist/session/queryCache.d.ts +36 -0
- package/dist/session/queryCache.d.ts.map +1 -0
- package/dist/session/queryCache.js +66 -0
- package/dist/session/queryCache.js.map +1 -0
- package/dist/telemetry/__tests__/network.contract.test.d.ts +28 -0
- package/dist/telemetry/__tests__/network.contract.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/network.contract.test.js +540 -0
- package/dist/telemetry/__tests__/network.contract.test.js.map +1 -0
- package/dist/telemetry/console.d.ts +19 -0
- package/dist/telemetry/console.d.ts.map +1 -0
- package/dist/telemetry/console.js +87 -0
- package/dist/telemetry/console.js.map +1 -0
- package/dist/telemetry/dom.d.ts +21 -0
- package/dist/telemetry/dom.d.ts.map +1 -0
- package/dist/telemetry/dom.js +99 -0
- package/dist/telemetry/dom.js.map +1 -0
- package/dist/telemetry/network.d.ts +33 -0
- package/dist/telemetry/network.d.ts.map +1 -0
- package/dist/telemetry/network.js +191 -0
- package/dist/telemetry/network.js.map +1 -0
- package/dist/types.d.ts +25 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/errors.d.ts +39 -0
- package/dist/ui/errors.d.ts.map +1 -0
- package/dist/ui/errors.js +48 -0
- package/dist/ui/errors.js.map +1 -0
- package/dist/ui/formatters/cookies.d.ts +32 -0
- package/dist/ui/formatters/cookies.d.ts.map +1 -0
- package/dist/ui/formatters/cookies.js +45 -0
- package/dist/ui/formatters/cookies.js.map +1 -0
- package/dist/ui/formatters/details.d.ts +10 -0
- package/dist/ui/formatters/details.d.ts.map +1 -0
- package/dist/ui/formatters/details.js +61 -0
- package/dist/ui/formatters/details.js.map +1 -0
- package/dist/ui/formatters/dom.d.ts +135 -0
- package/dist/ui/formatters/dom.d.ts.map +1 -0
- package/dist/ui/formatters/dom.js +193 -0
- package/dist/ui/formatters/dom.js.map +1 -0
- package/dist/ui/formatters/index.d.ts +11 -0
- package/dist/ui/formatters/index.d.ts.map +1 -0
- package/dist/ui/formatters/index.js +11 -0
- package/dist/ui/formatters/index.js.map +1 -0
- package/dist/ui/formatters/preview.d.ts +25 -0
- package/dist/ui/formatters/preview.d.ts.map +1 -0
- package/dist/ui/formatters/preview.js +182 -0
- package/dist/ui/formatters/preview.js.map +1 -0
- package/dist/ui/formatters/status.d.ts +39 -0
- package/dist/ui/formatters/status.d.ts.map +1 -0
- package/dist/ui/formatters/status.js +153 -0
- package/dist/ui/formatters/status.js.map +1 -0
- package/dist/ui/formatting.d.ts +300 -0
- package/dist/ui/formatting.d.ts.map +1 -0
- package/dist/ui/formatting.js +454 -0
- package/dist/ui/formatting.js.map +1 -0
- package/dist/ui/messages/chrome.d.ts +172 -0
- package/dist/ui/messages/chrome.d.ts.map +1 -0
- package/dist/ui/messages/chrome.js +253 -0
- package/dist/ui/messages/chrome.js.map +1 -0
- package/dist/ui/messages/commands.d.ts +88 -0
- package/dist/ui/messages/commands.d.ts.map +1 -0
- package/dist/ui/messages/commands.js +150 -0
- package/dist/ui/messages/commands.js.map +1 -0
- package/dist/ui/messages/consoleMessages.d.ts +39 -0
- package/dist/ui/messages/consoleMessages.d.ts.map +1 -0
- package/dist/ui/messages/consoleMessages.js +48 -0
- package/dist/ui/messages/consoleMessages.js.map +1 -0
- package/dist/ui/messages/debug.d.ts +182 -0
- package/dist/ui/messages/debug.d.ts.map +1 -0
- package/dist/ui/messages/debug.js +243 -0
- package/dist/ui/messages/debug.js.map +1 -0
- package/dist/ui/messages/errors.d.ts +91 -0
- package/dist/ui/messages/errors.d.ts.map +1 -0
- package/dist/ui/messages/errors.js +135 -0
- package/dist/ui/messages/errors.js.map +1 -0
- package/dist/ui/messages/index.d.ts +12 -0
- package/dist/ui/messages/index.d.ts.map +1 -0
- package/dist/ui/messages/index.js +12 -0
- package/dist/ui/messages/index.js.map +1 -0
- package/dist/ui/messages/internal.d.ts +30 -0
- package/dist/ui/messages/internal.d.ts.map +1 -0
- package/dist/ui/messages/internal.js +42 -0
- package/dist/ui/messages/internal.js.map +1 -0
- package/dist/ui/messages/preview.d.ts +51 -0
- package/dist/ui/messages/preview.d.ts.map +1 -0
- package/dist/ui/messages/preview.js +76 -0
- package/dist/ui/messages/preview.js.map +1 -0
- package/dist/ui/messages/session.d.ts +54 -0
- package/dist/ui/messages/session.d.ts.map +1 -0
- package/dist/ui/messages/session.js +77 -0
- package/dist/ui/messages/session.js.map +1 -0
- package/dist/ui/messages/validation.d.ts +34 -0
- package/dist/ui/messages/validation.d.ts.map +1 -0
- package/dist/ui/messages/validation.js +38 -0
- package/dist/ui/messages/validation.js.map +1 -0
- package/dist/utils/__tests__/filters.unit.test.js +1 -1
- package/dist/utils/cdpHandlers.d.ts +1 -1
- package/dist/utils/cdpHandlers.js +1 -1
- package/dist/utils/chromeDiagnostics.d.ts +0 -12
- package/dist/utils/chromeDiagnostics.d.ts.map +1 -1
- package/dist/utils/chromeDiagnostics.js +0 -51
- package/dist/utils/chromeDiagnostics.js.map +1 -1
- package/dist/utils/filters.js +1 -1
- package/dist/utils/filters.js.map +1 -1
- package/dist/utils/http.d.ts +1 -1
- package/dist/utils/http.js.map +1 -1
- package/dist/utils/logger.d.ts +68 -12
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +62 -12
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/pageReadiness.d.ts +46 -0
- package/dist/utils/pageReadiness.d.ts.map +1 -0
- package/dist/utils/pageReadiness.js +271 -0
- package/dist/utils/pageReadiness.js.map +1 -0
- package/dist/utils/ui.d.ts +36 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +47 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/url.d.ts +60 -26
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +130 -84
- package/dist/utils/url.js.map +1 -1
- package/package.json +2 -5
- package/dist/cli/collectors/dom.d.ts.map +0 -1
- package/dist/cli/collectors/dom.js +0 -361
- package/dist/cli/collectors/dom.js.map +0 -1
- package/dist/cli/collectors/helpers/domCache.d.ts.map +0 -1
- package/dist/cli/collectors/helpers/domCache.js.map +0 -1
- package/dist/cli/collectors/helpers/domQuery.d.ts.map +0 -1
- package/dist/cli/collectors/helpers/domQuery.js.map +0 -1
- package/dist/cli/collectors/helpers/selectorParser.d.ts.map +0 -1
- package/dist/cli/collectors/helpers/selectorParser.js.map +0 -1
- package/dist/cli/commands/__tests__/ipcTest.test.d.ts +0 -2
- package/dist/cli/commands/__tests__/ipcTest.test.d.ts.map +0 -1
- package/dist/cli/commands/__tests__/ipcTest.test.js +0 -37
- package/dist/cli/commands/__tests__/ipcTest.test.js.map +0 -1
- package/dist/cli/commands/ipcTest.d.ts +0 -23
- package/dist/cli/commands/ipcTest.d.ts.map +0 -1
- package/dist/cli/commands/ipcTest.js +0 -181
- package/dist/cli/commands/ipcTest.js.map +0 -1
- package/dist/cli/commands/query.d.ts.map +0 -1
- package/dist/cli/commands/query.js +0 -127
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/handlers/ChromeBootstrap.d.ts +0 -24
- package/dist/cli/handlers/ChromeBootstrap.d.ts.map +0 -1
- package/dist/cli/handlers/ChromeBootstrap.js +0 -50
- package/dist/cli/handlers/ChromeBootstrap.js.map +0 -1
- package/dist/cli/handlers/OutputWriter.d.ts +0 -15
- package/dist/cli/handlers/OutputWriter.d.ts.map +0 -1
- package/dist/cli/handlers/OutputWriter.js +0 -34
- package/dist/cli/handlers/OutputWriter.js.map +0 -1
- package/dist/cli/handlers/PreviewWriter.d.ts +0 -52
- package/dist/cli/handlers/PreviewWriter.d.ts.map +0 -1
- package/dist/cli/handlers/PreviewWriter.js +0 -119
- package/dist/cli/handlers/PreviewWriter.js.map +0 -1
- package/dist/cli/handlers/SessionLock.d.ts +0 -16
- package/dist/cli/handlers/SessionLock.d.ts.map +0 -1
- package/dist/cli/handlers/SessionLock.js +0 -38
- package/dist/cli/handlers/SessionLock.js.map +0 -1
- package/dist/cli/handlers/SessionLoop.d.ts +0 -19
- package/dist/cli/handlers/SessionLoop.d.ts.map +0 -1
- package/dist/cli/handlers/SessionLoop.js +0 -47
- package/dist/cli/handlers/SessionLoop.js.map +0 -1
- package/dist/cli/handlers/ShutdownController.d.ts +0 -38
- package/dist/cli/handlers/ShutdownController.d.ts.map +0 -1
- package/dist/cli/handlers/ShutdownController.js +0 -83
- package/dist/cli/handlers/ShutdownController.js.map +0 -1
- package/dist/cli/handlers/SignalHandler.d.ts +0 -35
- package/dist/cli/handlers/SignalHandler.d.ts.map +0 -1
- package/dist/cli/handlers/SignalHandler.js +0 -81
- package/dist/cli/handlers/SignalHandler.js.map +0 -1
- package/dist/cli/handlers/TargetSetup.d.ts +0 -42
- package/dist/cli/handlers/TargetSetup.d.ts.map +0 -1
- package/dist/cli/handlers/TargetSetup.js +0 -87
- package/dist/cli/handlers/TargetSetup.js.map +0 -1
- package/dist/connection/__tests__/tabs.contract.test.d.ts +0 -2
- package/dist/connection/__tests__/tabs.contract.test.d.ts.map +0 -1
- package/dist/connection/__tests__/tabs.contract.test.js +0 -137
- package/dist/connection/__tests__/tabs.contract.test.js.map +0 -1
- package/dist/connection/tabs.d.ts +0 -82
- package/dist/connection/tabs.d.ts.map +0 -1
- package/dist/connection/tabs.js +0 -577
- package/dist/connection/tabs.js.map +0 -1
- package/dist/session/BdgSession.d.ts +0 -129
- package/dist/session/BdgSession.d.ts.map +0 -1
- package/dist/session/BdgSession.js +0 -270
- package/dist/session/BdgSession.js.map +0 -1
- package/dist/session/index.d.ts +0 -15
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js +0 -23
- package/dist/session/index.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -12
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -20
- package/dist/utils/validation.js.map +0 -1
- /package/dist/cli/{collectors → commands}/dom.d.ts +0 -0
package/dist/connection/tabs.js
DELETED
|
@@ -1,577 +0,0 @@
|
|
|
1
|
-
import { PAGE_TARGET_TYPE, BLANK_PAGE_URL, CDP_NEW_WINDOW_FLAG, CDP_FLATTEN_SESSION_FLAG, HTTP_LOCALHOST, DEFAULT_TARGET_READY_TIMEOUT_MS, TARGET_READY_POLL_INTERVAL_MS, LOADING_PAGE_ADDITIONAL_WAIT_MS, DEFAULT_VERIFICATION_TIMEOUT_MS, VERIFICATION_INITIAL_DELAY_MS, VERIFICATION_MAX_DELAY_MS, VERIFICATION_BACKOFF_MULTIPLIER, DEFAULT_REUSE_TAB, } from '../constants.js';
|
|
2
|
-
import { getErrorMessage } from '../utils/errors.js';
|
|
3
|
-
import { fetchCDPTargetById } from '../utils/http.js';
|
|
4
|
-
import { normalizeUrl } from '../utils/url.js';
|
|
5
|
-
// Tab Matching Score Thresholds
|
|
6
|
-
const EXACT_URL_MATCH_SCORE = 100;
|
|
7
|
-
const HOST_AND_PATH_MATCH_SCORE = 90;
|
|
8
|
-
const HOST_AND_PATH_PREFIX_MATCH_SCORE = 70;
|
|
9
|
-
const HOST_ONLY_MATCH_SCORE = 50;
|
|
10
|
-
const SUBSTRING_MATCH_SCORE = 30;
|
|
11
|
-
const NO_MATCH_SCORE = 0;
|
|
12
|
-
// Message Templates
|
|
13
|
-
const MULTIPLE_TABS_WARNING_TEMPLATE = (score, url) => `Warning: Multiple tabs match equally (score ${score}), using: ${url}`;
|
|
14
|
-
const FOUND_EXISTING_TAB_MESSAGE = (url) => `Found existing tab: ${url}`;
|
|
15
|
-
const NAVIGATING_TAB_MESSAGE = (url) => `Navigating tab to: ${url}`;
|
|
16
|
-
const CREATING_NEW_TAB_MESSAGE = (url) => `Creating new tab for: ${url}`;
|
|
17
|
-
// Error Messages
|
|
18
|
-
const CDP_CREATE_TARGET_FALLBACK_MESSAGE = 'CDP Target.createTarget failed, attempting HTTP fallback...';
|
|
19
|
-
const HTTP_NEW_TAB_FAILED_ERROR = (statusText) => `HTTP /json/new failed: ${statusText}`;
|
|
20
|
-
const FAILED_TO_CREATE_TAB_ERROR = (details) => `Failed to create new tab: ${details}`;
|
|
21
|
-
const NAVIGATION_FAILED_ERROR = (errorText) => `Navigation failed: ${errorText}`;
|
|
22
|
-
const TARGET_NOT_READY_ERROR = (timeoutMs) => `Target did not become ready within ${timeoutMs}ms`;
|
|
23
|
-
// Environment variable for timeout override with validation
|
|
24
|
-
/**
|
|
25
|
-
* Parse and validate the BDG_TARGET_VERIFY_TIMEOUT environment variable.
|
|
26
|
-
*
|
|
27
|
-
* Converts string environment variable to number with validation and fallback.
|
|
28
|
-
* Invalid values (non-numeric, negative, zero) fall back to the default timeout.
|
|
29
|
-
*
|
|
30
|
-
* @param envValue - Raw environment variable value (may be undefined)
|
|
31
|
-
* @returns Parsed timeout in milliseconds, or DEFAULT_VERIFICATION_TIMEOUT_MS if invalid
|
|
32
|
-
*
|
|
33
|
-
* @remarks
|
|
34
|
-
* - Accepts positive integers only
|
|
35
|
-
* - Logs warning for invalid values before falling back
|
|
36
|
-
* - Used to override default verification timeout via environment configuration
|
|
37
|
-
*/
|
|
38
|
-
const parseVerificationTimeout = (envValue) => {
|
|
39
|
-
if (!envValue) {
|
|
40
|
-
return DEFAULT_VERIFICATION_TIMEOUT_MS;
|
|
41
|
-
}
|
|
42
|
-
const parsed = parseInt(envValue, 10);
|
|
43
|
-
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
44
|
-
console.error(`Invalid BDG_TARGET_VERIFY_TIMEOUT value: "${envValue}". Must be a positive number. Using default: ${DEFAULT_VERIFICATION_TIMEOUT_MS}ms`);
|
|
45
|
-
return DEFAULT_VERIFICATION_TIMEOUT_MS;
|
|
46
|
-
}
|
|
47
|
-
return parsed;
|
|
48
|
-
};
|
|
49
|
-
const VERIFICATION_TIMEOUT_OVERRIDE = parseVerificationTimeout(process.env['BDG_TARGET_VERIFY_TIMEOUT']);
|
|
50
|
-
// Strategy Names
|
|
51
|
-
const CDP_STRATEGY = 'CDP';
|
|
52
|
-
const HTTP_STRATEGY = 'HTTP';
|
|
53
|
-
// Error Types
|
|
54
|
-
const CDP_COMMAND_FAILED = 'CDP_COMMAND_FAILED';
|
|
55
|
-
const VERIFICATION_TIMEOUT_ERROR_TYPE = 'VERIFICATION_TIMEOUT';
|
|
56
|
-
const HTTP_REQUEST_FAILED = 'HTTP_REQUEST_FAILED';
|
|
57
|
-
// Enhanced Error Messages
|
|
58
|
-
const VERIFICATION_TIMEOUT_ERROR = (targetId, timeoutMs, attempts) => `Chrome acknowledged Target.createTarget (ID: ${targetId}) but target verification timed out after ${timeoutMs}ms (${attempts} attempts). The tab was created successfully but is not yet visible in Chrome's target list. This commonly occurs in headless/managed Chrome environments where target registration can take 1-5 seconds. Increase timeout with BDG_TARGET_VERIFY_TIMEOUT environment variable (e.g., BDG_TARGET_VERIFY_TIMEOUT=10000 for 10 seconds).`;
|
|
59
|
-
/**
|
|
60
|
-
* Score how well a tab matches the search URL.
|
|
61
|
-
*
|
|
62
|
-
* Uses a weighted scoring system where exact matches score highest (100),
|
|
63
|
-
* followed by host+path matches (90), then host-only matches (50).
|
|
64
|
-
* This prioritization ensures users get the most specific match first,
|
|
65
|
-
* while still finding reasonable alternatives when exact matches don't exist.
|
|
66
|
-
*
|
|
67
|
-
* Fallback to substring matching (30) handles cases where URL parsing fails
|
|
68
|
-
* due to malformed URLs or non-standard protocols.
|
|
69
|
-
*
|
|
70
|
-
* @param tab - Target to score
|
|
71
|
-
* @param searchUrl - Normalized URL to match against
|
|
72
|
-
* @returns Match score (0-100, higher = better match)
|
|
73
|
-
*/
|
|
74
|
-
function scoreTabMatch(tab, searchUrl) {
|
|
75
|
-
if (tab.url === searchUrl) {
|
|
76
|
-
return EXACT_URL_MATCH_SCORE;
|
|
77
|
-
}
|
|
78
|
-
try {
|
|
79
|
-
const currentTabUrl = new URL(tab.url);
|
|
80
|
-
const targetUrl = new URL(searchUrl);
|
|
81
|
-
if (currentTabUrl.host === targetUrl.host && currentTabUrl.pathname === targetUrl.pathname) {
|
|
82
|
-
return HOST_AND_PATH_MATCH_SCORE;
|
|
83
|
-
}
|
|
84
|
-
if (currentTabUrl.host === targetUrl.host &&
|
|
85
|
-
currentTabUrl.pathname.startsWith(targetUrl.pathname)) {
|
|
86
|
-
return HOST_AND_PATH_PREFIX_MATCH_SCORE;
|
|
87
|
-
}
|
|
88
|
-
if (currentTabUrl.host === targetUrl.host) {
|
|
89
|
-
return HOST_ONLY_MATCH_SCORE;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
// URL parsing failed - fall back to substring matching
|
|
94
|
-
}
|
|
95
|
-
if (tab.url.includes(searchUrl)) {
|
|
96
|
-
return SUBSTRING_MATCH_SCORE;
|
|
97
|
-
}
|
|
98
|
-
return NO_MATCH_SCORE;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Find the best matching target from a list of tabs.
|
|
102
|
-
*
|
|
103
|
-
* Filters to page-type targets only because other target types (extensions,
|
|
104
|
-
* service workers, etc.) cannot be navigated to user URLs. The scoring
|
|
105
|
-
* system handles ambiguous matches by warning users when multiple tabs
|
|
106
|
-
* have identical non-perfect scores, helping debug URL matching issues.
|
|
107
|
-
*
|
|
108
|
-
* @param normalizedUrl - Target URL to find (must be pre-normalized)
|
|
109
|
-
* @param targets - List of available targets
|
|
110
|
-
* @returns Best matching target or null if no match found
|
|
111
|
-
*/
|
|
112
|
-
export function findBestTarget(normalizedUrl, targets) {
|
|
113
|
-
const searchUrl = normalizedUrl;
|
|
114
|
-
const pageTargets = targets.filter((target) => target.type === PAGE_TARGET_TYPE);
|
|
115
|
-
if (pageTargets.length === 0) {
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
const scored = pageTargets
|
|
119
|
-
.map((target) => ({ target, score: scoreTabMatch(target, searchUrl) }))
|
|
120
|
-
.filter(({ score }) => score > 0)
|
|
121
|
-
.sort((a, b) => b.score - a.score);
|
|
122
|
-
if (scored.length === 0) {
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
const bestMatch = scored[0];
|
|
126
|
-
const secondBestMatch = scored[1];
|
|
127
|
-
if (scored.length > 1 &&
|
|
128
|
-
bestMatch &&
|
|
129
|
-
secondBestMatch &&
|
|
130
|
-
bestMatch.score === secondBestMatch.score &&
|
|
131
|
-
bestMatch.score < 100) {
|
|
132
|
-
console.error(MULTIPLE_TABS_WARNING_TEMPLATE(bestMatch.score, bestMatch.target.url));
|
|
133
|
-
}
|
|
134
|
-
return bestMatch ? bestMatch.target : null;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Verify target exists with configurable timeout and exponential backoff.
|
|
138
|
-
*
|
|
139
|
-
* Uses a timeout-based approach rather than fixed attempt count to better
|
|
140
|
-
* handle variable Chrome registration delays in enterprise/headless environments.
|
|
141
|
-
* Logs timing information for debugging verification issues.
|
|
142
|
-
*/
|
|
143
|
-
async function verifyTargetWithBackoff(targetId, port, timeoutMs = VERIFICATION_TIMEOUT_OVERRIDE) {
|
|
144
|
-
const startTime = Date.now();
|
|
145
|
-
let attemptCount = 0;
|
|
146
|
-
let currentDelayMs = VERIFICATION_INITIAL_DELAY_MS;
|
|
147
|
-
while (Date.now() - startTime < timeoutMs) {
|
|
148
|
-
attemptCount++;
|
|
149
|
-
try {
|
|
150
|
-
const target = await fetchCDPTargetById(targetId, port);
|
|
151
|
-
if (target) {
|
|
152
|
-
const totalDuration = Date.now() - startTime;
|
|
153
|
-
console.error(`Target verification succeeded: ${targetId} (${totalDuration}ms, ${attemptCount} attempts)`);
|
|
154
|
-
return { target };
|
|
155
|
-
}
|
|
156
|
-
const remainingTimeMs = timeoutMs - (Date.now() - startTime);
|
|
157
|
-
if (remainingTimeMs <= currentDelayMs) {
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
await new Promise((resolve) => setTimeout(resolve, currentDelayMs));
|
|
161
|
-
currentDelayMs = Math.min(currentDelayMs * VERIFICATION_BACKOFF_MULTIPLIER, VERIFICATION_MAX_DELAY_MS);
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
const remainingTimeMs = timeoutMs - (Date.now() - startTime);
|
|
165
|
-
if (remainingTimeMs <= currentDelayMs) {
|
|
166
|
-
break;
|
|
167
|
-
}
|
|
168
|
-
await new Promise((resolve) => setTimeout(resolve, currentDelayMs));
|
|
169
|
-
currentDelayMs = Math.min(currentDelayMs * VERIFICATION_BACKOFF_MULTIPLIER, VERIFICATION_MAX_DELAY_MS);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
const totalDuration = Date.now() - startTime;
|
|
173
|
-
console.error(`Target verification timeout: ${targetId}`, {
|
|
174
|
-
duration: totalDuration,
|
|
175
|
-
attempts: attemptCount,
|
|
176
|
-
timeout: timeoutMs,
|
|
177
|
-
});
|
|
178
|
-
throw new Error(VERIFICATION_TIMEOUT_ERROR(targetId, timeoutMs, attemptCount));
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Attempt tab creation via CDP with enhanced verification.
|
|
182
|
-
*
|
|
183
|
-
* Distinguishes between CDP command failures (should trigger HTTP fallback)
|
|
184
|
-
* and verification timeouts (should fail without fallback to prevent duplicate tabs).
|
|
185
|
-
*
|
|
186
|
-
* Uses configurable timeout to handle Chrome registration delays in
|
|
187
|
-
* enterprise/headless environments where targets take 0.5-5s to appear.
|
|
188
|
-
*/
|
|
189
|
-
async function attemptCDPCreation(normalizedUrl, cdp) {
|
|
190
|
-
const startTime = Date.now();
|
|
191
|
-
let cdpResponse;
|
|
192
|
-
try {
|
|
193
|
-
cdpResponse = (await cdp.send('Target.createTarget', {
|
|
194
|
-
url: normalizedUrl,
|
|
195
|
-
newWindow: CDP_NEW_WINDOW_FLAG,
|
|
196
|
-
}));
|
|
197
|
-
}
|
|
198
|
-
catch (error) {
|
|
199
|
-
return {
|
|
200
|
-
success: false,
|
|
201
|
-
error: {
|
|
202
|
-
type: CDP_COMMAND_FAILED,
|
|
203
|
-
message: getErrorMessage(error),
|
|
204
|
-
originalError: error,
|
|
205
|
-
context: {
|
|
206
|
-
stage: 'cdp_command',
|
|
207
|
-
},
|
|
208
|
-
},
|
|
209
|
-
strategy: CDP_STRATEGY,
|
|
210
|
-
timing: {
|
|
211
|
-
attemptStartMs: startTime,
|
|
212
|
-
durationMs: Date.now() - startTime,
|
|
213
|
-
},
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
try {
|
|
217
|
-
const { target } = await verifyTargetWithBackoff(cdpResponse.targetId, cdp.getPort(), VERIFICATION_TIMEOUT_OVERRIDE);
|
|
218
|
-
return {
|
|
219
|
-
success: true,
|
|
220
|
-
target,
|
|
221
|
-
strategy: CDP_STRATEGY,
|
|
222
|
-
timing: {
|
|
223
|
-
attemptStartMs: startTime,
|
|
224
|
-
durationMs: Date.now() - startTime,
|
|
225
|
-
},
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
catch (verificationError) {
|
|
229
|
-
return {
|
|
230
|
-
success: false,
|
|
231
|
-
error: {
|
|
232
|
-
type: VERIFICATION_TIMEOUT_ERROR_TYPE,
|
|
233
|
-
message: getErrorMessage(verificationError),
|
|
234
|
-
originalError: verificationError,
|
|
235
|
-
context: {
|
|
236
|
-
targetId: cdpResponse.targetId,
|
|
237
|
-
stage: 'verification',
|
|
238
|
-
},
|
|
239
|
-
},
|
|
240
|
-
strategy: CDP_STRATEGY,
|
|
241
|
-
timing: {
|
|
242
|
-
attemptStartMs: startTime,
|
|
243
|
-
durationMs: Date.now() - startTime,
|
|
244
|
-
},
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Attempt tab creation via HTTP endpoint.
|
|
250
|
-
*
|
|
251
|
-
* Uses Chrome's /json/new HTTP endpoint as a fallback when CDP fails.
|
|
252
|
-
* This endpoint is more forgiving on Chrome instances with restricted
|
|
253
|
-
* Target domain access (e.g., remote-debugging with atypical flags).
|
|
254
|
-
* The HTTP handler waits for tab readiness before responding.
|
|
255
|
-
*/
|
|
256
|
-
async function attemptHTTPCreation(normalizedUrl, port) {
|
|
257
|
-
const startTime = Date.now();
|
|
258
|
-
try {
|
|
259
|
-
const createResponse = await fetch(`http://${HTTP_LOCALHOST}:${port}/json/new?${encodeURIComponent(normalizedUrl)}`);
|
|
260
|
-
if (!createResponse.ok) {
|
|
261
|
-
throw new Error(HTTP_NEW_TAB_FAILED_ERROR(createResponse.statusText));
|
|
262
|
-
}
|
|
263
|
-
const target = (await createResponse.json());
|
|
264
|
-
return {
|
|
265
|
-
success: true,
|
|
266
|
-
target,
|
|
267
|
-
strategy: HTTP_STRATEGY,
|
|
268
|
-
timing: {
|
|
269
|
-
attemptStartMs: startTime,
|
|
270
|
-
durationMs: Date.now() - startTime,
|
|
271
|
-
},
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
catch (error) {
|
|
275
|
-
return {
|
|
276
|
-
success: false,
|
|
277
|
-
error: {
|
|
278
|
-
type: HTTP_REQUEST_FAILED,
|
|
279
|
-
message: getErrorMessage(error),
|
|
280
|
-
originalError: error,
|
|
281
|
-
context: {
|
|
282
|
-
...(error instanceof Error &&
|
|
283
|
-
'status' in error &&
|
|
284
|
-
error.status !== undefined
|
|
285
|
-
? { httpStatus: error.status }
|
|
286
|
-
: {}),
|
|
287
|
-
},
|
|
288
|
-
},
|
|
289
|
-
strategy: HTTP_STRATEGY,
|
|
290
|
-
timing: {
|
|
291
|
-
attemptStartMs: startTime,
|
|
292
|
-
durationMs: Date.now() - startTime,
|
|
293
|
-
},
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Create a new tab with the specified URL using CDP.
|
|
299
|
-
*
|
|
300
|
-
* Uses a two-phase approach with enhanced error handling:
|
|
301
|
-
* - CDP command failures → HTTP fallback (prevents total failure)
|
|
302
|
-
* - Verification timeouts → Fail fast with targeted error (prevents duplicate tabs)
|
|
303
|
-
*
|
|
304
|
-
* Configurable verification timeout via BDG_TARGET_VERIFY_TIMEOUT environment
|
|
305
|
-
* variable to handle slow Chrome registration in enterprise/headless environments.
|
|
306
|
-
*
|
|
307
|
-
* @param normalizedUrl - URL to open in the new tab (must be pre-normalized)
|
|
308
|
-
* @param cdp - CDP connection instance
|
|
309
|
-
* @returns Target information for the new tab
|
|
310
|
-
* @throws Error if tab creation fails or verification times out
|
|
311
|
-
*/
|
|
312
|
-
export async function createNewTab(normalizedUrl, cdp) {
|
|
313
|
-
const cdpPort = cdp.getPort();
|
|
314
|
-
// Primary strategy: CDP creation with enhanced verification
|
|
315
|
-
const cdpCreationResult = await attemptCDPCreation(normalizedUrl, cdp);
|
|
316
|
-
if (cdpCreationResult.success && cdpCreationResult.target) {
|
|
317
|
-
return cdpCreationResult.target;
|
|
318
|
-
}
|
|
319
|
-
if (cdpCreationResult.error?.type === VERIFICATION_TIMEOUT_ERROR_TYPE) {
|
|
320
|
-
throw new Error(cdpCreationResult.error.message);
|
|
321
|
-
}
|
|
322
|
-
console.error(CDP_CREATE_TARGET_FALLBACK_MESSAGE, {
|
|
323
|
-
strategy: cdpCreationResult.strategy,
|
|
324
|
-
errorType: cdpCreationResult.error?.type,
|
|
325
|
-
stage: cdpCreationResult.error?.context?.stage,
|
|
326
|
-
duration: cdpCreationResult.timing.durationMs,
|
|
327
|
-
error: cdpCreationResult.error?.message,
|
|
328
|
-
});
|
|
329
|
-
// Fallback strategy: HTTP creation
|
|
330
|
-
const httpCreationResult = await attemptHTTPCreation(normalizedUrl, cdpPort);
|
|
331
|
-
if (httpCreationResult.success && httpCreationResult.target) {
|
|
332
|
-
return httpCreationResult.target;
|
|
333
|
-
}
|
|
334
|
-
throw new Error(FAILED_TO_CREATE_TAB_ERROR(`CDP command failed (${cdpCreationResult.error?.message}), HTTP fallback also failed (${httpCreationResult.error?.message})`));
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Fetch a specific target by ID from Chrome's target list.
|
|
338
|
-
*
|
|
339
|
-
* Encapsulates the HTTP fetch and JSON parsing logic with error handling.
|
|
340
|
-
* Returns null when the target is not found or fetch fails, allowing
|
|
341
|
-
* the caller to decide on retry logic.
|
|
342
|
-
*/
|
|
343
|
-
async function fetchTargetById(targetId, port) {
|
|
344
|
-
return fetchCDPTargetById(targetId, port);
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Check if a target is ready for interaction.
|
|
348
|
-
*
|
|
349
|
-
* A target is considered ready when its URL matches the expected URL
|
|
350
|
-
* or shows a valid intermediate state. The about:blank check handles
|
|
351
|
-
* the common case where Chrome shows a blank page during navigation.
|
|
352
|
-
*/
|
|
353
|
-
function isTargetReady(target, expectedUrl) {
|
|
354
|
-
return (target.url === expectedUrl ||
|
|
355
|
-
target.url.startsWith(expectedUrl) ||
|
|
356
|
-
target.url === BLANK_PAGE_URL);
|
|
357
|
-
}
|
|
358
|
-
/**
|
|
359
|
-
* Handle the special case of about:blank pages during navigation.
|
|
360
|
-
*
|
|
361
|
-
* Chrome often shows about:blank briefly before loading the actual URL.
|
|
362
|
-
* This delay allows the navigation to progress before checking again.
|
|
363
|
-
* Returns true if additional waiting is needed, false if ready to proceed.
|
|
364
|
-
*/
|
|
365
|
-
async function handleBlankPageDelay(target) {
|
|
366
|
-
if (target.url === BLANK_PAGE_URL) {
|
|
367
|
-
await new Promise((resolve) => setTimeout(resolve, LOADING_PAGE_ADDITIONAL_WAIT_MS));
|
|
368
|
-
return true; // Need to continue waiting
|
|
369
|
-
}
|
|
370
|
-
return false; // Ready to proceed
|
|
371
|
-
}
|
|
372
|
-
/**
|
|
373
|
-
* Navigate an existing tab to a new URL using CDP.
|
|
374
|
-
*
|
|
375
|
-
* Requires attaching to the target first because Page.navigate commands
|
|
376
|
-
* must be sent within a target session context. The flatten:true option
|
|
377
|
-
* simplifies session management by avoiding nested session hierarchies
|
|
378
|
-
* that can complicate cleanup and event handling.
|
|
379
|
-
*
|
|
380
|
-
* @param targetId - CDP target ID to navigate
|
|
381
|
-
* @param normalizedUrl - URL to navigate to (must be pre-normalized)
|
|
382
|
-
* @param cdp - CDP connection instance
|
|
383
|
-
* @throws Error if navigation fails (e.g., network error, invalid URL, blocked by browser)
|
|
384
|
-
*/
|
|
385
|
-
export async function navigateToUrl(targetId, normalizedUrl, cdp) {
|
|
386
|
-
const sessionResponse = (await cdp.send('Target.attachToTarget', {
|
|
387
|
-
targetId,
|
|
388
|
-
flatten: CDP_FLATTEN_SESSION_FLAG,
|
|
389
|
-
}));
|
|
390
|
-
const navResponse = (await cdp.send('Page.navigate', { url: normalizedUrl }, sessionResponse.sessionId));
|
|
391
|
-
if (navResponse.errorText) {
|
|
392
|
-
throw new Error(NAVIGATION_FAILED_ERROR(navResponse.errorText));
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* Wait for a target to be ready (URL matches expected).
|
|
397
|
-
*
|
|
398
|
-
* Polling is necessary because tab navigation is asynchronous and Chrome
|
|
399
|
-
* may report intermediate states (like about:blank) before the final URL
|
|
400
|
-
* loads. The 500ms additional wait for about:blank handles the common case
|
|
401
|
-
* where Chrome briefly shows a blank page before starting navigation.
|
|
402
|
-
*
|
|
403
|
-
* Uses HTTP endpoint instead of CDP for target status because the HTTP
|
|
404
|
-
* interface provides more reliable target state information during
|
|
405
|
-
* navigation transitions.
|
|
406
|
-
*
|
|
407
|
-
* @param targetId - CDP target ID to wait for
|
|
408
|
-
* @param normalizedUrl - Expected URL (must be pre-normalized)
|
|
409
|
-
* @param cdp - CDP connection instance
|
|
410
|
-
* @param maxWaitMs - Maximum time to wait in milliseconds
|
|
411
|
-
* @throws Error if target doesn't become ready within maxWaitMs timeout
|
|
412
|
-
*/
|
|
413
|
-
export async function waitForTargetReady(targetId, normalizedUrl, cdp, maxWaitMs = DEFAULT_TARGET_READY_TIMEOUT_MS) {
|
|
414
|
-
const pollingStartTime = Date.now();
|
|
415
|
-
const cdpPort = cdp.getPort();
|
|
416
|
-
while (Date.now() - pollingStartTime < maxWaitMs) {
|
|
417
|
-
const currentTarget = await fetchTargetById(targetId, cdpPort);
|
|
418
|
-
if (!currentTarget) {
|
|
419
|
-
await new Promise((resolve) => setTimeout(resolve, TARGET_READY_POLL_INTERVAL_MS));
|
|
420
|
-
continue;
|
|
421
|
-
}
|
|
422
|
-
if (!isTargetReady(currentTarget, normalizedUrl)) {
|
|
423
|
-
await new Promise((resolve) => setTimeout(resolve, TARGET_READY_POLL_INTERVAL_MS));
|
|
424
|
-
continue;
|
|
425
|
-
}
|
|
426
|
-
const needsMoreWaiting = await handleBlankPageDelay(currentTarget);
|
|
427
|
-
if (needsMoreWaiting) {
|
|
428
|
-
continue;
|
|
429
|
-
}
|
|
430
|
-
return;
|
|
431
|
-
}
|
|
432
|
-
throw new Error(TARGET_NOT_READY_ERROR(maxWaitMs));
|
|
433
|
-
}
|
|
434
|
-
/**
|
|
435
|
-
* Wait for network idle using CDP Page.lifecycleEvent.
|
|
436
|
-
*
|
|
437
|
-
* Listens for lifecycle events to detect when React hydration is likely complete.
|
|
438
|
-
* The 'networkIdle' event indicates network activity has stopped, which typically
|
|
439
|
-
* means async JavaScript execution (including React hydration) has finished.
|
|
440
|
-
*
|
|
441
|
-
* Uses a race between networkIdle event and fallback timeout to handle cases
|
|
442
|
-
* where networkIdle doesn't fire (e.g., long-polling connections, SSE streams).
|
|
443
|
-
*
|
|
444
|
-
* @param cdp - CDP connection instance
|
|
445
|
-
* @param maxWaitMs - Maximum time to wait for networkIdle (fallback timeout)
|
|
446
|
-
* @returns Promise that resolves when networkIdle fires or timeout is reached
|
|
447
|
-
*/
|
|
448
|
-
async function waitForNetworkIdle(cdp, maxWaitMs = DEFAULT_TARGET_READY_TIMEOUT_MS) {
|
|
449
|
-
// Enable lifecycle events
|
|
450
|
-
await cdp.send('Page.setLifecycleEventsEnabled', { enabled: true });
|
|
451
|
-
return new Promise((resolve) => {
|
|
452
|
-
let lifecycleHandlerId = null;
|
|
453
|
-
let fallbackTimer = null;
|
|
454
|
-
const cleanup = () => {
|
|
455
|
-
if (lifecycleHandlerId !== null) {
|
|
456
|
-
cdp.off('Page.lifecycleEvent', lifecycleHandlerId);
|
|
457
|
-
}
|
|
458
|
-
if (fallbackTimer !== null) {
|
|
459
|
-
clearTimeout(fallbackTimer);
|
|
460
|
-
}
|
|
461
|
-
};
|
|
462
|
-
// Listen for networkIdle lifecycle event
|
|
463
|
-
lifecycleHandlerId = cdp.on('Page.lifecycleEvent', (params) => {
|
|
464
|
-
if (params.name === 'networkIdle') {
|
|
465
|
-
console.error('[LIFECYCLE] networkIdle event fired');
|
|
466
|
-
cleanup();
|
|
467
|
-
resolve();
|
|
468
|
-
}
|
|
469
|
-
});
|
|
470
|
-
// Fallback timeout if networkIdle never fires
|
|
471
|
-
fallbackTimer = setTimeout(() => {
|
|
472
|
-
console.error(`[LIFECYCLE] networkIdle timeout (${maxWaitMs}ms), continuing anyway`);
|
|
473
|
-
cleanup();
|
|
474
|
-
resolve();
|
|
475
|
-
}, maxWaitMs);
|
|
476
|
-
});
|
|
477
|
-
}
|
|
478
|
-
/**
|
|
479
|
-
* Retrieve all available targets from Chrome via CDP.
|
|
480
|
-
*
|
|
481
|
-
* Transforms CDP target info into the standard CDPTarget format
|
|
482
|
-
* used throughout the pipeline. The webSocketDebuggerUrl is left
|
|
483
|
-
* empty as it's not needed for target discovery operations.
|
|
484
|
-
*/
|
|
485
|
-
async function getExistingTargets(cdp) {
|
|
486
|
-
const targetsResponse = (await cdp.send('Target.getTargets'));
|
|
487
|
-
return targetsResponse.targetInfos.map((info) => ({
|
|
488
|
-
id: info.targetId,
|
|
489
|
-
type: info.type,
|
|
490
|
-
url: info.url,
|
|
491
|
-
title: info.title,
|
|
492
|
-
webSocketDebuggerUrl: '',
|
|
493
|
-
}));
|
|
494
|
-
}
|
|
495
|
-
/**
|
|
496
|
-
* Navigate an existing target to the desired URL if needed.
|
|
497
|
-
*
|
|
498
|
-
* Only performs navigation when URLs don't match exactly, avoiding
|
|
499
|
-
* unnecessary navigation operations that could disrupt page state.
|
|
500
|
-
* Uses the same verification logic as new tab creation to ensure
|
|
501
|
-
* the navigation completes successfully.
|
|
502
|
-
*/
|
|
503
|
-
async function navigateExistingTarget(target, normalizedUrl, cdp) {
|
|
504
|
-
console.error(FOUND_EXISTING_TAB_MESSAGE(target.url));
|
|
505
|
-
if (target.url !== normalizedUrl) {
|
|
506
|
-
console.error(NAVIGATING_TAB_MESSAGE(normalizedUrl));
|
|
507
|
-
await navigateToUrl(target.id, normalizedUrl, cdp);
|
|
508
|
-
await waitForTargetReady(target.id, normalizedUrl, cdp);
|
|
509
|
-
}
|
|
510
|
-
// Always wait for React hydration, even if tab is already on the URL
|
|
511
|
-
// This ensures SPA frameworks have fully initialized before capturing DOM
|
|
512
|
-
await waitForNetworkIdle(cdp);
|
|
513
|
-
return target;
|
|
514
|
-
}
|
|
515
|
-
/**
|
|
516
|
-
* Find and optionally navigate to an existing target.
|
|
517
|
-
*
|
|
518
|
-
* Encapsulates the complete target reuse workflow: discovery,
|
|
519
|
-
* matching, and navigation. Returns null when no suitable target
|
|
520
|
-
* is found, allowing the caller to proceed with new tab creation.
|
|
521
|
-
*/
|
|
522
|
-
async function findAndReuseTarget(normalizedUrl, cdp) {
|
|
523
|
-
const existingTargets = await getExistingTargets(cdp);
|
|
524
|
-
const matchingTarget = findBestTarget(normalizedUrl, existingTargets);
|
|
525
|
-
if (!matchingTarget) {
|
|
526
|
-
return null;
|
|
527
|
-
}
|
|
528
|
-
try {
|
|
529
|
-
return await navigateExistingTarget(matchingTarget, normalizedUrl, cdp);
|
|
530
|
-
}
|
|
531
|
-
catch (error) {
|
|
532
|
-
console.error(`Failed to reuse tab: ${getErrorMessage(error)}`);
|
|
533
|
-
return null;
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
/**
|
|
537
|
-
* Create a new tab or find existing tab with the target URL.
|
|
538
|
-
*
|
|
539
|
-
* This is the main entry point for tab management with a clear workflow:
|
|
540
|
-
* when reuseTab=true, attempts to find and navigate existing tabs to avoid
|
|
541
|
-
* creating unnecessary browser tabs. When reuseTab=false or no suitable
|
|
542
|
-
* tab exists, creates a new tab for isolated testing scenarios.
|
|
543
|
-
*
|
|
544
|
-
* URL normalization happens once at entry to ensure consistent matching
|
|
545
|
-
* and navigation behavior throughout the entire workflow.
|
|
546
|
-
*
|
|
547
|
-
* @param url - Target URL (will be normalized once at entry)
|
|
548
|
-
* @param cdp - CDP connection instance
|
|
549
|
-
* @param reuseTab - If true, navigate existing tab instead of creating new one
|
|
550
|
-
* @returns Target information
|
|
551
|
-
*/
|
|
552
|
-
export async function createOrFindTarget(url, cdp, reuseTab = DEFAULT_REUSE_TAB) {
|
|
553
|
-
const targetUrl = normalizeUrl(url);
|
|
554
|
-
// Guard clause: Skip target reuse if not requested
|
|
555
|
-
if (!reuseTab) {
|
|
556
|
-
console.error(CREATING_NEW_TAB_MESSAGE(targetUrl));
|
|
557
|
-
const newTarget = await createNewTab(targetUrl, cdp);
|
|
558
|
-
await waitForTargetReady(newTarget.id, targetUrl, cdp);
|
|
559
|
-
// Wait for React hydration to complete
|
|
560
|
-
await waitForNetworkIdle(cdp);
|
|
561
|
-
return newTarget;
|
|
562
|
-
}
|
|
563
|
-
// Attempt to find and reuse existing target
|
|
564
|
-
const reusedTarget = await findAndReuseTarget(targetUrl, cdp);
|
|
565
|
-
// Early return if target reuse succeeded
|
|
566
|
-
if (reusedTarget) {
|
|
567
|
-
return reusedTarget;
|
|
568
|
-
}
|
|
569
|
-
// Fallback: Create new tab when no suitable target found
|
|
570
|
-
console.error(CREATING_NEW_TAB_MESSAGE(targetUrl));
|
|
571
|
-
const newTarget = await createNewTab(targetUrl, cdp);
|
|
572
|
-
await waitForTargetReady(newTarget.id, targetUrl, cdp);
|
|
573
|
-
// Wait for React hydration to complete
|
|
574
|
-
await waitForNetworkIdle(cdp);
|
|
575
|
-
return newTarget;
|
|
576
|
-
}
|
|
577
|
-
//# sourceMappingURL=tabs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/connection/tabs.ts"],"names":[],"mappings":"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"}
|