browser-debugger-cli 0.3.0 → 0.6.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/README.md +182 -125
- 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 +95 -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/cdp/protocol.d.ts +121 -0
- package/dist/cdp/protocol.d.ts.map +1 -0
- package/dist/cdp/protocol.js +215 -0
- package/dist/cdp/protocol.js.map +1 -0
- package/dist/cdp/schema.d.ts +159 -0
- package/dist/cdp/schema.d.ts.map +1 -0
- package/dist/cdp/schema.js +256 -0
- package/dist/cdp/schema.js.map +1 -0
- package/dist/cdp/types.d.ts +139 -0
- package/dist/cdp/types.d.ts.map +1 -0
- package/dist/cdp/types.js +7 -0
- package/dist/cdp/types.js.map +1 -0
- package/dist/commands/cdp.d.ts +10 -1
- package/dist/commands/cdp.d.ts.map +1 -1
- package/dist/commands/cdp.js +363 -26
- package/dist/commands/cdp.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +15 -18
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/dom.d.ts.map +1 -1
- package/dist/commands/dom.js +14 -19
- package/dist/commands/dom.js.map +1 -1
- package/dist/commands/domEvalHelpers.d.ts +3 -16
- 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/peek.d.ts.map +1 -1
- package/dist/commands/peek.js +12 -6
- package/dist/commands/peek.js.map +1 -1
- package/dist/commands/shared/CommandRunner.d.ts +2 -0
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +15 -4
- 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 +11 -5
- 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 +35 -11
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +74 -57
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +13 -27
- 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 +117 -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 +86 -7
- package/dist/connection/cdp.js.map +1 -1
- package/dist/{utils/chromeDiagnostics.d.ts → connection/diagnostics.d.ts} +1 -1
- package/dist/connection/diagnostics.d.ts.map +1 -0
- package/dist/{utils/chromeDiagnostics.js → connection/diagnostics.js} +1 -1
- package/dist/connection/diagnostics.js.map +1 -0
- package/dist/connection/domOperations.d.ts.map +1 -1
- package/dist/connection/domOperations.js +3 -1
- package/dist/connection/domOperations.js.map +1 -1
- package/dist/{utils → connection}/errors.d.ts +9 -17
- package/dist/connection/errors.d.ts.map +1 -0
- package/dist/{utils → connection}/errors.js +12 -17
- package/dist/connection/errors.js.map +1 -0
- package/dist/connection/handlers.d.ts +63 -0
- package/dist/connection/handlers.d.ts.map +1 -0
- package/dist/connection/handlers.js +64 -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 +141 -31
- package/dist/connection/launcher.js.map +1 -1
- package/dist/connection/pageReadiness.d.ts.map +1 -0
- package/dist/{utils → connection}/pageReadiness.js +30 -31
- package/dist/connection/pageReadiness.js.map +1 -0
- package/dist/connection/typed-cdp.d.ts +144 -0
- package/dist/connection/typed-cdp.d.ts.map +1 -0
- package/dist/connection/typed-cdp.js +120 -0
- package/dist/connection/typed-cdp.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/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/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.map +1 -0
- package/dist/{utils → telemetry}/__tests__/filters.unit.test.js +1 -1
- package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -0
- package/dist/telemetry/__tests__/network.contract.test.js +124 -93
- package/dist/telemetry/__tests__/network.contract.test.js.map +1 -1
- package/dist/telemetry/console.d.ts +1 -1
- package/dist/telemetry/console.d.ts.map +1 -1
- package/dist/telemetry/console.js +8 -5
- 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/dom.d.ts.map +1 -1
- package/dist/telemetry/dom.js +3 -1
- package/dist/telemetry/dom.js.map +1 -1
- package/dist/{utils → telemetry}/filters.d.ts +40 -0
- package/dist/telemetry/filters.d.ts.map +1 -0
- package/dist/{utils → telemetry}/filters.js +55 -1
- 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 -141
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/{errors.d.ts → errors/CommandError.d.ts} +1 -1
- package/dist/ui/errors/CommandError.d.ts.map +1 -0
- package/dist/ui/{errors.js → errors/CommandError.js} +1 -1
- package/dist/ui/errors/CommandError.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/{utils → ui/logging}/logger.d.ts +1 -1
- package/dist/ui/logging/logger.d.ts.map +1 -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/commands.d.ts +1 -0
- package/dist/ui/messages/commands.d.ts.map +1 -1
- package/dist/ui/messages/commands.js +1 -0
- package/dist/ui/messages/commands.js.map +1 -1
- package/dist/ui/messages/errors.d.ts +30 -3
- package/dist/ui/messages/errors.d.ts.map +1 -1
- package/dist/ui/messages/errors.js +36 -8
- package/dist/ui/messages/errors.js.map +1 -1
- 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 +22 -7
- package/dist/ui/messages/session.js.map +1 -1
- package/dist/ui/messages/validation.d.ts +22 -4
- package/dist/ui/messages/validation.d.ts.map +1 -1
- package/dist/ui/messages/validation.js +26 -5
- package/dist/ui/messages/validation.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/url.d.ts.map +1 -1
- package/dist/utils/url.js +10 -0
- package/dist/utils/url.js.map +1 -1
- package/package.json +3 -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/cleanup.d.ts +0 -8
- package/dist/cli/commands/cleanup.d.ts.map +0 -1
- package/dist/cli/commands/cleanup.js +0 -129
- package/dist/cli/commands/cleanup.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/details.d.ts +0 -8
- package/dist/cli/commands/details.d.ts.map +0 -1
- package/dist/cli/commands/details.js +0 -68
- package/dist/cli/commands/details.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/commands/peek.d.ts +0 -8
- package/dist/cli/commands/peek.d.ts.map +0 -1
- package/dist/cli/commands/peek.js +0 -109
- package/dist/cli/commands/peek.js.map +0 -1
- package/dist/cli/commands/start.d.ts +0 -9
- package/dist/cli/commands/start.d.ts.map +0 -1
- package/dist/cli/commands/start.js +0 -95
- package/dist/cli/commands/start.js.map +0 -1
- package/dist/cli/commands/status.d.ts +0 -9
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js +0 -87
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/cli/commands/stop.d.ts +0 -8
- package/dist/cli/commands/stop.d.ts.map +0 -1
- package/dist/cli/commands/stop.js +0 -147
- package/dist/cli/commands/stop.js.map +0 -1
- package/dist/cli/formatters/detailsFormatter.d.ts +0 -10
- package/dist/cli/formatters/detailsFormatter.d.ts.map +0 -1
- package/dist/cli/formatters/detailsFormatter.js +0 -63
- package/dist/cli/formatters/detailsFormatter.js.map +0 -1
- package/dist/cli/formatters/previewFormatter.d.ts +0 -27
- package/dist/cli/formatters/previewFormatter.d.ts.map +0 -1
- package/dist/cli/formatters/previewFormatter.js +0 -160
- package/dist/cli/formatters/previewFormatter.js.map +0 -1
- package/dist/cli/formatters/statusFormatter.d.ts +0 -39
- package/dist/cli/formatters/statusFormatter.d.ts.map +0 -1
- package/dist/cli/formatters/statusFormatter.js +0 -153
- package/dist/cli/formatters/statusFormatter.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/OutputBuilder.d.ts +0 -60
- package/dist/cli/handlers/OutputBuilder.d.ts.map +0 -1
- package/dist/cli/handlers/OutputBuilder.js +0 -138
- package/dist/cli/handlers/OutputBuilder.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/cli/handlers/sessionController.d.ts +0 -21
- package/dist/cli/handlers/sessionController.d.ts.map +0 -1
- package/dist/cli/handlers/sessionController.js +0 -55
- package/dist/cli/handlers/sessionController.js.map +0 -1
- package/dist/cli/registry.d.ts +0 -11
- package/dist/cli/registry.d.ts.map +0 -1
- package/dist/cli/registry.js +0 -46
- package/dist/cli/registry.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/collectors/console.d.ts +0 -19
- package/dist/collectors/console.d.ts.map +0 -1
- package/dist/collectors/console.js +0 -87
- package/dist/collectors/console.js.map +0 -1
- package/dist/collectors/dom.d.ts +0 -21
- package/dist/collectors/dom.d.ts.map +0 -1
- package/dist/collectors/dom.js +0 -99
- package/dist/collectors/dom.js.map +0 -1
- package/dist/collectors/network.d.ts +0 -33
- package/dist/collectors/network.d.ts.map +0 -1
- package/dist/collectors/network.js +0 -191
- package/dist/collectors/network.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/ui/errors.d.ts.map +0 -1
- package/dist/ui/errors.js.map +0 -1
- package/dist/ui/messages/index.d.ts +0 -12
- package/dist/ui/messages/index.d.ts.map +0 -1
- package/dist/ui/messages/index.js +0 -12
- package/dist/ui/messages/index.js.map +0 -1
- package/dist/utils/__tests__/filters.unit.test.d.ts.map +0 -1
- package/dist/utils/__tests__/filters.unit.test.js.map +0 -1
- package/dist/utils/cdpHandlers.d.ts +0 -31
- package/dist/utils/cdpHandlers.d.ts.map +0 -1
- package/dist/utils/cdpHandlers.js +0 -38
- package/dist/utils/cdpHandlers.js.map +0 -1
- package/dist/utils/chromeDiagnostics.d.ts.map +0 -1
- package/dist/utils/chromeDiagnostics.js.map +0 -1
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/filters.d.ts.map +0 -1
- package/dist/utils/filters.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/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/pageReadiness.d.ts.map +0 -1
- package/dist/utils/pageReadiness.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
- /package/dist/{utils → connection}/pageReadiness.d.ts +0 -0
- /package/dist/{utils → telemetry}/__tests__/filters.unit.test.d.ts +0 -0
- /package/dist/{utils → ui/logging}/logger.js +0 -0
package/README.md
CHANGED
|
@@ -5,7 +5,23 @@
|
|
|
5
5
|
[](https://github.com/szymdzum/browser-debugger-cli/actions/workflows/security.yml)
|
|
6
6
|
[](https://www.npmjs.com/package/browser-debugger-cli)
|
|
7
7
|
|
|
8
|
-
DevTools
|
|
8
|
+
Chrome DevTools Protocol in your terminal. Self-documenting CDP access with discovery, search, and introspection. Perfect for AI agents and developers who want direct browser control without the framework overhead.
|
|
9
|
+
|
|
10
|
+
## Why This Exists
|
|
11
|
+
Puppeteer is great but heavy. CDP is powerful but raw. This tool sits in between: direct protocol access with session management and a few helpful wrappers. No abstractions hiding what's actually happening.
|
|
12
|
+
Built for debugging web apps and scripting browser automation without spinning up a full testing framework.
|
|
13
|
+
|
|
14
|
+
## Current State
|
|
15
|
+
|
|
16
|
+
**Raw [CDP](https://chromedevtools.github.io/devtools-protocol/) access is complete.** All 300+ protocol methods work now. This makes it immediately useful for AI agents and developers comfortable with CDP.
|
|
17
|
+
|
|
18
|
+
**Human-friendly wrappers are in progress.** Commands like `bdg dom query` and `bdg peek` are being added for common operations. For now, most automation work happens through `bdg cdp` and Unix pipes.
|
|
19
|
+
|
|
20
|
+
## Demo
|
|
21
|
+
|
|
22
|
+
[](https://asciinema.org/a/RE6Iup9sB1iSWBK0wgUUn3bBl)
|
|
23
|
+
|
|
24
|
+
*Watch bdg scrape GitHub trending pages and extract repository data in real-time using DOM queries and CDP.*
|
|
9
25
|
|
|
10
26
|
## Installation
|
|
11
27
|
|
|
@@ -13,178 +29,219 @@ DevTools telemetry in your terminal. For humans and agents. Direct WebSocket to
|
|
|
13
29
|
npm install -g browser-debugger-cli@alpha
|
|
14
30
|
```
|
|
15
31
|
|
|
32
|
+
**Platform Support:**
|
|
33
|
+
- ✅ macOS and Linux (native support)
|
|
34
|
+
- ✅ Windows via WSL (Windows Subsystem for Linux)
|
|
35
|
+
- ❌ PowerShell and Git Bash on Windows (not yet supported)
|
|
36
|
+
|
|
37
|
+
The CLI uses Unix domain sockets for inter-process communication. Windows users should run bdg inside WSL for full compatibility.
|
|
38
|
+
|
|
16
39
|
## Quick Start
|
|
17
40
|
|
|
18
41
|
```bash
|
|
19
|
-
# Start session
|
|
42
|
+
# Start a session
|
|
20
43
|
bdg example.com
|
|
21
44
|
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#
|
|
26
|
-
bdg status
|
|
27
|
-
# Status: Active
|
|
28
|
-
# Worker PID: 12345
|
|
29
|
-
# Chrome PID: 67890
|
|
30
|
-
# Target: http://example.com
|
|
45
|
+
# Discover what's available
|
|
46
|
+
bdg cdp --list # List all 53 domains
|
|
47
|
+
bdg cdp Network --list # List Network methods
|
|
48
|
+
bdg cdp --search cookie # Search by keyword
|
|
31
49
|
|
|
32
|
-
#
|
|
50
|
+
# Run any CDP command
|
|
51
|
+
bdg cdp Network.getCookies
|
|
33
52
|
bdg cdp Runtime.evaluate --params '{"expression":"document.title","returnByValue":true}'
|
|
34
|
-
# { "result": { "type": "string", "value": "Example Domain" } }
|
|
35
53
|
|
|
36
|
-
|
|
37
|
-
|
|
54
|
+
# Check what's running
|
|
55
|
+
bdg status
|
|
38
56
|
|
|
39
|
-
#
|
|
57
|
+
# Done
|
|
40
58
|
bdg stop
|
|
41
59
|
```
|
|
42
60
|
|
|
43
|
-
##
|
|
61
|
+
## What You Can Do
|
|
44
62
|
|
|
45
|
-
|
|
63
|
+
### Discover CDP Commands (53 Domains, 300+ Methods)
|
|
46
64
|
|
|
47
|
-
|
|
65
|
+
Built-in introspection helps you find what you need without reading docs:
|
|
48
66
|
|
|
49
|
-
|
|
67
|
+
```bash
|
|
68
|
+
# What can I do with this browser?
|
|
69
|
+
bdg cdp --list
|
|
70
|
+
# Returns: 53 domains (Network, DOM, Page, Runtime, Storage, etc.)
|
|
71
|
+
|
|
72
|
+
# What Network operations exist?
|
|
73
|
+
bdg cdp Network --list
|
|
74
|
+
# Returns: 39 methods with descriptions and parameter counts
|
|
75
|
+
|
|
76
|
+
# How do I use this method?
|
|
77
|
+
bdg cdp Network.getCookies --describe
|
|
78
|
+
# Returns: Full schema with parameters, types, examples
|
|
79
|
+
|
|
80
|
+
# Find cookie-related methods
|
|
81
|
+
bdg cdp --search cookie
|
|
82
|
+
# Returns: 14 methods across domains (Network.getCookies, Storage.getCookies, etc.)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
All discovery commands output JSON for easy parsing. Perfect for AI agents building automation on the fly.
|
|
86
|
+
|
|
87
|
+
### Run Any CDP Command
|
|
88
|
+
|
|
89
|
+
All 300+ methods from [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) work out of the box:
|
|
50
90
|
|
|
51
91
|
```bash
|
|
52
|
-
#
|
|
53
|
-
bdg cdp Network.getCookies
|
|
54
|
-
|
|
55
|
-
|
|
92
|
+
# Get cookies and filter with jq
|
|
93
|
+
bdg cdp Network.getCookies | jq '.cookies[] | select(.httpOnly)'
|
|
94
|
+
|
|
95
|
+
# Execute JavaScript in the page
|
|
96
|
+
bdg cdp Runtime.evaluate --params '{"expression":"document.querySelectorAll(\"a\").length","returnByValue":true}'
|
|
97
|
+
|
|
98
|
+
# Monitor memory usage
|
|
99
|
+
bdg cdp Performance.getMetrics | jq '.metrics[] | select(.name == "JSHeapUsedSize")'
|
|
56
100
|
|
|
57
|
-
#
|
|
58
|
-
bdg cdp
|
|
101
|
+
# Capture a screenshot
|
|
102
|
+
bdg cdp Page.captureScreenshot | jq -r '.data' | base64 -d > screenshot.png
|
|
59
103
|
```
|
|
60
104
|
|
|
61
|
-
|
|
62
|
-
- ✅ Zero abstraction overhead — direct WebSocket to Chrome
|
|
63
|
-
- ✅ Full protocol power — all CDP methods work immediately
|
|
64
|
-
- ✅ Future-proof — new CDP features work without code changes
|
|
65
|
-
- ✅ Agent-friendly — structured input/output, composable with Unix tools
|
|
105
|
+
The daemon keeps a WebSocket open to Chrome, so commands run immediately against the live session.
|
|
66
106
|
|
|
67
|
-
###
|
|
107
|
+
### Pipe Everything
|
|
68
108
|
|
|
69
|
-
|
|
109
|
+
Output is JSON by default. Use it with `jq`, `grep`, `awk` - whatever works:
|
|
70
110
|
|
|
71
111
|
```bash
|
|
72
|
-
#
|
|
73
|
-
bdg status
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
bdg
|
|
83
|
-
bdg dom highlight # Highlight elements visually
|
|
84
|
-
bdg dom get # Get full HTML for elements
|
|
112
|
+
# Find all failed network requests
|
|
113
|
+
bdg peek --network --json | jq '.data.network[] | select(.status >= 400)'
|
|
114
|
+
|
|
115
|
+
# Extract every link on the page
|
|
116
|
+
bdg cdp Runtime.evaluate --params '{
|
|
117
|
+
"expression": "Array.from(document.querySelectorAll(\"a\")).map(a => ({text: a.textContent.trim(), href: a.href}))",
|
|
118
|
+
"returnByValue": true
|
|
119
|
+
}' | jq '.result.value'
|
|
120
|
+
|
|
121
|
+
# Count console errors
|
|
122
|
+
bdg peek --console --json | jq '[.data.console[] | select(.level == "error")] | length'
|
|
85
123
|
```
|
|
86
124
|
|
|
87
|
-
|
|
125
|
+
### For AI Agents
|
|
88
126
|
|
|
89
|
-
**
|
|
90
|
-
- **Token efficiency**: CDP is in the model's training data (~3k tokens for patterns vs. 5-10k for MCP server definitions)
|
|
91
|
-
- **Composability**: Unix pipes with `jq`, `grep`, `awk` — tools models already know
|
|
92
|
-
- **Transparent errors**: See exactly what failed, no protocol layers hiding issues
|
|
93
|
-
- **Real-time evolution**: Update patterns anytime, no server redeployment
|
|
127
|
+
**Self-documenting CDP discovery** - agents can explore 300+ browser capabilities without external docs:
|
|
94
128
|
|
|
95
|
-
|
|
129
|
+
```bash
|
|
130
|
+
# Agent discovers what's possible
|
|
131
|
+
bdg cdp --list # 53 domains available
|
|
132
|
+
bdg cdp --search screenshot # Find relevant methods
|
|
133
|
+
bdg cdp Page.captureScreenshot --describe # Learn parameters
|
|
134
|
+
bdg cdp Page.captureScreenshot --params '{"format":"png"}' # Execute
|
|
96
135
|
|
|
97
|
-
|
|
136
|
+
# All commands return structured JSON for easy parsing
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Why this matters for agents:**
|
|
140
|
+
- No need to memorize CDP docs (1000+ pages)
|
|
141
|
+
- Discover → Learn → Execute in one tool
|
|
142
|
+
- Search by keyword (`--search`)
|
|
143
|
+
- Case-insensitive execution (forgiving for LLM outputs)
|
|
144
|
+
- Semantic exit codes for error handling
|
|
145
|
+
|
|
146
|
+
Claude skill included at `.claude/skills/bdg/` with working automation patterns:
|
|
147
|
+
|
|
148
|
+
- Common CDP workflows (scraping, polling, navigation)
|
|
149
|
+
- Exit codes and error handling
|
|
150
|
+
- Troubleshooting reference
|
|
98
151
|
|
|
99
|
-
|
|
152
|
+
The `--help --json` flag outputs the complete CLI schema for programmatic discovery:
|
|
100
153
|
|
|
101
154
|
```bash
|
|
102
|
-
|
|
103
|
-
bdg
|
|
104
|
-
# {
|
|
105
|
-
# "cookies": [
|
|
106
|
-
# {
|
|
107
|
-
# "name": "session_id",
|
|
108
|
-
# "value": "1234567890abcdef",
|
|
109
|
-
# "domain": "example.com",
|
|
110
|
-
# "httpOnly": true,
|
|
111
|
-
# "secure": true,
|
|
112
|
-
# "sameSite": "Strict"
|
|
113
|
-
# }
|
|
114
|
-
# ]
|
|
115
|
-
# }
|
|
116
|
-
|
|
117
|
-
# Evaluate JavaScript
|
|
118
|
-
bdg cdp Runtime.evaluate --params '{"expression":"document.title","returnByValue":true}'
|
|
119
|
-
# {
|
|
120
|
-
# "result": {
|
|
121
|
-
# "type": "string",
|
|
122
|
-
# "value": "Example Domain"
|
|
123
|
-
# }
|
|
124
|
-
# }
|
|
125
|
-
|
|
126
|
-
# Get browser version
|
|
127
|
-
bdg cdp Browser.getVersion
|
|
128
|
-
# {
|
|
129
|
-
# "protocolVersion": "1.3",
|
|
130
|
-
# "product": "Chrome/142.0.7444.60",
|
|
131
|
-
# "jsVersion": "14.2.231.14"
|
|
132
|
-
# }
|
|
133
|
-
|
|
134
|
-
# Pipe to jq for filtering
|
|
135
|
-
bdg cdp Network.getCookies | jq '.cookies[] | select(.name == "session_id") | .value'
|
|
136
|
-
# "1234567890abcdef"
|
|
155
|
+
bdg --help --json | jq '.command.subcommands[].name'
|
|
156
|
+
bdg --help --json | jq '.exitCodes'
|
|
137
157
|
```
|
|
138
158
|
|
|
139
|
-
|
|
159
|
+
### Debug Live Apps
|
|
140
160
|
|
|
141
|
-
|
|
161
|
+
Point at localhost, monitor what's happening:
|
|
142
162
|
|
|
143
163
|
```bash
|
|
144
|
-
|
|
145
|
-
bdg
|
|
164
|
+
bdg localhost:3000 --headless
|
|
165
|
+
bdg tail --console # Stream console output
|
|
166
|
+
bdg tail --network # Watch requests in real-time
|
|
167
|
+
```
|
|
146
168
|
|
|
147
|
-
|
|
148
|
-
bdg status # Show session info
|
|
149
|
-
bdg status --verbose # Include Chrome diagnostics
|
|
169
|
+
Helpful for catching issues during development without opening DevTools.
|
|
150
170
|
|
|
151
|
-
|
|
152
|
-
bdg stop # Gracefully stop daemon and close Chrome
|
|
171
|
+
### Automate Browser Tasks
|
|
153
172
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
173
|
+
Poll for elements, click buttons, extract data:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# Wait for an element to appear
|
|
177
|
+
while ! bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\"#target\") !== null","returnByValue":true}' | jq -e '.result.value'; do
|
|
178
|
+
sleep 0.5
|
|
179
|
+
done
|
|
180
|
+
|
|
181
|
+
# Click it
|
|
182
|
+
bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\"#target\").click()"}'
|
|
183
|
+
|
|
184
|
+
# Get the result
|
|
185
|
+
bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\".result\").textContent","returnByValue":true}'
|
|
157
186
|
```
|
|
158
187
|
|
|
159
|
-
|
|
188
|
+
Check `.claude/skills/bdg/WORKFLOWS.md` for more complete examples (GitHub scraper, form automation, etc).
|
|
160
189
|
|
|
161
|
-
|
|
162
|
-
When you run commands like `bdg network` or `bdg console`, they communicate with the
|
|
163
|
-
daemon via IPC, which forwards [Chrome DevTools
|
|
164
|
-
Protocol](https://chromedevtools.github.io/devtools-protocol/) commands and streams
|
|
165
|
-
responses back.
|
|
190
|
+
## Session Management
|
|
166
191
|
|
|
167
|
-
|
|
168
|
-
- **Daemon** – Background process managing Chrome connection lifecycle
|
|
169
|
-
- **IPC** – Unix sockets for CLI ↔ daemon communication
|
|
170
|
-
- **WebSocket** – Direct connection to Chrome's `--remote-debugging-port`
|
|
171
|
-
- **CDP** – Native Chrome DevTools Protocol for all browser inspection
|
|
192
|
+
Sessions persist until you stop them. Chrome stays open, data keeps collecting:
|
|
172
193
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
194
|
+
```bash
|
|
195
|
+
bdg example.com # Opens Chrome, starts daemon
|
|
196
|
+
bdg status # Check what's running
|
|
197
|
+
bdg status --verbose # Show Chrome process details
|
|
198
|
+
bdg stop # Kill everything
|
|
199
|
+
bdg cleanup # Remove stale files
|
|
200
|
+
```
|
|
178
201
|
|
|
179
|
-
##
|
|
202
|
+
## Helper Commands
|
|
180
203
|
|
|
181
|
-
|
|
204
|
+
A few convenience wrappers for common operations. Most work still happens through `bdg cdp`:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# Query DOM
|
|
208
|
+
bdg dom query "button.primary" # Find elements
|
|
209
|
+
bdg dom get "button.primary" # Get HTML
|
|
210
|
+
bdg dom eval "document.title" # Run JavaScript
|
|
211
|
+
bdg dom highlight ".navbar" # Visual debugging
|
|
212
|
+
|
|
213
|
+
# Inspect collected data
|
|
214
|
+
bdg peek # Quick snapshot
|
|
215
|
+
bdg peek --network # Just network data
|
|
216
|
+
bdg tail # Stream like tail -f
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Page Readiness
|
|
220
|
+
|
|
221
|
+
By default, `bdg` waits for pages to fully load using three signals:
|
|
222
|
+
|
|
223
|
+
1. Browser's `window.onload` fires
|
|
224
|
+
2. Network goes quiet (200ms without new requests)
|
|
225
|
+
3. DOM stops changing (300ms without mutations)
|
|
226
|
+
|
|
227
|
+
Catches server-rendered HTML, client hydration, and lazy-loaded content. Works with Next.js, React, Vue, whatever. Times out after 5 seconds if something hangs.
|
|
228
|
+
|
|
229
|
+
Skip it with `--no-wait` if you want immediate connection.
|
|
230
|
+
|
|
231
|
+
## Architecture
|
|
232
|
+
|
|
233
|
+
Three processes:
|
|
234
|
+
|
|
235
|
+
- **CLI** talks to daemon via Unix socket
|
|
236
|
+
- **Daemon** manages Chrome and routes commands
|
|
237
|
+
- **Worker** holds the WebSocket to CDP
|
|
238
|
+
|
|
239
|
+
Chrome stays running between commands. No startup cost for each operation.
|
|
240
|
+
|
|
241
|
+
## Contributing
|
|
182
242
|
|
|
183
|
-
|
|
184
|
-
([discussions](https://github.com/szymdzum/browser-debugger-cli/discussions)), let me
|
|
185
|
-
know what's broken
|
|
186
|
-
([issues](https://github.com/szymdzum/browser-debugger-cli/issues/new)).
|
|
243
|
+
If you use this and something breaks, [open an issue](https://github.com/szymdzum/browser-debugger-cli/issues/new). If you have ideas, start a [discussion](https://github.com/szymdzum/browser-debugger-cli/discussions). PRs welcome.
|
|
187
244
|
|
|
188
245
|
## License
|
|
189
246
|
|
|
190
|
-
MIT
|
|
247
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handling.smoke.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/smoke/error-handling.smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error handling smoke tests.
|
|
3
|
+
*
|
|
4
|
+
* Tests error paths and user-facing error messages.
|
|
5
|
+
* WHY: Errors are high-risk areas - tests ensure helpful messages and proper exit codes.
|
|
6
|
+
*/
|
|
7
|
+
import * as assert from 'node:assert/strict';
|
|
8
|
+
import { describe, it, afterEach } from 'node:test';
|
|
9
|
+
import { runCommand } from '../../__testutils__/commandRunner.js';
|
|
10
|
+
import { cleanupAllSessions, isDaemonRunning, killDaemon, waitForDaemon, } from '../../__testutils__/daemonHelpers.js';
|
|
11
|
+
import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
12
|
+
void describe('Error Handling Smoke Tests', () => {
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
// Cleanup after each test (no beforeEach needed if this works properly)
|
|
15
|
+
await cleanupAllSessions();
|
|
16
|
+
});
|
|
17
|
+
void it('should fail with helpful message when daemon not running', async () => {
|
|
18
|
+
// Try to peek without daemon running
|
|
19
|
+
// Note: peek auto-starts daemon, so it returns 83 after starting daemon
|
|
20
|
+
const result = await runCommand('peek', [], { timeout: 5000 });
|
|
21
|
+
// Should fail with resource not found (no session)
|
|
22
|
+
assert.equal(result.exitCode, EXIT_CODES.RESOURCE_NOT_FOUND);
|
|
23
|
+
// Should provide helpful error message about no session
|
|
24
|
+
assert.ok(/no.*session|session.*not.*found/i.test(result.stderr));
|
|
25
|
+
});
|
|
26
|
+
void it('should fail with helpful message when trying to stop without session', async () => {
|
|
27
|
+
// Try to stop without session
|
|
28
|
+
const result = await runCommand('stop', [], { timeout: 5000 });
|
|
29
|
+
// Should fail
|
|
30
|
+
assert.notEqual(result.exitCode, 0);
|
|
31
|
+
// Should provide helpful error message
|
|
32
|
+
assert.ok(result.stderr.includes('daemon'));
|
|
33
|
+
});
|
|
34
|
+
void it('should handle daemon crash during session', async () => {
|
|
35
|
+
// Start session with unique port
|
|
36
|
+
await runCommand('http://example.com', ['--port', '9230', '--headless'], { timeout: 10000 });
|
|
37
|
+
await waitForDaemon(5000);
|
|
38
|
+
// Kill daemon forcefully (simulate crash)
|
|
39
|
+
await killDaemon('SIGKILL');
|
|
40
|
+
// Wait for process to fully die
|
|
41
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
42
|
+
// Try to peek (should fail)
|
|
43
|
+
const peekResult = await runCommand('peek', [], { timeout: 5000 });
|
|
44
|
+
// Should fail
|
|
45
|
+
assert.notEqual(peekResult.exitCode, 0);
|
|
46
|
+
// Should provide helpful error message
|
|
47
|
+
assert.ok(peekResult.stderr.includes('daemon'));
|
|
48
|
+
// Daemon should not be running
|
|
49
|
+
assert.equal(isDaemonRunning(), false);
|
|
50
|
+
});
|
|
51
|
+
void it('should provide helpful error when Chrome fails to launch', async () => {
|
|
52
|
+
// Try to start with invalid Chrome path and unique port
|
|
53
|
+
const result = await runCommand('http://example.com', ['--port', '9231', '--headless'], {
|
|
54
|
+
timeout: 10000,
|
|
55
|
+
env: {
|
|
56
|
+
CHROME_PATH: '/nonexistent/chrome',
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
// Should fail (exit code 104 is acceptable for worker errors)
|
|
60
|
+
assert.notEqual(result.exitCode, 0);
|
|
61
|
+
// Should provide helpful error message mentioning Chrome
|
|
62
|
+
assert.ok(/chrome|browser|launch|binary/i.test(result.stderr));
|
|
63
|
+
});
|
|
64
|
+
void it('should cleanup stale sessions automatically', async () => {
|
|
65
|
+
// Start session with unique port
|
|
66
|
+
await runCommand('http://example.com', ['--port', '9232', '--headless'], { timeout: 10000 });
|
|
67
|
+
await waitForDaemon(5000);
|
|
68
|
+
// Kill daemon without cleanup (simulate crash)
|
|
69
|
+
await killDaemon('SIGKILL');
|
|
70
|
+
// Kill Chrome on port 9232 (simulating what happens when daemon crashes)
|
|
71
|
+
try {
|
|
72
|
+
const { execSync } = await import('child_process');
|
|
73
|
+
execSync(`lsof -ti:9232 | xargs kill -9 2>/dev/null || true`, { stdio: 'ignore' });
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Ignore errors if no process on port
|
|
77
|
+
}
|
|
78
|
+
// Wait for processes to fully die and port to be released
|
|
79
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
80
|
+
// Try to start new session (should cleanup stale and succeed)
|
|
81
|
+
const result = await runCommand('http://example.com', ['--port', '9232', '--headless'], {
|
|
82
|
+
timeout: 10000,
|
|
83
|
+
});
|
|
84
|
+
// Should succeed after cleanup
|
|
85
|
+
if (result.exitCode !== 0) {
|
|
86
|
+
console.error('Exit code:', result.exitCode);
|
|
87
|
+
console.error('Stderr:', result.stderr);
|
|
88
|
+
console.error('Stdout:', result.stdout);
|
|
89
|
+
}
|
|
90
|
+
assert.equal(result.exitCode, 0);
|
|
91
|
+
// New daemon should be running
|
|
92
|
+
assert.equal(isDaemonRunning(), true);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=error-handling.smoke.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handling.smoke.test.js","sourceRoot":"","sources":["../../../src/__tests__/smoke/error-handling.smoke.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session lifecycle smoke tests.
|
|
3
|
+
*
|
|
4
|
+
* Tests the complete user flow: start → collect data → stop → verify output.
|
|
5
|
+
* WHY: Highest-risk path with 0% coverage despite being critical user flow.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=session-lifecycle.smoke.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-lifecycle.smoke.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/smoke/session-lifecycle.smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session lifecycle smoke tests.
|
|
3
|
+
*
|
|
4
|
+
* Tests the complete user flow: start → collect data → stop → verify output.
|
|
5
|
+
* WHY: Highest-risk path with 0% coverage despite being critical user flow.
|
|
6
|
+
*/
|
|
7
|
+
import * as assert from 'node:assert/strict';
|
|
8
|
+
import { describe, it, afterEach } from 'node:test';
|
|
9
|
+
import { runCommand, runCommandJSON } from '../../__testutils__/commandRunner.js';
|
|
10
|
+
import { cleanupAllSessions, isDaemonRunning, isSessionActive, readSessionOutput, waitForDaemon, } from '../../__testutils__/daemonHelpers.js';
|
|
11
|
+
void describe('Session Lifecycle Smoke Tests', () => {
|
|
12
|
+
afterEach(async () => {
|
|
13
|
+
// Cleanup after each test (no beforeEach needed if this works properly)
|
|
14
|
+
await cleanupAllSessions();
|
|
15
|
+
});
|
|
16
|
+
void it('should start session and create daemon', async () => {
|
|
17
|
+
// Start session with a simple URL using a unique port to avoid conflicts
|
|
18
|
+
const result = await runCommand('http://example.com', ['--port', '9223', '--headless'], {
|
|
19
|
+
timeout: 10000,
|
|
20
|
+
});
|
|
21
|
+
// Should succeed
|
|
22
|
+
assert.equal(result.exitCode, 0);
|
|
23
|
+
// Daemon should be running
|
|
24
|
+
assert.equal(isDaemonRunning(), true);
|
|
25
|
+
// Session should be active
|
|
26
|
+
assert.equal(isSessionActive(), true);
|
|
27
|
+
});
|
|
28
|
+
void it('should collect data during session', async () => {
|
|
29
|
+
// Start session with unique port
|
|
30
|
+
const startResult = await runCommand('http://example.com', ['--port', '9224', '--headless'], {
|
|
31
|
+
timeout: 10000,
|
|
32
|
+
});
|
|
33
|
+
assert.equal(startResult.exitCode, 0, `Session start failed: ${startResult.stderr}`);
|
|
34
|
+
// Wait for daemon to be ready
|
|
35
|
+
await waitForDaemon(5000);
|
|
36
|
+
// Give Chrome time to navigate and collect some data
|
|
37
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
38
|
+
// Peek at collected data
|
|
39
|
+
const peekResult = await runCommandJSON('peek', [
|
|
40
|
+
'--json',
|
|
41
|
+
]);
|
|
42
|
+
// Should have collected some data
|
|
43
|
+
assert.ok(peekResult);
|
|
44
|
+
assert.ok(typeof peekResult === 'object');
|
|
45
|
+
assert.ok('preview' in peekResult);
|
|
46
|
+
assert.ok('data' in peekResult.preview);
|
|
47
|
+
// Stop session to clean up
|
|
48
|
+
const stopResult = await runCommand('stop', [], { timeout: 10000 });
|
|
49
|
+
assert.equal(stopResult.exitCode, 0, `Stop failed: ${stopResult.stderr}`);
|
|
50
|
+
});
|
|
51
|
+
void it('should write output on stop', async () => {
|
|
52
|
+
// Start session with unique port
|
|
53
|
+
const startResult = await runCommand('http://example.com', ['--port', '9225', '--headless'], {
|
|
54
|
+
timeout: 10000,
|
|
55
|
+
});
|
|
56
|
+
assert.equal(startResult.exitCode, 0, `Session start failed: ${startResult.stderr}`);
|
|
57
|
+
await waitForDaemon(5000);
|
|
58
|
+
// Give Chrome time to collect data
|
|
59
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
60
|
+
// Stop session
|
|
61
|
+
const stopResult = await runCommand('stop', [], { timeout: 10000 });
|
|
62
|
+
// Should succeed
|
|
63
|
+
assert.equal(stopResult.exitCode, 0, `Stop failed: ${stopResult.stderr}`);
|
|
64
|
+
// Give filesystem time to write the file (increased for test stability)
|
|
65
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
66
|
+
// Output file should exist
|
|
67
|
+
const output = readSessionOutput();
|
|
68
|
+
assert.ok(output, 'Session output file should exist after stop');
|
|
69
|
+
assert.ok(typeof output === 'object');
|
|
70
|
+
// Output should have expected structure
|
|
71
|
+
assert.ok('version' in output);
|
|
72
|
+
assert.ok('success' in output);
|
|
73
|
+
assert.equal(output.success, true);
|
|
74
|
+
assert.ok('timestamp' in output);
|
|
75
|
+
assert.ok('data' in output);
|
|
76
|
+
assert.ok('target' in output);
|
|
77
|
+
});
|
|
78
|
+
void it('should cleanup daemon on stop', async () => {
|
|
79
|
+
// Start session with unique port
|
|
80
|
+
await runCommand('http://example.com', ['--port', '9226', '--headless'], { timeout: 10000 });
|
|
81
|
+
await waitForDaemon(5000);
|
|
82
|
+
// Stop session
|
|
83
|
+
await runCommand('stop', [], { timeout: 10000 });
|
|
84
|
+
// Wait for cleanup
|
|
85
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
86
|
+
// Daemon should no longer be running
|
|
87
|
+
assert.equal(isDaemonRunning(), false);
|
|
88
|
+
// Session should no longer be active
|
|
89
|
+
assert.equal(isSessionActive(), false);
|
|
90
|
+
});
|
|
91
|
+
void it('should handle concurrent session attempts gracefully', async () => {
|
|
92
|
+
// Start first session with unique port
|
|
93
|
+
const firstResult = await runCommand('http://example.com', ['--port', '9227', '--headless'], {
|
|
94
|
+
timeout: 10000,
|
|
95
|
+
});
|
|
96
|
+
assert.equal(firstResult.exitCode, 0, `First session start failed: ${firstResult.stderr}`);
|
|
97
|
+
await waitForDaemon(5000);
|
|
98
|
+
// Try to start second session (should fail)
|
|
99
|
+
const secondResult = await runCommand('http://another.com', ['--port', '9228', '--headless'], {
|
|
100
|
+
timeout: 10000,
|
|
101
|
+
});
|
|
102
|
+
// Should fail with daemon already running error
|
|
103
|
+
assert.notEqual(secondResult.exitCode, 0);
|
|
104
|
+
assert.ok(secondResult.stderr.includes('daemon') || secondResult.stderr.includes('already'), `Expected error about daemon, got: ${secondResult.stderr}`);
|
|
105
|
+
// First session should still be running
|
|
106
|
+
assert.equal(isDaemonRunning(), true);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=session-lifecycle.smoke.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-lifecycle.smoke.test.js","sourceRoot":"","sources":["../../../src/__tests__/smoke/session-lifecycle.smoke.test.ts"],"names":[],"mappings":"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"}
|