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,623 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Worker Process - Chrome CDP Session Manager
|
|
4
|
+
*
|
|
5
|
+
* This process:
|
|
6
|
+
* 1. Spawns Chrome with remote debugging enabled
|
|
7
|
+
* 2. Connects to Chrome via CDP WebSocket
|
|
8
|
+
* 3. Activates requested collectors (network, console, DOM)
|
|
9
|
+
* 4. Sends readiness signal to parent daemon
|
|
10
|
+
* 5. Handles graceful shutdown on SIGTERM/SIGKILL
|
|
11
|
+
*
|
|
12
|
+
* Communication Protocol:
|
|
13
|
+
* - Parent provides config via env vars or process.argv
|
|
14
|
+
* - Worker sends JSON line to stdout on success: \{"type":"worker_ready",...\}
|
|
15
|
+
* - Worker handles SIGTERM for graceful shutdown
|
|
16
|
+
*/
|
|
17
|
+
import { writeQueryCache, getNodeIdByIndex } from '../cli/commands/dom/helpers/domCache.js';
|
|
18
|
+
import { queryBySelector, getNodeInfo, createNodePreview, } from '../cli/commands/dom/helpers/domQuery.js';
|
|
19
|
+
import { startConsoleCollection } from '../collectors/console.js';
|
|
20
|
+
import { prepareDOMCollection, collectDOM } from '../collectors/dom.js';
|
|
21
|
+
import { startNetworkCollection } from '../collectors/network.js';
|
|
22
|
+
import { CDPConnection } from '../connection/cdp.js';
|
|
23
|
+
import { launchChrome } from '../connection/launcher.js';
|
|
24
|
+
import { writeSessionMetadata } from '../session/metadata.js';
|
|
25
|
+
import { writeSessionOutput } from '../session/output.js';
|
|
26
|
+
import { writePid } from '../session/pid.js';
|
|
27
|
+
import { getErrorMessage } from '../utils/errors.js';
|
|
28
|
+
import { fetchCDPTargets } from '../utils/http.js';
|
|
29
|
+
import { normalizeUrl } from '../utils/url.js';
|
|
30
|
+
import { VERSION } from '../utils/version.js';
|
|
31
|
+
/**
|
|
32
|
+
* Color presets for highlight overlay
|
|
33
|
+
*/
|
|
34
|
+
const HIGHLIGHT_COLORS = {
|
|
35
|
+
red: { r: 255, g: 0, b: 0, a: 0.5 },
|
|
36
|
+
blue: { r: 0, g: 0, b: 255, a: 0.5 },
|
|
37
|
+
green: { r: 0, g: 255, b: 0, a: 0.5 },
|
|
38
|
+
yellow: { r: 255, g: 255, b: 0, a: 0.5 },
|
|
39
|
+
orange: { r: 255, g: 165, b: 0, a: 0.5 },
|
|
40
|
+
purple: { r: 128, g: 0, b: 128, a: 0.5 },
|
|
41
|
+
};
|
|
42
|
+
// Global state for cleanup
|
|
43
|
+
let chrome = null;
|
|
44
|
+
let cdp = null;
|
|
45
|
+
let cleanupFunctions = [];
|
|
46
|
+
// Collector data storage
|
|
47
|
+
const networkRequests = [];
|
|
48
|
+
const consoleMessages = [];
|
|
49
|
+
let domData = null;
|
|
50
|
+
// Session metadata
|
|
51
|
+
let sessionStartTime = Date.now();
|
|
52
|
+
let targetInfo = null;
|
|
53
|
+
let activeCollectors = [];
|
|
54
|
+
/**
|
|
55
|
+
* Parse worker configuration from environment variables or argv.
|
|
56
|
+
*/
|
|
57
|
+
function parseWorkerConfig() {
|
|
58
|
+
// For MVP: parse from argv (future: could use env vars or stdin)
|
|
59
|
+
const args = process.argv.slice(2);
|
|
60
|
+
if (args.length === 0) {
|
|
61
|
+
throw new Error('Worker requires configuration arguments');
|
|
62
|
+
}
|
|
63
|
+
// Parse simple JSON config from first argument
|
|
64
|
+
try {
|
|
65
|
+
const configArg = args[0];
|
|
66
|
+
if (!configArg) {
|
|
67
|
+
throw new Error('Missing configuration argument');
|
|
68
|
+
}
|
|
69
|
+
const config = JSON.parse(configArg);
|
|
70
|
+
return {
|
|
71
|
+
url: config.url,
|
|
72
|
+
port: config.port ?? 9222,
|
|
73
|
+
timeout: config.timeout ?? undefined,
|
|
74
|
+
collectors: config.collectors ?? ['network', 'console', 'dom'],
|
|
75
|
+
includeAll: config.includeAll ?? false,
|
|
76
|
+
userDataDir: config.userDataDir ?? undefined,
|
|
77
|
+
maxBodySize: config.maxBodySize ?? undefined,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
throw new Error(`Failed to parse worker config: ${getErrorMessage(error)}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Activate collectors based on configuration.
|
|
86
|
+
*/
|
|
87
|
+
async function activateCollectors(config) {
|
|
88
|
+
if (!cdp) {
|
|
89
|
+
throw new Error('CDP connection not initialized');
|
|
90
|
+
}
|
|
91
|
+
activeCollectors = config.collectors ?? ['network', 'console', 'dom'];
|
|
92
|
+
for (const collector of activeCollectors) {
|
|
93
|
+
console.error(`[worker] Activating ${collector} collector`);
|
|
94
|
+
switch (collector) {
|
|
95
|
+
case 'network':
|
|
96
|
+
{
|
|
97
|
+
const networkOptions = {
|
|
98
|
+
includeAll: config.includeAll ?? false,
|
|
99
|
+
...(config.maxBodySize !== undefined && { maxBodySize: config.maxBodySize }),
|
|
100
|
+
};
|
|
101
|
+
const cleanup = await startNetworkCollection(cdp, networkRequests, networkOptions);
|
|
102
|
+
cleanupFunctions.push(cleanup);
|
|
103
|
+
}
|
|
104
|
+
break;
|
|
105
|
+
case 'console':
|
|
106
|
+
{
|
|
107
|
+
const cleanup = await startConsoleCollection(cdp, consoleMessages, config.includeAll ?? false);
|
|
108
|
+
cleanupFunctions.push(cleanup);
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
case 'dom':
|
|
112
|
+
{
|
|
113
|
+
const cleanup = await prepareDOMCollection(cdp);
|
|
114
|
+
cleanupFunctions.push(cleanup);
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
console.error(`[worker] All collectors activated: ${activeCollectors.join(', ')}`);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Command handler registry - maps command names to their business logic.
|
|
123
|
+
*/
|
|
124
|
+
const commandHandlers = {
|
|
125
|
+
/**
|
|
126
|
+
* DOM Query Handler - Find elements by CSS selector
|
|
127
|
+
*/
|
|
128
|
+
dom_query: async (cdp, params) => {
|
|
129
|
+
// Ensure DOM is enabled
|
|
130
|
+
await cdp.send('DOM.enable');
|
|
131
|
+
// Query elements
|
|
132
|
+
const nodeIds = await queryBySelector(cdp, params.selector);
|
|
133
|
+
// Get information for each node
|
|
134
|
+
const nodes = [];
|
|
135
|
+
for (let i = 0; i < nodeIds.length; i++) {
|
|
136
|
+
const nodeId = nodeIds[i];
|
|
137
|
+
if (nodeId === undefined)
|
|
138
|
+
continue;
|
|
139
|
+
const nodeInfo = await getNodeInfo(cdp, nodeId);
|
|
140
|
+
nodes.push({
|
|
141
|
+
index: i + 1,
|
|
142
|
+
nodeId: nodeInfo.nodeId,
|
|
143
|
+
...(nodeInfo.tag !== undefined && { tag: nodeInfo.tag }),
|
|
144
|
+
...(nodeInfo.classes !== undefined && { classes: nodeInfo.classes }),
|
|
145
|
+
preview: createNodePreview(nodeInfo),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// Write cache for index-based lookups
|
|
149
|
+
writeQueryCache({
|
|
150
|
+
selector: params.selector,
|
|
151
|
+
timestamp: new Date().toISOString(),
|
|
152
|
+
nodes,
|
|
153
|
+
});
|
|
154
|
+
return {
|
|
155
|
+
selector: params.selector,
|
|
156
|
+
count: nodes.length,
|
|
157
|
+
nodes,
|
|
158
|
+
};
|
|
159
|
+
},
|
|
160
|
+
/**
|
|
161
|
+
* DOM Highlight Handler - Highlight elements in browser
|
|
162
|
+
*/
|
|
163
|
+
dom_highlight: async (cdp, params) => {
|
|
164
|
+
// Ensure DOM and Overlay are enabled
|
|
165
|
+
await cdp.send('DOM.enable');
|
|
166
|
+
await cdp.send('Overlay.enable');
|
|
167
|
+
let nodeIds = [];
|
|
168
|
+
// Direct nodeId provided
|
|
169
|
+
if (params.nodeId !== undefined) {
|
|
170
|
+
nodeIds = [params.nodeId];
|
|
171
|
+
}
|
|
172
|
+
else if (params.index !== undefined) {
|
|
173
|
+
// Look up nodeId from cache
|
|
174
|
+
const nodeId = getNodeIdByIndex(params.index);
|
|
175
|
+
if (!nodeId) {
|
|
176
|
+
throw new Error(`No cached element at index ${params.index}. Run 'bdg dom query <selector>' first.`);
|
|
177
|
+
}
|
|
178
|
+
nodeIds = [nodeId];
|
|
179
|
+
}
|
|
180
|
+
else if (params.selector) {
|
|
181
|
+
// Query by selector
|
|
182
|
+
nodeIds = await queryBySelector(cdp, params.selector);
|
|
183
|
+
if (nodeIds.length === 0) {
|
|
184
|
+
throw new Error(`No elements found matching "${params.selector}"`);
|
|
185
|
+
}
|
|
186
|
+
// Apply selector filters
|
|
187
|
+
if (params.first) {
|
|
188
|
+
const firstNode = nodeIds[0];
|
|
189
|
+
if (firstNode === undefined) {
|
|
190
|
+
throw new Error('No elements found');
|
|
191
|
+
}
|
|
192
|
+
nodeIds = [firstNode];
|
|
193
|
+
}
|
|
194
|
+
else if (params.nth !== undefined) {
|
|
195
|
+
if (params.nth < 1 || params.nth > nodeIds.length) {
|
|
196
|
+
throw new Error(`--nth ${params.nth} out of range (found ${nodeIds.length} elements)`);
|
|
197
|
+
}
|
|
198
|
+
const nthNode = nodeIds[params.nth - 1];
|
|
199
|
+
if (nthNode === undefined) {
|
|
200
|
+
throw new Error(`Element at index ${params.nth} not found`);
|
|
201
|
+
}
|
|
202
|
+
nodeIds = [nthNode];
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
throw new Error('Either selector, index, or nodeId must be provided');
|
|
207
|
+
}
|
|
208
|
+
// Prepare highlight color
|
|
209
|
+
const colorName = (params.color ?? 'red');
|
|
210
|
+
const color = HIGHLIGHT_COLORS[colorName] ?? HIGHLIGHT_COLORS.red;
|
|
211
|
+
const opacity = params.opacity ?? color.a;
|
|
212
|
+
// Highlight each node
|
|
213
|
+
for (const nodeId of nodeIds) {
|
|
214
|
+
await cdp.send('Overlay.highlightNode', {
|
|
215
|
+
highlightConfig: {
|
|
216
|
+
contentColor: { ...color, a: opacity },
|
|
217
|
+
},
|
|
218
|
+
nodeId,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
highlighted: nodeIds.length,
|
|
223
|
+
nodeIds,
|
|
224
|
+
};
|
|
225
|
+
},
|
|
226
|
+
/**
|
|
227
|
+
* DOM Get Handler - Get full HTML and attributes for elements
|
|
228
|
+
*/
|
|
229
|
+
dom_get: async (cdp, params) => {
|
|
230
|
+
// Ensure DOM is enabled
|
|
231
|
+
await cdp.send('DOM.enable');
|
|
232
|
+
let nodeIds = [];
|
|
233
|
+
// Direct nodeId provided
|
|
234
|
+
if (params.nodeId !== undefined) {
|
|
235
|
+
nodeIds = [params.nodeId];
|
|
236
|
+
}
|
|
237
|
+
else if (params.index !== undefined) {
|
|
238
|
+
// Look up nodeId from cache
|
|
239
|
+
const nodeId = getNodeIdByIndex(params.index);
|
|
240
|
+
if (!nodeId) {
|
|
241
|
+
throw new Error(`No cached element at index ${params.index}. Run 'bdg dom query <selector>' first.`);
|
|
242
|
+
}
|
|
243
|
+
nodeIds = [nodeId];
|
|
244
|
+
}
|
|
245
|
+
else if (params.selector) {
|
|
246
|
+
// Query by selector
|
|
247
|
+
nodeIds = await queryBySelector(cdp, params.selector);
|
|
248
|
+
if (nodeIds.length === 0) {
|
|
249
|
+
throw new Error(`No elements found matching "${params.selector}"`);
|
|
250
|
+
}
|
|
251
|
+
// Apply selector filters
|
|
252
|
+
if (params.nth !== undefined) {
|
|
253
|
+
if (params.nth < 1 || params.nth > nodeIds.length) {
|
|
254
|
+
throw new Error(`--nth ${params.nth} out of range (found ${nodeIds.length} elements)`);
|
|
255
|
+
}
|
|
256
|
+
const nthNode = nodeIds[params.nth - 1];
|
|
257
|
+
if (nthNode === undefined) {
|
|
258
|
+
throw new Error(`Element at index ${params.nth} not found`);
|
|
259
|
+
}
|
|
260
|
+
nodeIds = [nthNode];
|
|
261
|
+
}
|
|
262
|
+
else if (!params.all) {
|
|
263
|
+
// Default: first match only
|
|
264
|
+
const firstNode = nodeIds[0];
|
|
265
|
+
if (firstNode === undefined) {
|
|
266
|
+
throw new Error('No elements found');
|
|
267
|
+
}
|
|
268
|
+
nodeIds = [firstNode];
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
throw new Error('Either selector, index, or nodeId must be provided');
|
|
273
|
+
}
|
|
274
|
+
// Get information for each node
|
|
275
|
+
const nodes = [];
|
|
276
|
+
for (const nodeId of nodeIds) {
|
|
277
|
+
const info = await getNodeInfo(cdp, nodeId);
|
|
278
|
+
nodes.push({
|
|
279
|
+
nodeId: info.nodeId,
|
|
280
|
+
...(info.tag !== undefined && { tag: info.tag }),
|
|
281
|
+
...(info.attributes !== undefined && { attributes: info.attributes }),
|
|
282
|
+
...(info.classes !== undefined && { classes: info.classes }),
|
|
283
|
+
...(info.outerHTML !== undefined && { outerHTML: info.outerHTML }),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
nodes,
|
|
288
|
+
};
|
|
289
|
+
},
|
|
290
|
+
/**
|
|
291
|
+
* Worker Peek Handler - Return lightweight preview of collected data
|
|
292
|
+
*/
|
|
293
|
+
worker_peek: async (_cdp, params) => {
|
|
294
|
+
const lastN = Math.min(params.lastN ?? 10, 100); // Cap at 100
|
|
295
|
+
const duration = Date.now() - sessionStartTime;
|
|
296
|
+
// Get last N items (slice from end)
|
|
297
|
+
const recentNetwork = networkRequests.slice(-lastN).map((req) => ({
|
|
298
|
+
requestId: req.requestId,
|
|
299
|
+
timestamp: req.timestamp,
|
|
300
|
+
method: req.method,
|
|
301
|
+
url: req.url,
|
|
302
|
+
...(req.status !== undefined && { status: req.status }),
|
|
303
|
+
...(req.mimeType !== undefined && { mimeType: req.mimeType }),
|
|
304
|
+
}));
|
|
305
|
+
const recentConsole = consoleMessages.slice(-lastN).map((msg) => ({
|
|
306
|
+
timestamp: msg.timestamp,
|
|
307
|
+
type: msg.type,
|
|
308
|
+
text: msg.text,
|
|
309
|
+
}));
|
|
310
|
+
// Return as resolved Promise to satisfy async handler contract
|
|
311
|
+
return Promise.resolve({
|
|
312
|
+
version: VERSION,
|
|
313
|
+
startTime: sessionStartTime,
|
|
314
|
+
duration,
|
|
315
|
+
target: {
|
|
316
|
+
url: targetInfo?.url ?? '',
|
|
317
|
+
title: targetInfo?.title ?? '',
|
|
318
|
+
},
|
|
319
|
+
activeCollectors,
|
|
320
|
+
network: recentNetwork,
|
|
321
|
+
console: recentConsole,
|
|
322
|
+
});
|
|
323
|
+
},
|
|
324
|
+
/**
|
|
325
|
+
* Worker Details Handler - Return full object for specific item
|
|
326
|
+
*/
|
|
327
|
+
worker_details: async (_cdp, params) => {
|
|
328
|
+
if (params.itemType === 'network') {
|
|
329
|
+
const request = networkRequests.find((r) => r.requestId === params.id);
|
|
330
|
+
if (!request) {
|
|
331
|
+
return Promise.reject(new Error(`Network request not found: ${params.id}`));
|
|
332
|
+
}
|
|
333
|
+
return Promise.resolve({ item: request });
|
|
334
|
+
}
|
|
335
|
+
else if (params.itemType === 'console') {
|
|
336
|
+
const index = parseInt(params.id, 10);
|
|
337
|
+
if (isNaN(index) || index < 0 || index >= consoleMessages.length) {
|
|
338
|
+
return Promise.reject(new Error(`Console message not found at index: ${params.id} (available: 0-${consoleMessages.length - 1})`));
|
|
339
|
+
}
|
|
340
|
+
return Promise.resolve({ item: consoleMessages[index] });
|
|
341
|
+
}
|
|
342
|
+
// Unreachable due to type narrowing, but TypeScript doesn't see it
|
|
343
|
+
return Promise.reject(new Error(`Unknown itemType: ${String(params.itemType)}. Expected 'network' or 'console'.`));
|
|
344
|
+
},
|
|
345
|
+
/**
|
|
346
|
+
* CDP Call Handler - Execute arbitrary CDP method
|
|
347
|
+
*/
|
|
348
|
+
cdp_call: async (cdp, params) => {
|
|
349
|
+
// Execute CDP method with provided parameters
|
|
350
|
+
const result = await cdp.send(params.method, params.params ?? {});
|
|
351
|
+
return { result };
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
/**
|
|
355
|
+
* Handle incoming IPC message from daemon via stdin.
|
|
356
|
+
*/
|
|
357
|
+
async function handleWorkerIPC(message) {
|
|
358
|
+
const commandName = message.type.replace('_request', '');
|
|
359
|
+
const handler = commandHandlers[commandName];
|
|
360
|
+
if (!handler) {
|
|
361
|
+
console.error(`[worker] Unknown command: ${commandName}`);
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
console.error(`[worker] Handling ${commandName}_request`);
|
|
365
|
+
try {
|
|
366
|
+
if (!cdp)
|
|
367
|
+
throw new Error('CDP connection not initialized');
|
|
368
|
+
// Extract params by removing IPC metadata fields
|
|
369
|
+
const { type: _type, requestId: _requestId, ...params } = message;
|
|
370
|
+
// Call handler with properly typed params
|
|
371
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
|
|
372
|
+
const data = await handler(cdp, params);
|
|
373
|
+
const response = {
|
|
374
|
+
type: `${commandName}_response`,
|
|
375
|
+
requestId: message.requestId,
|
|
376
|
+
success: true,
|
|
377
|
+
data,
|
|
378
|
+
};
|
|
379
|
+
console.log(JSON.stringify(response));
|
|
380
|
+
console.error(`[worker] Sent ${commandName}_response (success)`);
|
|
381
|
+
}
|
|
382
|
+
catch (error) {
|
|
383
|
+
const response = {
|
|
384
|
+
type: `${commandName}_response`,
|
|
385
|
+
requestId: message.requestId,
|
|
386
|
+
success: false,
|
|
387
|
+
error: getErrorMessage(error),
|
|
388
|
+
};
|
|
389
|
+
console.log(JSON.stringify(response));
|
|
390
|
+
console.error(`[worker] Sent ${commandName}_response (error: ${response.error})`);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Set up stdin listener for IPC commands from daemon.
|
|
395
|
+
*/
|
|
396
|
+
function setupStdinListener() {
|
|
397
|
+
let buffer = '';
|
|
398
|
+
process.stdin.on('data', (chunk) => {
|
|
399
|
+
buffer += chunk.toString('utf-8');
|
|
400
|
+
// Process complete JSONL frames (separated by newlines)
|
|
401
|
+
const lines = buffer.split('\n');
|
|
402
|
+
buffer = lines.pop() ?? ''; // Keep incomplete line in buffer
|
|
403
|
+
for (const line of lines) {
|
|
404
|
+
if (line.trim()) {
|
|
405
|
+
try {
|
|
406
|
+
const message = JSON.parse(line);
|
|
407
|
+
void handleWorkerIPC(message);
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
console.error(`[worker] Failed to parse IPC message: ${getErrorMessage(error)}`);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
process.stdin.on('end', () => {
|
|
416
|
+
console.error('[worker] Stdin closed, daemon disconnected');
|
|
417
|
+
});
|
|
418
|
+
console.error('[worker] Stdin listener set up for IPC commands');
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Send worker_ready signal to parent via stdout.
|
|
422
|
+
*/
|
|
423
|
+
function sendReadySignal(config) {
|
|
424
|
+
if (!chrome || !targetInfo) {
|
|
425
|
+
throw new Error('Cannot send ready signal: Chrome or target not initialized');
|
|
426
|
+
}
|
|
427
|
+
const message = {
|
|
428
|
+
type: 'worker_ready',
|
|
429
|
+
requestId: 'ready', // Special requestId for ready signal
|
|
430
|
+
workerPid: process.pid,
|
|
431
|
+
chromePid: chrome.pid,
|
|
432
|
+
port: config.port,
|
|
433
|
+
target: {
|
|
434
|
+
url: targetInfo.url,
|
|
435
|
+
title: targetInfo.title,
|
|
436
|
+
},
|
|
437
|
+
};
|
|
438
|
+
// Send JSON line to stdout for parent to parse
|
|
439
|
+
console.log(JSON.stringify(message));
|
|
440
|
+
console.error(`[worker] Ready signal sent (PID ${process.pid}, Chrome PID ${chrome.pid})`);
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Build BdgOutput structure from collected data.
|
|
444
|
+
*/
|
|
445
|
+
function buildOutput(partial = false) {
|
|
446
|
+
const duration = Date.now() - sessionStartTime;
|
|
447
|
+
const data = {};
|
|
448
|
+
if (networkRequests.length > 0) {
|
|
449
|
+
data.network = networkRequests;
|
|
450
|
+
}
|
|
451
|
+
if (consoleMessages.length > 0) {
|
|
452
|
+
data.console = consoleMessages;
|
|
453
|
+
}
|
|
454
|
+
if (domData) {
|
|
455
|
+
data.dom = domData;
|
|
456
|
+
}
|
|
457
|
+
return {
|
|
458
|
+
version: VERSION,
|
|
459
|
+
success: true,
|
|
460
|
+
timestamp: new Date(sessionStartTime).toISOString(),
|
|
461
|
+
duration,
|
|
462
|
+
target: {
|
|
463
|
+
url: targetInfo?.url ?? '',
|
|
464
|
+
title: targetInfo?.title ?? '',
|
|
465
|
+
},
|
|
466
|
+
data,
|
|
467
|
+
...(partial && { partial: true }),
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Graceful shutdown: collect final DOM, write session.json, cleanup.
|
|
472
|
+
*/
|
|
473
|
+
async function gracefulShutdown() {
|
|
474
|
+
console.error('[worker] Starting graceful shutdown...');
|
|
475
|
+
try {
|
|
476
|
+
// Collect final DOM snapshot if DOM collector is active
|
|
477
|
+
if (activeCollectors.includes('dom') && cdp) {
|
|
478
|
+
console.error('[worker] Collecting final DOM snapshot...');
|
|
479
|
+
try {
|
|
480
|
+
domData = await collectDOM(cdp);
|
|
481
|
+
console.error('[worker] DOM snapshot collected');
|
|
482
|
+
}
|
|
483
|
+
catch (error) {
|
|
484
|
+
console.error(`[worker] Failed to collect DOM: ${getErrorMessage(error)}`);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
// Write final output
|
|
488
|
+
console.error('[worker] Writing final output...');
|
|
489
|
+
const finalOutput = buildOutput(false);
|
|
490
|
+
writeSessionOutput(finalOutput);
|
|
491
|
+
// Run cleanup functions
|
|
492
|
+
console.error('[worker] Running collector cleanup functions...');
|
|
493
|
+
for (const cleanup of cleanupFunctions) {
|
|
494
|
+
try {
|
|
495
|
+
cleanup();
|
|
496
|
+
}
|
|
497
|
+
catch (error) {
|
|
498
|
+
console.error(`[worker] Cleanup function error: ${getErrorMessage(error)}`);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
// Close CDP connection
|
|
502
|
+
if (cdp) {
|
|
503
|
+
console.error('[worker] Closing CDP connection...');
|
|
504
|
+
cdp.close();
|
|
505
|
+
cdp = null;
|
|
506
|
+
}
|
|
507
|
+
// Kill Chrome
|
|
508
|
+
if (chrome) {
|
|
509
|
+
console.error(`[worker] Terminating Chrome (PID ${chrome.pid})...`);
|
|
510
|
+
await chrome.kill();
|
|
511
|
+
chrome = null;
|
|
512
|
+
}
|
|
513
|
+
console.error('[worker] Graceful shutdown complete');
|
|
514
|
+
}
|
|
515
|
+
catch (error) {
|
|
516
|
+
console.error(`[worker] Error during shutdown: ${getErrorMessage(error)}`);
|
|
517
|
+
throw error;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Main worker entry point.
|
|
522
|
+
*/
|
|
523
|
+
async function main() {
|
|
524
|
+
console.error(`[worker] Starting (PID ${process.pid})`);
|
|
525
|
+
let config;
|
|
526
|
+
try {
|
|
527
|
+
// Parse configuration
|
|
528
|
+
config = parseWorkerConfig();
|
|
529
|
+
console.error(`[worker] Config: ${JSON.stringify(config)}`);
|
|
530
|
+
// Write worker PID immediately
|
|
531
|
+
writePid(process.pid);
|
|
532
|
+
// Normalize URL
|
|
533
|
+
const normalizedUrl = normalizeUrl(config.url);
|
|
534
|
+
console.error(`[worker] Normalized URL: ${normalizedUrl}`);
|
|
535
|
+
// Launch Chrome
|
|
536
|
+
console.error(`[worker] Launching Chrome on port ${config.port}...`);
|
|
537
|
+
const launchOptions = {
|
|
538
|
+
port: config.port,
|
|
539
|
+
url: normalizedUrl,
|
|
540
|
+
...(config.userDataDir !== undefined && { userDataDir: config.userDataDir }),
|
|
541
|
+
};
|
|
542
|
+
chrome = await launchChrome(launchOptions);
|
|
543
|
+
console.error(`[worker] Chrome launched (PID ${chrome.pid})`);
|
|
544
|
+
// Connect to Chrome via CDP
|
|
545
|
+
console.error(`[worker] Connecting to Chrome via CDP...`);
|
|
546
|
+
const targets = await fetchCDPTargets(config.port);
|
|
547
|
+
// Find target by exact URL match, fallback to hostname match
|
|
548
|
+
let target = targets.find((t) => t.url === normalizedUrl);
|
|
549
|
+
if (!target) {
|
|
550
|
+
const urlObj = new URL(normalizedUrl);
|
|
551
|
+
target = targets.find((t) => t.url.includes(urlObj.hostname));
|
|
552
|
+
}
|
|
553
|
+
if (!target) {
|
|
554
|
+
throw new Error(`Target not found for URL: ${normalizedUrl}`);
|
|
555
|
+
}
|
|
556
|
+
targetInfo = target;
|
|
557
|
+
console.error(`[worker] Found target: ${target.title} (${target.url})`);
|
|
558
|
+
// Establish CDP connection
|
|
559
|
+
cdp = new CDPConnection();
|
|
560
|
+
await cdp.connect(target.webSocketDebuggerUrl, {
|
|
561
|
+
autoReconnect: false,
|
|
562
|
+
maxRetries: 10,
|
|
563
|
+
// P1.1: Exit gracefully if Chrome dies unexpectedly
|
|
564
|
+
// WHY: Prevents zombie worker processes when Chrome crashes/closes
|
|
565
|
+
onDisconnect: (code, reason) => {
|
|
566
|
+
console.error(`[worker] Chrome connection lost (code: ${code}, reason: ${reason})`);
|
|
567
|
+
console.error('[worker] Exiting due to Chrome connection loss');
|
|
568
|
+
process.exit(0);
|
|
569
|
+
},
|
|
570
|
+
});
|
|
571
|
+
console.error(`[worker] CDP connection established`);
|
|
572
|
+
// Activate collectors
|
|
573
|
+
await activateCollectors(config);
|
|
574
|
+
// Write session metadata for status command
|
|
575
|
+
writeSessionMetadata({
|
|
576
|
+
bdgPid: process.pid,
|
|
577
|
+
chromePid: chrome.pid,
|
|
578
|
+
startTime: sessionStartTime,
|
|
579
|
+
port: config.port,
|
|
580
|
+
targetId: target.id,
|
|
581
|
+
webSocketDebuggerUrl: target.webSocketDebuggerUrl,
|
|
582
|
+
activeCollectors,
|
|
583
|
+
});
|
|
584
|
+
console.error(`[worker] Session metadata written`);
|
|
585
|
+
// Send ready signal to parent
|
|
586
|
+
sendReadySignal(config);
|
|
587
|
+
// Set up stdin listener for IPC commands from daemon
|
|
588
|
+
setupStdinListener();
|
|
589
|
+
// Set up shutdown handlers
|
|
590
|
+
process.on('SIGTERM', () => {
|
|
591
|
+
console.error('[worker] Received SIGTERM');
|
|
592
|
+
void gracefulShutdown().then(() => process.exit(0));
|
|
593
|
+
});
|
|
594
|
+
process.on('SIGINT', () => {
|
|
595
|
+
console.error('[worker] Received SIGINT');
|
|
596
|
+
void gracefulShutdown().then(() => process.exit(0));
|
|
597
|
+
});
|
|
598
|
+
// Handle timeout if specified
|
|
599
|
+
if (config.timeout) {
|
|
600
|
+
console.error(`[worker] Auto-stop after ${config.timeout}s`);
|
|
601
|
+
setTimeout(() => {
|
|
602
|
+
console.error('[worker] Timeout reached, initiating shutdown');
|
|
603
|
+
void gracefulShutdown().then(() => process.exit(0));
|
|
604
|
+
}, config.timeout * 1000);
|
|
605
|
+
}
|
|
606
|
+
// Keep process alive
|
|
607
|
+
console.error('[worker] Session active, waiting for signal or timeout...');
|
|
608
|
+
}
|
|
609
|
+
catch (error) {
|
|
610
|
+
console.error(`[worker] Fatal error: ${getErrorMessage(error)}`);
|
|
611
|
+
// Cleanup on error
|
|
612
|
+
if (cdp) {
|
|
613
|
+
cdp.close();
|
|
614
|
+
}
|
|
615
|
+
if (chrome) {
|
|
616
|
+
await chrome.kill();
|
|
617
|
+
}
|
|
618
|
+
process.exit(1);
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
// Start worker
|
|
622
|
+
void main();
|
|
623
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/daemon/worker.ts"],"names":[],"mappings":"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"}
|