browser-debugger-cli 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__testfixtures__/cdpMessages.d.ts +1 -1
- package/dist/__testfixtures__/connectionTargets.d.ts +1 -1
- package/dist/__tests__/fixtures/schema-v0.2.1.golden.json +47 -0
- package/dist/__tests__/schema.contract.test.d.ts +19 -0
- package/dist/__tests__/schema.contract.test.d.ts.map +1 -0
- package/dist/__tests__/schema.contract.test.js +236 -0
- package/dist/__tests__/schema.contract.test.js.map +1 -0
- package/dist/__testutils__/assertions.d.ts +1 -1
- package/dist/__testutils__/testFixtures.d.ts +1 -1
- package/dist/cli/commands/cdp.js +1 -1
- package/dist/cli/commands/cleanup.d.ts.map +1 -1
- package/dist/cli/commands/cleanup.js +12 -13
- package/dist/cli/commands/cleanup.js.map +1 -1
- package/dist/cli/commands/console.js +2 -2
- package/dist/cli/commands/details.js +3 -3
- package/dist/cli/commands/details.js.map +1 -1
- package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +1 -1
- package/dist/cli/commands/dom/helpers/errorHandler.js +4 -3
- package/dist/cli/commands/dom/helpers/errorHandler.js.map +1 -1
- package/dist/cli/commands/dom/index.js +1 -1
- package/dist/cli/commands/dom.d.ts.map +1 -0
- package/dist/cli/commands/dom.js +257 -0
- package/dist/cli/commands/dom.js.map +1 -0
- package/dist/cli/commands/domErrorHandler.d.ts +45 -0
- package/dist/cli/commands/domErrorHandler.d.ts.map +1 -0
- package/dist/cli/commands/domErrorHandler.js +71 -0
- package/dist/cli/commands/domErrorHandler.js.map +1 -0
- package/dist/cli/commands/domEvalHelpers.d.ts +52 -0
- package/dist/cli/commands/domEvalHelpers.d.ts.map +1 -0
- package/dist/cli/commands/domEvalHelpers.js +76 -0
- package/dist/cli/commands/domEvalHelpers.js.map +1 -0
- package/dist/cli/commands/domOptionsBuilder.d.ts +35 -0
- package/dist/cli/commands/domOptionsBuilder.d.ts.map +1 -0
- package/dist/cli/commands/domOptionsBuilder.js +51 -0
- package/dist/cli/commands/domOptionsBuilder.js.map +1 -0
- package/dist/cli/{collectors/helpers/selectorParser.d.ts → commands/domSelectorParser.d.ts} +1 -1
- package/dist/cli/commands/domSelectorParser.d.ts.map +1 -0
- package/dist/cli/{collectors/helpers/selectorParser.js → commands/domSelectorParser.js} +1 -1
- package/dist/cli/commands/domSelectorParser.js.map +1 -0
- package/dist/cli/commands/network.d.ts.map +1 -1
- package/dist/cli/commands/network.js +8 -5
- package/dist/cli/commands/network.js.map +1 -1
- package/dist/cli/commands/peek.d.ts.map +1 -1
- package/dist/cli/commands/peek.js +7 -7
- package/dist/cli/commands/peek.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +19 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +13 -10
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.d.ts.map +1 -1
- package/dist/cli/commands/stop.js +7 -6
- package/dist/cli/commands/stop.js.map +1 -1
- package/dist/cli/formatters/detailsFormatter.d.ts +1 -1
- package/dist/cli/formatters/previewFormatter.d.ts +1 -1
- package/dist/cli/formatters/previewFormatter.js +1 -1
- package/dist/cli/formatters/previewFormatter.js.map +1 -1
- package/dist/cli/formatters/statusFormatter.d.ts +6 -1
- package/dist/cli/formatters/statusFormatter.d.ts.map +1 -1
- package/dist/cli/formatters/statusFormatter.js +49 -4
- package/dist/cli/formatters/statusFormatter.js.map +1 -1
- package/dist/cli/handlers/CommandRunner.d.ts.map +1 -1
- package/dist/cli/handlers/CommandRunner.js +5 -5
- package/dist/cli/handlers/CommandRunner.js.map +1 -1
- package/dist/cli/handlers/OutputBuilder.d.ts +1 -1
- package/dist/cli/handlers/daemonSessionController.d.ts +1 -1
- package/dist/cli/handlers/daemonSessionController.d.ts.map +1 -1
- package/dist/cli/handlers/daemonSessionController.js +16 -45
- package/dist/cli/handlers/daemonSessionController.js.map +1 -1
- package/dist/cli/handlers/landingPage.d.ts +8 -0
- package/dist/cli/handlers/landingPage.d.ts.map +1 -0
- package/dist/cli/handlers/landingPage.js +8 -0
- package/dist/cli/handlers/landingPage.js.map +1 -0
- package/dist/cli/registry.js +10 -10
- package/dist/cli/registry.js.map +1 -1
- package/dist/collectors/__tests__/network.contract.test.js +25 -10
- package/dist/collectors/__tests__/network.contract.test.js.map +1 -1
- package/dist/collectors/console.d.ts +1 -1
- package/dist/collectors/console.js.map +1 -1
- package/dist/collectors/dom.d.ts +1 -1
- package/dist/collectors/network.d.ts +1 -1
- package/dist/collectors/network.js.map +1 -1
- package/dist/commandRegistry.d.ts +11 -0
- package/dist/commandRegistry.d.ts.map +1 -0
- package/dist/commandRegistry.js +45 -0
- package/dist/commandRegistry.js.map +1 -0
- package/dist/commands/__tests__/cdp.contract.test.d.ts +24 -0
- package/dist/commands/__tests__/cdp.contract.test.d.ts.map +1 -0
- package/dist/commands/__tests__/cdp.contract.test.js +466 -0
- package/dist/commands/__tests__/cdp.contract.test.js.map +1 -0
- package/dist/commands/__tests__/domEval.contract.test.d.ts +17 -0
- package/dist/commands/__tests__/domEval.contract.test.d.ts.map +1 -0
- package/dist/commands/__tests__/domEval.contract.test.js +231 -0
- package/dist/commands/__tests__/domEval.contract.test.js.map +1 -0
- package/dist/commands/cdp.d.ts +8 -0
- package/dist/commands/cdp.d.ts.map +1 -0
- package/dist/commands/cdp.js +45 -0
- package/dist/commands/cdp.js.map +1 -0
- package/dist/commands/cleanup.d.ts +8 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +170 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/console.d.ts +8 -0
- package/dist/commands/console.d.ts.map +1 -0
- package/dist/commands/console.js +92 -0
- package/dist/commands/console.js.map +1 -0
- package/dist/commands/details.d.ts +8 -0
- package/dist/commands/details.d.ts.map +1 -0
- package/dist/commands/details.js +68 -0
- package/dist/commands/details.js.map +1 -0
- package/dist/commands/dom.d.ts +8 -0
- package/dist/commands/dom.d.ts.map +1 -0
- package/dist/commands/dom.js +249 -0
- package/dist/commands/dom.js.map +1 -0
- package/dist/commands/domErrorHandler.d.ts +45 -0
- package/dist/commands/domErrorHandler.d.ts.map +1 -0
- package/dist/commands/domErrorHandler.js +71 -0
- package/dist/commands/domErrorHandler.js.map +1 -0
- package/dist/commands/domEvalHelpers.d.ts +48 -0
- package/dist/commands/domEvalHelpers.d.ts.map +1 -0
- package/dist/commands/domEvalHelpers.js +72 -0
- package/dist/commands/domEvalHelpers.js.map +1 -0
- package/dist/commands/domOptionsBuilder.d.ts +35 -0
- package/dist/commands/domOptionsBuilder.d.ts.map +1 -0
- package/dist/commands/domOptionsBuilder.js +51 -0
- package/dist/commands/domOptionsBuilder.js.map +1 -0
- package/dist/commands/domSelectorParser.d.ts +20 -0
- package/dist/commands/domSelectorParser.d.ts.map +1 -0
- package/dist/commands/domSelectorParser.js +20 -0
- package/dist/commands/domSelectorParser.js.map +1 -0
- package/dist/commands/network.d.ts +8 -0
- package/dist/commands/network.d.ts.map +1 -0
- package/dist/commands/network.js +41 -0
- package/dist/commands/network.js.map +1 -0
- package/dist/commands/peek.d.ts +8 -0
- package/dist/commands/peek.d.ts.map +1 -0
- package/dist/commands/peek.js +115 -0
- package/dist/commands/peek.js.map +1 -0
- package/dist/commands/shared/CommandRunner.d.ts +62 -0
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -0
- package/dist/commands/shared/CommandRunner.js +97 -0
- package/dist/commands/shared/CommandRunner.js.map +1 -0
- package/dist/commands/shared/OutputBuilder.d.ts +60 -0
- package/dist/commands/shared/OutputBuilder.d.ts.map +1 -0
- package/dist/commands/shared/OutputBuilder.js +138 -0
- package/dist/commands/shared/OutputBuilder.js.map +1 -0
- package/dist/commands/shared/commonOptions.d.ts +54 -0
- package/dist/commands/shared/commonOptions.d.ts.map +1 -0
- package/dist/commands/shared/commonOptions.js +65 -0
- package/dist/commands/shared/commonOptions.js.map +1 -0
- package/dist/commands/shared/daemonSessionController.d.ts +23 -0
- package/dist/commands/shared/daemonSessionController.d.ts.map +1 -0
- package/dist/commands/shared/daemonSessionController.js +79 -0
- package/dist/commands/shared/daemonSessionController.js.map +1 -0
- package/dist/commands/shared/landingPage.d.ts +8 -0
- package/dist/commands/shared/landingPage.d.ts.map +1 -0
- package/dist/commands/shared/landingPage.js +8 -0
- package/dist/commands/shared/landingPage.js.map +1 -0
- package/dist/commands/shared/sessionController.d.ts +21 -0
- package/dist/commands/shared/sessionController.d.ts.map +1 -0
- package/dist/commands/shared/sessionController.js +54 -0
- package/dist/commands/shared/sessionController.js.map +1 -0
- package/dist/commands/start.d.ts +9 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +85 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/{cli/commands/query.d.ts → commands/status.d.ts} +3 -3
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +88 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +8 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +152 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands.d.ts +11 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +45 -0
- package/dist/commands.js.map +1 -0
- package/dist/connection/__tests__/cdp.contract.test.d.ts.map +1 -1
- package/dist/connection/__tests__/cdp.contract.test.js +1 -2
- package/dist/connection/__tests__/cdp.contract.test.js.map +1 -1
- package/dist/connection/__tests__/finder.contract.test.js +1 -1
- package/dist/connection/__tests__/finder.contract.test.js.map +1 -1
- package/dist/connection/cdp.d.ts +1 -1
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/domOperations.d.ts +48 -0
- package/dist/connection/domOperations.d.ts.map +1 -0
- package/dist/connection/domOperations.js +104 -0
- package/dist/connection/domOperations.js.map +1 -0
- package/dist/connection/finder.js.map +1 -1
- package/dist/connection/launcher.d.ts +7 -3
- package/dist/connection/launcher.d.ts.map +1 -1
- package/dist/connection/launcher.js +82 -21
- package/dist/connection/launcher.js.map +1 -1
- package/dist/constants.d.ts +17 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +28 -0
- package/dist/constants.js.map +1 -1
- package/dist/daemon/__tests__/ipcServer.contract.test.js +25 -11
- package/dist/daemon/__tests__/ipcServer.contract.test.js.map +1 -1
- package/dist/daemon/ipcServer.d.ts.map +1 -1
- package/dist/daemon/ipcServer.js +86 -6
- package/dist/daemon/ipcServer.js.map +1 -1
- package/dist/daemon/launcher.d.ts.map +1 -1
- package/dist/daemon/launcher.js +8 -6
- package/dist/daemon/launcher.js.map +1 -1
- package/dist/daemon/startSession.d.ts +2 -2
- package/dist/daemon/startSession.d.ts.map +1 -1
- package/dist/daemon/startSession.js +14 -11
- package/dist/daemon/startSession.js.map +1 -1
- package/dist/daemon/worker.d.ts +1 -1
- package/dist/daemon/worker.js +179 -52
- package/dist/daemon/worker.js.map +1 -1
- package/dist/{cli/collectors/helpers/domCache.d.ts → dom/cache.d.ts} +1 -5
- package/dist/dom/cache.d.ts.map +1 -0
- package/dist/{cli/collectors/helpers/domCache.js → dom/cache.js} +5 -19
- package/dist/dom/cache.js.map +1 -0
- package/dist/dom/index.d.ts +9 -0
- package/dist/dom/index.d.ts.map +1 -0
- package/dist/dom/index.js +9 -0
- package/dist/dom/index.js.map +1 -0
- package/dist/{cli/collectors/helpers/domQuery.d.ts → dom/query.d.ts} +5 -2
- package/dist/dom/query.d.ts.map +1 -0
- package/dist/{cli/collectors/helpers/domQuery.js → dom/query.js} +11 -7
- package/dist/dom/query.js.map +1 -0
- package/dist/index.js +117 -35
- package/dist/index.js.map +1 -1
- package/dist/ipc/__tests__/client.contract.test.js +11 -1
- package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
- package/dist/ipc/client.d.ts +17 -4
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +26 -6
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/commands.d.ts +52 -1
- package/dist/ipc/commands.d.ts.map +1 -1
- package/dist/ipc/commands.js +8 -0
- package/dist/ipc/commands.js.map +1 -1
- package/dist/ipc/types.d.ts +34 -3
- package/dist/ipc/types.d.ts.map +1 -1
- package/dist/ipc/types.js.map +1 -1
- package/dist/session/metadata.d.ts +2 -2
- package/dist/session/metadata.d.ts.map +1 -1
- package/dist/session/output.d.ts +1 -1
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +4 -3
- package/dist/session/process.js.map +1 -1
- package/dist/session/queryCache.d.ts +36 -0
- package/dist/session/queryCache.d.ts.map +1 -0
- package/dist/session/queryCache.js +66 -0
- package/dist/session/queryCache.js.map +1 -0
- package/dist/telemetry/__tests__/network.contract.test.d.ts +28 -0
- package/dist/telemetry/__tests__/network.contract.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/network.contract.test.js +540 -0
- package/dist/telemetry/__tests__/network.contract.test.js.map +1 -0
- package/dist/telemetry/console.d.ts +19 -0
- package/dist/telemetry/console.d.ts.map +1 -0
- package/dist/telemetry/console.js +87 -0
- package/dist/telemetry/console.js.map +1 -0
- package/dist/telemetry/dom.d.ts +21 -0
- package/dist/telemetry/dom.d.ts.map +1 -0
- package/dist/telemetry/dom.js +99 -0
- package/dist/telemetry/dom.js.map +1 -0
- package/dist/telemetry/network.d.ts +33 -0
- package/dist/telemetry/network.d.ts.map +1 -0
- package/dist/telemetry/network.js +191 -0
- package/dist/telemetry/network.js.map +1 -0
- package/dist/types.d.ts +25 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/errors.d.ts +39 -0
- package/dist/ui/errors.d.ts.map +1 -0
- package/dist/ui/errors.js +48 -0
- package/dist/ui/errors.js.map +1 -0
- package/dist/ui/formatters/cookies.d.ts +32 -0
- package/dist/ui/formatters/cookies.d.ts.map +1 -0
- package/dist/ui/formatters/cookies.js +45 -0
- package/dist/ui/formatters/cookies.js.map +1 -0
- package/dist/ui/formatters/details.d.ts +10 -0
- package/dist/ui/formatters/details.d.ts.map +1 -0
- package/dist/ui/formatters/details.js +61 -0
- package/dist/ui/formatters/details.js.map +1 -0
- package/dist/ui/formatters/dom.d.ts +135 -0
- package/dist/ui/formatters/dom.d.ts.map +1 -0
- package/dist/ui/formatters/dom.js +193 -0
- package/dist/ui/formatters/dom.js.map +1 -0
- package/dist/ui/formatters/index.d.ts +11 -0
- package/dist/ui/formatters/index.d.ts.map +1 -0
- package/dist/ui/formatters/index.js +11 -0
- package/dist/ui/formatters/index.js.map +1 -0
- package/dist/ui/formatters/preview.d.ts +25 -0
- package/dist/ui/formatters/preview.d.ts.map +1 -0
- package/dist/ui/formatters/preview.js +182 -0
- package/dist/ui/formatters/preview.js.map +1 -0
- package/dist/ui/formatters/status.d.ts +39 -0
- package/dist/ui/formatters/status.d.ts.map +1 -0
- package/dist/ui/formatters/status.js +153 -0
- package/dist/ui/formatters/status.js.map +1 -0
- package/dist/ui/formatting.d.ts +300 -0
- package/dist/ui/formatting.d.ts.map +1 -0
- package/dist/ui/formatting.js +454 -0
- package/dist/ui/formatting.js.map +1 -0
- package/dist/ui/messages/chrome.d.ts +172 -0
- package/dist/ui/messages/chrome.d.ts.map +1 -0
- package/dist/ui/messages/chrome.js +253 -0
- package/dist/ui/messages/chrome.js.map +1 -0
- package/dist/ui/messages/commands.d.ts +88 -0
- package/dist/ui/messages/commands.d.ts.map +1 -0
- package/dist/ui/messages/commands.js +150 -0
- package/dist/ui/messages/commands.js.map +1 -0
- package/dist/ui/messages/consoleMessages.d.ts +39 -0
- package/dist/ui/messages/consoleMessages.d.ts.map +1 -0
- package/dist/ui/messages/consoleMessages.js +48 -0
- package/dist/ui/messages/consoleMessages.js.map +1 -0
- package/dist/ui/messages/debug.d.ts +182 -0
- package/dist/ui/messages/debug.d.ts.map +1 -0
- package/dist/ui/messages/debug.js +243 -0
- package/dist/ui/messages/debug.js.map +1 -0
- package/dist/ui/messages/errors.d.ts +91 -0
- package/dist/ui/messages/errors.d.ts.map +1 -0
- package/dist/ui/messages/errors.js +135 -0
- package/dist/ui/messages/errors.js.map +1 -0
- package/dist/ui/messages/index.d.ts +12 -0
- package/dist/ui/messages/index.d.ts.map +1 -0
- package/dist/ui/messages/index.js +12 -0
- package/dist/ui/messages/index.js.map +1 -0
- package/dist/ui/messages/internal.d.ts +30 -0
- package/dist/ui/messages/internal.d.ts.map +1 -0
- package/dist/ui/messages/internal.js +42 -0
- package/dist/ui/messages/internal.js.map +1 -0
- package/dist/ui/messages/preview.d.ts +51 -0
- package/dist/ui/messages/preview.d.ts.map +1 -0
- package/dist/ui/messages/preview.js +76 -0
- package/dist/ui/messages/preview.js.map +1 -0
- package/dist/ui/messages/session.d.ts +54 -0
- package/dist/ui/messages/session.d.ts.map +1 -0
- package/dist/ui/messages/session.js +77 -0
- package/dist/ui/messages/session.js.map +1 -0
- package/dist/ui/messages/validation.d.ts +34 -0
- package/dist/ui/messages/validation.d.ts.map +1 -0
- package/dist/ui/messages/validation.js +38 -0
- package/dist/ui/messages/validation.js.map +1 -0
- package/dist/utils/__tests__/filters.unit.test.js +1 -1
- package/dist/utils/cdpHandlers.d.ts +1 -1
- package/dist/utils/cdpHandlers.js +1 -1
- package/dist/utils/chromeDiagnostics.d.ts +0 -12
- package/dist/utils/chromeDiagnostics.d.ts.map +1 -1
- package/dist/utils/chromeDiagnostics.js +0 -51
- package/dist/utils/chromeDiagnostics.js.map +1 -1
- package/dist/utils/filters.js +1 -1
- package/dist/utils/filters.js.map +1 -1
- package/dist/utils/http.d.ts +1 -1
- package/dist/utils/http.js.map +1 -1
- package/dist/utils/logger.d.ts +68 -12
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +62 -12
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/pageReadiness.d.ts +46 -0
- package/dist/utils/pageReadiness.d.ts.map +1 -0
- package/dist/utils/pageReadiness.js +271 -0
- package/dist/utils/pageReadiness.js.map +1 -0
- package/dist/utils/ui.d.ts +36 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +47 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/url.d.ts +60 -26
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +130 -84
- package/dist/utils/url.js.map +1 -1
- package/package.json +2 -5
- package/dist/cli/collectors/dom.d.ts.map +0 -1
- package/dist/cli/collectors/dom.js +0 -361
- package/dist/cli/collectors/dom.js.map +0 -1
- package/dist/cli/collectors/helpers/domCache.d.ts.map +0 -1
- package/dist/cli/collectors/helpers/domCache.js.map +0 -1
- package/dist/cli/collectors/helpers/domQuery.d.ts.map +0 -1
- package/dist/cli/collectors/helpers/domQuery.js.map +0 -1
- package/dist/cli/collectors/helpers/selectorParser.d.ts.map +0 -1
- package/dist/cli/collectors/helpers/selectorParser.js.map +0 -1
- package/dist/cli/commands/__tests__/ipcTest.test.d.ts +0 -2
- package/dist/cli/commands/__tests__/ipcTest.test.d.ts.map +0 -1
- package/dist/cli/commands/__tests__/ipcTest.test.js +0 -37
- package/dist/cli/commands/__tests__/ipcTest.test.js.map +0 -1
- package/dist/cli/commands/ipcTest.d.ts +0 -23
- package/dist/cli/commands/ipcTest.d.ts.map +0 -1
- package/dist/cli/commands/ipcTest.js +0 -181
- package/dist/cli/commands/ipcTest.js.map +0 -1
- package/dist/cli/commands/query.d.ts.map +0 -1
- package/dist/cli/commands/query.js +0 -127
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/handlers/ChromeBootstrap.d.ts +0 -24
- package/dist/cli/handlers/ChromeBootstrap.d.ts.map +0 -1
- package/dist/cli/handlers/ChromeBootstrap.js +0 -50
- package/dist/cli/handlers/ChromeBootstrap.js.map +0 -1
- package/dist/cli/handlers/OutputWriter.d.ts +0 -15
- package/dist/cli/handlers/OutputWriter.d.ts.map +0 -1
- package/dist/cli/handlers/OutputWriter.js +0 -34
- package/dist/cli/handlers/OutputWriter.js.map +0 -1
- package/dist/cli/handlers/PreviewWriter.d.ts +0 -52
- package/dist/cli/handlers/PreviewWriter.d.ts.map +0 -1
- package/dist/cli/handlers/PreviewWriter.js +0 -119
- package/dist/cli/handlers/PreviewWriter.js.map +0 -1
- package/dist/cli/handlers/SessionLock.d.ts +0 -16
- package/dist/cli/handlers/SessionLock.d.ts.map +0 -1
- package/dist/cli/handlers/SessionLock.js +0 -38
- package/dist/cli/handlers/SessionLock.js.map +0 -1
- package/dist/cli/handlers/SessionLoop.d.ts +0 -19
- package/dist/cli/handlers/SessionLoop.d.ts.map +0 -1
- package/dist/cli/handlers/SessionLoop.js +0 -47
- package/dist/cli/handlers/SessionLoop.js.map +0 -1
- package/dist/cli/handlers/ShutdownController.d.ts +0 -38
- package/dist/cli/handlers/ShutdownController.d.ts.map +0 -1
- package/dist/cli/handlers/ShutdownController.js +0 -83
- package/dist/cli/handlers/ShutdownController.js.map +0 -1
- package/dist/cli/handlers/SignalHandler.d.ts +0 -35
- package/dist/cli/handlers/SignalHandler.d.ts.map +0 -1
- package/dist/cli/handlers/SignalHandler.js +0 -81
- package/dist/cli/handlers/SignalHandler.js.map +0 -1
- package/dist/cli/handlers/TargetSetup.d.ts +0 -42
- package/dist/cli/handlers/TargetSetup.d.ts.map +0 -1
- package/dist/cli/handlers/TargetSetup.js +0 -87
- package/dist/cli/handlers/TargetSetup.js.map +0 -1
- package/dist/connection/__tests__/tabs.contract.test.d.ts +0 -2
- package/dist/connection/__tests__/tabs.contract.test.d.ts.map +0 -1
- package/dist/connection/__tests__/tabs.contract.test.js +0 -137
- package/dist/connection/__tests__/tabs.contract.test.js.map +0 -1
- package/dist/connection/tabs.d.ts +0 -82
- package/dist/connection/tabs.d.ts.map +0 -1
- package/dist/connection/tabs.js +0 -577
- package/dist/connection/tabs.js.map +0 -1
- package/dist/session/BdgSession.d.ts +0 -129
- package/dist/session/BdgSession.d.ts.map +0 -1
- package/dist/session/BdgSession.js +0 -270
- package/dist/session/BdgSession.js.map +0 -1
- package/dist/session/index.d.ts +0 -15
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js +0 -23
- package/dist/session/index.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -12
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -20
- package/dist/utils/validation.js.map +0 -1
- /package/dist/cli/{collectors → commands}/dom.d.ts +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get document root node ID
|
|
3
|
+
*
|
|
4
|
+
* @param cdp - CDP connection instance
|
|
5
|
+
* @returns Root node ID
|
|
6
|
+
* @throws Error When CDP command fails or connection is lost
|
|
7
|
+
*/
|
|
8
|
+
export async function getDocumentRoot(cdp) {
|
|
9
|
+
const result = (await cdp.send('DOM.getDocument', { depth: -1 }));
|
|
10
|
+
return result.root.nodeId;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Query DOM by CSS selector
|
|
14
|
+
*
|
|
15
|
+
* @param cdp - CDP connection instance
|
|
16
|
+
* @param selector - CSS selector to query
|
|
17
|
+
* @param rootNodeId - Optional root node ID (defaults to document root)
|
|
18
|
+
* @returns Array of node IDs matching the selector
|
|
19
|
+
* @throws Error When CDP command fails or selector is invalid
|
|
20
|
+
*/
|
|
21
|
+
export async function queryBySelector(cdp, selector, rootNodeId) {
|
|
22
|
+
// Get root node if not provided
|
|
23
|
+
const nodeId = rootNodeId ?? (await getDocumentRoot(cdp));
|
|
24
|
+
const result = (await cdp.send('DOM.querySelectorAll', {
|
|
25
|
+
nodeId,
|
|
26
|
+
selector,
|
|
27
|
+
}));
|
|
28
|
+
return result.nodeIds;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get node information
|
|
32
|
+
*
|
|
33
|
+
* @param cdp - CDP connection instance
|
|
34
|
+
* @param nodeId - Node ID to query
|
|
35
|
+
* @returns Node information including tag, classes, attributes
|
|
36
|
+
* @throws Error When CDP command fails or nodeId is invalid
|
|
37
|
+
*/
|
|
38
|
+
export async function getNodeInfo(cdp, nodeId) {
|
|
39
|
+
// Get node description
|
|
40
|
+
const describeResult = (await cdp.send('DOM.describeNode', {
|
|
41
|
+
nodeId,
|
|
42
|
+
}));
|
|
43
|
+
const node = describeResult.node;
|
|
44
|
+
// Parse attributes array into object
|
|
45
|
+
const attributes = {};
|
|
46
|
+
if (node.attributes) {
|
|
47
|
+
for (let i = 0; i < node.attributes.length; i += 2) {
|
|
48
|
+
const key = node.attributes[i];
|
|
49
|
+
const value = node.attributes[i + 1];
|
|
50
|
+
if (key !== undefined && value !== undefined) {
|
|
51
|
+
attributes[key] = value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Extract classes from class attribute
|
|
56
|
+
const classes = attributes['class']?.split(/\s+/).filter((c) => c.length > 0) ?? [];
|
|
57
|
+
// Get outer HTML
|
|
58
|
+
const htmlResult = (await cdp.send('DOM.getOuterHTML', {
|
|
59
|
+
nodeId,
|
|
60
|
+
}));
|
|
61
|
+
// Extract text content by removing HTML tags
|
|
62
|
+
// Uses simple regex to strip tags while preserving text content including < and > in text
|
|
63
|
+
// SAFETY: This HTML comes from Chrome's internal DOM via CDP, not user input.
|
|
64
|
+
// It's trusted browser-generated content used only for display/analysis in CLI output.
|
|
65
|
+
// The regex is intentionally simple because we're extracting text, not sanitizing for XSS.
|
|
66
|
+
const textContent = htmlResult.outerHTML
|
|
67
|
+
.replace(/<[^>]*>/g, '') // Remove HTML tags
|
|
68
|
+
.replace(/\s+/g, ' ') // Collapse whitespace
|
|
69
|
+
.trim();
|
|
70
|
+
return {
|
|
71
|
+
nodeId,
|
|
72
|
+
tag: node.nodeName.toLowerCase(),
|
|
73
|
+
classes,
|
|
74
|
+
attributes,
|
|
75
|
+
outerHTML: htmlResult.outerHTML,
|
|
76
|
+
textContent,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create preview text for a node
|
|
81
|
+
*
|
|
82
|
+
* @param nodeInfo - Node information
|
|
83
|
+
* @param maxLength - Maximum preview length (default: 50)
|
|
84
|
+
* @returns Preview text
|
|
85
|
+
*/
|
|
86
|
+
export function createNodePreview(nodeInfo, maxLength = 50) {
|
|
87
|
+
// If we have text content, use that
|
|
88
|
+
if (nodeInfo.textContent && nodeInfo.textContent.length > 0) {
|
|
89
|
+
const text = nodeInfo.textContent;
|
|
90
|
+
if (text.length > maxLength) {
|
|
91
|
+
return text.slice(0, maxLength) + '...';
|
|
92
|
+
}
|
|
93
|
+
return text;
|
|
94
|
+
}
|
|
95
|
+
// Otherwise show the opening tag
|
|
96
|
+
const tag = nodeInfo.tag ?? 'unknown';
|
|
97
|
+
const classAttr = nodeInfo.classes && nodeInfo.classes.length > 0 ? ` class="${nodeInfo.classes.join(' ')}"` : '';
|
|
98
|
+
const preview = `<${tag}${classAttr}>`;
|
|
99
|
+
if (preview.length > maxLength) {
|
|
100
|
+
return preview.slice(0, maxLength) + '...';
|
|
101
|
+
}
|
|
102
|
+
return preview;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=domOperations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domOperations.js","sourceRoot":"","sources":["../../src/connection/domOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finder.js","sourceRoot":"","sources":["../../src/connection/finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"finder.js","sourceRoot":"","sources":["../../src/connection/finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAI,GAAG,gBAAgB;IAC5E,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Options as ChromeLaunchOptions } from 'chrome-launcher';
|
|
2
|
-
import type { LaunchedChrome } from '../types
|
|
2
|
+
import type { LaunchedChrome } from '../types';
|
|
3
3
|
/**
|
|
4
4
|
* Options that control how Chrome is launched for CDP sessions.
|
|
5
5
|
* Extended to support chrome-launcher advanced features.
|
|
@@ -24,10 +24,14 @@ export interface LaunchOptions extends Pick<ChromeLaunchOptions, 'logLevel' | 'c
|
|
|
24
24
|
* Supports macOS, Linux, and Windows. Chrome will be launched with
|
|
25
25
|
* the specified debugging port and user data directory.
|
|
26
26
|
*
|
|
27
|
+
* Validates Chrome process is alive after launch to detect immediate crashes
|
|
28
|
+
* or port conflicts. Includes Chrome installation diagnostics in error messages
|
|
29
|
+
* to aid troubleshooting.
|
|
30
|
+
*
|
|
27
31
|
* @param options - Launch configuration options
|
|
28
32
|
* @returns LaunchedChrome instance with PID and kill method
|
|
29
|
-
* @throws ChromeLaunchError if Chrome fails to launch or CDP doesn't become available
|
|
30
|
-
* @throws Error if
|
|
33
|
+
* @throws ChromeLaunchError if Chrome fails to launch, process dies immediately, or CDP doesn't become available
|
|
34
|
+
* @throws Error if user data directory cannot be created
|
|
31
35
|
*
|
|
32
36
|
* @remarks
|
|
33
37
|
* Chrome 136+ requires --user-data-dir with a non-default directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/connection/launcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/connection/launcher.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAYtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAuD9C;;;GAGG;AACH,MAAM,WAAW,aACf,SAAQ,IAAI,CACV,mBAAmB,EACjB,UAAU,GACV,wBAAwB,GACxB,sBAAsB,GACtB,gBAAgB,GAChB,SAAS,GACT,cAAc,GACd,oBAAoB,GACpB,aAAa,CAChB;IACD,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kGAAkG;IAClG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC5C,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CA2GvF"}
|
|
@@ -1,23 +1,31 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
1
2
|
import * as fs from 'fs';
|
|
2
3
|
import * as os from 'os';
|
|
3
4
|
import * as path from 'path';
|
|
4
5
|
import * as chromeLauncher from 'chrome-launcher';
|
|
5
6
|
import { BDG_CHROME_FLAGS, BDG_CHROME_PREFS, DEFAULT_CDP_PORT, DEFAULT_CHROME_LOG_LEVEL, DEFAULT_CHROME_HANDLE_SIGINT, CHROME_PROFILE_DIR, HEADLESS_FLAG, } from '../constants.js';
|
|
7
|
+
import { isProcessAlive } from '../session/process.js';
|
|
8
|
+
import { formatDiagnosticsForError, chromeLaunchStartMessage, chromeLaunchSuccessMessage, chromeUserDataDirMessage, invalidPortError, userDataDirError, prefsFileNotFoundError, invalidPrefsFormatError, prefsLoadError, chromeLaunchFailedError, } from '../ui/messages/chrome.js';
|
|
9
|
+
import { getChromeDiagnostics } from '../utils/chromeDiagnostics.js';
|
|
6
10
|
import { ChromeLaunchError, getErrorMessage } from '../utils/errors.js';
|
|
11
|
+
import { createLogger } from '../utils/logger.js';
|
|
7
12
|
import { filterDefined } from '../utils/objects.js';
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
const log = createLogger('chrome');
|
|
14
|
+
/**
|
|
15
|
+
* Get formatted Chrome diagnostics for error messages.
|
|
16
|
+
*
|
|
17
|
+
* Retrieves Chrome installation information and formats it for display
|
|
18
|
+
* in error messages. Uses cached diagnostics to avoid repeated filesystem scans.
|
|
19
|
+
*
|
|
20
|
+
* @returns Array of formatted diagnostic strings
|
|
21
|
+
*/
|
|
22
|
+
function getFormattedDiagnostics() {
|
|
23
|
+
const diagnostics = getChromeDiagnostics();
|
|
24
|
+
return formatDiagnosticsForError(diagnostics);
|
|
25
|
+
}
|
|
17
26
|
// Other Constants
|
|
18
27
|
const FILE_NOT_EXIST_ERROR = 'File does not exist';
|
|
19
28
|
const INVALID_JSON_STRUCTURE_ERROR = 'Invalid JSON structure';
|
|
20
|
-
const USER_DATA_DIR_LOG = (dir) => `User data directory: ${dir}`;
|
|
21
29
|
const REMOTE_DEBUGGING_FLAG = (port) => `--remote-debugging-port=${port}`;
|
|
22
30
|
/**
|
|
23
31
|
* Launch Chrome with remote debugging enabled using chrome-launcher.
|
|
@@ -25,10 +33,14 @@ const REMOTE_DEBUGGING_FLAG = (port) => `--remote-debugging-port=${port}`;
|
|
|
25
33
|
* Supports macOS, Linux, and Windows. Chrome will be launched with
|
|
26
34
|
* the specified debugging port and user data directory.
|
|
27
35
|
*
|
|
36
|
+
* Validates Chrome process is alive after launch to detect immediate crashes
|
|
37
|
+
* or port conflicts. Includes Chrome installation diagnostics in error messages
|
|
38
|
+
* to aid troubleshooting.
|
|
39
|
+
*
|
|
28
40
|
* @param options - Launch configuration options
|
|
29
41
|
* @returns LaunchedChrome instance with PID and kill method
|
|
30
|
-
* @throws ChromeLaunchError if Chrome fails to launch or CDP doesn't become available
|
|
31
|
-
* @throws Error if
|
|
42
|
+
* @throws ChromeLaunchError if Chrome fails to launch, process dies immediately, or CDP doesn't become available
|
|
43
|
+
* @throws Error if user data directory cannot be created
|
|
32
44
|
*
|
|
33
45
|
* @remarks
|
|
34
46
|
* Chrome 136+ requires --user-data-dir with a non-default directory.
|
|
@@ -38,11 +50,32 @@ export async function launchChrome(options = {}) {
|
|
|
38
50
|
const port = options.port ?? DEFAULT_CDP_PORT;
|
|
39
51
|
// Validate port range
|
|
40
52
|
if (port < 1 || port > 65535) {
|
|
41
|
-
throw new
|
|
53
|
+
throw new ChromeLaunchError(invalidPortError(port));
|
|
54
|
+
}
|
|
55
|
+
// Check if port is already in use by orphaned Chrome process
|
|
56
|
+
// This prevents confusing launch failures when cleanup didn't fully remove Chrome
|
|
57
|
+
// Platform-specific: macOS/Linux only (Windows uses different approach)
|
|
58
|
+
try {
|
|
59
|
+
const portInUse = execSync(`lsof -ti:${port} 2>/dev/null || true`, { encoding: 'utf8' }).trim();
|
|
60
|
+
if (portInUse) {
|
|
61
|
+
throw new ChromeLaunchError(`Port ${port} is already in use by process ${portInUse}\n\n` +
|
|
62
|
+
`This usually means Chrome is still running from a previous session.\n\n` +
|
|
63
|
+
`Try:\n` +
|
|
64
|
+
` - bdg cleanup --aggressive (kills all Chrome processes)\n` +
|
|
65
|
+
` - bdg cleanup --force (removes session files + kills Chrome on port ${port})\n` +
|
|
66
|
+
` - kill ${portInUse} (manually kill the process)\n` +
|
|
67
|
+
` - Use different port: bdg <url> --port ${port + 1}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
// Re-throw ChromeLaunchError, ignore other errors (lsof not available, etc.)
|
|
72
|
+
if (error instanceof ChromeLaunchError) {
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
42
75
|
}
|
|
43
76
|
const userDataDir = options.userDataDir ?? getPersistentUserDataDir();
|
|
44
|
-
|
|
45
|
-
|
|
77
|
+
log.info(chromeLaunchStartMessage(port));
|
|
78
|
+
log.debug(chromeUserDataDirMessage(userDataDir));
|
|
46
79
|
const chromeOptions = buildChromeOptions(options);
|
|
47
80
|
const launcher = new chromeLauncher.Launcher(chromeOptions);
|
|
48
81
|
try {
|
|
@@ -51,7 +84,29 @@ export async function launchChrome(options = {}) {
|
|
|
51
84
|
await launcher.waitUntilReady();
|
|
52
85
|
const launchDurationMs = Date.now() - launchStart;
|
|
53
86
|
const chromeProcessPid = launcher.pid ?? 0;
|
|
54
|
-
|
|
87
|
+
// Validate PID and process liveness before success
|
|
88
|
+
if (!chromeProcessPid || chromeProcessPid <= 0 || !isProcessAlive(chromeProcessPid)) {
|
|
89
|
+
launcher.kill();
|
|
90
|
+
launcher.destroyTmp();
|
|
91
|
+
// Get Chrome diagnostics once for error context
|
|
92
|
+
const diagnosticLines = getFormattedDiagnostics();
|
|
93
|
+
const errorType = !chromeProcessPid || chromeProcessPid <= 0
|
|
94
|
+
? 'failed to launch'
|
|
95
|
+
: 'died immediately after launch';
|
|
96
|
+
throw new ChromeLaunchError(`Chrome ${errorType} (PID: ${chromeProcessPid})\n\n` +
|
|
97
|
+
`Possible causes:\n` +
|
|
98
|
+
` - Port ${port} conflict (check: lsof -ti:${port})\n` +
|
|
99
|
+
` - Chrome binary not found\n` +
|
|
100
|
+
` - Insufficient permissions\n` +
|
|
101
|
+
` - Chrome crashed on startup\n\n` +
|
|
102
|
+
`${diagnosticLines.join('\n')}\n\n` +
|
|
103
|
+
`Try:\n` +
|
|
104
|
+
` - bdg cleanup\n` +
|
|
105
|
+
` - Kill conflicting process: kill $(lsof -ti:${port})\n` +
|
|
106
|
+
` - Use different port: bdg <url> --port ${port + 1}`);
|
|
107
|
+
}
|
|
108
|
+
// Only print success message after validating PID and process liveness
|
|
109
|
+
log.info(chromeLaunchSuccessMessage(chromeProcessPid, launchDurationMs));
|
|
55
110
|
return {
|
|
56
111
|
pid: chromeProcessPid,
|
|
57
112
|
port: launcher.port ?? port,
|
|
@@ -68,7 +123,13 @@ export async function launchChrome(options = {}) {
|
|
|
68
123
|
catch (error) {
|
|
69
124
|
launcher.kill();
|
|
70
125
|
launcher.destroyTmp();
|
|
71
|
-
|
|
126
|
+
// If it's already a ChromeLaunchError with diagnostics, just re-throw
|
|
127
|
+
if (error instanceof ChromeLaunchError) {
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
// For generic launch failures, add Chrome diagnostics
|
|
131
|
+
const diagnosticLines = getFormattedDiagnostics();
|
|
132
|
+
throw new ChromeLaunchError(`${chromeLaunchFailedError(getErrorMessage(error))}\n\n${diagnosticLines.join('\n')}`, error instanceof Error ? error : undefined);
|
|
72
133
|
}
|
|
73
134
|
}
|
|
74
135
|
/**
|
|
@@ -89,7 +150,7 @@ function getPersistentUserDataDir() {
|
|
|
89
150
|
fs.mkdirSync(userDataDir, { recursive: true });
|
|
90
151
|
}
|
|
91
152
|
catch (error) {
|
|
92
|
-
throw new Error(
|
|
153
|
+
throw new Error(userDataDirError(userDataDir, getErrorMessage(error)));
|
|
93
154
|
}
|
|
94
155
|
}
|
|
95
156
|
return userDataDir;
|
|
@@ -109,13 +170,13 @@ function loadChromePrefs(options) {
|
|
|
109
170
|
if (options.prefsFile) {
|
|
110
171
|
// Validate file exists before attempting to read
|
|
111
172
|
if (!fs.existsSync(options.prefsFile)) {
|
|
112
|
-
throw new ChromeLaunchError(
|
|
173
|
+
throw new ChromeLaunchError(prefsFileNotFoundError(options.prefsFile), new Error(FILE_NOT_EXIST_ERROR));
|
|
113
174
|
}
|
|
114
175
|
try {
|
|
115
176
|
const prefsContent = fs.readFileSync(options.prefsFile, 'utf8');
|
|
116
177
|
const parsed = JSON.parse(prefsContent);
|
|
117
178
|
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
118
|
-
throw new ChromeLaunchError(
|
|
179
|
+
throw new ChromeLaunchError(invalidPrefsFormatError(options.prefsFile, typeof parsed), new Error(INVALID_JSON_STRUCTURE_ERROR));
|
|
119
180
|
}
|
|
120
181
|
return parsed;
|
|
121
182
|
}
|
|
@@ -123,7 +184,7 @@ function loadChromePrefs(options) {
|
|
|
123
184
|
if (error instanceof ChromeLaunchError) {
|
|
124
185
|
throw error;
|
|
125
186
|
}
|
|
126
|
-
throw new ChromeLaunchError(
|
|
187
|
+
throw new ChromeLaunchError(prefsLoadError(options.prefsFile, getErrorMessage(error)), error instanceof Error ? error : undefined);
|
|
127
188
|
}
|
|
128
189
|
}
|
|
129
190
|
return options.prefs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/connection/launcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,KAAK,cAAc,MAAM,iBAAiB,CAAC;AAIlD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,aAAa,GACd,MAAM,
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/connection/launcher.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -184,6 +184,23 @@ export declare const STALE_REQUEST_CLEANUP_INTERVAL = 30000;
|
|
|
184
184
|
* How often to log memory statistics during session collection
|
|
185
185
|
*/
|
|
186
186
|
export declare const MEMORY_LOG_INTERVAL = 30000;
|
|
187
|
+
/**
|
|
188
|
+
* Default page readiness timeout (2 seconds)
|
|
189
|
+
* Maximum time to wait for page to be ready before proceeding
|
|
190
|
+
* Uses adaptive detection for load, network stability, and DOM stability
|
|
191
|
+
*/
|
|
192
|
+
export declare const DEFAULT_PAGE_READINESS_TIMEOUT_MS = 2000;
|
|
193
|
+
/**
|
|
194
|
+
* IPC request timeout in milliseconds (45 seconds in production, 5 seconds in tests)
|
|
195
|
+
* Maximum time to wait for IPC responses from daemon
|
|
196
|
+
* Must accommodate: Chrome launch (~2s) + Page readiness detection (up to 30s) + buffer (~13s)
|
|
197
|
+
*
|
|
198
|
+
* Can be overridden via BDG_IPC_TIMEOUT_MS environment variable (used by tests)
|
|
199
|
+
*
|
|
200
|
+
* @returns IPC request timeout in milliseconds
|
|
201
|
+
* @see docs/IMPROVEMENTS_ANALYSIS.md - Issue #3: Smart Page Readiness Detection
|
|
202
|
+
*/
|
|
203
|
+
export declare function getIPCRequestTimeout(): number;
|
|
187
204
|
/**
|
|
188
205
|
* Description for port option in CLI commands
|
|
189
206
|
*/
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAA2B,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,wBAAwB,WAAW,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,4BAA4B,QAAQ,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,aAAa,SAAS,CAAC;AAEpC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,SAAS,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAA2B,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,wBAAwB,WAAW,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,4BAA4B,QAAQ,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,aAAa,SAAS,CAAC;AAEpC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,SAAS,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,UAQ5B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAIpD,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAAkB,CAAC;AAMjD;;;GAGG;AACH,eAAO,MAAM,2BAA2B,QAAmB,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,kCAAkC,QAAmB,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAAkB,CAAC;AAMtD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,8BAA8B,QAAQ,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,OAAO,CAAC;AAMtD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAMD;;GAEG;AACH,eAAO,MAAM,uBAAuB,0BAA0B,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,0BAA0B,uCAAuC,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,4BAA4B,sDAAsD,CAAC;AAEhG;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,gCAAgC,gEACkB,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -137,6 +137,8 @@ export const BDG_CHROME_FLAGS = [
|
|
|
137
137
|
'--disable-search-engine-choice-screen',
|
|
138
138
|
'--disable-session-crashed-bubble', // Suppress "Restore Pages?" popup after unclean shutdown
|
|
139
139
|
'--disable-infobars', // Disable all info bars including restore prompt
|
|
140
|
+
'--disable-notifications', // Suppress notification permission prompts
|
|
141
|
+
'--disable-features=Translate', // Suppress Google Translate popup (replaces deprecated --disable-translate)
|
|
140
142
|
];
|
|
141
143
|
/**
|
|
142
144
|
* BDG-specific Chrome preferences for automation
|
|
@@ -148,6 +150,8 @@ export const BDG_CHROME_FLAGS = [
|
|
|
148
150
|
*/
|
|
149
151
|
export const BDG_CHROME_PREFS = {
|
|
150
152
|
'browser.show_quit_confirmation_dialog': false, // Disable quit confirmation for automation
|
|
153
|
+
'translate.enabled': false, // Disable Google Translate popup
|
|
154
|
+
translate_site_blacklist: ['*'], // Block translate for all sites
|
|
151
155
|
};
|
|
152
156
|
// ============================================================================
|
|
153
157
|
// DATA COLLECTION LIMITS
|
|
@@ -204,6 +208,30 @@ export const STALE_REQUEST_CLEANUP_INTERVAL = 30000;
|
|
|
204
208
|
* How often to log memory statistics during session collection
|
|
205
209
|
*/
|
|
206
210
|
export const MEMORY_LOG_INTERVAL = 30000;
|
|
211
|
+
/**
|
|
212
|
+
* Default page readiness timeout (2 seconds)
|
|
213
|
+
* Maximum time to wait for page to be ready before proceeding
|
|
214
|
+
* Uses adaptive detection for load, network stability, and DOM stability
|
|
215
|
+
*/
|
|
216
|
+
export const DEFAULT_PAGE_READINESS_TIMEOUT_MS = 2000;
|
|
217
|
+
// ============================================================================
|
|
218
|
+
// IPC CONFIGURATION
|
|
219
|
+
// ============================================================================
|
|
220
|
+
/**
|
|
221
|
+
* IPC request timeout in milliseconds (45 seconds in production, 5 seconds in tests)
|
|
222
|
+
* Maximum time to wait for IPC responses from daemon
|
|
223
|
+
* Must accommodate: Chrome launch (~2s) + Page readiness detection (up to 30s) + buffer (~13s)
|
|
224
|
+
*
|
|
225
|
+
* Can be overridden via BDG_IPC_TIMEOUT_MS environment variable (used by tests)
|
|
226
|
+
*
|
|
227
|
+
* @returns IPC request timeout in milliseconds
|
|
228
|
+
* @see docs/IMPROVEMENTS_ANALYSIS.md - Issue #3: Smart Page Readiness Detection
|
|
229
|
+
*/
|
|
230
|
+
export function getIPCRequestTimeout() {
|
|
231
|
+
return process.env['BDG_IPC_TIMEOUT_MS'] !== undefined
|
|
232
|
+
? parseInt(process.env['BDG_IPC_TIMEOUT_MS'], 10)
|
|
233
|
+
: 45000;
|
|
234
|
+
}
|
|
207
235
|
// ============================================================================
|
|
208
236
|
// CLI OPTION DESCRIPTIONS
|
|
209
237
|
// ============================================================================
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,gBAAgB;IAChB,4BAA4B;IAC5B,uCAAuC;IACvC,kCAAkC,EAAE,yDAAyD;IAC7F,oBAAoB,EAAE,iDAAiD;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ import * as net from 'node:net';
|
|
|
25
25
|
import * as os from 'node:os';
|
|
26
26
|
import * as path from 'node:path';
|
|
27
27
|
import { afterEach, beforeEach, describe, it } from 'node:test';
|
|
28
|
-
import { IPCServer } from '
|
|
28
|
+
import { IPCServer } from '../../daemon/ipcServer.js';
|
|
29
29
|
import { getSessionFilePath } from '../../session/paths.js';
|
|
30
30
|
/**
|
|
31
31
|
* Mock client for sending/receiving JSONL messages via Unix socket.
|
|
@@ -76,6 +76,15 @@ class MockIPCClient {
|
|
|
76
76
|
}
|
|
77
77
|
this.socket.write(JSON.stringify(message) + '\n');
|
|
78
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Write raw data to socket (for testing fragmentation)
|
|
81
|
+
*/
|
|
82
|
+
writeRaw(data) {
|
|
83
|
+
if (!this.socket) {
|
|
84
|
+
throw new Error('Not connected');
|
|
85
|
+
}
|
|
86
|
+
this.socket.write(data);
|
|
87
|
+
}
|
|
79
88
|
/**
|
|
80
89
|
* Wait for next response (with timeout)
|
|
81
90
|
*/
|
|
@@ -87,7 +96,11 @@ class MockIPCClient {
|
|
|
87
96
|
}
|
|
88
97
|
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
89
98
|
}
|
|
90
|
-
|
|
99
|
+
const response = this.responses.shift();
|
|
100
|
+
if (!response) {
|
|
101
|
+
throw new Error('No response available');
|
|
102
|
+
}
|
|
103
|
+
return response;
|
|
91
104
|
}
|
|
92
105
|
/**
|
|
93
106
|
* Close socket
|
|
@@ -227,6 +240,7 @@ void describe('IPC Server Contract Tests', () => {
|
|
|
227
240
|
const responseStr = await client.waitForResponse();
|
|
228
241
|
const response = JSON.parse(responseStr);
|
|
229
242
|
assert.equal(response.status, 'ok');
|
|
243
|
+
assert.ok(response.data, 'Should have data field');
|
|
230
244
|
assert.ok(!response.data.sessionPid, 'Should not have session PID');
|
|
231
245
|
assert.ok(!response.data.sessionMetadata, 'Should not have session metadata');
|
|
232
246
|
});
|
|
@@ -243,11 +257,11 @@ void describe('IPC Server Contract Tests', () => {
|
|
|
243
257
|
const json = JSON.stringify(request) + '\n';
|
|
244
258
|
const mid = Math.floor(json.length / 2);
|
|
245
259
|
// Send first half
|
|
246
|
-
client
|
|
260
|
+
client.writeRaw(json.slice(0, mid));
|
|
247
261
|
// Wait a bit
|
|
248
262
|
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
249
263
|
// Send second half
|
|
250
|
-
client
|
|
264
|
+
client.writeRaw(json.slice(mid));
|
|
251
265
|
const responseStr = await client.waitForResponse();
|
|
252
266
|
const response = JSON.parse(responseStr);
|
|
253
267
|
assert.equal(response.sessionId, 'fragmented-test');
|
|
@@ -263,7 +277,7 @@ void describe('IPC Server Contract Tests', () => {
|
|
|
263
277
|
{ type: 'handshake_request', sessionId: 'batch-3' },
|
|
264
278
|
];
|
|
265
279
|
const batch = messages.map((m) => JSON.stringify(m)).join('\n') + '\n';
|
|
266
|
-
client
|
|
280
|
+
client.writeRaw(batch);
|
|
267
281
|
// Should receive 3 responses
|
|
268
282
|
const response1 = JSON.parse(await client.waitForResponse());
|
|
269
283
|
const response2 = JSON.parse(await client.waitForResponse());
|
|
@@ -282,7 +296,7 @@ void describe('IPC Server Contract Tests', () => {
|
|
|
282
296
|
sessionId: 'empty-lines-test',
|
|
283
297
|
}) +
|
|
284
298
|
'\n\n';
|
|
285
|
-
client
|
|
299
|
+
client.writeRaw(json);
|
|
286
300
|
const responseStr = await client.waitForResponse();
|
|
287
301
|
const response = JSON.parse(responseStr);
|
|
288
302
|
assert.equal(response.sessionId, 'empty-lines-test');
|
|
@@ -294,7 +308,7 @@ void describe('IPC Server Contract Tests', () => {
|
|
|
294
308
|
const socketPath = getSessionFilePath('DAEMON_SOCKET');
|
|
295
309
|
await client.connect(socketPath);
|
|
296
310
|
// Send invalid JSON
|
|
297
|
-
client
|
|
311
|
+
client.writeRaw('{ invalid json }\n');
|
|
298
312
|
// Wait a bit to ensure server processes it
|
|
299
313
|
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
300
314
|
// Server should still accept valid messages after error
|
|
@@ -340,15 +354,15 @@ void describe('IPC Server Contract Tests', () => {
|
|
|
340
354
|
const clients = [new MockIPCClient(), new MockIPCClient(), new MockIPCClient()];
|
|
341
355
|
await Promise.all(clients.map((c) => c.connect(socketPath)));
|
|
342
356
|
// Send different handshakes from each client
|
|
343
|
-
for (
|
|
344
|
-
|
|
357
|
+
for (const [i, client] of clients.entries()) {
|
|
358
|
+
client.send({
|
|
345
359
|
type: 'handshake_request',
|
|
346
360
|
sessionId: `concurrent-${i}`,
|
|
347
361
|
});
|
|
348
362
|
}
|
|
349
363
|
// Each client should receive correct response
|
|
350
|
-
for (
|
|
351
|
-
const responseStr = await
|
|
364
|
+
for (const [i, client] of clients.entries()) {
|
|
365
|
+
const responseStr = await client.waitForResponse();
|
|
352
366
|
const response = JSON.parse(responseStr);
|
|
353
367
|
assert.equal(response.sessionId, `concurrent-${i}`);
|
|
354
368
|
assert.equal(response.status, 'ok');
|