browser-debugger-cli 0.0.1-alpha.0 → 0.1.0-alpha.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/LICENSE +21 -0
- package/README.md +167 -52
- package/dist/__testfixtures__/cdpMessages.d.ts +43 -0
- package/dist/__testfixtures__/cdpMessages.d.ts.map +1 -0
- package/dist/__testfixtures__/cdpMessages.js +118 -0
- package/dist/__testfixtures__/cdpMessages.js.map +1 -0
- package/dist/__testfixtures__/connectionTargets.d.ts +21 -0
- package/dist/__testfixtures__/connectionTargets.d.ts.map +1 -0
- package/dist/__testfixtures__/connectionTargets.js +59 -0
- package/dist/__testfixtures__/connectionTargets.js.map +1 -0
- package/dist/__tests__/integration/session-files.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/session-files.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/session-files.integration.test.js +66 -0
- package/dist/__tests__/integration/session-files.integration.test.js.map +1 -0
- package/dist/__testutils__/FakeClock.d.ts +67 -0
- package/dist/__testutils__/FakeClock.d.ts.map +1 -0
- package/dist/__testutils__/FakeClock.js +132 -0
- package/dist/__testutils__/FakeClock.js.map +1 -0
- package/dist/__testutils__/FakeWebSocket.d.ts +106 -0
- package/dist/__testutils__/FakeWebSocket.d.ts.map +1 -0
- package/dist/__testutils__/FakeWebSocket.js +213 -0
- package/dist/__testutils__/FakeWebSocket.js.map +1 -0
- package/dist/__testutils__/assertions.d.ts +33 -0
- package/dist/__testutils__/assertions.d.ts.map +1 -0
- package/dist/__testutils__/assertions.js +57 -0
- package/dist/__testutils__/assertions.js.map +1 -0
- package/dist/__testutils__/index.d.ts +15 -0
- package/dist/__testutils__/index.d.ts.map +1 -0
- package/dist/__testutils__/index.js +15 -0
- package/dist/__testutils__/index.js.map +1 -0
- package/dist/__testutils__/testClock.d.ts +28 -0
- package/dist/__testutils__/testClock.d.ts.map +1 -0
- package/dist/__testutils__/testClock.js +81 -0
- package/dist/__testutils__/testClock.js.map +1 -0
- package/dist/__testutils__/testFixtures.d.ts +15 -0
- package/dist/__testutils__/testFixtures.d.ts.map +1 -0
- package/dist/__testutils__/testFixtures.js +23 -0
- package/dist/__testutils__/testFixtures.js.map +1 -0
- package/dist/__testutils__/testProcess.d.ts +46 -0
- package/dist/__testutils__/testProcess.d.ts.map +1 -0
- package/dist/__testutils__/testProcess.js +77 -0
- package/dist/__testutils__/testProcess.js.map +1 -0
- package/dist/cli/collectors/dom.d.ts +8 -0
- package/dist/cli/collectors/dom.d.ts.map +1 -0
- package/dist/cli/collectors/dom.js +361 -0
- package/dist/cli/collectors/dom.js.map +1 -0
- package/dist/cli/collectors/helpers/domCache.d.ts +40 -0
- package/dist/cli/collectors/helpers/domCache.d.ts.map +1 -0
- package/dist/cli/collectors/helpers/domCache.js +79 -0
- package/dist/cli/collectors/helpers/domCache.js.map +1 -0
- package/dist/cli/collectors/helpers/domQuery.d.ts +45 -0
- package/dist/cli/collectors/helpers/domQuery.d.ts.map +1 -0
- package/dist/cli/collectors/helpers/domQuery.js +100 -0
- package/dist/cli/collectors/helpers/domQuery.js.map +1 -0
- package/dist/cli/collectors/helpers/selectorParser.d.ts +20 -0
- package/dist/cli/collectors/helpers/selectorParser.d.ts.map +1 -0
- package/dist/cli/collectors/helpers/selectorParser.js +20 -0
- package/dist/cli/collectors/helpers/selectorParser.js.map +1 -0
- package/dist/cli/commands/__tests__/cdp.contract.test.d.ts +24 -0
- package/dist/cli/commands/__tests__/cdp.contract.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/cdp.contract.test.js +467 -0
- package/dist/cli/commands/__tests__/cdp.contract.test.js.map +1 -0
- package/dist/cli/commands/__tests__/ipcTest.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/ipcTest.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/ipcTest.test.js +37 -0
- package/dist/cli/commands/__tests__/ipcTest.test.js.map +1 -0
- package/dist/cli/commands/cdp.d.ts +8 -0
- package/dist/cli/commands/cdp.d.ts.map +1 -0
- package/dist/cli/commands/cdp.js +45 -0
- package/dist/cli/commands/cdp.js.map +1 -0
- package/dist/cli/commands/cleanup.d.ts +8 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/cleanup.js +130 -0
- package/dist/cli/commands/cleanup.js.map +1 -0
- package/dist/cli/commands/console.d.ts +8 -0
- package/dist/cli/commands/console.d.ts.map +1 -0
- package/dist/cli/commands/console.js +97 -0
- package/dist/cli/commands/console.js.map +1 -0
- package/dist/cli/commands/details.d.ts +8 -0
- package/dist/cli/commands/details.d.ts.map +1 -0
- package/dist/cli/commands/details.js +68 -0
- package/dist/cli/commands/details.js.map +1 -0
- package/dist/cli/commands/dom/helpers/domCache.d.ts +36 -0
- package/dist/cli/commands/dom/helpers/domCache.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/domCache.js +65 -0
- package/dist/cli/commands/dom/helpers/domCache.js.map +1 -0
- package/dist/cli/commands/dom/helpers/domQuery.d.ts +48 -0
- package/dist/cli/commands/dom/helpers/domQuery.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/domQuery.js +104 -0
- package/dist/cli/commands/dom/helpers/domQuery.js.map +1 -0
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts +45 -0
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/errorHandler.js +70 -0
- package/dist/cli/commands/dom/helpers/errorHandler.js.map +1 -0
- package/dist/cli/commands/dom/helpers/evalHelpers.d.ts +52 -0
- package/dist/cli/commands/dom/helpers/evalHelpers.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/evalHelpers.js +75 -0
- package/dist/cli/commands/dom/helpers/evalHelpers.js.map +1 -0
- package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts +35 -0
- package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/optionsBuilder.js +51 -0
- package/dist/cli/commands/dom/helpers/optionsBuilder.js.map +1 -0
- package/dist/cli/commands/dom/helpers/selectorParser.d.ts +20 -0
- package/dist/cli/commands/dom/helpers/selectorParser.d.ts.map +1 -0
- package/dist/cli/commands/dom/helpers/selectorParser.js +20 -0
- package/dist/cli/commands/dom/helpers/selectorParser.js.map +1 -0
- package/dist/cli/commands/dom/index.d.ts +8 -0
- package/dist/cli/commands/dom/index.d.ts.map +1 -0
- package/dist/cli/commands/dom/index.js +257 -0
- package/dist/cli/commands/dom/index.js.map +1 -0
- package/dist/cli/commands/ipcTest.d.ts +23 -0
- package/dist/cli/commands/ipcTest.d.ts.map +1 -0
- package/dist/cli/commands/ipcTest.js +181 -0
- package/dist/cli/commands/ipcTest.js.map +1 -0
- package/dist/cli/commands/network.d.ts +8 -0
- package/dist/cli/commands/network.d.ts.map +1 -0
- package/dist/cli/commands/network.js +40 -0
- package/dist/cli/commands/network.js.map +1 -0
- package/dist/cli/commands/peek.d.ts +8 -0
- package/dist/cli/commands/peek.d.ts.map +1 -0
- package/dist/cli/commands/peek.js +109 -0
- package/dist/cli/commands/peek.js.map +1 -0
- 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 +127 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/start.d.ts +9 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +78 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +9 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +84 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +8 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +146 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/formatters/detailsFormatter.d.ts +10 -0
- package/dist/cli/formatters/detailsFormatter.d.ts.map +1 -0
- package/dist/cli/formatters/detailsFormatter.js +63 -0
- package/dist/cli/formatters/detailsFormatter.js.map +1 -0
- package/dist/cli/formatters/previewFormatter.d.ts +27 -0
- package/dist/cli/formatters/previewFormatter.d.ts.map +1 -0
- package/dist/cli/formatters/previewFormatter.js +160 -0
- package/dist/cli/formatters/previewFormatter.js.map +1 -0
- package/dist/cli/formatters/statusFormatter.d.ts +34 -0
- package/dist/cli/formatters/statusFormatter.d.ts.map +1 -0
- package/dist/cli/formatters/statusFormatter.js +108 -0
- package/dist/cli/formatters/statusFormatter.js.map +1 -0
- 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/CommandRunner.d.ts +60 -0
- package/dist/cli/handlers/CommandRunner.d.ts.map +1 -0
- package/dist/cli/handlers/CommandRunner.js +81 -0
- package/dist/cli/handlers/CommandRunner.js.map +1 -0
- package/dist/cli/handlers/OutputBuilder.d.ts +60 -0
- package/dist/cli/handlers/OutputBuilder.d.ts.map +1 -0
- package/dist/cli/handlers/OutputBuilder.js +138 -0
- package/dist/cli/handlers/OutputBuilder.js.map +1 -0
- 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 +119 -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 +38 -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 +38 -0
- package/dist/cli/handlers/ShutdownController.d.ts.map +1 -0
- package/dist/cli/handlers/ShutdownController.js +83 -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/commonOptions.d.ts +54 -0
- package/dist/cli/handlers/commonOptions.d.ts.map +1 -0
- package/dist/cli/handlers/commonOptions.js +64 -0
- package/dist/cli/handlers/commonOptions.js.map +1 -0
- package/dist/cli/handlers/daemonSessionController.d.ts +23 -0
- package/dist/cli/handlers/daemonSessionController.d.ts.map +1 -0
- package/dist/cli/handlers/daemonSessionController.js +108 -0
- package/dist/cli/handlers/daemonSessionController.js.map +1 -0
- package/dist/cli/handlers/sessionController.d.ts +21 -0
- package/dist/cli/handlers/sessionController.d.ts.map +1 -0
- package/dist/cli/handlers/sessionController.js +55 -0
- package/dist/cli/handlers/sessionController.js.map +1 -0
- package/dist/cli/registry.d.ts +11 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +46 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/collectors/__tests__/network.contract.test.d.ts +28 -0
- package/dist/collectors/__tests__/network.contract.test.d.ts.map +1 -0
- package/dist/collectors/__tests__/network.contract.test.js +525 -0
- package/dist/collectors/__tests__/network.contract.test.js.map +1 -0
- package/dist/collectors/console.d.ts +5 -3
- package/dist/collectors/console.d.ts.map +1 -1
- package/dist/collectors/console.js +48 -26
- package/dist/collectors/console.js.map +1 -1
- package/dist/collectors/dom.d.ts +2 -2
- package/dist/collectors/dom.d.ts.map +1 -1
- package/dist/collectors/dom.js +23 -12
- package/dist/collectors/dom.js.map +1 -1
- package/dist/collectors/network.d.ts +18 -4
- package/dist/collectors/network.d.ts.map +1 -1
- package/dist/collectors/network.js +111 -34
- package/dist/collectors/network.js.map +1 -1
- package/dist/connection/__tests__/cdp.contract.test.d.ts +16 -0
- package/dist/connection/__tests__/cdp.contract.test.d.ts.map +1 -0
- package/dist/connection/__tests__/cdp.contract.test.js +378 -0
- package/dist/connection/__tests__/cdp.contract.test.js.map +1 -0
- package/dist/connection/__tests__/finder.contract.test.d.ts +2 -0
- package/dist/connection/__tests__/finder.contract.test.d.ts.map +1 -0
- package/dist/connection/__tests__/finder.contract.test.js +239 -0
- package/dist/connection/__tests__/finder.contract.test.js.map +1 -0
- package/dist/connection/__tests__/tabs.contract.test.d.ts +2 -0
- package/dist/connection/__tests__/tabs.contract.test.d.ts.map +1 -0
- package/dist/connection/__tests__/tabs.contract.test.js +137 -0
- package/dist/connection/__tests__/tabs.contract.test.js.map +1 -0
- package/dist/connection/cdp.d.ts +165 -16
- package/dist/connection/cdp.d.ts.map +1 -1
- package/dist/connection/cdp.js +342 -122
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/finder.d.ts +5 -4
- package/dist/connection/finder.d.ts.map +1 -1
- package/dist/connection/finder.js +10 -16
- package/dist/connection/finder.js.map +1 -1
- package/dist/connection/launcher.d.ts +18 -11
- package/dist/connection/launcher.d.ts.map +1 -1
- package/dist/connection/launcher.js +148 -82
- package/dist/connection/launcher.js.map +1 -1
- package/dist/connection/tabs.d.ts +47 -14
- package/dist/connection/tabs.d.ts.map +1 -1
- package/dist/connection/tabs.js +493 -132
- package/dist/connection/tabs.js.map +1 -1
- package/dist/constants.d.ts +209 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +232 -0
- package/dist/constants.js.map +1 -0
- package/dist/daemon/__tests__/ipcServer.contract.test.d.ts +23 -0
- package/dist/daemon/__tests__/ipcServer.contract.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/ipcServer.contract.test.js +401 -0
- package/dist/daemon/__tests__/ipcServer.contract.test.js.map +1 -0
- package/dist/daemon/__tests__/launcher.unit.test.d.ts +8 -0
- package/dist/daemon/__tests__/launcher.unit.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/launcher.unit.test.js +20 -0
- package/dist/daemon/__tests__/launcher.unit.test.js.map +1 -0
- package/dist/daemon/ipcServer.d.ts +83 -0
- package/dist/daemon/ipcServer.d.ts.map +1 -0
- package/dist/daemon/ipcServer.js +670 -0
- package/dist/daemon/ipcServer.js.map +1 -0
- package/dist/daemon/launcher.d.ts +31 -0
- package/dist/daemon/launcher.d.ts.map +1 -0
- package/dist/daemon/launcher.js +137 -0
- package/dist/daemon/launcher.js.map +1 -0
- package/dist/daemon/startSession.d.ts +51 -0
- package/dist/daemon/startSession.d.ts.map +1 -0
- package/dist/daemon/startSession.js +149 -0
- package/dist/daemon/startSession.js.map +1 -0
- package/dist/daemon/worker.d.ts +18 -0
- package/dist/daemon/worker.d.ts.map +1 -0
- package/dist/daemon/worker.js +623 -0
- package/dist/daemon/worker.js.map +1 -0
- package/dist/daemon/workerIpc.d.ts +33 -0
- package/dist/daemon/workerIpc.d.ts.map +1 -0
- package/dist/daemon/workerIpc.js +8 -0
- package/dist/daemon/workerIpc.js.map +1 -0
- package/dist/daemon.d.ts +10 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +32 -0
- package/dist/daemon.js.map +1 -0
- package/dist/index.js +41 -420
- package/dist/index.js.map +1 -1
- package/dist/ipc/__tests__/client.contract.test.d.ts +23 -0
- package/dist/ipc/__tests__/client.contract.test.d.ts.map +1 -0
- package/dist/ipc/__tests__/client.contract.test.js +466 -0
- package/dist/ipc/__tests__/client.contract.test.js.map +1 -0
- package/dist/ipc/client.d.ts +109 -0
- package/dist/ipc/client.d.ts.map +1 -0
- package/dist/ipc/client.js +220 -0
- package/dist/ipc/client.js.map +1 -0
- package/dist/ipc/commands.d.ts +208 -0
- package/dist/ipc/commands.d.ts.map +1 -0
- package/dist/ipc/commands.js +69 -0
- package/dist/ipc/commands.js.map +1 -0
- package/dist/ipc/responseValidator.d.ts +40 -0
- package/dist/ipc/responseValidator.d.ts.map +1 -0
- package/dist/ipc/responseValidator.js +28 -0
- package/dist/ipc/responseValidator.js.map +1 -0
- package/dist/ipc/types.d.ts +193 -0
- package/dist/ipc/types.d.ts.map +1 -0
- package/dist/ipc/types.js +21 -0
- package/dist/ipc/types.js.map +1 -0
- package/dist/session/BdgSession.d.ts +71 -4
- package/dist/session/BdgSession.d.ts.map +1 -1
- package/dist/session/BdgSession.js +173 -75
- package/dist/session/BdgSession.js.map +1 -1
- package/dist/session/chrome.d.ts +46 -0
- package/dist/session/chrome.d.ts.map +1 -0
- package/dist/session/chrome.js +92 -0
- package/dist/session/chrome.js.map +1 -0
- package/dist/session/cleanup.d.ts +45 -0
- package/dist/session/cleanup.d.ts.map +1 -0
- package/dist/session/cleanup.js +230 -0
- package/dist/session/cleanup.js.map +1 -0
- package/dist/session/index.d.ts +15 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +23 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/lock.d.ts +57 -0
- package/dist/session/lock.d.ts.map +1 -0
- package/dist/session/lock.js +154 -0
- package/dist/session/lock.js.map +1 -0
- package/dist/session/metadata.d.ts +59 -0
- package/dist/session/metadata.d.ts.map +1 -0
- package/dist/session/metadata.js +71 -0
- package/dist/session/metadata.js.map +1 -0
- package/dist/session/output.d.ts +18 -0
- package/dist/session/output.d.ts.map +1 -0
- package/dist/session/output.js +24 -0
- package/dist/session/output.js.map +1 -0
- package/dist/session/paths.d.ts +73 -0
- package/dist/session/paths.d.ts.map +1 -0
- package/dist/session/paths.js +84 -0
- package/dist/session/paths.js.map +1 -0
- package/dist/session/pid.d.ts +40 -0
- package/dist/session/pid.d.ts.map +1 -0
- package/dist/session/pid.js +73 -0
- package/dist/session/pid.js.map +1 -0
- package/dist/session/process.d.ts +45 -0
- package/dist/session/process.d.ts.map +1 -0
- package/dist/session/process.js +88 -0
- package/dist/session/process.js.map +1 -0
- package/dist/types.d.ts +114 -38
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/__tests__/filters.unit.test.d.ts +2 -0
- package/dist/utils/__tests__/filters.unit.test.d.ts.map +1 -0
- package/dist/utils/__tests__/filters.unit.test.js +239 -0
- package/dist/utils/__tests__/filters.unit.test.js.map +1 -0
- package/dist/utils/__tests__/session.contract.test.d.ts +2 -0
- package/dist/utils/__tests__/session.contract.test.d.ts.map +1 -0
- package/dist/utils/__tests__/session.contract.test.js +234 -0
- package/dist/utils/__tests__/session.contract.test.js.map +1 -0
- package/dist/utils/atomicFile.d.ts +38 -0
- package/dist/utils/atomicFile.d.ts.map +1 -0
- package/dist/utils/atomicFile.js +71 -0
- package/dist/utils/atomicFile.js.map +1 -0
- package/dist/utils/cdpHandlers.d.ts +31 -0
- package/dist/utils/cdpHandlers.d.ts.map +1 -0
- package/dist/utils/cdpHandlers.js +38 -0
- package/dist/utils/cdpHandlers.js.map +1 -0
- package/dist/utils/chromeDiagnostics.d.ts +28 -0
- package/dist/utils/chromeDiagnostics.d.ts.map +1 -0
- package/dist/utils/chromeDiagnostics.js +88 -0
- package/dist/utils/chromeDiagnostics.js.map +1 -0
- package/dist/utils/errors.d.ts +82 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +88 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/exitCodes.d.ts +32 -0
- package/dist/utils/exitCodes.d.ts.map +1 -0
- package/dist/utils/exitCodes.js +36 -0
- package/dist/utils/exitCodes.js.map +1 -0
- package/dist/utils/filters.d.ts +108 -0
- package/dist/utils/filters.d.ts.map +1 -0
- package/dist/utils/filters.js +304 -0
- package/dist/utils/filters.js.map +1 -0
- package/dist/utils/formatters/network.d.ts +23 -0
- package/dist/utils/formatters/network.d.ts.map +1 -0
- package/dist/utils/formatters/network.js +35 -0
- package/dist/utils/formatters/network.js.map +1 -0
- package/dist/utils/http.d.ts +34 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +48 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/logger.d.ts +42 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +43 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/objects.d.ts +23 -0
- package/dist/utils/objects.d.ts.map +1 -0
- package/dist/utils/objects.js +25 -0
- package/dist/utils/objects.js.map +1 -0
- package/dist/utils/url/safeParseUrl.d.ts +63 -0
- package/dist/utils/url/safeParseUrl.d.ts.map +1 -0
- package/dist/utils/url/safeParseUrl.js +84 -0
- package/dist/utils/url/safeParseUrl.js.map +1 -0
- package/dist/utils/url.d.ts +63 -1
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +152 -2
- package/dist/utils/url.js.map +1 -1
- package/dist/utils/validation.d.ts +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/version.d.ts +3 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +27 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +57 -10
- package/dist/utils/pageLoad.d.ts +0 -21
- package/dist/utils/pageLoad.d.ts.map +0 -1
- package/dist/utils/pageLoad.js +0 -85
- package/dist/utils/pageLoad.js.map +0 -1
- package/dist/utils/session.d.ts +0 -104
- package/dist/utils/session.d.ts.map +0 -1
- package/dist/utils/session.js +0 -244
- package/dist/utils/session.js.map +0 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { formatPreview, formatNoPreviewDataMessage, } from '../formatters/previewFormatter.js';
|
|
2
|
+
import { OutputBuilder } from '../handlers/OutputBuilder.js';
|
|
3
|
+
import { jsonOption } from '../handlers/commonOptions.js';
|
|
4
|
+
import { getPeek } from '../../ipc/client.js';
|
|
5
|
+
import { validateIPCResponse } from '../../ipc/responseValidator.js';
|
|
6
|
+
import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
7
|
+
/**
|
|
8
|
+
* Handle errors in a consistent way for both follow and one-time modes.
|
|
9
|
+
*
|
|
10
|
+
* @param error - Error message
|
|
11
|
+
* @param options - Preview options
|
|
12
|
+
* @param exitCode - Exit code to use if not in follow mode
|
|
13
|
+
*/
|
|
14
|
+
function handlePreviewError(error, options, exitCode) {
|
|
15
|
+
if (options.json) {
|
|
16
|
+
console.log(JSON.stringify(OutputBuilder.buildJsonError(error), null, 2));
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
console.error(formatNoPreviewDataMessage());
|
|
20
|
+
}
|
|
21
|
+
if (!options.follow) {
|
|
22
|
+
process.exit(exitCode);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Register peek command.
|
|
27
|
+
*
|
|
28
|
+
* @param program - Commander.js Command instance to register commands on
|
|
29
|
+
*/
|
|
30
|
+
export function registerPeekCommand(program) {
|
|
31
|
+
program
|
|
32
|
+
.command('peek')
|
|
33
|
+
.description('Preview collected data without stopping the session')
|
|
34
|
+
.addOption(jsonOption)
|
|
35
|
+
.option('-v, --verbose', 'Use verbose output with full URLs and formatting')
|
|
36
|
+
.option('-n, --network', 'Show only network requests')
|
|
37
|
+
.option('-c, --console', 'Show only console messages')
|
|
38
|
+
.option('-f, --follow', 'Watch for updates (like tail -f)')
|
|
39
|
+
.option('--last <count>', 'Show last N items', '10')
|
|
40
|
+
.action(async (options) => {
|
|
41
|
+
// Validate --last parameter
|
|
42
|
+
const lastN = parseInt(options.last ?? '10', 10);
|
|
43
|
+
if (isNaN(lastN) || lastN < 1 || lastN > 1000) {
|
|
44
|
+
console.error('Error: --last must be between 1 and 1000');
|
|
45
|
+
console.error('Provided value:', options.last);
|
|
46
|
+
process.exit(EXIT_CODES.INVALID_ARGUMENTS);
|
|
47
|
+
}
|
|
48
|
+
options.last = lastN.toString();
|
|
49
|
+
const showPreview = async () => {
|
|
50
|
+
try {
|
|
51
|
+
// Fetch preview data via IPC from daemon
|
|
52
|
+
const response = await getPeek();
|
|
53
|
+
// Validate IPC response (will throw on error)
|
|
54
|
+
try {
|
|
55
|
+
validateIPCResponse(response);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
handlePreviewError(response.error ?? 'Unknown error', options, EXIT_CODES.RESOURCE_NOT_FOUND);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// Extract preview data from response
|
|
62
|
+
const output = response.data?.preview;
|
|
63
|
+
if (!output) {
|
|
64
|
+
handlePreviewError('No preview data in response', options, EXIT_CODES.RESOURCE_NOT_FOUND);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (!options.follow) {
|
|
68
|
+
console.clear();
|
|
69
|
+
}
|
|
70
|
+
console.log(formatPreview(output, options));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Handle IPC connection errors (daemon not running, etc.)
|
|
74
|
+
// Note: validateIPCResponse errors are caught above
|
|
75
|
+
if (options.json) {
|
|
76
|
+
console.log(JSON.stringify(OutputBuilder.buildJsonError('Daemon not running', {
|
|
77
|
+
suggestion: 'Start it with: bdg <url>',
|
|
78
|
+
}), null, 2));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.error('Error: Daemon not running');
|
|
82
|
+
console.error('Start it with: bdg <url>');
|
|
83
|
+
}
|
|
84
|
+
if (!options.follow) {
|
|
85
|
+
process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
if (options.follow) {
|
|
90
|
+
// Follow mode: update every second
|
|
91
|
+
console.error('Following live preview (Ctrl+C to stop)...\n');
|
|
92
|
+
await showPreview();
|
|
93
|
+
const followInterval = setInterval(() => {
|
|
94
|
+
void showPreview();
|
|
95
|
+
}, 1000);
|
|
96
|
+
// Handle Ctrl+C gracefully
|
|
97
|
+
process.on('SIGINT', () => {
|
|
98
|
+
clearInterval(followInterval);
|
|
99
|
+
console.error('\nStopped following preview');
|
|
100
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// One-time preview
|
|
105
|
+
await showPreview();
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=peek.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peek.js","sourceRoot":"","sources":["../../../src/cli/commands/peek.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Register query command
|
|
4
|
+
*
|
|
5
|
+
* @param program - Commander.js Command instance to register commands on
|
|
6
|
+
* @returns void
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerQueryCommand(program: Command): void;
|
|
9
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBzC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkJ3D"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { OutputBuilder } from '../handlers/OutputBuilder.js';
|
|
2
|
+
import { DEFAULT_DEBUG_PORT, PORT_OPTION_DESCRIPTION } from '../../constants.js';
|
|
3
|
+
import { readPid } from '../../session/pid.js';
|
|
4
|
+
import { isProcessAlive } from '../../session/process.js';
|
|
5
|
+
import { getErrorMessage } from '../../utils/errors.js';
|
|
6
|
+
import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
7
|
+
/**
|
|
8
|
+
* Register query command
|
|
9
|
+
*
|
|
10
|
+
* @param program - Commander.js Command instance to register commands on
|
|
11
|
+
* @returns void
|
|
12
|
+
*/
|
|
13
|
+
export function registerQueryCommand(program) {
|
|
14
|
+
program
|
|
15
|
+
.command('query')
|
|
16
|
+
.description('Execute JavaScript in the active session for live debugging')
|
|
17
|
+
.argument('<script>', 'JavaScript to execute (e.g., "document.querySelector(\'input[type=email]\').value")')
|
|
18
|
+
.option('-p, --port <number>', PORT_OPTION_DESCRIPTION, DEFAULT_DEBUG_PORT)
|
|
19
|
+
.option('-j, --json', 'Wrap result in version/success format')
|
|
20
|
+
.action(async (script, options) => {
|
|
21
|
+
try {
|
|
22
|
+
const port = parseInt(options.port, 10);
|
|
23
|
+
// Check if session is running
|
|
24
|
+
const pid = readPid();
|
|
25
|
+
if (!pid || !isProcessAlive(pid)) {
|
|
26
|
+
const errorMsg = 'No active session running';
|
|
27
|
+
if (options.json) {
|
|
28
|
+
console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg, {
|
|
29
|
+
suggestion: 'Start a session with: bdg <url>',
|
|
30
|
+
}), null, 2));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.error(`Error: ${errorMsg}`);
|
|
34
|
+
console.error('Start a session with: bdg <url>');
|
|
35
|
+
}
|
|
36
|
+
process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
|
|
37
|
+
}
|
|
38
|
+
// Read session metadata to get the target ID
|
|
39
|
+
const { readSessionMetadata } = await import('../../session/metadata.js');
|
|
40
|
+
const metadata = readSessionMetadata();
|
|
41
|
+
if (!metadata?.targetId || !metadata.webSocketDebuggerUrl) {
|
|
42
|
+
const errorMsg = 'No target information in session metadata';
|
|
43
|
+
if (options.json) {
|
|
44
|
+
console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg, {
|
|
45
|
+
note: 'Session may have been started with an older version',
|
|
46
|
+
}), null, 2));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
console.error(`Error: ${errorMsg}`);
|
|
50
|
+
console.error('Session may have been started with an older version');
|
|
51
|
+
}
|
|
52
|
+
process.exit(EXIT_CODES.SESSION_FILE_ERROR);
|
|
53
|
+
}
|
|
54
|
+
// Verify the target still exists
|
|
55
|
+
const response = await fetch(`http://127.0.0.1:${port}/json/list`);
|
|
56
|
+
const targetsData = await response.json();
|
|
57
|
+
if (!Array.isArray(targetsData)) {
|
|
58
|
+
const errorMsg = 'Invalid response from CDP';
|
|
59
|
+
if (options.json) {
|
|
60
|
+
console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg), null, 2));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.error(`Error: ${errorMsg}`);
|
|
64
|
+
}
|
|
65
|
+
process.exit(EXIT_CODES.CDP_CONNECTION_FAILURE);
|
|
66
|
+
}
|
|
67
|
+
const target = targetsData.find((t) => t.id === metadata.targetId);
|
|
68
|
+
if (!target) {
|
|
69
|
+
const errorMsg = 'Session target not found (tab may have been closed)';
|
|
70
|
+
if (options.json) {
|
|
71
|
+
console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg, {
|
|
72
|
+
suggestion: 'Start a new session with: bdg <url>',
|
|
73
|
+
}), null, 2));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.error(`Error: ${errorMsg}`);
|
|
77
|
+
console.error('Start a new session with: bdg <url>');
|
|
78
|
+
}
|
|
79
|
+
process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
|
|
80
|
+
}
|
|
81
|
+
// Create temporary CDP connection using stored webSocketDebuggerUrl
|
|
82
|
+
const { CDPConnection } = await import('../../connection/cdp.js');
|
|
83
|
+
const cdp = new CDPConnection();
|
|
84
|
+
await cdp.connect(metadata.webSocketDebuggerUrl);
|
|
85
|
+
// Execute JavaScript
|
|
86
|
+
const result = (await cdp.send('Runtime.evaluate', {
|
|
87
|
+
expression: script,
|
|
88
|
+
returnByValue: true,
|
|
89
|
+
awaitPromise: true,
|
|
90
|
+
}));
|
|
91
|
+
cdp.close();
|
|
92
|
+
// Output result
|
|
93
|
+
if (result.exceptionDetails) {
|
|
94
|
+
const errorMsg = result.exceptionDetails.exception?.description ?? 'Unknown error executing script';
|
|
95
|
+
if (options.json) {
|
|
96
|
+
console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg), null, 2));
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.error('Error executing script:');
|
|
100
|
+
console.error(errorMsg);
|
|
101
|
+
}
|
|
102
|
+
process.exit(EXIT_CODES.UNHANDLED_EXCEPTION);
|
|
103
|
+
}
|
|
104
|
+
// Output result (wrapped if --json, raw otherwise)
|
|
105
|
+
if (options.json) {
|
|
106
|
+
console.log(JSON.stringify(OutputBuilder.buildJsonSuccess({
|
|
107
|
+
result: result.result?.value,
|
|
108
|
+
}), null, 2));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
console.log(JSON.stringify(result.result?.value, null, 2));
|
|
112
|
+
}
|
|
113
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
const errorMsg = getErrorMessage(error);
|
|
117
|
+
if (options.json) {
|
|
118
|
+
console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMsg), null, 2));
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.error(`Error: ${errorMsg}`);
|
|
122
|
+
}
|
|
123
|
+
process.exit(EXIT_CODES.UNHANDLED_EXCEPTION);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Register the start command
|
|
4
|
+
*
|
|
5
|
+
* @param program - Commander.js Command instance to register command on
|
|
6
|
+
* @returns void
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerStartCommands(program: Command): void;
|
|
9
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6GzC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAO5D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { startSessionViaDaemon } from '../handlers/daemonSessionController.js';
|
|
2
|
+
import { DEFAULT_DEBUG_PORT, PORT_OPTION_DESCRIPTION, TIMEOUT_OPTION_DESCRIPTION, USER_DATA_DIR_OPTION_DESCRIPTION, } from '../../constants.js';
|
|
3
|
+
/**
|
|
4
|
+
* Apply shared collector options to a command
|
|
5
|
+
*
|
|
6
|
+
* @param command - Commander.js Command instance to apply options to
|
|
7
|
+
* @returns The modified Command instance with all collector options applied
|
|
8
|
+
*/
|
|
9
|
+
function applyCollectorOptions(command) {
|
|
10
|
+
return command
|
|
11
|
+
.option('-p, --port <number>', PORT_OPTION_DESCRIPTION, DEFAULT_DEBUG_PORT)
|
|
12
|
+
.option('-t, --timeout <seconds>', TIMEOUT_OPTION_DESCRIPTION)
|
|
13
|
+
.option('-u, --user-data-dir <path>', USER_DATA_DIR_OPTION_DESCRIPTION)
|
|
14
|
+
.option('-a, --all', 'Include all data (disable filtering of tracking/analytics)')
|
|
15
|
+
.option('-m, --max-body-size <megabytes>', 'Maximum response body size in MB (default: 5MB)', '5')
|
|
16
|
+
.option('--compact', 'Use compact JSON format (no indentation) for output files');
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse a string to integer, returning undefined if not provided
|
|
20
|
+
* @param value - Optional string value to parse
|
|
21
|
+
* @param fieldName - Name of the field being parsed (for error messages)
|
|
22
|
+
* @returns Parsed integer or undefined if value was not provided
|
|
23
|
+
* @throws Error if value is provided but not a valid integer
|
|
24
|
+
*/
|
|
25
|
+
function parseOptionalInt(value, fieldName) {
|
|
26
|
+
if (value === undefined) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
const parsed = parseInt(value, 10);
|
|
30
|
+
if (isNaN(parsed)) {
|
|
31
|
+
throw new Error(`Invalid ${fieldName}: "${value}" is not a valid integer`);
|
|
32
|
+
}
|
|
33
|
+
return parsed;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Transform CLI options into session options
|
|
37
|
+
*
|
|
38
|
+
* @param options - Parsed command-line options from Commander
|
|
39
|
+
* @returns Session options object with parsed and normalized values
|
|
40
|
+
*/
|
|
41
|
+
function buildSessionOptions(options) {
|
|
42
|
+
const maxBodySizeMB = parseOptionalInt(options.maxBodySize, 'max-body-size');
|
|
43
|
+
return {
|
|
44
|
+
port: parseInt(options.port, 10),
|
|
45
|
+
timeout: parseOptionalInt(options.timeout, 'timeout'),
|
|
46
|
+
userDataDir: options.userDataDir,
|
|
47
|
+
includeAll: options.all ?? false,
|
|
48
|
+
maxBodySize: maxBodySizeMB !== undefined ? maxBodySizeMB * 1024 * 1024 : undefined,
|
|
49
|
+
compact: options.compact ?? false,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Common action handler for collector commands
|
|
54
|
+
*
|
|
55
|
+
* @param url - Target URL to collect telemetry from
|
|
56
|
+
* @param options - Parsed command-line options from Commander
|
|
57
|
+
* @returns Promise that resolves when session completes or is stopped
|
|
58
|
+
*/
|
|
59
|
+
async function collectorAction(url, options) {
|
|
60
|
+
const sessionOptions = buildSessionOptions(options);
|
|
61
|
+
// Always collect all 3 types (dom, network, console)
|
|
62
|
+
const collectors = ['dom', 'network', 'console'];
|
|
63
|
+
// Dispatch to daemon via IPC instead of running in-process
|
|
64
|
+
await startSessionViaDaemon(url, sessionOptions, collectors);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Register the start command
|
|
68
|
+
*
|
|
69
|
+
* @param program - Commander.js Command instance to register command on
|
|
70
|
+
* @returns void
|
|
71
|
+
*/
|
|
72
|
+
export function registerStartCommands(program) {
|
|
73
|
+
// Default command: always collects all 3 types (dom, network, console)
|
|
74
|
+
applyCollectorOptions(program.argument('<url>', 'Target URL (example.com or localhost:3000)')).action(async (url, options) => {
|
|
75
|
+
await collectorAction(url, options);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,aAAa,CAAC;AAqBrB;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,OAAgB;IAC7C,OAAO,OAAO;SACX,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,kBAAkB,CAAC;SAC1E,MAAM,CAAC,yBAAyB,EAAE,0BAA0B,CAAC;SAC7D,MAAM,CAAC,4BAA4B,EAAE,gCAAgC,CAAC;SACtE,MAAM,CAAC,WAAW,EAAE,4DAA4D,CAAC;SACjF,MAAM,CACL,iCAAiC,EACjC,iDAAiD,EACjD,GAAG,CACJ;SACA,MAAM,CAAC,WAAW,EAAE,2DAA2D,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAyB,EAAE,SAAiB;IACpE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,WAAW,SAAS,MAAM,KAAK,0BAA0B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,OAAyB;IAQpD,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC7E,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;QACrD,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;QAChC,WAAW,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;QAClF,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;KAClC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,OAAyB;IACnE,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAEpD,qDAAqD;IACrD,MAAM,UAAU,GAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAElE,2DAA2D;IAC3D,MAAM,qBAAqB,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,uEAAuE;IACvE,qBAAqB,CACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,4CAA4C,CAAC,CACxE,CAAC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAyB,EAAE,EAAE;QACxD,MAAM,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Register status command
|
|
4
|
+
*
|
|
5
|
+
* @param program - Commander.js Command instance to register commands on
|
|
6
|
+
* @returns void
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerStatusCommand(program: Command): void;
|
|
9
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBzC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE5D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { formatSessionStatus, formatStatusAsJson, formatNoSessionMessage, } from '../formatters/statusFormatter.js';
|
|
2
|
+
import { getStatus } from '../../ipc/client.js';
|
|
3
|
+
import { cleanupStaleDaemonPid } from '../../session/cleanup.js';
|
|
4
|
+
import { getErrorMessage } from '../../utils/errors.js';
|
|
5
|
+
import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
6
|
+
import { VERSION } from '../../utils/version.js';
|
|
7
|
+
/**
|
|
8
|
+
* Register status command
|
|
9
|
+
*
|
|
10
|
+
* @param program - Commander.js Command instance to register commands on
|
|
11
|
+
* @returns void
|
|
12
|
+
*/
|
|
13
|
+
export function registerStatusCommand(program) {
|
|
14
|
+
program
|
|
15
|
+
.command('status')
|
|
16
|
+
.description('Show active session status and collection statistics')
|
|
17
|
+
.option('-j, --json', 'Output as JSON')
|
|
18
|
+
.option('-v, --verbose', 'Show detailed Chrome diagnostics')
|
|
19
|
+
.action(async (options) => {
|
|
20
|
+
try {
|
|
21
|
+
// Request status from daemon via IPC
|
|
22
|
+
const response = await getStatus();
|
|
23
|
+
// Handle IPC error response
|
|
24
|
+
if (response.status === 'error') {
|
|
25
|
+
console.error(`Daemon error: ${response.error ?? 'Unknown error'}`);
|
|
26
|
+
process.exit(EXIT_CODES.UNHANDLED_EXCEPTION);
|
|
27
|
+
}
|
|
28
|
+
// Extract data from response
|
|
29
|
+
const { data } = response;
|
|
30
|
+
if (!data) {
|
|
31
|
+
console.error('Invalid response from daemon: missing data');
|
|
32
|
+
process.exit(EXIT_CODES.UNHANDLED_EXCEPTION);
|
|
33
|
+
}
|
|
34
|
+
// Check if there's an active session
|
|
35
|
+
if (!data.sessionPid || !data.sessionMetadata) {
|
|
36
|
+
if (options.json) {
|
|
37
|
+
console.log(JSON.stringify({ version: VERSION, active: false }, null, 2));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.error(formatNoSessionMessage());
|
|
41
|
+
}
|
|
42
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
43
|
+
}
|
|
44
|
+
// Convert IPC metadata to SessionMetadata format
|
|
45
|
+
const metadata = {
|
|
46
|
+
bdgPid: data.sessionMetadata.bdgPid,
|
|
47
|
+
chromePid: data.sessionMetadata.chromePid,
|
|
48
|
+
startTime: data.sessionMetadata.startTime,
|
|
49
|
+
port: data.sessionMetadata.port,
|
|
50
|
+
targetId: data.sessionMetadata.targetId,
|
|
51
|
+
webSocketDebuggerUrl: data.sessionMetadata.webSocketDebuggerUrl,
|
|
52
|
+
activeCollectors: data.sessionMetadata.activeCollectors,
|
|
53
|
+
};
|
|
54
|
+
if (options.json) {
|
|
55
|
+
// JSON output
|
|
56
|
+
const jsonOutput = formatStatusAsJson(metadata, data.sessionPid);
|
|
57
|
+
console.log(JSON.stringify(jsonOutput, null, 2));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Human-readable output
|
|
61
|
+
console.log(formatSessionStatus(metadata, data.sessionPid, options.verbose ?? false));
|
|
62
|
+
}
|
|
63
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
// Handle connection errors (daemon not running)
|
|
67
|
+
const errorMessage = getErrorMessage(error);
|
|
68
|
+
if (errorMessage.includes('ENOENT') || errorMessage.includes('ECONNREFUSED')) {
|
|
69
|
+
// P0 Fix #2: Auto-cleanup stale daemon PID if it exists
|
|
70
|
+
const cleaned = cleanupStaleDaemonPid();
|
|
71
|
+
if (cleaned) {
|
|
72
|
+
console.error('Daemon not running (stale PID cleaned up). Start it with: bdg <url>');
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.error('Daemon not running. Start it with: bdg <url>');
|
|
76
|
+
}
|
|
77
|
+
process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
|
|
78
|
+
}
|
|
79
|
+
console.error(`Error checking status: ${errorMessage}`);
|
|
80
|
+
process.exit(EXIT_CODES.UNHANDLED_EXCEPTION);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiFzC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8F1D"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { runCommand } from '../handlers/CommandRunner.js';
|
|
2
|
+
import { jsonOption } from '../handlers/commonOptions.js';
|
|
3
|
+
import { stopSession } from '../../ipc/client.js';
|
|
4
|
+
import { IPCErrorCode } from '../../ipc/types.js';
|
|
5
|
+
import { clearChromePid } from '../../session/chrome.js';
|
|
6
|
+
import { killChromeProcess } from '../../session/process.js';
|
|
7
|
+
import { getErrorMessage } from '../../utils/errors.js';
|
|
8
|
+
import { EXIT_CODES } from '../../utils/exitCodes.js';
|
|
9
|
+
/**
|
|
10
|
+
* Format stop result for human-readable output.
|
|
11
|
+
*
|
|
12
|
+
* @param data - Stop result data
|
|
13
|
+
*/
|
|
14
|
+
function formatStop(data) {
|
|
15
|
+
if (data.stopped.bdg) {
|
|
16
|
+
console.error('Session stopped successfully');
|
|
17
|
+
}
|
|
18
|
+
if (data.stopped.chrome) {
|
|
19
|
+
console.error('Killed Chrome');
|
|
20
|
+
}
|
|
21
|
+
if (data.warnings && data.warnings.length > 0) {
|
|
22
|
+
data.warnings.forEach((warning) => {
|
|
23
|
+
console.error(`Warning: ${warning}`);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Map daemon error codes to appropriate exit codes.
|
|
29
|
+
*
|
|
30
|
+
* @param errorCode - IPC error code from daemon response
|
|
31
|
+
* @returns Semantic exit code
|
|
32
|
+
*/
|
|
33
|
+
function getExitCodeForDaemonError(errorCode) {
|
|
34
|
+
switch (errorCode) {
|
|
35
|
+
case IPCErrorCode.NO_SESSION:
|
|
36
|
+
return EXIT_CODES.RESOURCE_NOT_FOUND;
|
|
37
|
+
case IPCErrorCode.SESSION_KILL_FAILED:
|
|
38
|
+
return EXIT_CODES.UNHANDLED_EXCEPTION;
|
|
39
|
+
case IPCErrorCode.DAEMON_ERROR:
|
|
40
|
+
return EXIT_CODES.UNHANDLED_EXCEPTION;
|
|
41
|
+
case IPCErrorCode.SESSION_ALREADY_RUNNING:
|
|
42
|
+
return EXIT_CODES.UNHANDLED_EXCEPTION;
|
|
43
|
+
case IPCErrorCode.WORKER_START_FAILED:
|
|
44
|
+
return EXIT_CODES.UNHANDLED_EXCEPTION;
|
|
45
|
+
case IPCErrorCode.CHROME_LAUNCH_FAILED:
|
|
46
|
+
return EXIT_CODES.UNHANDLED_EXCEPTION;
|
|
47
|
+
case IPCErrorCode.CDP_TIMEOUT:
|
|
48
|
+
return EXIT_CODES.UNHANDLED_EXCEPTION;
|
|
49
|
+
case undefined:
|
|
50
|
+
return EXIT_CODES.UNHANDLED_EXCEPTION;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Register stop command
|
|
55
|
+
*
|
|
56
|
+
* @param program - Commander.js Command instance to register commands on
|
|
57
|
+
*/
|
|
58
|
+
export function registerStopCommand(program) {
|
|
59
|
+
program
|
|
60
|
+
.command('stop')
|
|
61
|
+
.description('Stop all active sessions and free ports (does not capture output)')
|
|
62
|
+
.option('--kill-chrome', 'Also kill Chrome browser')
|
|
63
|
+
.addOption(jsonOption)
|
|
64
|
+
.action(async (options) => {
|
|
65
|
+
await runCommand(async (opts) => {
|
|
66
|
+
try {
|
|
67
|
+
// Try to stop session via IPC (daemon)
|
|
68
|
+
const response = await stopSession();
|
|
69
|
+
if (response.status === 'ok') {
|
|
70
|
+
// Session stopped successfully via daemon
|
|
71
|
+
let chromeStopped = false;
|
|
72
|
+
const warnings = [];
|
|
73
|
+
// Handle Chrome if requested (daemon captured Chrome PID before cleanup)
|
|
74
|
+
if (opts.killChrome) {
|
|
75
|
+
const chromePid = response.chromePid;
|
|
76
|
+
if (chromePid) {
|
|
77
|
+
try {
|
|
78
|
+
killChromeProcess(chromePid, 'SIGTERM');
|
|
79
|
+
chromeStopped = true;
|
|
80
|
+
console.error(`Killed Chrome (PID ${chromePid})`);
|
|
81
|
+
clearChromePid();
|
|
82
|
+
}
|
|
83
|
+
catch (chromeError) {
|
|
84
|
+
const errorMessage = chromeError instanceof Error ? chromeError.message : String(chromeError);
|
|
85
|
+
warnings.push(`Could not kill Chrome: ${errorMessage}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
warnings.push('Chrome PID not found (Chrome was not launched by bdg)');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
success: true,
|
|
94
|
+
data: {
|
|
95
|
+
stopped: { bdg: true, chrome: chromeStopped },
|
|
96
|
+
message: response.message ?? 'Session stopped successfully',
|
|
97
|
+
...(warnings.length > 0 && { warnings }),
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// Daemon returned error
|
|
103
|
+
// Special case: NO_SESSION is not really an error - it's a success (desired state achieved)
|
|
104
|
+
if (response.errorCode === IPCErrorCode.NO_SESSION) {
|
|
105
|
+
return {
|
|
106
|
+
success: true,
|
|
107
|
+
data: {
|
|
108
|
+
stopped: { bdg: false, chrome: false },
|
|
109
|
+
message: response.message ?? 'No active session found',
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// Other errors are actual failures
|
|
114
|
+
const exitCode = getExitCodeForDaemonError(response.errorCode);
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
error: response.message ?? 'Failed to stop session',
|
|
118
|
+
exitCode,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
// IPC transport failure (ENOENT, ECONNREFUSED, timeout, etc.)
|
|
124
|
+
const errorMessage = getErrorMessage(error);
|
|
125
|
+
// Check if it's a connection error (daemon not running)
|
|
126
|
+
if (errorMessage.includes('ENOENT') || errorMessage.includes('ECONNREFUSED')) {
|
|
127
|
+
return {
|
|
128
|
+
success: false,
|
|
129
|
+
error: 'Daemon not running',
|
|
130
|
+
exitCode: EXIT_CODES.RESOURCE_NOT_FOUND,
|
|
131
|
+
errorContext: {
|
|
132
|
+
suggestion: 'Start a session first with: bdg <url>',
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// Other errors (timeout, parse failures, etc.)
|
|
137
|
+
return {
|
|
138
|
+
success: false,
|
|
139
|
+
error: `Stop session failed: ${errorMessage}`,
|
|
140
|
+
exitCode: EXIT_CODES.UNHANDLED_EXCEPTION,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}, options, formatStop);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"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"}
|