browser-debugger-cli 0.1.0-alpha.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -68
- package/dist/__testfixtures__/cdpMessages.d.ts +1 -1
- package/dist/__testfixtures__/connectionTargets.d.ts +1 -1
- 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 +467 -0
- package/dist/commands/__tests__/cdp.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 +129 -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 +257 -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 +52 -0
- package/dist/commands/domEvalHelpers.d.ts.map +1 -0
- package/dist/commands/domEvalHelpers.js +76 -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 +43 -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 +114 -0
- package/dist/commands/peek.js.map +1 -0
- package/dist/commands/shared/CommandRunner.d.ts +60 -0
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -0
- package/dist/commands/shared/CommandRunner.js +81 -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 +64 -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 +55 -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 +87 -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 +150 -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.js +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 +72 -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 +12 -11
- package/dist/daemon/startSession.js.map +1 -1
- package/dist/daemon/worker.d.ts +1 -1
- package/dist/daemon/worker.js +97 -41
- 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 +4 -4
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +10 -6
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/commands.d.ts +33 -1
- package/dist/ipc/commands.d.ts.map +1 -1
- package/dist/ipc/commands.js +4 -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 +1 -1
- 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 +48 -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 +63 -0
- package/dist/ui/formatters/details.js.map +1 -0
- package/dist/ui/formatters/index.d.ts +10 -0
- package/dist/ui/formatters/index.d.ts.map +1 -0
- package/dist/ui/formatters/index.js +10 -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 +177 -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 +197 -0
- package/dist/ui/formatting.d.ts.map +1 -0
- package/dist/ui/formatting.js +318 -0
- package/dist/ui/formatting.js.map +1 -0
- package/dist/ui/messages/chrome.d.ts +102 -0
- package/dist/ui/messages/chrome.d.ts.map +1 -0
- package/dist/ui/messages/chrome.js +162 -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 +180 -0
- package/dist/ui/messages/debug.d.ts.map +1 -0
- package/dist/ui/messages/debug.js +241 -0
- package/dist/ui/messages/debug.js.map +1 -0
- package/dist/ui/messages/errors.d.ts +80 -0
- package/dist/ui/messages/errors.d.ts.map +1 -0
- package/dist/ui/messages/errors.js +122 -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 +27 -0
- package/dist/ui/messages/preview.d.ts.map +1 -0
- package/dist/ui/messages/preview.js +45 -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 +20 -0
- package/dist/ui/messages/validation.d.ts.map +1 -0
- package/dist/ui/messages/validation.js +22 -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/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 +51 -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 +6 -24
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +6 -67
- package/dist/utils/url.js.map +1 -1
- package/package.json +2 -2
- 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,87 @@
|
|
|
1
|
+
import { MAX_CONSOLE_MESSAGES } from '../constants.js';
|
|
2
|
+
import { CDPHandlerRegistry } from '../utils/cdpHandlers.js';
|
|
3
|
+
import { shouldExcludeConsoleMessage } from '../utils/filters.js';
|
|
4
|
+
/**
|
|
5
|
+
* Start collecting console messages and exceptions via CDP Runtime domain.
|
|
6
|
+
*
|
|
7
|
+
* Captures console.log, console.error, etc. and JavaScript exceptions thrown in the page.
|
|
8
|
+
*
|
|
9
|
+
* @param cdp - CDP connection instance
|
|
10
|
+
* @param messages - Array to populate with console messages
|
|
11
|
+
* @param includeAll - If true, disable default pattern filtering (default: false)
|
|
12
|
+
* @returns Cleanup function to remove event handlers
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* - Message limit of 10,000 prevents memory issues in long-running sessions
|
|
16
|
+
* - After limit is reached, new messages are silently dropped (warning logged once)
|
|
17
|
+
* - By default, common dev server noise patterns are filtered out (use includeAll to disable)
|
|
18
|
+
*/
|
|
19
|
+
export async function startConsoleCollection(cdp, messages, includeAll = false) {
|
|
20
|
+
const registry = new CDPHandlerRegistry();
|
|
21
|
+
// Enable runtime
|
|
22
|
+
await cdp.send('Runtime.enable');
|
|
23
|
+
await cdp.send('Log.enable');
|
|
24
|
+
// Listen for console API calls
|
|
25
|
+
registry.register(cdp, 'Runtime.consoleAPICalled', (params) => {
|
|
26
|
+
const text = params.args
|
|
27
|
+
.map((arg) => {
|
|
28
|
+
// arg type already defined in CDPConsoleAPICalledParams
|
|
29
|
+
if (arg.value !== undefined) {
|
|
30
|
+
// Handle different value types - primitives only, objects use description
|
|
31
|
+
const value = arg.value;
|
|
32
|
+
if (typeof value === 'string' ||
|
|
33
|
+
typeof value === 'number' ||
|
|
34
|
+
typeof value === 'boolean') {
|
|
35
|
+
return String(value);
|
|
36
|
+
}
|
|
37
|
+
// For objects/arrays, use description if available
|
|
38
|
+
return arg.description ?? '[object]';
|
|
39
|
+
}
|
|
40
|
+
if (arg.description !== undefined) {
|
|
41
|
+
return arg.description;
|
|
42
|
+
}
|
|
43
|
+
return '';
|
|
44
|
+
})
|
|
45
|
+
.join(' ');
|
|
46
|
+
// Apply pattern filtering
|
|
47
|
+
if (shouldExcludeConsoleMessage(text, params.type, includeAll)) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const message = {
|
|
51
|
+
type: params.type,
|
|
52
|
+
text,
|
|
53
|
+
timestamp: params.timestamp,
|
|
54
|
+
args: params.args,
|
|
55
|
+
};
|
|
56
|
+
if (messages.length < MAX_CONSOLE_MESSAGES) {
|
|
57
|
+
messages.push(message);
|
|
58
|
+
}
|
|
59
|
+
else if (messages.length === MAX_CONSOLE_MESSAGES) {
|
|
60
|
+
console.error(`Warning: Console message limit reached (${MAX_CONSOLE_MESSAGES})`);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
// Listen for exceptions
|
|
64
|
+
registry.register(cdp, 'Runtime.exceptionThrown', (params) => {
|
|
65
|
+
const exception = params.exceptionDetails;
|
|
66
|
+
const text = exception.text ?? exception.exception?.description ?? 'Unknown error';
|
|
67
|
+
// Apply pattern filtering (but don't filter errors by default)
|
|
68
|
+
// Errors are usually important, only filter if they match noise patterns
|
|
69
|
+
if (shouldExcludeConsoleMessage(text, 'error', includeAll)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const message = {
|
|
73
|
+
type: 'error',
|
|
74
|
+
text,
|
|
75
|
+
timestamp: exception.timestamp ?? Date.now(),
|
|
76
|
+
};
|
|
77
|
+
if (messages.length < MAX_CONSOLE_MESSAGES) {
|
|
78
|
+
messages.push(message);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// Return cleanup function
|
|
82
|
+
return () => {
|
|
83
|
+
// Remove event handlers
|
|
84
|
+
registry.cleanup(cdp);
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/telemetry/console.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CDPConnection } from '../connection/cdp.js';
|
|
2
|
+
import type { DOMData, CleanupFunction } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Prepare CDP domains for DOM collection.
|
|
5
|
+
*
|
|
6
|
+
* Enables Page, DOM, and Runtime domains required for capturing DOM snapshots.
|
|
7
|
+
*
|
|
8
|
+
* @param cdp - CDP connection instance
|
|
9
|
+
* @returns Cleanup function that disables Runtime domain
|
|
10
|
+
*/
|
|
11
|
+
export declare function prepareDOMCollection(cdp: CDPConnection): Promise<CleanupFunction>;
|
|
12
|
+
/**
|
|
13
|
+
* Capture a complete DOM snapshot of the current page.
|
|
14
|
+
*
|
|
15
|
+
* Called during session shutdown to get the final state of the page.
|
|
16
|
+
*
|
|
17
|
+
* @param cdp - CDP connection instance
|
|
18
|
+
* @returns DOM data including URL, title, and full HTML
|
|
19
|
+
*/
|
|
20
|
+
export declare function collectDOM(cdp: CDPConnection): Promise<DOMData>;
|
|
21
|
+
//# sourceMappingURL=dom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/telemetry/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,OAAO,EACP,eAAe,EAKhB,MAAM,SAAS,CAAC;AAEjB;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAsBvF;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAoFrE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prepare CDP domains for DOM collection.
|
|
3
|
+
*
|
|
4
|
+
* Enables Page, DOM, and Runtime domains required for capturing DOM snapshots.
|
|
5
|
+
*
|
|
6
|
+
* @param cdp - CDP connection instance
|
|
7
|
+
* @returns Cleanup function that disables Runtime domain
|
|
8
|
+
*/
|
|
9
|
+
export async function prepareDOMCollection(cdp) {
|
|
10
|
+
// Enable Page domain for frame tree
|
|
11
|
+
await cdp.send('Page.enable');
|
|
12
|
+
// Enable DOM domain for document access
|
|
13
|
+
await cdp.send('DOM.enable');
|
|
14
|
+
// Enable Runtime domain for document.title evaluation
|
|
15
|
+
await cdp.send('Runtime.enable');
|
|
16
|
+
// Return cleanup function that disables Runtime domain
|
|
17
|
+
return () => {
|
|
18
|
+
// Disable Runtime domain to clean up resources
|
|
19
|
+
// Note: This is best-effort during shutdown; errors are ignored
|
|
20
|
+
try {
|
|
21
|
+
cdp.send('Runtime.disable').catch(() => {
|
|
22
|
+
// Ignore errors during cleanup (Chrome may be closing)
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Ignore synchronous errors
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Capture a complete DOM snapshot of the current page.
|
|
32
|
+
*
|
|
33
|
+
* Called during session shutdown to get the final state of the page.
|
|
34
|
+
*
|
|
35
|
+
* @param cdp - CDP connection instance
|
|
36
|
+
* @returns DOM data including URL, title, and full HTML
|
|
37
|
+
*/
|
|
38
|
+
export async function collectDOM(cdp) {
|
|
39
|
+
const domCaptureStart = Date.now();
|
|
40
|
+
try {
|
|
41
|
+
// Add a timeout wrapper to prevent hanging
|
|
42
|
+
const timeout = 5000; // 5 seconds should be plenty for DOM capture
|
|
43
|
+
const captureWithTimeout = async (promise, label) => {
|
|
44
|
+
return Promise.race([
|
|
45
|
+
promise,
|
|
46
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`${label} timed out after ${timeout}ms`)), timeout)),
|
|
47
|
+
]);
|
|
48
|
+
};
|
|
49
|
+
// Get document
|
|
50
|
+
console.error('Getting document...');
|
|
51
|
+
const docStart = Date.now();
|
|
52
|
+
const documentResponse = await captureWithTimeout(cdp.send('DOM.getDocument', { depth: -1 }), 'DOM.getDocument');
|
|
53
|
+
const root = documentResponse.root;
|
|
54
|
+
console.error(`[PERF] DOM.getDocument: ${Date.now() - docStart}ms (nodeId: ${root.nodeId})`);
|
|
55
|
+
// Get outer HTML
|
|
56
|
+
console.error('Getting outer HTML...');
|
|
57
|
+
const htmlStart = Date.now();
|
|
58
|
+
const htmlResponse = await captureWithTimeout(cdp.send('DOM.getOuterHTML', { nodeId: root.nodeId }), 'DOM.getOuterHTML');
|
|
59
|
+
const outerHTML = htmlResponse.outerHTML;
|
|
60
|
+
console.error(`[PERF] DOM.getOuterHTML: ${Date.now() - htmlStart}ms (${outerHTML.length} chars)`);
|
|
61
|
+
// Get page info
|
|
62
|
+
console.error('Getting page info...');
|
|
63
|
+
const frameStart = Date.now();
|
|
64
|
+
const frameTreeResponse = await captureWithTimeout(cdp.send('Page.getFrameTree'), 'Page.getFrameTree');
|
|
65
|
+
const frame = frameTreeResponse.frameTree.frame;
|
|
66
|
+
console.error(`[PERF] Page.getFrameTree: ${Date.now() - frameStart}ms (url: ${frame.url})`);
|
|
67
|
+
// Get real document title using Runtime.evaluate
|
|
68
|
+
console.error('Getting document title...');
|
|
69
|
+
let title = 'Untitled';
|
|
70
|
+
try {
|
|
71
|
+
const titleStart = Date.now();
|
|
72
|
+
const titleResult = await captureWithTimeout(cdp.send('Runtime.evaluate', {
|
|
73
|
+
expression: 'document.title',
|
|
74
|
+
returnByValue: true,
|
|
75
|
+
}), 'Runtime.evaluate (document.title)');
|
|
76
|
+
if (titleResult.result.value !== undefined && typeof titleResult.result.value === 'string') {
|
|
77
|
+
title = titleResult.result.value;
|
|
78
|
+
}
|
|
79
|
+
console.error(`[PERF] Runtime.evaluate (title): ${Date.now() - titleStart}ms`);
|
|
80
|
+
}
|
|
81
|
+
catch (titleError) {
|
|
82
|
+
console.error('Failed to get document title, using fallback:', titleError);
|
|
83
|
+
}
|
|
84
|
+
console.error(`Got document title: ${title}`);
|
|
85
|
+
const url = frame.url;
|
|
86
|
+
const totalDuration = Date.now() - domCaptureStart;
|
|
87
|
+
console.error(`[PERF] Total DOM capture: ${totalDuration}ms`);
|
|
88
|
+
return {
|
|
89
|
+
url,
|
|
90
|
+
title,
|
|
91
|
+
outerHTML,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error('Error in collectDOM:', error);
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=dom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/telemetry/dom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { CDPConnection } from '../connection/cdp.js';
|
|
2
|
+
import type { NetworkRequest, CleanupFunction } from '../types';
|
|
3
|
+
export interface NetworkCollectionOptions {
|
|
4
|
+
includeAll?: boolean;
|
|
5
|
+
fetchAllBodies?: boolean;
|
|
6
|
+
fetchBodiesInclude?: string[];
|
|
7
|
+
fetchBodiesExclude?: string[];
|
|
8
|
+
networkInclude?: string[];
|
|
9
|
+
networkExclude?: string[];
|
|
10
|
+
maxBodySize?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Start collecting network requests via CDP Network domain.
|
|
14
|
+
*
|
|
15
|
+
* Tracks all HTTP requests and responses, including headers and bodies (for JSON/text responses).
|
|
16
|
+
* Implements automatic cleanup of stale requests to prevent memory leaks during long sessions.
|
|
17
|
+
*
|
|
18
|
+
* @param cdp - CDP connection instance
|
|
19
|
+
* @param requests - Array to populate with completed network requests
|
|
20
|
+
* @param options - Collection options
|
|
21
|
+
* @returns Cleanup function to remove event handlers and clear state
|
|
22
|
+
*
|
|
23
|
+
* @remarks
|
|
24
|
+
* - Chrome buffer limits: 50MB total, 10MB per resource, 1MB POST data (with fallback)
|
|
25
|
+
* - Stale requests (incomplete after 60s) are removed from tracking but NOT added to output
|
|
26
|
+
* - Request limit of 10,000 prevents memory issues in long-running sessions
|
|
27
|
+
* - Response bodies are automatically skipped for images, fonts, CSS, and source maps (see DEFAULT_SKIP_BODY_PATTERNS)
|
|
28
|
+
* - Response bodies larger than 5MB are skipped with a placeholder message
|
|
29
|
+
* - By default, common tracking/analytics domains are filtered out (use includeAll to disable)
|
|
30
|
+
* - Pattern precedence: include patterns always trump exclude patterns
|
|
31
|
+
*/
|
|
32
|
+
export declare function startNetworkCollection(cdp: CDPConnection, requests: NetworkRequest[], options?: NetworkCollectionOptions): Promise<CleanupFunction>;
|
|
33
|
+
//# sourceMappingURL=network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/telemetry/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUzD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAMhB,MAAM,SAAS,CAAC;AAIjB,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,eAAe,CAAC,CAwN1B"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { MAX_NETWORK_REQUESTS, STALE_REQUEST_TIMEOUT, STALE_REQUEST_CLEANUP_INTERVAL, MAX_RESPONSE_SIZE, CHROME_NETWORK_BUFFER_TOTAL, CHROME_NETWORK_BUFFER_PER_RESOURCE, CHROME_POST_DATA_LIMIT, } from '../constants.js';
|
|
2
|
+
import { CDPHandlerRegistry } from '../utils/cdpHandlers.js';
|
|
3
|
+
import { shouldExcludeDomain, shouldExcludeUrl, shouldFetchBody } from '../utils/filters.js';
|
|
4
|
+
/**
|
|
5
|
+
* Start collecting network requests via CDP Network domain.
|
|
6
|
+
*
|
|
7
|
+
* Tracks all HTTP requests and responses, including headers and bodies (for JSON/text responses).
|
|
8
|
+
* Implements automatic cleanup of stale requests to prevent memory leaks during long sessions.
|
|
9
|
+
*
|
|
10
|
+
* @param cdp - CDP connection instance
|
|
11
|
+
* @param requests - Array to populate with completed network requests
|
|
12
|
+
* @param options - Collection options
|
|
13
|
+
* @returns Cleanup function to remove event handlers and clear state
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* - Chrome buffer limits: 50MB total, 10MB per resource, 1MB POST data (with fallback)
|
|
17
|
+
* - Stale requests (incomplete after 60s) are removed from tracking but NOT added to output
|
|
18
|
+
* - Request limit of 10,000 prevents memory issues in long-running sessions
|
|
19
|
+
* - Response bodies are automatically skipped for images, fonts, CSS, and source maps (see DEFAULT_SKIP_BODY_PATTERNS)
|
|
20
|
+
* - Response bodies larger than 5MB are skipped with a placeholder message
|
|
21
|
+
* - By default, common tracking/analytics domains are filtered out (use includeAll to disable)
|
|
22
|
+
* - Pattern precedence: include patterns always trump exclude patterns
|
|
23
|
+
*/
|
|
24
|
+
export async function startNetworkCollection(cdp, requests, options = {}) {
|
|
25
|
+
const { includeAll = false, fetchAllBodies = false, fetchBodiesInclude = [], fetchBodiesExclude = [], networkInclude = [], networkExclude = [], maxBodySize = MAX_RESPONSE_SIZE, } = options;
|
|
26
|
+
const requestMap = new Map();
|
|
27
|
+
const registry = new CDPHandlerRegistry();
|
|
28
|
+
// Counters for PERF logging
|
|
29
|
+
let bodiesFetched = 0;
|
|
30
|
+
let bodiesSkipped = 0;
|
|
31
|
+
// Enable network tracking with buffer limits (if supported)
|
|
32
|
+
// These parameters are optional and experimental, but widely supported in Chrome 58+
|
|
33
|
+
// See docs/chrome-cdp-compatibility.md for details
|
|
34
|
+
try {
|
|
35
|
+
await cdp.send('Network.enable', {
|
|
36
|
+
maxTotalBufferSize: CHROME_NETWORK_BUFFER_TOTAL,
|
|
37
|
+
maxResourceBufferSize: CHROME_NETWORK_BUFFER_PER_RESOURCE,
|
|
38
|
+
maxPostDataSize: CHROME_POST_DATA_LIMIT,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Fallback to basic Network.enable if buffer parameters not supported
|
|
43
|
+
console.error('Network buffer limits not supported, using default settings');
|
|
44
|
+
await cdp.send('Network.enable');
|
|
45
|
+
}
|
|
46
|
+
// Periodic cleanup of stale requests (see JSDoc @remarks for behavior)
|
|
47
|
+
const cleanupInterval = setInterval(() => {
|
|
48
|
+
const now = Date.now();
|
|
49
|
+
const staleRequests = [];
|
|
50
|
+
requestMap.forEach((value, requestId) => {
|
|
51
|
+
if (now - value.timestamp > STALE_REQUEST_TIMEOUT) {
|
|
52
|
+
staleRequests.push(requestId);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
if (staleRequests.length > 0) {
|
|
56
|
+
console.error(`Cleaning up ${staleRequests.length} stale network requests`);
|
|
57
|
+
staleRequests.forEach((requestId) => requestMap.delete(requestId));
|
|
58
|
+
}
|
|
59
|
+
}, STALE_REQUEST_CLEANUP_INTERVAL);
|
|
60
|
+
// Listen for requests
|
|
61
|
+
registry.register(cdp, 'Network.requestWillBeSent', (params) => {
|
|
62
|
+
if (requestMap.size >= MAX_NETWORK_REQUESTS) {
|
|
63
|
+
console.error(`Warning: Network request limit reached (${MAX_NETWORK_REQUESTS}), dropping new requests`);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const request = {
|
|
67
|
+
requestId: params.requestId,
|
|
68
|
+
url: params.request.url,
|
|
69
|
+
method: params.request.method,
|
|
70
|
+
timestamp: Date.now(), // Use actual timestamp, not CDP monotonic time
|
|
71
|
+
requestHeaders: params.request.headers,
|
|
72
|
+
requestBody: params.request.postData,
|
|
73
|
+
};
|
|
74
|
+
requestMap.set(params.requestId, {
|
|
75
|
+
request,
|
|
76
|
+
timestamp: Date.now(),
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
// Listen for responses
|
|
80
|
+
registry.register(cdp, 'Network.responseReceived', (params) => {
|
|
81
|
+
const entry = requestMap.get(params.requestId);
|
|
82
|
+
if (entry) {
|
|
83
|
+
entry.request.status = params.response.status;
|
|
84
|
+
entry.request.mimeType = params.response.mimeType;
|
|
85
|
+
entry.request.responseHeaders = params.response.headers;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Listen for finished requests
|
|
89
|
+
registry.register(cdp, 'Network.loadingFinished', (params) => {
|
|
90
|
+
const entry = requestMap.get(params.requestId);
|
|
91
|
+
if (entry && requests.length < MAX_NETWORK_REQUESTS) {
|
|
92
|
+
const request = entry.request;
|
|
93
|
+
// Apply domain filtering
|
|
94
|
+
if (shouldExcludeDomain(request.url, includeAll)) {
|
|
95
|
+
requestMap.delete(params.requestId);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Apply URL pattern filtering
|
|
99
|
+
if (shouldExcludeUrl(request.url, {
|
|
100
|
+
includePatterns: networkInclude,
|
|
101
|
+
excludePatterns: networkExclude,
|
|
102
|
+
})) {
|
|
103
|
+
requestMap.delete(params.requestId);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// Determine if we should fetch the response body
|
|
107
|
+
const isSizeAcceptable = params.encodedDataLength <= maxBodySize;
|
|
108
|
+
const isTextResponse = (request.mimeType?.includes('json') ?? false) ||
|
|
109
|
+
(request.mimeType?.includes('javascript') ?? false) ||
|
|
110
|
+
(request.mimeType?.includes('text') ?? false) ||
|
|
111
|
+
(request.mimeType?.includes('html') ?? false);
|
|
112
|
+
if (isTextResponse && isSizeAcceptable) {
|
|
113
|
+
// Check if we should fetch body based on patterns
|
|
114
|
+
const shouldFetch = shouldFetchBody(request.url, request.mimeType, {
|
|
115
|
+
fetchAllBodies,
|
|
116
|
+
includePatterns: fetchBodiesInclude,
|
|
117
|
+
excludePatterns: fetchBodiesExclude,
|
|
118
|
+
});
|
|
119
|
+
if (shouldFetch) {
|
|
120
|
+
bodiesFetched++;
|
|
121
|
+
// Fetch response body asynchronously
|
|
122
|
+
void cdp
|
|
123
|
+
.send('Network.getResponseBody', { requestId: params.requestId })
|
|
124
|
+
.then((response) => {
|
|
125
|
+
const typedResponse = response;
|
|
126
|
+
request.responseBody = typedResponse.body;
|
|
127
|
+
})
|
|
128
|
+
.catch(() => {
|
|
129
|
+
// Response body not available (e.g., 204 No Content, redirects, etc.)
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
bodiesSkipped++;
|
|
134
|
+
request.responseBody = '[SKIPPED: Auto-optimization (see DEFAULT_SKIP_BODY_PATTERNS)]';
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else if (isTextResponse && !isSizeAcceptable) {
|
|
138
|
+
bodiesSkipped++;
|
|
139
|
+
// Mark large responses as skipped
|
|
140
|
+
request.responseBody = `[SKIPPED: Response too large (${(params.encodedDataLength / 1024 / 1024).toFixed(2)}MB > ${maxBodySize / 1024 / 1024}MB)]`;
|
|
141
|
+
}
|
|
142
|
+
requests.push(request);
|
|
143
|
+
requestMap.delete(params.requestId);
|
|
144
|
+
}
|
|
145
|
+
else if (requests.length >= MAX_NETWORK_REQUESTS) {
|
|
146
|
+
console.error(`Warning: Network request limit reached (${MAX_NETWORK_REQUESTS})`);
|
|
147
|
+
requestMap.delete(params.requestId);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
// Listen for failed requests
|
|
151
|
+
registry.register(cdp, 'Network.loadingFailed', (params) => {
|
|
152
|
+
const entry = requestMap.get(params.requestId);
|
|
153
|
+
if (entry && requests.length < MAX_NETWORK_REQUESTS) {
|
|
154
|
+
// Apply domain filtering
|
|
155
|
+
if (shouldExcludeDomain(entry.request.url, includeAll)) {
|
|
156
|
+
requestMap.delete(params.requestId);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
// Apply URL pattern filtering
|
|
160
|
+
if (shouldExcludeUrl(entry.request.url, {
|
|
161
|
+
includePatterns: networkInclude,
|
|
162
|
+
excludePatterns: networkExclude,
|
|
163
|
+
})) {
|
|
164
|
+
requestMap.delete(params.requestId);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
entry.request.status = 0; // Indicate failure
|
|
168
|
+
requests.push(entry.request);
|
|
169
|
+
requestMap.delete(params.requestId);
|
|
170
|
+
}
|
|
171
|
+
else if (requests.length >= MAX_NETWORK_REQUESTS) {
|
|
172
|
+
requestMap.delete(params.requestId);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
// Return cleanup function
|
|
176
|
+
return () => {
|
|
177
|
+
// Log PERF metrics
|
|
178
|
+
const totalBodyDecisions = bodiesFetched + bodiesSkipped;
|
|
179
|
+
if (totalBodyDecisions > 0) {
|
|
180
|
+
const percentageSkipped = ((bodiesSkipped / totalBodyDecisions) * 100).toFixed(1);
|
|
181
|
+
console.error(`[PERF] Network bodies: ${bodiesFetched} fetched, ${bodiesSkipped} skipped (${percentageSkipped}% reduction)`);
|
|
182
|
+
}
|
|
183
|
+
// Clear interval
|
|
184
|
+
clearInterval(cleanupInterval);
|
|
185
|
+
// Remove event handlers
|
|
186
|
+
registry.cleanup(cdp);
|
|
187
|
+
// Clear request map
|
|
188
|
+
requestMap.clear();
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/telemetry/network.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -57,7 +57,7 @@ export interface BdgOutput {
|
|
|
57
57
|
error?: string;
|
|
58
58
|
partial?: boolean;
|
|
59
59
|
}
|
|
60
|
-
export type
|
|
60
|
+
export type TelemetryType = 'dom' | 'network' | 'console';
|
|
61
61
|
export type CDPResourceType = 'Document' | 'Stylesheet' | 'Image' | 'Media' | 'Font' | 'Script' | 'TextTrack' | 'XHR' | 'Fetch' | 'Prefetch' | 'EventSource' | 'WebSocket' | 'Manifest' | 'SignedExchange' | 'Ping' | 'CSPViolationReport' | 'Preflight' | 'FedCM' | 'Other';
|
|
62
62
|
export type CDPMonotonicTime = number;
|
|
63
63
|
export type CDPTimeSinceEpoch = number;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cookie formatter for human-readable output.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* CDP Cookie type
|
|
6
|
+
*/
|
|
7
|
+
export interface Cookie {
|
|
8
|
+
name: string;
|
|
9
|
+
value: string;
|
|
10
|
+
domain: string;
|
|
11
|
+
path: string;
|
|
12
|
+
expires?: number;
|
|
13
|
+
httpOnly: boolean;
|
|
14
|
+
secure: boolean;
|
|
15
|
+
sameSite?: 'Strict' | 'Lax' | 'None';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Format cookies for human-readable output.
|
|
19
|
+
*
|
|
20
|
+
* @param cookies - Array of CDP cookies
|
|
21
|
+
* @returns Formatted cookie list
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const output = formatCookies([
|
|
26
|
+
* { name: 'session', value: 'abc123', domain: '.example.com', ... }
|
|
27
|
+
* ]);
|
|
28
|
+
* console.log(output);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function formatCookies(cookies: Cookie[]): string;
|
|
32
|
+
//# sourceMappingURL=cookies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../../src/ui/formatters/cookies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CACtC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAkCvD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cookie formatter for human-readable output.
|
|
3
|
+
*/
|
|
4
|
+
import { pluralize } from '../../ui/formatting.js';
|
|
5
|
+
/**
|
|
6
|
+
* Format cookies for human-readable output.
|
|
7
|
+
*
|
|
8
|
+
* @param cookies - Array of CDP cookies
|
|
9
|
+
* @returns Formatted cookie list
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const output = formatCookies([
|
|
14
|
+
* { name: 'session', value: 'abc123', domain: '.example.com', ... }
|
|
15
|
+
* ]);
|
|
16
|
+
* console.log(output);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function formatCookies(cookies) {
|
|
20
|
+
if (cookies.length === 0) {
|
|
21
|
+
return 'No cookies found';
|
|
22
|
+
}
|
|
23
|
+
const lines = [];
|
|
24
|
+
lines.push(`${pluralize(cookies.length, 'Cookie', 'Cookies')}:\n`);
|
|
25
|
+
cookies.forEach((cookie, index) => {
|
|
26
|
+
const cookieLines = [];
|
|
27
|
+
cookieLines.push(`[${index + 1}] ${cookie.name}`);
|
|
28
|
+
cookieLines.push(` Value: ${cookie.value}`);
|
|
29
|
+
cookieLines.push(` Domain: ${cookie.domain}`);
|
|
30
|
+
cookieLines.push(` Path: ${cookie.path}`);
|
|
31
|
+
if (cookie.expires && cookie.expires !== -1) {
|
|
32
|
+
const expiresDate = new Date(cookie.expires * 1000);
|
|
33
|
+
cookieLines.push(` Expires: ${expiresDate.toISOString()}`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
cookieLines.push(` Expires: Session`);
|
|
37
|
+
}
|
|
38
|
+
cookieLines.push(` HttpOnly: ${cookie.httpOnly ? 'Yes' : 'No'}`);
|
|
39
|
+
cookieLines.push(` Secure: ${cookie.secure ? 'Yes' : 'No'}`);
|
|
40
|
+
cookieLines.push(` SameSite: ${cookie.sameSite ?? 'None'}`);
|
|
41
|
+
lines.push(cookieLines.join('\n'));
|
|
42
|
+
if (index < cookies.length - 1) {
|
|
43
|
+
lines.push('');
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return lines.join('\n');
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=cookies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../../src/ui/formatters/cookies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAgB/C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,OAAiB;IAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAEnE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,WAAW,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,WAAW,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,WAAW,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAE3C,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;YACpD,WAAW,CAAC,IAAI,CAAC,cAAc,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACzC,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,WAAW,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,WAAW,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;QAE7D,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnC,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { NetworkRequest, ConsoleMessage } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Format network request details for human-readable output
|
|
4
|
+
*/
|
|
5
|
+
export declare function formatNetworkDetails(request: NetworkRequest): string;
|
|
6
|
+
/**
|
|
7
|
+
* Format console message details for human-readable output
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatConsoleDetails(message: ConsoleMessage): string;
|
|
10
|
+
//# sourceMappingURL=details.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"details.d.ts","sourceRoot":"","sources":["../../../src/ui/formatters/details.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CA4CpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAmBpE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format network request details for human-readable output
|
|
3
|
+
*/
|
|
4
|
+
export function formatNetworkDetails(request) {
|
|
5
|
+
const lines = [];
|
|
6
|
+
lines.push('Network Request Details');
|
|
7
|
+
lines.push('━'.repeat(70));
|
|
8
|
+
lines.push(`Request ID: ${request.requestId}`);
|
|
9
|
+
lines.push(`URL: ${request.url}`);
|
|
10
|
+
lines.push(`Method: ${request.method}`);
|
|
11
|
+
lines.push(`Status: ${request.status ?? 'pending'}`);
|
|
12
|
+
lines.push(`MIME Type: ${request.mimeType ?? 'N/A'}`);
|
|
13
|
+
lines.push('');
|
|
14
|
+
if (request.requestHeaders) {
|
|
15
|
+
lines.push('Request Headers:');
|
|
16
|
+
lines.push('━'.repeat(70));
|
|
17
|
+
Object.entries(request.requestHeaders).forEach(([key, value]) => {
|
|
18
|
+
lines.push(` ${key}: ${value}`);
|
|
19
|
+
});
|
|
20
|
+
lines.push('');
|
|
21
|
+
}
|
|
22
|
+
if (request.requestBody) {
|
|
23
|
+
lines.push('Request Body:');
|
|
24
|
+
lines.push('━'.repeat(70));
|
|
25
|
+
lines.push(request.requestBody);
|
|
26
|
+
lines.push('');
|
|
27
|
+
}
|
|
28
|
+
if (request.responseHeaders) {
|
|
29
|
+
lines.push('Response Headers:');
|
|
30
|
+
lines.push('━'.repeat(70));
|
|
31
|
+
Object.entries(request.responseHeaders).forEach(([key, value]) => {
|
|
32
|
+
lines.push(` ${key}: ${value}`);
|
|
33
|
+
});
|
|
34
|
+
lines.push('');
|
|
35
|
+
}
|
|
36
|
+
if (request.responseBody) {
|
|
37
|
+
lines.push('Response Body:');
|
|
38
|
+
lines.push('━'.repeat(70));
|
|
39
|
+
lines.push(request.responseBody);
|
|
40
|
+
}
|
|
41
|
+
return lines.join('\n');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Format console message details for human-readable output
|
|
45
|
+
*/
|
|
46
|
+
export function formatConsoleDetails(message) {
|
|
47
|
+
const lines = [];
|
|
48
|
+
lines.push('Console Message Details');
|
|
49
|
+
lines.push('━'.repeat(70));
|
|
50
|
+
lines.push(`Type: ${message.type}`);
|
|
51
|
+
lines.push(`Timestamp: ${new Date(message.timestamp).toISOString()}`);
|
|
52
|
+
lines.push(`Text: ${message.text}`);
|
|
53
|
+
lines.push('');
|
|
54
|
+
if (message.args && message.args.length > 0) {
|
|
55
|
+
lines.push('Arguments:');
|
|
56
|
+
lines.push('━'.repeat(70));
|
|
57
|
+
message.args.forEach((arg, idx) => {
|
|
58
|
+
lines.push(` [${idx}]: ${JSON.stringify(arg, null, 2)}`);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return lines.join('\n');
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=details.js.map
|