browser-debugger-cli 0.3.0 → 0.5.1
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/README.md +137 -126
- package/dist/__tests__/smoke/error-handling.smoke.test.d.ts +8 -0
- package/dist/__tests__/smoke/error-handling.smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke/error-handling.smoke.test.js +106 -0
- package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -0
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts +8 -0
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.js +109 -0
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.js.map +1 -0
- package/dist/__testutils__/commandRunner.d.ts +45 -0
- package/dist/__testutils__/commandRunner.d.ts.map +1 -0
- package/dist/__testutils__/commandRunner.js +108 -0
- package/dist/__testutils__/commandRunner.js.map +1 -0
- package/dist/__testutils__/daemonHelpers.d.ts +81 -0
- package/dist/__testutils__/daemonHelpers.d.ts.map +1 -0
- package/dist/__testutils__/daemonHelpers.js +206 -0
- package/dist/__testutils__/daemonHelpers.js.map +1 -0
- package/dist/__testutils__/index.d.ts +1 -0
- package/dist/__testutils__/index.d.ts.map +1 -1
- package/dist/__testutils__/index.js +1 -0
- package/dist/__testutils__/index.js.map +1 -1
- package/dist/__testutils__/testCleanup.d.ts +45 -0
- package/dist/__testutils__/testCleanup.d.ts.map +1 -0
- package/dist/__testutils__/testCleanup.js +87 -0
- package/dist/__testutils__/testCleanup.js.map +1 -0
- package/dist/__testutils__/testHome.d.ts +26 -0
- package/dist/__testutils__/testHome.d.ts.map +1 -0
- package/dist/__testutils__/testHome.js +57 -0
- package/dist/__testutils__/testHome.js.map +1 -0
- package/dist/__testutils__/testProcess.d.ts.map +1 -1
- package/dist/__testutils__/testProcess.js +11 -3
- package/dist/__testutils__/testProcess.js.map +1 -1
- package/dist/cli/commands/__tests__/start.unit.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/start.unit.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/start.unit.test.js +131 -0
- package/dist/cli/commands/__tests__/start.unit.test.js.map +1 -0
- package/dist/cli/commands/cleanup.d.ts +1 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -1
- package/dist/cli/commands/cleanup.js +80 -61
- package/dist/cli/commands/cleanup.js.map +1 -1
- package/dist/cli/commands/details.d.ts +2 -1
- package/dist/cli/commands/details.d.ts.map +1 -1
- package/dist/cli/commands/details.js +104 -52
- package/dist/cli/commands/details.js.map +1 -1
- package/dist/cli/commands/peek.d.ts +2 -1
- package/dist/cli/commands/peek.d.ts.map +1 -1
- package/dist/cli/commands/peek.js +22 -67
- package/dist/cli/commands/peek.js.map +1 -1
- package/dist/cli/commands/query.d.ts +9 -0
- package/dist/cli/commands/query.d.ts.map +1 -0
- package/dist/cli/commands/query.js +125 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/start.d.ts +74 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +147 -38
- 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 +37 -49
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.d.ts +1 -0
- package/dist/cli/commands/stop.d.ts.map +1 -1
- package/dist/cli/commands/stop.js +106 -120
- 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 +7 -7
- package/dist/cli/formatters/previewFormatter.d.ts.map +1 -1
- package/dist/cli/formatters/previewFormatter.js +5 -10
- package/dist/cli/formatters/previewFormatter.js.map +1 -1
- package/dist/cli/formatters/statusFormatter.d.ts +13 -10
- package/dist/cli/formatters/statusFormatter.d.ts.map +1 -1
- package/dist/cli/formatters/statusFormatter.js +26 -53
- package/dist/cli/formatters/statusFormatter.js.map +1 -1
- package/dist/cli/handlers/ChromeBootstrap.d.ts +24 -0
- package/dist/cli/handlers/ChromeBootstrap.d.ts.map +1 -0
- package/dist/cli/handlers/ChromeBootstrap.js +50 -0
- package/dist/cli/handlers/ChromeBootstrap.js.map +1 -0
- package/dist/cli/handlers/OutputBuilder.d.ts +2 -3
- package/dist/cli/handlers/OutputBuilder.d.ts.map +1 -1
- package/dist/cli/handlers/OutputBuilder.js +2 -4
- package/dist/cli/handlers/OutputBuilder.js.map +1 -1
- package/dist/cli/handlers/OutputWriter.d.ts +15 -0
- package/dist/cli/handlers/OutputWriter.d.ts.map +1 -0
- package/dist/cli/handlers/OutputWriter.js +34 -0
- package/dist/cli/handlers/OutputWriter.js.map +1 -0
- package/dist/cli/handlers/PreviewWriter.d.ts +52 -0
- package/dist/cli/handlers/PreviewWriter.d.ts.map +1 -0
- package/dist/cli/handlers/PreviewWriter.js +118 -0
- package/dist/cli/handlers/PreviewWriter.js.map +1 -0
- package/dist/cli/handlers/SessionLock.d.ts +16 -0
- package/dist/cli/handlers/SessionLock.d.ts.map +1 -0
- package/dist/cli/handlers/SessionLock.js +35 -0
- package/dist/cli/handlers/SessionLock.js.map +1 -0
- package/dist/cli/handlers/SessionLoop.d.ts +19 -0
- package/dist/cli/handlers/SessionLoop.d.ts.map +1 -0
- package/dist/cli/handlers/SessionLoop.js +47 -0
- package/dist/cli/handlers/SessionLoop.js.map +1 -0
- package/dist/cli/handlers/ShutdownController.d.ts +41 -0
- package/dist/cli/handlers/ShutdownController.d.ts.map +1 -0
- package/dist/cli/handlers/ShutdownController.js +94 -0
- package/dist/cli/handlers/ShutdownController.js.map +1 -0
- package/dist/cli/handlers/SignalHandler.d.ts +35 -0
- package/dist/cli/handlers/SignalHandler.d.ts.map +1 -0
- package/dist/cli/handlers/SignalHandler.js +81 -0
- package/dist/cli/handlers/SignalHandler.js.map +1 -0
- package/dist/cli/handlers/TargetSetup.d.ts +42 -0
- package/dist/cli/handlers/TargetSetup.d.ts.map +1 -0
- package/dist/cli/handlers/TargetSetup.js +87 -0
- package/dist/cli/handlers/TargetSetup.js.map +1 -0
- package/dist/cli/handlers/sessionController.d.ts +41 -0
- package/dist/cli/handlers/sessionController.d.ts.map +1 -1
- package/dist/cli/handlers/sessionController.js +266 -5
- package/dist/cli/handlers/sessionController.js.map +1 -1
- package/dist/cli/registry.d.ts +2 -2
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/registry.js +12 -37
- package/dist/cli/registry.js.map +1 -1
- package/dist/collectors/console.d.ts +1 -1
- package/dist/collectors/console.js +2 -2
- package/dist/collectors/console.js.map +1 -1
- package/dist/collectors/dom.d.ts +1 -1
- package/dist/collectors/network.d.ts +1 -2
- package/dist/collectors/network.d.ts.map +1 -1
- package/dist/collectors/network.js +3 -3
- package/dist/collectors/network.js.map +1 -1
- package/dist/commands/cdp.js +1 -1
- package/dist/commands/cdp.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +12 -15
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/dom.d.ts.map +1 -1
- package/dist/commands/dom.js +13 -19
- package/dist/commands/dom.js.map +1 -1
- package/dist/commands/domEvalHelpers.d.ts +1 -1
- package/dist/commands/domEvalHelpers.d.ts.map +1 -1
- package/dist/commands/domEvalHelpers.js +56 -7
- package/dist/commands/domEvalHelpers.js.map +1 -1
- package/dist/commands/domOptionsBuilder.d.ts +32 -0
- package/dist/commands/domOptionsBuilder.d.ts.map +1 -1
- package/dist/commands/domOptionsBuilder.js +35 -0
- package/dist/commands/domOptionsBuilder.js.map +1 -1
- package/dist/commands/machineReadableHelp.d.ts +98 -0
- package/dist/commands/machineReadableHelp.d.ts.map +1 -0
- package/dist/commands/machineReadableHelp.js +137 -0
- package/dist/commands/machineReadableHelp.js.map +1 -0
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +2 -3
- package/dist/commands/shared/CommandRunner.js.map +1 -1
- package/dist/commands/shared/OutputBuilder.js +1 -1
- package/dist/commands/shared/OutputBuilder.js.map +1 -1
- package/dist/commands/shared/commonOptions.d.ts.map +1 -1
- package/dist/commands/shared/commonOptions.js +9 -3
- package/dist/commands/shared/commonOptions.js.map +1 -1
- package/dist/commands/shared/daemonSessionController.d.ts +2 -0
- package/dist/commands/shared/daemonSessionController.d.ts.map +1 -1
- package/dist/commands/shared/daemonSessionController.js +13 -16
- package/dist/commands/shared/daemonSessionController.js.map +1 -1
- package/dist/commands/shared/sessionController.js +1 -1
- package/dist/commands/shared/sessionController.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +16 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +72 -55
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +11 -25
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tail.d.ts +11 -0
- package/dist/commands/tail.d.ts.map +1 -0
- package/dist/commands/tail.js +114 -0
- package/dist/commands/tail.js.map +1 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +2 -0
- package/dist/commands.js.map +1 -1
- package/dist/connection/cdp.d.ts +46 -2
- package/dist/connection/cdp.d.ts.map +1 -1
- package/dist/connection/cdp.js +71 -5
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/diagnostics.d.ts +16 -0
- package/dist/connection/diagnostics.d.ts.map +1 -0
- package/dist/connection/diagnostics.js +37 -0
- package/dist/connection/diagnostics.js.map +1 -0
- package/dist/connection/errors.d.ts +74 -0
- package/dist/connection/errors.d.ts.map +1 -0
- package/dist/connection/errors.js +83 -0
- package/dist/connection/errors.js.map +1 -0
- package/dist/connection/handlers.d.ts +31 -0
- package/dist/connection/handlers.d.ts.map +1 -0
- package/dist/connection/handlers.js +38 -0
- package/dist/connection/handlers.js.map +1 -0
- package/dist/connection/launcher.d.ts +3 -20
- package/dist/connection/launcher.d.ts.map +1 -1
- package/dist/connection/launcher.js +130 -32
- package/dist/connection/launcher.js.map +1 -1
- package/dist/connection/pageReadiness.d.ts +46 -0
- package/dist/connection/pageReadiness.d.ts.map +1 -0
- package/dist/connection/pageReadiness.js +270 -0
- package/dist/connection/pageReadiness.js.map +1 -0
- package/dist/connection/tabs.d.ts +52 -0
- package/dist/connection/tabs.d.ts.map +1 -0
- package/dist/connection/tabs.js +227 -0
- package/dist/connection/tabs.js.map +1 -0
- package/dist/constants.d.ts +20 -40
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +26 -40
- package/dist/constants.js.map +1 -1
- package/dist/daemon/ipcServer.d.ts +5 -7
- package/dist/daemon/ipcServer.d.ts.map +1 -1
- package/dist/daemon/ipcServer.js +178 -143
- package/dist/daemon/ipcServer.js.map +1 -1
- package/dist/daemon/launcher.js +1 -1
- package/dist/daemon/launcher.js.map +1 -1
- package/dist/daemon/server/SocketServer.d.ts +22 -0
- package/dist/daemon/server/SocketServer.d.ts.map +1 -0
- package/dist/daemon/server/SocketServer.js +67 -0
- package/dist/daemon/server/SocketServer.js.map +1 -0
- package/dist/daemon/server/WorkerManager.d.ts +36 -0
- package/dist/daemon/server/WorkerManager.d.ts.map +1 -0
- package/dist/daemon/server/WorkerManager.js +98 -0
- package/dist/daemon/server/WorkerManager.js.map +1 -0
- package/dist/daemon/startSession.d.ts +2 -0
- package/dist/daemon/startSession.d.ts.map +1 -1
- package/dist/daemon/startSession.js +4 -2
- package/dist/daemon/startSession.js.map +1 -1
- package/dist/daemon/worker/TelemetryStore.d.ts +18 -0
- package/dist/daemon/worker/TelemetryStore.d.ts.map +1 -0
- package/dist/daemon/worker/TelemetryStore.js +49 -0
- package/dist/daemon/worker/TelemetryStore.js.map +1 -0
- package/dist/daemon/worker/collectors.d.ts +8 -0
- package/dist/daemon/worker/collectors.d.ts.map +1 -0
- package/dist/daemon/worker/collectors.js +19 -0
- package/dist/daemon/worker/collectors.js.map +1 -0
- package/dist/daemon/worker/commandRegistry.d.ts +10 -0
- package/dist/daemon/worker/commandRegistry.d.ts.map +1 -0
- package/dist/daemon/worker/commandRegistry.js +289 -0
- package/dist/daemon/worker/commandRegistry.js.map +1 -0
- package/dist/daemon/worker/plugins.d.ts +21 -0
- package/dist/daemon/worker/plugins.d.ts.map +1 -0
- package/dist/daemon/worker/plugins.js +71 -0
- package/dist/daemon/worker/plugins.js.map +1 -0
- package/dist/daemon/worker/types.d.ts +13 -0
- package/dist/daemon/worker/types.d.ts.map +1 -0
- package/dist/daemon/worker/types.js +2 -0
- package/dist/daemon/worker/types.js.map +1 -0
- package/dist/daemon/worker.js +206 -529
- package/dist/daemon/worker.js.map +1 -1
- package/dist/help/machineReadableHelp.d.ts +100 -0
- package/dist/help/machineReadableHelp.d.ts.map +1 -0
- package/dist/help/machineReadableHelp.js +139 -0
- package/dist/help/machineReadableHelp.js.map +1 -0
- package/dist/index.js +18 -9
- package/dist/index.js.map +1 -1
- package/dist/ipc/__tests__/client.contract.test.js +2 -2
- package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
- package/dist/ipc/client.d.ts +3 -1
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +27 -14
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/commands.d.ts +1 -0
- package/dist/ipc/commands.d.ts.map +1 -1
- package/dist/ipc/commands.js.map +1 -1
- package/dist/ipc/types.d.ts +2 -0
- package/dist/ipc/types.d.ts.map +1 -1
- package/dist/session/BdgSession.d.ts +91 -0
- package/dist/session/BdgSession.d.ts.map +1 -0
- package/dist/session/BdgSession.js +230 -0
- package/dist/session/BdgSession.js.map +1 -0
- package/dist/session/cleanup.d.ts.map +1 -1
- package/dist/session/cleanup.js +67 -65
- package/dist/session/cleanup.js.map +1 -1
- package/dist/session/fileOps.d.ts +25 -0
- package/dist/session/fileOps.d.ts.map +1 -0
- package/dist/session/fileOps.js +39 -0
- package/dist/session/fileOps.js.map +1 -0
- package/dist/session/metadata.js +2 -2
- package/dist/session/metadata.js.map +1 -1
- package/dist/session/paths.d.ts +2 -7
- package/dist/session/paths.d.ts.map +1 -1
- package/dist/session/paths.js +8 -8
- package/dist/session/paths.js.map +1 -1
- package/dist/session/queryCache.js +1 -1
- package/dist/session/queryCache.js.map +1 -1
- package/dist/telemetry/__tests__/filters.unit.test.d.ts +2 -0
- package/dist/telemetry/__tests__/filters.unit.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/filters.unit.test.js +239 -0
- package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -0
- package/dist/telemetry/console.d.ts +1 -1
- package/dist/telemetry/console.d.ts.map +1 -1
- package/dist/telemetry/console.js +5 -3
- package/dist/telemetry/console.js.map +1 -1
- package/dist/telemetry/dialogs.d.ts +27 -0
- package/dist/telemetry/dialogs.d.ts.map +1 -0
- package/dist/telemetry/dialogs.js +51 -0
- package/dist/telemetry/dialogs.js.map +1 -0
- package/dist/telemetry/filters.d.ts +148 -0
- package/dist/telemetry/filters.d.ts.map +1 -0
- package/dist/telemetry/filters.js +358 -0
- package/dist/telemetry/filters.js.map +1 -0
- package/dist/telemetry/navigation.d.ts +49 -0
- package/dist/telemetry/navigation.d.ts.map +1 -0
- package/dist/telemetry/navigation.js +69 -0
- package/dist/telemetry/navigation.js.map +1 -0
- package/dist/telemetry/network.d.ts +1 -0
- package/dist/telemetry/network.d.ts.map +1 -1
- package/dist/telemetry/network.js +23 -34
- package/dist/telemetry/network.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/errors/CommandError.d.ts +39 -0
- package/dist/ui/errors/CommandError.d.ts.map +1 -0
- package/dist/ui/errors/CommandError.js +48 -0
- package/dist/ui/errors/CommandError.js.map +1 -0
- package/dist/ui/errors/SystemErrors.d.ts +22 -0
- package/dist/ui/errors/SystemErrors.d.ts.map +1 -0
- package/dist/ui/errors/SystemErrors.js +23 -0
- package/dist/ui/errors/SystemErrors.js.map +1 -0
- package/dist/ui/errors/index.d.ts +9 -0
- package/dist/ui/errors/index.d.ts.map +1 -0
- package/dist/ui/errors/index.js +12 -0
- package/dist/ui/errors/index.js.map +1 -0
- package/dist/ui/errors/utils.d.ts +24 -0
- package/dist/ui/errors/utils.d.ts.map +1 -0
- package/dist/ui/errors/utils.js +28 -0
- package/dist/ui/errors/utils.js.map +1 -0
- package/dist/ui/formatters/status.d.ts.map +1 -1
- package/dist/ui/formatters/status.js +1 -1
- package/dist/ui/formatters/status.js.map +1 -1
- package/dist/ui/logging/index.d.ts +7 -0
- package/dist/ui/logging/index.d.ts.map +1 -0
- package/dist/ui/logging/index.js +7 -0
- package/dist/ui/logging/index.js.map +1 -0
- package/dist/ui/logging/logger.d.ts +98 -0
- package/dist/ui/logging/logger.d.ts.map +1 -0
- package/dist/ui/logging/logger.js +93 -0
- package/dist/ui/logging/logger.js.map +1 -0
- package/dist/ui/messages/chrome.d.ts +50 -1
- package/dist/ui/messages/chrome.d.ts.map +1 -1
- package/dist/ui/messages/chrome.js +77 -0
- package/dist/ui/messages/chrome.js.map +1 -1
- package/dist/ui/messages/deprecation.d.ts +30 -0
- package/dist/ui/messages/deprecation.d.ts.map +1 -0
- package/dist/ui/messages/deprecation.js +49 -0
- package/dist/ui/messages/deprecation.js.map +1 -0
- package/dist/ui/messages/preview.js +1 -1
- package/dist/ui/messages/preview.js.map +1 -1
- package/dist/ui/messages/session.d.ts.map +1 -1
- package/dist/ui/messages/session.js +21 -7
- package/dist/ui/messages/session.js.map +1 -1
- package/dist/utils/__tests__/session.contract.test.js +15 -1
- package/dist/utils/__tests__/session.contract.test.js.map +1 -1
- package/dist/utils/filters.d.ts +40 -0
- package/dist/utils/filters.d.ts.map +1 -1
- package/dist/utils/filters.js +54 -0
- package/dist/utils/filters.js.map +1 -1
- package/dist/utils/pageReadiness.js +24 -25
- package/dist/utils/pageReadiness.js.map +1 -1
- package/dist/utils/session.d.ts +200 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js +498 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +10 -0
- package/dist/utils/url.js.map +1 -1
- package/dist/utils/validation.d.ts +12 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +20 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +2 -1
- package/dist/cli/commands/__tests__/cdp.contract.test.d.ts +0 -24
- package/dist/cli/commands/__tests__/cdp.contract.test.d.ts.map +0 -1
- package/dist/cli/commands/__tests__/cdp.contract.test.js +0 -467
- package/dist/cli/commands/__tests__/cdp.contract.test.js.map +0 -1
- package/dist/cli/commands/cdp.d.ts +0 -8
- package/dist/cli/commands/cdp.d.ts.map +0 -1
- package/dist/cli/commands/cdp.js +0 -45
- package/dist/cli/commands/cdp.js.map +0 -1
- package/dist/cli/commands/console.d.ts +0 -8
- package/dist/cli/commands/console.d.ts.map +0 -1
- package/dist/cli/commands/console.js +0 -97
- package/dist/cli/commands/console.js.map +0 -1
- package/dist/cli/commands/dom/helpers/domCache.d.ts +0 -36
- package/dist/cli/commands/dom/helpers/domCache.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/domCache.js +0 -65
- package/dist/cli/commands/dom/helpers/domCache.js.map +0 -1
- package/dist/cli/commands/dom/helpers/domQuery.d.ts +0 -48
- package/dist/cli/commands/dom/helpers/domQuery.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/domQuery.js +0 -104
- package/dist/cli/commands/dom/helpers/domQuery.js.map +0 -1
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts +0 -45
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/errorHandler.js +0 -71
- package/dist/cli/commands/dom/helpers/errorHandler.js.map +0 -1
- package/dist/cli/commands/dom/helpers/evalHelpers.d.ts +0 -52
- package/dist/cli/commands/dom/helpers/evalHelpers.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/evalHelpers.js +0 -75
- package/dist/cli/commands/dom/helpers/evalHelpers.js.map +0 -1
- package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts +0 -35
- package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/optionsBuilder.js +0 -51
- package/dist/cli/commands/dom/helpers/optionsBuilder.js.map +0 -1
- package/dist/cli/commands/dom/helpers/selectorParser.d.ts +0 -20
- package/dist/cli/commands/dom/helpers/selectorParser.d.ts.map +0 -1
- package/dist/cli/commands/dom/helpers/selectorParser.js +0 -20
- package/dist/cli/commands/dom/helpers/selectorParser.js.map +0 -1
- package/dist/cli/commands/dom/index.d.ts +0 -8
- package/dist/cli/commands/dom/index.d.ts.map +0 -1
- package/dist/cli/commands/dom/index.js +0 -257
- package/dist/cli/commands/dom/index.js.map +0 -1
- package/dist/cli/commands/dom.d.ts +0 -8
- package/dist/cli/commands/dom.d.ts.map +0 -1
- package/dist/cli/commands/dom.js +0 -257
- package/dist/cli/commands/dom.js.map +0 -1
- package/dist/cli/commands/domErrorHandler.d.ts +0 -45
- package/dist/cli/commands/domErrorHandler.d.ts.map +0 -1
- package/dist/cli/commands/domErrorHandler.js +0 -71
- package/dist/cli/commands/domErrorHandler.js.map +0 -1
- package/dist/cli/commands/domEvalHelpers.d.ts +0 -52
- package/dist/cli/commands/domEvalHelpers.d.ts.map +0 -1
- package/dist/cli/commands/domEvalHelpers.js +0 -76
- package/dist/cli/commands/domEvalHelpers.js.map +0 -1
- package/dist/cli/commands/domOptionsBuilder.d.ts +0 -35
- package/dist/cli/commands/domOptionsBuilder.d.ts.map +0 -1
- package/dist/cli/commands/domOptionsBuilder.js +0 -51
- package/dist/cli/commands/domOptionsBuilder.js.map +0 -1
- package/dist/cli/commands/domSelectorParser.d.ts +0 -20
- package/dist/cli/commands/domSelectorParser.d.ts.map +0 -1
- package/dist/cli/commands/domSelectorParser.js +0 -20
- package/dist/cli/commands/domSelectorParser.js.map +0 -1
- package/dist/cli/commands/network.d.ts +0 -8
- package/dist/cli/commands/network.d.ts.map +0 -1
- package/dist/cli/commands/network.js +0 -43
- package/dist/cli/commands/network.js.map +0 -1
- package/dist/cli/handlers/CommandRunner.d.ts +0 -60
- package/dist/cli/handlers/CommandRunner.d.ts.map +0 -1
- package/dist/cli/handlers/CommandRunner.js +0 -81
- package/dist/cli/handlers/CommandRunner.js.map +0 -1
- package/dist/cli/handlers/commonOptions.d.ts +0 -54
- package/dist/cli/handlers/commonOptions.d.ts.map +0 -1
- package/dist/cli/handlers/commonOptions.js +0 -64
- package/dist/cli/handlers/commonOptions.js.map +0 -1
- package/dist/cli/handlers/daemonSessionController.d.ts +0 -23
- package/dist/cli/handlers/daemonSessionController.d.ts.map +0 -1
- package/dist/cli/handlers/daemonSessionController.js +0 -79
- package/dist/cli/handlers/daemonSessionController.js.map +0 -1
- package/dist/cli/handlers/landingPage.d.ts +0 -8
- package/dist/cli/handlers/landingPage.d.ts.map +0 -1
- package/dist/cli/handlers/landingPage.js +0 -8
- package/dist/cli/handlers/landingPage.js.map +0 -1
- package/dist/collectors/__tests__/network.contract.test.d.ts +0 -28
- package/dist/collectors/__tests__/network.contract.test.d.ts.map +0 -1
- package/dist/collectors/__tests__/network.contract.test.js +0 -540
- package/dist/collectors/__tests__/network.contract.test.js.map +0 -1
- package/dist/commandRegistry.d.ts +0 -11
- package/dist/commandRegistry.d.ts.map +0 -1
- package/dist/commandRegistry.js +0 -45
- package/dist/commandRegistry.js.map +0 -1
- package/dist/commands/domErrorHandler.d.ts +0 -45
- package/dist/commands/domErrorHandler.d.ts.map +0 -1
- package/dist/commands/domErrorHandler.js +0 -71
- package/dist/commands/domErrorHandler.js.map +0 -1
- package/dist/dom/cache.d.ts +0 -36
- package/dist/dom/cache.d.ts.map +0 -1
- package/dist/dom/cache.js +0 -65
- package/dist/dom/cache.js.map +0 -1
- package/dist/dom/index.d.ts +0 -9
- package/dist/dom/index.d.ts.map +0 -1
- package/dist/dom/index.js +0 -9
- package/dist/dom/index.js.map +0 -1
- package/dist/dom/query.d.ts +0 -48
- package/dist/dom/query.d.ts.map +0 -1
- package/dist/dom/query.js +0 -104
- package/dist/dom/query.js.map +0 -1
- package/dist/utils/formatters/network.d.ts +0 -23
- package/dist/utils/formatters/network.d.ts.map +0 -1
- package/dist/utils/formatters/network.js +0 -35
- package/dist/utils/formatters/network.js.map +0 -1
- package/dist/utils/ui.d.ts +0 -36
- package/dist/utils/ui.d.ts.map +0 -1
- package/dist/utils/ui.js +0 -47
- package/dist/utils/ui.js.map +0 -1
- package/dist/utils/url/safeParseUrl.d.ts +0 -63
- package/dist/utils/url/safeParseUrl.d.ts.map +0 -1
- package/dist/utils/url/safeParseUrl.js +0 -84
- package/dist/utils/url/safeParseUrl.js.map +0 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { execSync } from 'child_process';
|
|
2
1
|
import * as fs from 'fs';
|
|
3
|
-
import * as
|
|
2
|
+
import * as net from 'net';
|
|
4
3
|
import * as path from 'path';
|
|
5
4
|
import * as chromeLauncher from 'chrome-launcher';
|
|
6
|
-
import { BDG_CHROME_FLAGS, BDG_CHROME_PREFS, DEFAULT_CDP_PORT, DEFAULT_CHROME_LOG_LEVEL, DEFAULT_CHROME_HANDLE_SIGINT, CHROME_PROFILE_DIR, HEADLESS_FLAG, } from '../constants.js';
|
|
5
|
+
import { BDG_CHROME_FLAGS, BDG_CHROME_PREFS, DEFAULT_CDP_PORT, DEFAULT_CHROME_LOG_LEVEL, DEFAULT_CHROME_HANDLE_SIGINT, CHROME_PROFILE_DIR, HEADLESS_FLAG, DOCKER_CHROME_FLAGS, } from '../constants.js';
|
|
6
|
+
import { ensureSessionDir, getSessionDir } from '../session/paths.js';
|
|
7
7
|
import { isProcessAlive } from '../session/process.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { ChromeLaunchError, getErrorMessage } from '../utils/errors.js';
|
|
11
|
-
import { createLogger } from '../utils/logger.js';
|
|
8
|
+
import { createLogger } from '../ui/logging/index.js';
|
|
9
|
+
import { formatDiagnosticsForError, chromeLaunchStartMessage, chromeLaunchSuccessMessage, chromeUserDataDirMessage, invalidPortError, userDataDirError, prefsFileNotFoundError, invalidPrefsFormatError, prefsLoadError, chromeLaunchFailedError, chromeBinaryOverrideNotFound, chromeBinaryOverrideNotExecutable, } from '../ui/messages/chrome.js';
|
|
12
10
|
import { filterDefined } from '../utils/objects.js';
|
|
11
|
+
import { getChromeDiagnostics } from './diagnostics.js';
|
|
12
|
+
import { ChromeLaunchError, getErrorMessage } from './errors.js';
|
|
13
13
|
const log = createLogger('chrome');
|
|
14
14
|
/**
|
|
15
15
|
* Get formatted Chrome diagnostics for error messages.
|
|
@@ -46,33 +46,56 @@ const REMOTE_DEBUGGING_FLAG = (port) => `--remote-debugging-port=${port}`;
|
|
|
46
46
|
* Chrome 136+ requires --user-data-dir with a non-default directory.
|
|
47
47
|
* Uses chrome-launcher for cross-platform Chrome detection and launching.
|
|
48
48
|
*/
|
|
49
|
+
/**
|
|
50
|
+
* Atomically reserve a port to prevent race conditions during Chrome launch.
|
|
51
|
+
*
|
|
52
|
+
* Creates a temporary TCP server on the port, which prevents other processes
|
|
53
|
+
* from binding to it. Returns a release function to free the port.
|
|
54
|
+
*
|
|
55
|
+
* @param port - Port number to reserve
|
|
56
|
+
* @returns Promise resolving to reservation object with release function
|
|
57
|
+
* @throws ChromeLaunchError If port is already in use
|
|
58
|
+
*/
|
|
59
|
+
async function reservePort(port) {
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
const server = net.createServer();
|
|
62
|
+
server.once('error', (err) => {
|
|
63
|
+
if (err.code === 'EADDRINUSE') {
|
|
64
|
+
// Port is already in use - provide helpful error message
|
|
65
|
+
reject(new ChromeLaunchError(`Port ${port} is already in use.\n\n` +
|
|
66
|
+
`This usually means Chrome is still running from a previous session.\n\n` +
|
|
67
|
+
`Try:\n` +
|
|
68
|
+
` - bdg cleanup --aggressive (kills all Chrome processes)\n` +
|
|
69
|
+
` - bdg cleanup --force (removes session files + kills Chrome on port ${port})\n` +
|
|
70
|
+
` - lsof -ti:${port} | xargs kill -9 (force kill process on port)\n` +
|
|
71
|
+
` - Use different port: bdg <url> --port ${port + 1}`));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
reject(err);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
server.listen(port, '127.0.0.1', () => {
|
|
78
|
+
// Port successfully reserved - return release function
|
|
79
|
+
resolve({
|
|
80
|
+
release: () => {
|
|
81
|
+
server.close();
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
49
87
|
export async function launchChrome(options = {}) {
|
|
50
88
|
const port = options.port ?? DEFAULT_CDP_PORT;
|
|
51
89
|
// Validate port range
|
|
52
90
|
if (port < 1 || port > 65535) {
|
|
53
91
|
throw new ChromeLaunchError(invalidPortError(port));
|
|
54
92
|
}
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
throw new ChromeLaunchError(`Port ${port} is already in use by process ${portInUse}\n\n` +
|
|
62
|
-
`This usually means Chrome is still running from a previous session.\n\n` +
|
|
63
|
-
`Try:\n` +
|
|
64
|
-
` - bdg cleanup --aggressive (kills all Chrome processes)\n` +
|
|
65
|
-
` - bdg cleanup --force (removes session files + kills Chrome on port ${port})\n` +
|
|
66
|
-
` - kill ${portInUse} (manually kill the process)\n` +
|
|
67
|
-
` - Use different port: bdg <url> --port ${port + 1}`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
// Re-throw ChromeLaunchError, ignore other errors (lsof not available, etc.)
|
|
72
|
-
if (error instanceof ChromeLaunchError) {
|
|
73
|
-
throw error;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
93
|
+
// Atomically check if port is available
|
|
94
|
+
// We must release BEFORE launching Chrome so Chrome can bind to it
|
|
95
|
+
const reservation = await reservePort(port);
|
|
96
|
+
// Immediately release - we just wanted to atomically check availability
|
|
97
|
+
// Chrome needs to bind to this port, so we can't hold the reservation
|
|
98
|
+
reservation.release();
|
|
76
99
|
const userDataDir = options.userDataDir ?? getPersistentUserDataDir();
|
|
77
100
|
log.info(chromeLaunchStartMessage(port));
|
|
78
101
|
log.debug(chromeUserDataDirMessage(userDataDir));
|
|
@@ -143,8 +166,9 @@ export async function launchChrome(options = {}) {
|
|
|
143
166
|
* @throws Error if user data directory cannot be created due to permission issues
|
|
144
167
|
*/
|
|
145
168
|
function getPersistentUserDataDir() {
|
|
146
|
-
|
|
147
|
-
const
|
|
169
|
+
ensureSessionDir();
|
|
170
|
+
const baseDir = getSessionDir();
|
|
171
|
+
const userDataDir = path.join(baseDir, CHROME_PROFILE_DIR);
|
|
148
172
|
if (!fs.existsSync(userDataDir)) {
|
|
149
173
|
try {
|
|
150
174
|
fs.mkdirSync(userDataDir, { recursive: true });
|
|
@@ -189,6 +213,66 @@ function loadChromePrefs(options) {
|
|
|
189
213
|
}
|
|
190
214
|
return options.prefs;
|
|
191
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Resolve Chrome binary override from LaunchOptions or CHROME_PATH.
|
|
218
|
+
*
|
|
219
|
+
* When users explicitly set a Chrome binary we skip chrome-launcher's fallback
|
|
220
|
+
* auto-detection to ensure mismatched paths fail fast with actionable errors.
|
|
221
|
+
*
|
|
222
|
+
* @param options - Launch options which may include chromePath
|
|
223
|
+
* @returns Validated Chrome binary path or undefined if no override
|
|
224
|
+
* @throws ChromeLaunchError if override path is invalid or not executable
|
|
225
|
+
*/
|
|
226
|
+
function resolveChromeBinaryOverride(options) {
|
|
227
|
+
const override = options.chromePath ?? process.env['CHROME_PATH'];
|
|
228
|
+
if (!override) {
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
const chromePath = override.trim();
|
|
232
|
+
if (!chromePath) {
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
const sourceLabel = options.chromePath ? 'chromePath option' : 'CHROME_PATH';
|
|
236
|
+
if (!fs.existsSync(chromePath)) {
|
|
237
|
+
const diagnostics = getFormattedDiagnostics();
|
|
238
|
+
throw new ChromeLaunchError(`${chromeBinaryOverrideNotFound(chromePath, sourceLabel)}\n\n${diagnostics.join('\n')}`);
|
|
239
|
+
}
|
|
240
|
+
try {
|
|
241
|
+
const stats = fs.statSync(chromePath);
|
|
242
|
+
if (stats.isDirectory()) {
|
|
243
|
+
throw new ChromeLaunchError(chromeBinaryOverrideNotExecutable(chromePath, sourceLabel));
|
|
244
|
+
}
|
|
245
|
+
fs.accessSync(chromePath, fs.constants.X_OK);
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
if (error instanceof ChromeLaunchError) {
|
|
249
|
+
throw error;
|
|
250
|
+
}
|
|
251
|
+
throw new ChromeLaunchError(`${chromeBinaryOverrideNotExecutable(chromePath, sourceLabel)}\n\n${getErrorMessage(error)}`, error instanceof Error ? error : undefined);
|
|
252
|
+
}
|
|
253
|
+
return chromePath;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Check if running inside a Docker container
|
|
257
|
+
* @returns true if running in Docker, false otherwise
|
|
258
|
+
*/
|
|
259
|
+
function isDocker() {
|
|
260
|
+
try {
|
|
261
|
+
// Check for /.dockerenv file (most reliable indicator)
|
|
262
|
+
if (fs.existsSync('/.dockerenv')) {
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
// Check /proc/self/cgroup for docker/containerd indicators
|
|
266
|
+
if (fs.existsSync('/proc/self/cgroup')) {
|
|
267
|
+
const cgroup = fs.readFileSync('/proc/self/cgroup', 'utf8');
|
|
268
|
+
return cgroup.includes('docker') || cgroup.includes('containerd');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
// If we can't read these files, assume not Docker
|
|
273
|
+
}
|
|
274
|
+
return false;
|
|
275
|
+
}
|
|
192
276
|
/**
|
|
193
277
|
* Build Chrome flags array from launch options.
|
|
194
278
|
*
|
|
@@ -196,6 +280,9 @@ function loadChromePrefs(options) {
|
|
|
196
280
|
* and layers bdg-specific overrides on top. Headless mode uses the new headless
|
|
197
281
|
* implementation for better compatibility.
|
|
198
282
|
*
|
|
283
|
+
* When running in Docker, automatically adds GPU-disabling flags to work around
|
|
284
|
+
* graphics limitations in containerized environments.
|
|
285
|
+
*
|
|
199
286
|
* @param options - Launch options containing flag preferences
|
|
200
287
|
* @returns Array of Chrome command-line flags
|
|
201
288
|
*/
|
|
@@ -203,10 +290,19 @@ function buildChromeFlags(options) {
|
|
|
203
290
|
const port = options.port ?? DEFAULT_CDP_PORT;
|
|
204
291
|
const baseFlags = options.ignoreDefaultFlags ? [] : chromeLauncher.Launcher.defaultFlags();
|
|
205
292
|
const bdgFlags = [REMOTE_DEBUGGING_FLAG(port), ...BDG_CHROME_FLAGS];
|
|
293
|
+
// Add Docker-specific flags if running in a container
|
|
294
|
+
const dockerFlags = isDocker() ? DOCKER_CHROME_FLAGS : [];
|
|
295
|
+
// Headless flag must come first to ensure it's not overridden by other flags
|
|
206
296
|
if (options.headless) {
|
|
207
|
-
|
|
297
|
+
return [
|
|
298
|
+
HEADLESS_FLAG,
|
|
299
|
+
...baseFlags,
|
|
300
|
+
...bdgFlags,
|
|
301
|
+
...dockerFlags,
|
|
302
|
+
...(options.chromeFlags ?? []),
|
|
303
|
+
];
|
|
208
304
|
}
|
|
209
|
-
return [...baseFlags, ...bdgFlags, ...(options.chromeFlags ?? [])];
|
|
305
|
+
return [...baseFlags, ...bdgFlags, ...dockerFlags, ...(options.chromeFlags ?? [])];
|
|
210
306
|
}
|
|
211
307
|
/**
|
|
212
308
|
* Type-safe conversion for Chrome preferences from unknown to JSONLike.
|
|
@@ -239,6 +335,7 @@ function ensureJSONCompatiblePrefs(prefs) {
|
|
|
239
335
|
function buildChromeOptions(options) {
|
|
240
336
|
const userPrefs = loadChromePrefs(options);
|
|
241
337
|
const userDataDir = options.userDataDir ?? getPersistentUserDataDir();
|
|
338
|
+
const chromePathOverride = resolveChromeBinaryOverride(options);
|
|
242
339
|
// User preferences take precedence over bdg defaults
|
|
243
340
|
const mergedPrefs = userPrefs ? { ...BDG_CHROME_PREFS, ...userPrefs } : BDG_CHROME_PREFS;
|
|
244
341
|
return {
|
|
@@ -255,6 +352,7 @@ function buildChromeOptions(options) {
|
|
|
255
352
|
portStrictMode: options.portStrictMode,
|
|
256
353
|
prefs: ensureJSONCompatiblePrefs(mergedPrefs),
|
|
257
354
|
envVars: options.envVars,
|
|
355
|
+
chromePath: chromePathOverride,
|
|
258
356
|
}),
|
|
259
357
|
};
|
|
260
358
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/connection/launcher.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/connection/launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart page readiness detection using self-tuning thresholds
|
|
3
|
+
*
|
|
4
|
+
* This module provides adaptive page load detection that works for any page type
|
|
5
|
+
* without configuration. It uses a three-phase approach:
|
|
6
|
+
* 1. Load event (baseline readiness)
|
|
7
|
+
* 2. Network stability (adapts to request patterns)
|
|
8
|
+
* 3. DOM stability (adapts to mutation rate)
|
|
9
|
+
*/
|
|
10
|
+
import type { CDPConnection } from '../connection/cdp.js';
|
|
11
|
+
/**
|
|
12
|
+
* Options for page readiness detection
|
|
13
|
+
*/
|
|
14
|
+
export interface PageReadinessOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Maximum wait time before proceeding anyway
|
|
17
|
+
* Default: 5000ms (5 seconds)
|
|
18
|
+
*/
|
|
19
|
+
maxWaitMs?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Wait for page to be ready using self-tuning detection
|
|
23
|
+
*
|
|
24
|
+
* Strategy (always applied):
|
|
25
|
+
* 1. Wait for load event (baseline readiness)
|
|
26
|
+
* 2. Wait for network to stabilize (adaptive 200ms idle)
|
|
27
|
+
* 3. Wait for DOM to stabilize (adaptive 300ms idle)
|
|
28
|
+
*
|
|
29
|
+
* All thresholds adapt to observed page behavior.
|
|
30
|
+
* No framework detection, no configuration needed.
|
|
31
|
+
* Works for static HTML, SPAs, and everything in between.
|
|
32
|
+
*
|
|
33
|
+
* @param cdp - CDP connection
|
|
34
|
+
* @param options - Optional configuration
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* // Default: Wait up to 5s for full stability
|
|
39
|
+
* await waitForPageReady(cdp);
|
|
40
|
+
*
|
|
41
|
+
* // Custom timeout for very slow apps
|
|
42
|
+
* await waitForPageReady(cdp, { maxWaitMs: 15000 });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function waitForPageReady(cdp: CDPConnection, options?: PageReadinessOptions): Promise<void>;
|
|
46
|
+
//# sourceMappingURL=pageReadiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageReadiness.d.ts","sourceRoot":"","sources":["../../src/connection/pageReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart page readiness detection using self-tuning thresholds
|
|
3
|
+
*
|
|
4
|
+
* This module provides adaptive page load detection that works for any page type
|
|
5
|
+
* without configuration. It uses a three-phase approach:
|
|
6
|
+
* 1. Load event (baseline readiness)
|
|
7
|
+
* 2. Network stability (adapts to request patterns)
|
|
8
|
+
* 3. DOM stability (adapts to mutation rate)
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Wait for page to be ready using self-tuning detection
|
|
12
|
+
*
|
|
13
|
+
* Strategy (always applied):
|
|
14
|
+
* 1. Wait for load event (baseline readiness)
|
|
15
|
+
* 2. Wait for network to stabilize (adaptive 200ms idle)
|
|
16
|
+
* 3. Wait for DOM to stabilize (adaptive 300ms idle)
|
|
17
|
+
*
|
|
18
|
+
* All thresholds adapt to observed page behavior.
|
|
19
|
+
* No framework detection, no configuration needed.
|
|
20
|
+
* Works for static HTML, SPAs, and everything in between.
|
|
21
|
+
*
|
|
22
|
+
* @param cdp - CDP connection
|
|
23
|
+
* @param options - Optional configuration
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // Default: Wait up to 5s for full stability
|
|
28
|
+
* await waitForPageReady(cdp);
|
|
29
|
+
*
|
|
30
|
+
* // Custom timeout for very slow apps
|
|
31
|
+
* await waitForPageReady(cdp, { maxWaitMs: 15000 });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export async function waitForPageReady(cdp, options = {}) {
|
|
35
|
+
const maxWaitMs = options.maxWaitMs ?? 5000;
|
|
36
|
+
const deadline = Date.now() + maxWaitMs;
|
|
37
|
+
try {
|
|
38
|
+
// Phase 1: Wait for load event (baseline)
|
|
39
|
+
await waitForLoadEvent(cdp, deadline);
|
|
40
|
+
console.error('[readiness] ✓ Load event');
|
|
41
|
+
// Phase 2: Wait for network stability (always - modern web is async)
|
|
42
|
+
const networkIdleMs = await waitForNetworkStable(cdp, deadline);
|
|
43
|
+
console.error(`[readiness] ✓ Network stable (${networkIdleMs}ms idle)`);
|
|
44
|
+
// Phase 3: Wait for DOM stability (always - SPAs mutate after load)
|
|
45
|
+
const domIdleMs = await waitForDOMStable(cdp, deadline);
|
|
46
|
+
console.error(`[readiness] ✓ DOM stable (${domIdleMs}ms idle)`);
|
|
47
|
+
console.error('[readiness] ✓ Page ready');
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
51
|
+
console.error(`[readiness] ${message}, proceeding anyway`);
|
|
52
|
+
// Don't rethrow - allow session to continue
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Wait for Page.loadEventFired (window.onload equivalent)
|
|
57
|
+
*
|
|
58
|
+
* This is the browser's native load event - fires when:
|
|
59
|
+
* - Document is fully loaded
|
|
60
|
+
* - All synchronous scripts executed
|
|
61
|
+
* - DOMContentLoaded already fired
|
|
62
|
+
*
|
|
63
|
+
* Framework-agnostic baseline.
|
|
64
|
+
*
|
|
65
|
+
* Handles edge case where load event already fired (Chrome navigates during launch).
|
|
66
|
+
*
|
|
67
|
+
* @param cdp - CDP connection
|
|
68
|
+
* @param deadline - Timestamp when to timeout
|
|
69
|
+
* @throws Error if deadline exceeded
|
|
70
|
+
*/
|
|
71
|
+
async function waitForLoadEvent(cdp, deadline) {
|
|
72
|
+
await cdp.send('Page.enable');
|
|
73
|
+
// Check if page already loaded (handles Chrome pre-navigation)
|
|
74
|
+
try {
|
|
75
|
+
const result = await cdp.send('Runtime.evaluate', {
|
|
76
|
+
expression: 'document.readyState',
|
|
77
|
+
returnByValue: true,
|
|
78
|
+
});
|
|
79
|
+
if (result.result?.value === 'complete') {
|
|
80
|
+
// Load event already fired
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Ignore evaluation errors, proceed to wait for event
|
|
86
|
+
}
|
|
87
|
+
return new Promise((resolve, reject) => {
|
|
88
|
+
let timeout;
|
|
89
|
+
let handlerId;
|
|
90
|
+
const cleanup = () => {
|
|
91
|
+
clearTimeout(timeout);
|
|
92
|
+
if (handlerId !== undefined) {
|
|
93
|
+
cdp.off('Page.loadEventFired', handlerId);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const checkDeadline = () => {
|
|
97
|
+
if (Date.now() >= deadline) {
|
|
98
|
+
cleanup();
|
|
99
|
+
reject(new Error('Load event timeout'));
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
timeout = setTimeout(checkDeadline, 100);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const loadHandler = () => {
|
|
106
|
+
cleanup();
|
|
107
|
+
resolve();
|
|
108
|
+
};
|
|
109
|
+
handlerId = cdp.on('Page.loadEventFired', loadHandler);
|
|
110
|
+
checkDeadline();
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Wait for network to stabilize
|
|
115
|
+
*
|
|
116
|
+
* Uses a fixed 200ms idle threshold which works well for most pages:
|
|
117
|
+
* - Fast enough for quick sites (avoids unnecessary waiting)
|
|
118
|
+
* - Patient enough for API-heavy apps (catches late requests)
|
|
119
|
+
* - Simpler and more predictable than adaptive learning
|
|
120
|
+
*
|
|
121
|
+
* Network is considered stable when there are zero active requests
|
|
122
|
+
* for at least 200ms continuously.
|
|
123
|
+
*
|
|
124
|
+
* Why this works:
|
|
125
|
+
* - Catches initial request bursts (CSS, JS, images)
|
|
126
|
+
* - Waits for lazy-loaded resources
|
|
127
|
+
* - Detects API calls triggered by hydration
|
|
128
|
+
* - Framework-agnostic - based on actual network activity
|
|
129
|
+
*
|
|
130
|
+
* @param cdp - CDP connection
|
|
131
|
+
* @param deadline - Timestamp when to timeout
|
|
132
|
+
* @returns Actual idle duration detected
|
|
133
|
+
* @throws Error if deadline exceeded
|
|
134
|
+
*/
|
|
135
|
+
async function waitForNetworkStable(cdp, deadline) {
|
|
136
|
+
await cdp.send('Network.enable');
|
|
137
|
+
let activeRequests = 0;
|
|
138
|
+
let lastActivity = Date.now();
|
|
139
|
+
const intervals = [];
|
|
140
|
+
let lastRequestTime = Date.now();
|
|
141
|
+
// Track request patterns
|
|
142
|
+
const requestHandler = () => {
|
|
143
|
+
const now = Date.now();
|
|
144
|
+
const interval = now - lastRequestTime;
|
|
145
|
+
if (interval < 5000)
|
|
146
|
+
intervals.push(interval);
|
|
147
|
+
lastRequestTime = now;
|
|
148
|
+
activeRequests++;
|
|
149
|
+
lastActivity = now;
|
|
150
|
+
};
|
|
151
|
+
const finishHandler = () => {
|
|
152
|
+
activeRequests--;
|
|
153
|
+
if (activeRequests === 0) {
|
|
154
|
+
lastActivity = Date.now();
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const requestHandlerId = cdp.on('Network.requestWillBeSent', requestHandler);
|
|
158
|
+
const loadingFinishedId = cdp.on('Network.loadingFinished', finishHandler);
|
|
159
|
+
const loadingFailedId = cdp.on('Network.loadingFailed', finishHandler);
|
|
160
|
+
try {
|
|
161
|
+
// Use fixed threshold for immediate detection
|
|
162
|
+
const idleThreshold = 200; // 200ms idle = network stable
|
|
163
|
+
// Detection phase: wait for stability
|
|
164
|
+
while (Date.now() < deadline) {
|
|
165
|
+
if (activeRequests === 0) {
|
|
166
|
+
const idleTime = Date.now() - lastActivity;
|
|
167
|
+
if (idleTime >= idleThreshold) {
|
|
168
|
+
return idleTime; // Success!
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
await delay(50); // Check every 50ms
|
|
172
|
+
}
|
|
173
|
+
throw new Error('Network stability timeout');
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
// Cleanup handlers
|
|
177
|
+
cdp.off('Network.requestWillBeSent', requestHandlerId);
|
|
178
|
+
cdp.off('Network.loadingFinished', loadingFinishedId);
|
|
179
|
+
cdp.off('Network.loadingFailed', loadingFailedId);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Wait for DOM to stabilize
|
|
184
|
+
*
|
|
185
|
+
* Uses a MutationObserver to detect when the DOM stops changing.
|
|
186
|
+
* DOM is considered stable when there are no mutations for 300ms continuously.
|
|
187
|
+
*
|
|
188
|
+
* HOW IT WORKS:
|
|
189
|
+
* 1. Inject MutationObserver into page to track all DOM changes
|
|
190
|
+
* 2. Monitor childList, attributes, subtree, and characterData changes
|
|
191
|
+
* 3. Wait for 300ms of continuous no-change activity
|
|
192
|
+
* 4. Clean up observer when complete
|
|
193
|
+
*
|
|
194
|
+
* Why this works:
|
|
195
|
+
* - SSR hydration causes DOM mutations (React, Vue, Svelte)
|
|
196
|
+
* - Client-side rendering creates DOM elements
|
|
197
|
+
* - When mutations stop, framework initialization is complete
|
|
198
|
+
* - 300ms is long enough to catch batched updates, short enough to be responsive
|
|
199
|
+
*
|
|
200
|
+
* Framework-agnostic - detects actual mutations regardless of framework.
|
|
201
|
+
*
|
|
202
|
+
* @param cdp - CDP connection
|
|
203
|
+
* @param deadline - Timestamp when to timeout
|
|
204
|
+
* @returns Actual stable duration detected
|
|
205
|
+
* @throws Error if deadline exceeded
|
|
206
|
+
*/
|
|
207
|
+
async function waitForDOMStable(cdp, deadline) {
|
|
208
|
+
// Inject mutation observer
|
|
209
|
+
await cdp.send('Runtime.evaluate', {
|
|
210
|
+
expression: `
|
|
211
|
+
window.__bdg_mutations = 0;
|
|
212
|
+
window.__bdg_lastMutation = Date.now();
|
|
213
|
+
|
|
214
|
+
const observer = new MutationObserver(() => {
|
|
215
|
+
window.__bdg_mutations++;
|
|
216
|
+
window.__bdg_lastMutation = Date.now();
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
observer.observe(document.body, {
|
|
220
|
+
childList: true,
|
|
221
|
+
subtree: true,
|
|
222
|
+
attributes: true,
|
|
223
|
+
characterData: true
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
window.__bdg_observer = observer;
|
|
227
|
+
`,
|
|
228
|
+
});
|
|
229
|
+
try {
|
|
230
|
+
// Use fixed threshold for immediate detection
|
|
231
|
+
const stableThreshold = 300; // 300ms no mutations = DOM stable
|
|
232
|
+
// Detection phase: wait for stability
|
|
233
|
+
while (Date.now() < deadline) {
|
|
234
|
+
const checkResult = await cdp.send('Runtime.evaluate', {
|
|
235
|
+
expression: 'Date.now() - window.__bdg_lastMutation',
|
|
236
|
+
returnByValue: true,
|
|
237
|
+
});
|
|
238
|
+
const timeSinceLastMutation = checkResult.result?.value ?? 0;
|
|
239
|
+
if (timeSinceLastMutation >= stableThreshold) {
|
|
240
|
+
return timeSinceLastMutation; // Success!
|
|
241
|
+
}
|
|
242
|
+
await delay(100); // Check every 100ms
|
|
243
|
+
}
|
|
244
|
+
throw new Error('DOM stability timeout');
|
|
245
|
+
}
|
|
246
|
+
finally {
|
|
247
|
+
// Cleanup observer
|
|
248
|
+
await cdp
|
|
249
|
+
.send('Runtime.evaluate', {
|
|
250
|
+
expression: `
|
|
251
|
+
window.__bdg_observer?.disconnect();
|
|
252
|
+
delete window.__bdg_observer;
|
|
253
|
+
delete window.__bdg_mutations;
|
|
254
|
+
delete window.__bdg_lastMutation;
|
|
255
|
+
`,
|
|
256
|
+
})
|
|
257
|
+
.catch(() => {
|
|
258
|
+
// Ignore cleanup errors
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Delay utility
|
|
264
|
+
*
|
|
265
|
+
* @param ms - Milliseconds to delay
|
|
266
|
+
*/
|
|
267
|
+
function delay(ms) {
|
|
268
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=pageReadiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageReadiness.js","sourceRoot":"","sources":["../../src/connection/pageReadiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { CDPConnection } from './cdp.js';
|
|
2
|
+
import type { CDPTarget } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Find the best matching target from a list of tabs.
|
|
5
|
+
*
|
|
6
|
+
* @param normalizedUrl - Target URL to find (must be pre-normalized)
|
|
7
|
+
* @param targets - List of available targets
|
|
8
|
+
* @returns Best matching target or null if no match found
|
|
9
|
+
*/
|
|
10
|
+
export declare function findBestTarget(normalizedUrl: string, targets: CDPTarget[]): CDPTarget | null;
|
|
11
|
+
/**
|
|
12
|
+
* Create a new tab with the specified URL using CDP.
|
|
13
|
+
*
|
|
14
|
+
* @param normalizedUrl - URL to open in the new tab (must be pre-normalized)
|
|
15
|
+
* @param cdp - CDP connection instance
|
|
16
|
+
* @returns Target information for the new tab
|
|
17
|
+
* @throws Error if tab creation fails via both CDP and HTTP fallback methods
|
|
18
|
+
*/
|
|
19
|
+
export declare function createNewTab(normalizedUrl: string, cdp: CDPConnection): Promise<CDPTarget>;
|
|
20
|
+
/**
|
|
21
|
+
* Navigate an existing tab to a new URL using CDP.
|
|
22
|
+
*
|
|
23
|
+
* @param targetId - CDP target ID to navigate
|
|
24
|
+
* @param normalizedUrl - URL to navigate to (must be pre-normalized)
|
|
25
|
+
* @param cdp - CDP connection instance
|
|
26
|
+
* @throws Error if navigation fails (e.g., network error, invalid URL, blocked by browser)
|
|
27
|
+
*/
|
|
28
|
+
export declare function navigateToUrl(targetId: string, normalizedUrl: string, cdp: CDPConnection): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Wait for a target to be ready (URL matches expected).
|
|
31
|
+
*
|
|
32
|
+
* @param targetId - CDP target ID to wait for
|
|
33
|
+
* @param normalizedUrl - Expected URL (must be pre-normalized)
|
|
34
|
+
* @param cdp - CDP connection instance
|
|
35
|
+
* @param maxWaitMs - Maximum time to wait in milliseconds
|
|
36
|
+
* @throws Error if target doesn't become ready within maxWaitMs timeout
|
|
37
|
+
*/
|
|
38
|
+
export declare function waitForTargetReady(targetId: string, normalizedUrl: string, cdp: CDPConnection, maxWaitMs?: number): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Create a new tab or find existing tab with the target URL.
|
|
41
|
+
*
|
|
42
|
+
* This is the main entry point for tab management.
|
|
43
|
+
* It tries to find an existing tab first, and if not found,
|
|
44
|
+
* creates a new one.
|
|
45
|
+
*
|
|
46
|
+
* @param url - Target URL (will be normalized once at entry)
|
|
47
|
+
* @param cdp - CDP connection instance
|
|
48
|
+
* @param reuseTab - If true, navigate existing tab instead of creating new one
|
|
49
|
+
* @returns Target information
|
|
50
|
+
*/
|
|
51
|
+
export declare function createOrFindTarget(url: string, cdp: CDPConnection, reuseTab?: boolean): Promise<CDPTarget>;
|
|
52
|
+
//# sourceMappingURL=tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/connection/tabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAiEzC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,IAAI,CA8B5F;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAyDhG;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,aAAa,EAClB,SAAS,SAAQ,GAChB,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,aAAa,EAClB,QAAQ,UAAQ,GACf,OAAO,CAAC,SAAS,CAAC,CAwCpB"}
|