browser-debugger-cli 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -6
- package/dist/__tests__/smoke/error-handling.smoke.test.js +14 -48
- package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -1
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.js +1 -1
- package/dist/__tests__/smoke/session-lifecycle.smoke.test.js.map +1 -1
- package/dist/__testutils__/testCleanup.js +1 -1
- package/dist/__testutils__/testCleanup.js.map +1 -1
- package/dist/cdp/protocol.d.ts +0 -48
- package/dist/cdp/protocol.d.ts.map +1 -1
- package/dist/cdp/protocol.js +0 -94
- package/dist/cdp/protocol.js.map +1 -1
- package/dist/commands/__tests__/cdp.contract.test.js +2 -2
- package/dist/commands/__tests__/cdp.contract.test.js.map +1 -1
- package/dist/commands/__tests__/domEval.contract.test.js +8 -4
- package/dist/commands/__tests__/domEval.contract.test.js.map +1 -1
- package/dist/commands/cdp.d.ts.map +1 -1
- package/dist/commands/cdp.js +4 -37
- package/dist/commands/cdp.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +4 -17
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/console.d.ts.map +1 -1
- package/dist/commands/console.js +3 -8
- package/dist/commands/console.js.map +1 -1
- package/dist/commands/details.d.ts.map +1 -1
- package/dist/commands/details.js +1 -1
- package/dist/commands/details.js.map +1 -1
- package/dist/commands/{domEvalHelpers.d.ts → dom/evalHelpers.d.ts} +8 -5
- package/dist/commands/dom/evalHelpers.d.ts.map +1 -0
- package/dist/commands/{domEvalHelpers.js → dom/evalHelpers.js} +14 -13
- package/dist/commands/dom/evalHelpers.js.map +1 -0
- package/dist/commands/dom/formFillHelpers.d.ts +47 -0
- package/dist/commands/dom/formFillHelpers.d.ts.map +1 -0
- package/dist/commands/dom/formFillHelpers.js +185 -0
- package/dist/commands/dom/formFillHelpers.js.map +1 -0
- package/dist/commands/dom/formInteraction.d.ts +17 -0
- package/dist/commands/dom/formInteraction.d.ts.map +1 -0
- package/dist/commands/dom/formInteraction.js +239 -0
- package/dist/commands/dom/formInteraction.js.map +1 -0
- package/dist/commands/dom/formSubmitHelpers.d.ts +58 -0
- package/dist/commands/dom/formSubmitHelpers.d.ts.map +1 -0
- package/dist/commands/dom/formSubmitHelpers.js +176 -0
- package/dist/commands/dom/formSubmitHelpers.js.map +1 -0
- package/dist/commands/dom/helpers.d.ts +34 -0
- package/dist/commands/dom/helpers.d.ts.map +1 -0
- package/dist/commands/dom/helpers.js +244 -0
- package/dist/commands/dom/helpers.js.map +1 -0
- package/dist/commands/{dom.d.ts → dom/index.d.ts} +1 -1
- package/dist/commands/dom/index.d.ts.map +1 -0
- package/dist/commands/{dom.js → dom/index.js} +33 -123
- package/dist/commands/dom/index.js.map +1 -0
- package/dist/commands/dom/reactEventHelpers.d.ts +80 -0
- package/dist/commands/dom/reactEventHelpers.d.ts.map +1 -0
- package/dist/commands/dom/reactEventHelpers.js +274 -0
- package/dist/commands/dom/reactEventHelpers.js.map +1 -0
- package/dist/commands/network.js +1 -1
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/peek.d.ts.map +1 -1
- package/dist/commands/peek.js +47 -52
- package/dist/commands/peek.js.map +1 -1
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +3 -2
- package/dist/commands/shared/CommandRunner.js.map +1 -1
- package/dist/commands/shared/commonOptions.d.ts.map +1 -1
- package/dist/commands/shared/commonOptions.js +3 -1
- package/dist/commands/shared/commonOptions.js.map +1 -1
- package/dist/commands/shared/daemonErrorHandler.d.ts +30 -0
- package/dist/commands/shared/daemonErrorHandler.d.ts.map +1 -0
- package/dist/commands/shared/daemonErrorHandler.js +32 -0
- package/dist/commands/shared/daemonErrorHandler.js.map +1 -0
- package/dist/commands/shared/{daemonSessionController.d.ts → startHelpers.d.ts} +7 -1
- package/dist/commands/shared/startHelpers.d.ts.map +1 -0
- package/dist/commands/shared/{daemonSessionController.js → startHelpers.js} +13 -5
- package/dist/commands/shared/startHelpers.js.map +1 -0
- package/dist/commands/shared/validation.d.ts +44 -0
- package/dist/commands/shared/validation.d.ts.map +1 -0
- package/dist/commands/shared/validation.js +68 -0
- package/dist/commands/shared/validation.js.map +1 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +9 -25
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +6 -4
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +5 -16
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tail.d.ts.map +1 -1
- package/dist/commands/tail.js +49 -44
- package/dist/commands/tail.js.map +1 -1
- package/dist/commands/types.d.ts +43 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +8 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +3 -1
- package/dist/commands.js.map +1 -1
- package/dist/connection/__tests__/cdp.contract.test.js +7 -7
- package/dist/connection/__tests__/cdp.contract.test.js.map +1 -1
- package/dist/connection/__tests__/handlers.unit.test.d.ts +11 -0
- package/dist/connection/__tests__/handlers.unit.test.d.ts.map +1 -0
- package/dist/connection/__tests__/handlers.unit.test.js +220 -0
- package/dist/connection/__tests__/handlers.unit.test.js.map +1 -0
- package/dist/connection/__tests__/pageReadiness.contract.test.d.ts +14 -0
- package/dist/connection/__tests__/pageReadiness.contract.test.d.ts.map +1 -0
- package/dist/connection/__tests__/pageReadiness.contract.test.js +382 -0
- package/dist/connection/__tests__/pageReadiness.contract.test.js.map +1 -0
- package/dist/connection/__tests__/portReservation.contract.test.d.ts +14 -0
- package/dist/connection/__tests__/portReservation.contract.test.d.ts.map +1 -0
- package/dist/connection/__tests__/portReservation.contract.test.js +250 -0
- package/dist/connection/__tests__/portReservation.contract.test.js.map +1 -0
- package/dist/connection/cdp.d.ts +34 -11
- package/dist/connection/cdp.d.ts.map +1 -1
- package/dist/connection/cdp.js +61 -45
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/config.d.ts +63 -0
- package/dist/connection/config.d.ts.map +1 -0
- package/dist/connection/config.js +46 -0
- package/dist/connection/config.js.map +1 -0
- package/dist/connection/errors.d.ts +6 -21
- package/dist/connection/errors.d.ts.map +1 -1
- package/dist/connection/errors.js +7 -26
- package/dist/connection/errors.js.map +1 -1
- package/dist/connection/events.d.ts +30 -0
- package/dist/connection/events.d.ts.map +1 -0
- package/dist/connection/events.js +8 -0
- package/dist/connection/events.js.map +1 -0
- package/dist/connection/handlers.d.ts +3 -5
- package/dist/connection/handlers.d.ts.map +1 -1
- package/dist/connection/handlers.js +10 -12
- package/dist/connection/handlers.js.map +1 -1
- package/dist/connection/launcher/binaryResolver.d.ts +40 -0
- package/dist/connection/launcher/binaryResolver.d.ts.map +1 -0
- package/dist/connection/launcher/binaryResolver.js +78 -0
- package/dist/connection/launcher/binaryResolver.js.map +1 -0
- package/dist/connection/launcher/flagsBuilder.d.ts +64 -0
- package/dist/connection/launcher/flagsBuilder.d.ts.map +1 -0
- package/dist/connection/launcher/flagsBuilder.js +84 -0
- package/dist/connection/launcher/flagsBuilder.js.map +1 -0
- package/dist/connection/launcher/preferencesLoader.d.ts +74 -0
- package/dist/connection/launcher/preferencesLoader.d.ts.map +1 -0
- package/dist/connection/launcher/preferencesLoader.js +89 -0
- package/dist/connection/launcher/preferencesLoader.js.map +1 -0
- package/dist/connection/launcher.d.ts +24 -1
- package/dist/connection/launcher.d.ts.map +1 -1
- package/dist/connection/launcher.js +30 -205
- package/dist/connection/launcher.js.map +1 -1
- package/dist/connection/pageReadiness.d.ts +8 -8
- package/dist/connection/pageReadiness.d.ts.map +1 -1
- package/dist/connection/pageReadiness.js +36 -52
- package/dist/connection/pageReadiness.js.map +1 -1
- package/dist/connection/portReservation.d.ts +40 -0
- package/dist/connection/portReservation.d.ts.map +1 -0
- package/dist/connection/portReservation.js +55 -0
- package/dist/connection/portReservation.js.map +1 -0
- package/dist/connection/typed-cdp.d.ts +2 -1
- package/dist/connection/typed-cdp.d.ts.map +1 -1
- package/dist/connection/typed-cdp.js.map +1 -1
- package/dist/connection/types.d.ts +103 -0
- package/dist/connection/types.d.ts.map +1 -0
- package/dist/connection/types.js +8 -0
- package/dist/connection/types.js.map +1 -0
- package/dist/constants.d.ts +0 -83
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -83
- package/dist/constants.js.map +1 -1
- package/dist/daemon/__tests__/JsonlParser.unit.test.d.ts +8 -0
- package/dist/daemon/__tests__/JsonlParser.unit.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/JsonlParser.unit.test.js +140 -0
- package/dist/daemon/__tests__/JsonlParser.unit.test.js.map +1 -0
- package/dist/daemon/__tests__/PendingRequestManager.unit.test.d.ts +8 -0
- package/dist/daemon/__tests__/PendingRequestManager.unit.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/PendingRequestManager.unit.test.js +276 -0
- package/dist/daemon/__tests__/PendingRequestManager.unit.test.js.map +1 -0
- package/dist/daemon/__tests__/TelemetryStore.unit.test.d.ts +8 -0
- package/dist/daemon/__tests__/TelemetryStore.unit.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/TelemetryStore.unit.test.js +290 -0
- package/dist/daemon/__tests__/TelemetryStore.unit.test.js.map +1 -0
- package/dist/daemon/__tests__/commandRegistry.contract.test.d.ts +8 -0
- package/dist/daemon/__tests__/commandRegistry.contract.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/commandRegistry.contract.test.js +384 -0
- package/dist/daemon/__tests__/commandRegistry.contract.test.js.map +1 -0
- package/dist/daemon/__tests__/ipcServer.contract.test.js +2 -1
- package/dist/daemon/__tests__/ipcServer.contract.test.js.map +1 -1
- package/dist/daemon/errors.d.ts +65 -0
- package/dist/daemon/errors.d.ts.map +1 -0
- package/dist/daemon/errors.js +82 -0
- package/dist/daemon/errors.js.map +1 -0
- package/dist/daemon/handlers/CommandHandlers.d.ts +32 -0
- package/dist/daemon/handlers/CommandHandlers.d.ts.map +1 -0
- package/dist/daemon/handlers/CommandHandlers.js +93 -0
- package/dist/daemon/handlers/CommandHandlers.js.map +1 -0
- package/dist/daemon/handlers/QueryHandlers.d.ts +35 -0
- package/dist/daemon/handlers/QueryHandlers.d.ts.map +1 -0
- package/dist/daemon/handlers/QueryHandlers.js +176 -0
- package/dist/daemon/handlers/QueryHandlers.js.map +1 -0
- package/dist/daemon/handlers/SessionHandlers.d.ts +32 -0
- package/dist/daemon/handlers/SessionHandlers.d.ts.map +1 -0
- package/dist/daemon/handlers/SessionHandlers.js +227 -0
- package/dist/daemon/handlers/SessionHandlers.js.map +1 -0
- package/dist/daemon/handlers/pendingRequests.d.ts +50 -0
- package/dist/daemon/handlers/pendingRequests.d.ts.map +1 -0
- package/dist/daemon/handlers/pendingRequests.js +57 -0
- package/dist/daemon/handlers/pendingRequests.js.map +1 -0
- package/dist/daemon/handlers/requestHandlers.d.ts +51 -0
- package/dist/daemon/handlers/requestHandlers.d.ts.map +1 -0
- package/dist/daemon/handlers/requestHandlers.js +61 -0
- package/dist/daemon/handlers/requestHandlers.js.map +1 -0
- package/dist/daemon/handlers/responseHandler.d.ts +42 -0
- package/dist/daemon/handlers/responseHandler.d.ts.map +1 -0
- package/dist/daemon/handlers/responseHandler.js +195 -0
- package/dist/daemon/handlers/responseHandler.js.map +1 -0
- package/dist/daemon/ipcServer.d.ts +19 -41
- package/dist/daemon/ipcServer.d.ts.map +1 -1
- package/dist/daemon/ipcServer.js +83 -655
- package/dist/daemon/ipcServer.js.map +1 -1
- package/dist/daemon/launcher.d.ts.map +1 -1
- package/dist/daemon/launcher.js +6 -3
- package/dist/daemon/launcher.js.map +1 -1
- package/dist/daemon/lifecycle/cdpSetup.d.ts +24 -0
- package/dist/daemon/lifecycle/cdpSetup.d.ts.map +1 -0
- package/dist/daemon/lifecycle/cdpSetup.js +59 -0
- package/dist/daemon/lifecycle/cdpSetup.js.map +1 -0
- package/dist/daemon/lifecycle/chromeConnection.d.ts +17 -0
- package/dist/daemon/lifecycle/chromeConnection.d.ts.map +1 -0
- package/dist/daemon/lifecycle/chromeConnection.js +80 -0
- package/dist/daemon/lifecycle/chromeConnection.js.map +1 -0
- package/dist/daemon/lifecycle/signalHandlers.d.ts +14 -0
- package/dist/daemon/lifecycle/signalHandlers.d.ts.map +1 -0
- package/dist/daemon/lifecycle/signalHandlers.js +35 -0
- package/dist/daemon/lifecycle/signalHandlers.js.map +1 -0
- package/dist/daemon/lifecycle/workerCleanup.d.ts +27 -0
- package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -0
- package/dist/daemon/lifecycle/workerCleanup.js +144 -0
- package/dist/daemon/lifecycle/workerCleanup.js.map +1 -0
- package/dist/daemon/lifecycle/workerConfig.d.ts +14 -0
- package/dist/daemon/lifecycle/workerConfig.d.ts.map +1 -0
- package/dist/daemon/lifecycle/workerConfig.js +66 -0
- package/dist/daemon/lifecycle/workerConfig.js.map +1 -0
- package/dist/daemon/lifecycle/workerIpc.d.ts +14 -0
- package/dist/daemon/lifecycle/workerIpc.d.ts.map +1 -0
- package/dist/daemon/lifecycle/workerIpc.js +87 -0
- package/dist/daemon/lifecycle/workerIpc.js.map +1 -0
- package/dist/daemon/server/JsonlParser.d.ts +31 -0
- package/dist/daemon/server/JsonlParser.d.ts.map +1 -0
- package/dist/daemon/server/JsonlParser.js +57 -0
- package/dist/daemon/server/JsonlParser.js.map +1 -0
- package/dist/daemon/server/SocketServer.d.ts.map +1 -1
- package/dist/daemon/server/SocketServer.js +2 -2
- package/dist/daemon/server/SocketServer.js.map +1 -1
- package/dist/daemon/server/WorkerManager.d.ts +3 -3
- package/dist/daemon/server/WorkerManager.d.ts.map +1 -1
- package/dist/daemon/server/WorkerManager.js +10 -19
- package/dist/daemon/server/WorkerManager.js.map +1 -1
- package/dist/daemon/services/SessionService.d.ts +87 -0
- package/dist/daemon/services/SessionService.d.ts.map +1 -0
- package/dist/daemon/services/SessionService.js +45 -0
- package/dist/daemon/services/SessionService.js.map +1 -0
- package/dist/daemon/startSession.d.ts.map +1 -1
- package/dist/daemon/startSession.js +54 -31
- package/dist/daemon/startSession.js.map +1 -1
- package/dist/daemon/worker/commandRegistry.d.ts +1 -1
- package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
- package/dist/daemon/worker/commandRegistry.js +20 -215
- package/dist/daemon/worker/commandRegistry.js.map +1 -1
- package/dist/daemon/worker.d.ts +3 -12
- package/dist/daemon/worker.d.ts.map +1 -1
- package/dist/daemon/worker.js +47 -367
- package/dist/daemon/worker.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ipc/__tests__/client.contract.test.d.ts +0 -15
- package/dist/ipc/__tests__/client.contract.test.d.ts.map +1 -1
- package/dist/ipc/__tests__/client.contract.test.js +8 -23
- package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
- package/dist/ipc/__tests__/errors.unit.test.d.ts +7 -0
- package/dist/ipc/__tests__/errors.unit.test.d.ts.map +1 -0
- package/dist/ipc/__tests__/errors.unit.test.js +77 -0
- package/dist/ipc/__tests__/errors.unit.test.js.map +1 -0
- package/dist/ipc/__tests__/guards.unit.test.d.ts +7 -0
- package/dist/ipc/__tests__/guards.unit.test.d.ts.map +1 -0
- package/dist/ipc/__tests__/guards.unit.test.js +73 -0
- package/dist/ipc/__tests__/guards.unit.test.js.map +1 -0
- package/dist/ipc/__tests__/jsonl.unit.test.d.ts +7 -0
- package/dist/ipc/__tests__/jsonl.unit.test.d.ts.map +1 -0
- package/dist/ipc/__tests__/jsonl.unit.test.js +85 -0
- package/dist/ipc/__tests__/jsonl.unit.test.js.map +1 -0
- package/dist/ipc/__tests__/validation.unit.test.d.ts +7 -0
- package/dist/ipc/__tests__/validation.unit.test.d.ts.map +1 -0
- package/dist/ipc/__tests__/validation.unit.test.js +60 -0
- package/dist/ipc/__tests__/validation.unit.test.js.map +1 -0
- package/dist/ipc/client.d.ts +93 -84
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +121 -192
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/index.d.ts +17 -0
- package/dist/ipc/index.d.ts.map +1 -0
- package/dist/ipc/index.js +23 -0
- package/dist/ipc/index.js.map +1 -0
- package/dist/ipc/protocol/commands.d.ts +144 -0
- package/dist/ipc/protocol/commands.d.ts.map +1 -0
- package/dist/ipc/protocol/commands.js +23 -0
- package/dist/ipc/protocol/commands.js.map +1 -0
- package/dist/ipc/protocol/guards.d.ts +47 -0
- package/dist/ipc/protocol/guards.d.ts.map +1 -0
- package/dist/ipc/protocol/guards.js +62 -0
- package/dist/ipc/protocol/guards.js.map +1 -0
- package/dist/ipc/protocol/index.d.ts +9 -0
- package/dist/ipc/protocol/index.d.ts.map +1 -0
- package/dist/ipc/protocol/index.js +8 -0
- package/dist/ipc/protocol/index.js.map +1 -0
- package/dist/ipc/protocol/messages.d.ts +64 -0
- package/dist/ipc/protocol/messages.d.ts.map +1 -0
- package/dist/ipc/protocol/messages.js +8 -0
- package/dist/ipc/protocol/messages.js.map +1 -0
- package/dist/ipc/session/errors.d.ts +25 -0
- package/dist/ipc/session/errors.d.ts.map +1 -0
- package/dist/ipc/{types.js → session/errors.js} +11 -6
- package/dist/ipc/session/errors.js.map +1 -0
- package/dist/ipc/session/index.d.ts +16 -0
- package/dist/ipc/session/index.d.ts.map +1 -0
- package/dist/ipc/session/index.js +7 -0
- package/dist/ipc/session/index.js.map +1 -0
- package/dist/ipc/session/lifecycle.d.ts +125 -0
- package/dist/ipc/session/lifecycle.d.ts.map +1 -0
- package/dist/ipc/session/lifecycle.js +7 -0
- package/dist/ipc/session/lifecycle.js.map +1 -0
- package/dist/ipc/session/queries.d.ts +94 -0
- package/dist/ipc/session/queries.d.ts.map +1 -0
- package/dist/ipc/session/queries.js +7 -0
- package/dist/ipc/session/queries.js.map +1 -0
- package/dist/ipc/session/types.d.ts +28 -0
- package/dist/ipc/session/types.d.ts.map +1 -0
- package/dist/ipc/session/types.js +7 -0
- package/dist/ipc/session/types.js.map +1 -0
- package/dist/ipc/transport/IPCError.d.ts +82 -0
- package/dist/ipc/transport/IPCError.d.ts.map +1 -0
- package/dist/ipc/transport/IPCError.js +109 -0
- package/dist/ipc/transport/IPCError.js.map +1 -0
- package/dist/ipc/transport/errors.d.ts +11 -0
- package/dist/ipc/transport/errors.d.ts.map +1 -0
- package/dist/ipc/transport/errors.js +28 -0
- package/dist/ipc/transport/errors.js.map +1 -0
- package/dist/ipc/transport/index.d.ts +16 -0
- package/dist/ipc/transport/index.d.ts.map +1 -0
- package/dist/ipc/transport/index.js +77 -0
- package/dist/ipc/transport/index.js.map +1 -0
- package/dist/ipc/transport/jsonl.d.ts +23 -0
- package/dist/ipc/transport/jsonl.d.ts.map +1 -0
- package/dist/ipc/transport/jsonl.js +36 -0
- package/dist/ipc/transport/jsonl.js.map +1 -0
- package/dist/ipc/transport/socket.d.ts +27 -0
- package/dist/ipc/transport/socket.d.ts.map +1 -0
- package/dist/ipc/transport/socket.js +49 -0
- package/dist/ipc/transport/socket.js.map +1 -0
- package/dist/ipc/transport/validation.d.ts +21 -0
- package/dist/ipc/transport/validation.d.ts.map +1 -0
- package/dist/ipc/transport/validation.js +23 -0
- package/dist/ipc/transport/validation.js.map +1 -0
- package/dist/ipc/utils/errors.d.ts +25 -0
- package/dist/ipc/utils/errors.d.ts.map +1 -0
- package/dist/ipc/utils/errors.js +29 -0
- package/dist/ipc/utils/errors.js.map +1 -0
- package/dist/ipc/utils/index.d.ts +12 -0
- package/dist/ipc/utils/index.d.ts.map +1 -0
- package/dist/ipc/utils/index.js +11 -0
- package/dist/ipc/utils/index.js.map +1 -0
- package/dist/ipc/utils/requestId.d.ts +23 -0
- package/dist/ipc/utils/requestId.d.ts.map +1 -0
- package/dist/ipc/utils/requestId.js +27 -0
- package/dist/ipc/utils/requestId.js.map +1 -0
- package/dist/ipc/utils/responseValidator.d.ts.map +1 -0
- package/dist/ipc/{responseValidator.js → utils/responseValidator.js} +2 -1
- package/dist/ipc/utils/responseValidator.js.map +1 -0
- package/dist/ipc/utils/session.d.ts +36 -0
- package/dist/ipc/utils/session.d.ts.map +1 -0
- package/dist/ipc/utils/session.js +37 -0
- package/dist/ipc/utils/session.js.map +1 -0
- package/dist/ipc/utils/types.d.ts +17 -0
- package/dist/ipc/utils/types.d.ts.map +1 -0
- package/dist/ipc/utils/types.js +7 -0
- package/dist/ipc/utils/types.js.map +1 -0
- package/dist/session/__tests__/chrome-cache.contract.test.d.ts +7 -0
- package/dist/session/__tests__/chrome-cache.contract.test.d.ts.map +1 -0
- package/dist/session/__tests__/chrome-cache.contract.test.js +77 -0
- package/dist/session/__tests__/chrome-cache.contract.test.js.map +1 -0
- package/dist/session/__tests__/cleanup.contract.test.d.ts +7 -0
- package/dist/session/__tests__/cleanup.contract.test.d.ts.map +1 -0
- package/dist/session/__tests__/cleanup.contract.test.js +84 -0
- package/dist/session/__tests__/cleanup.contract.test.js.map +1 -0
- package/dist/session/__tests__/lock.contract.test.d.ts +7 -0
- package/dist/session/__tests__/lock.contract.test.d.ts.map +1 -0
- package/dist/session/__tests__/lock.contract.test.js +77 -0
- package/dist/session/__tests__/lock.contract.test.js.map +1 -0
- package/dist/session/__tests__/metadata.contract.test.d.ts +7 -0
- package/dist/session/__tests__/metadata.contract.test.d.ts.map +1 -0
- package/dist/session/__tests__/metadata.contract.test.js +87 -0
- package/dist/session/__tests__/metadata.contract.test.js.map +1 -0
- package/dist/session/chrome.d.ts +20 -0
- package/dist/session/chrome.d.ts.map +1 -1
- package/dist/session/chrome.js +80 -16
- package/dist/session/chrome.js.map +1 -1
- package/dist/session/cleanup.d.ts +15 -2
- package/dist/session/cleanup.d.ts.map +1 -1
- package/dist/session/cleanup.js +100 -72
- package/dist/session/cleanup.js.map +1 -1
- package/dist/session/lock.d.ts.map +1 -1
- package/dist/session/lock.js +101 -90
- package/dist/session/lock.js.map +1 -1
- package/dist/session/metadata.d.ts +10 -3
- package/dist/session/metadata.d.ts.map +1 -1
- package/dist/session/metadata.js +24 -6
- package/dist/session/metadata.js.map +1 -1
- package/dist/session/paths.d.ts +0 -9
- package/dist/session/paths.d.ts.map +1 -1
- package/dist/session/paths.js +0 -11
- package/dist/session/paths.js.map +1 -1
- package/dist/session/pid.d.ts +15 -0
- package/dist/session/pid.d.ts.map +1 -1
- package/dist/session/pid.js +39 -21
- package/dist/session/pid.js.map +1 -1
- package/dist/session/process.d.ts +4 -41
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +4 -85
- package/dist/session/process.js.map +1 -1
- package/dist/session/statusData.d.ts +50 -0
- package/dist/session/statusData.d.ts.map +1 -0
- package/dist/session/statusData.js +51 -0
- package/dist/session/statusData.js.map +1 -0
- package/dist/telemetry/__tests__/navigation.contract.test.d.ts +8 -0
- package/dist/telemetry/__tests__/navigation.contract.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/navigation.contract.test.js +211 -0
- package/dist/telemetry/__tests__/navigation.contract.test.js.map +1 -0
- package/dist/telemetry/__tests__/network.contract.test.d.ts +0 -20
- package/dist/telemetry/__tests__/network.contract.test.d.ts.map +1 -1
- package/dist/telemetry/__tests__/network.contract.test.js +2 -64
- package/dist/telemetry/__tests__/network.contract.test.js.map +1 -1
- package/dist/telemetry/__tests__/utils.unit.test.d.ts +7 -0
- package/dist/telemetry/__tests__/utils.unit.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/utils.unit.test.js +91 -0
- package/dist/telemetry/__tests__/utils.unit.test.js.map +1 -0
- package/dist/telemetry/console.d.ts.map +1 -1
- package/dist/telemetry/console.js +19 -28
- package/dist/telemetry/console.js.map +1 -1
- package/dist/telemetry/dialogs.d.ts.map +1 -1
- package/dist/telemetry/dialogs.js +4 -8
- package/dist/telemetry/dialogs.js.map +1 -1
- package/dist/telemetry/dom.d.ts.map +1 -1
- package/dist/telemetry/dom.js +51 -59
- package/dist/telemetry/dom.js.map +1 -1
- package/dist/telemetry/filters.d.ts +5 -18
- package/dist/telemetry/filters.d.ts.map +1 -1
- package/dist/telemetry/filters.js +36 -56
- package/dist/telemetry/filters.js.map +1 -1
- package/dist/telemetry/navigation.d.ts.map +1 -1
- package/dist/telemetry/navigation.js +5 -8
- package/dist/telemetry/navigation.js.map +1 -1
- package/dist/telemetry/network.d.ts.map +1 -1
- package/dist/telemetry/network.js +105 -104
- package/dist/telemetry/network.js.map +1 -1
- package/dist/telemetry/utils.d.ts +85 -0
- package/dist/telemetry/utils.d.ts.map +1 -0
- package/dist/telemetry/utils.js +138 -0
- package/dist/telemetry/utils.js.map +1 -0
- package/dist/types/dom.d.ts +66 -0
- package/dist/types/dom.d.ts.map +1 -0
- package/dist/types/dom.js +8 -0
- package/dist/types/dom.js.map +1 -0
- package/dist/types.d.ts +15 -83
- package/dist/types.d.ts.map +1 -1
- package/dist/{commands/shared → ui}/OutputBuilder.d.ts +10 -2
- package/dist/ui/OutputBuilder.d.ts.map +1 -0
- package/dist/{commands/shared → ui}/OutputBuilder.js +8 -2
- package/dist/ui/OutputBuilder.js.map +1 -0
- package/dist/ui/errors/CommandError.d.ts +16 -2
- package/dist/ui/errors/CommandError.d.ts.map +1 -1
- package/dist/ui/errors/CommandError.js +2 -1
- package/dist/ui/errors/CommandError.js.map +1 -1
- package/dist/ui/errors/index.d.ts +2 -3
- package/dist/ui/errors/index.d.ts.map +1 -1
- package/dist/ui/errors/index.js +1 -3
- package/dist/ui/errors/index.js.map +1 -1
- package/dist/ui/errors/utils.d.ts +6 -0
- package/dist/ui/errors/utils.d.ts.map +1 -1
- package/dist/ui/errors/utils.js +8 -3
- package/dist/ui/errors/utils.js.map +1 -1
- package/dist/ui/formatters/dom.d.ts +3 -18
- package/dist/ui/formatters/dom.d.ts.map +1 -1
- package/dist/ui/formatters/dom.js +4 -27
- package/dist/ui/formatters/dom.js.map +1 -1
- package/dist/ui/formatters/preview.d.ts +8 -8
- package/dist/ui/formatters/preview.d.ts.map +1 -1
- package/dist/ui/formatters/preview.js +18 -13
- package/dist/ui/formatters/preview.js.map +1 -1
- package/dist/ui/formatters/status.d.ts +1 -1
- package/dist/ui/formatters/status.d.ts.map +1 -1
- package/dist/ui/formatters/status.js +8 -30
- package/dist/ui/formatters/status.js.map +1 -1
- package/dist/ui/formatting.d.ts +2 -270
- package/dist/ui/formatting.d.ts.map +1 -1
- package/dist/ui/formatting.js +8 -331
- package/dist/ui/formatting.js.map +1 -1
- package/dist/ui/logging/index.d.ts +1 -1
- package/dist/ui/logging/index.d.ts.map +1 -1
- package/dist/ui/logging/index.js +1 -1
- package/dist/ui/logging/index.js.map +1 -1
- package/dist/ui/logging/logger.d.ts +3 -23
- package/dist/ui/logging/logger.d.ts.map +1 -1
- package/dist/ui/logging/logger.js +2 -27
- package/dist/ui/logging/logger.js.map +1 -1
- package/dist/ui/messages/chrome.d.ts +15 -7
- package/dist/ui/messages/chrome.d.ts.map +1 -1
- package/dist/ui/messages/chrome.js +23 -32
- package/dist/ui/messages/chrome.js.map +1 -1
- package/dist/ui/messages/commands.d.ts +2 -19
- package/dist/ui/messages/commands.d.ts.map +1 -1
- package/dist/ui/messages/commands.js +5 -51
- package/dist/ui/messages/commands.js.map +1 -1
- package/dist/ui/messages/consoleMessages.d.ts +1 -1
- package/dist/ui/messages/consoleMessages.d.ts.map +1 -1
- package/dist/ui/messages/consoleMessages.js +3 -6
- package/dist/ui/messages/consoleMessages.js.map +1 -1
- package/dist/ui/messages/debug.d.ts +0 -14
- package/dist/ui/messages/debug.d.ts.map +1 -1
- package/dist/ui/messages/debug.js +0 -18
- package/dist/ui/messages/debug.js.map +1 -1
- package/dist/ui/messages/errors.d.ts +0 -34
- package/dist/ui/messages/errors.d.ts.map +1 -1
- package/dist/ui/messages/errors.js +3 -81
- package/dist/ui/messages/errors.js.map +1 -1
- package/dist/ui/messages/internal.d.ts +0 -7
- package/dist/ui/messages/internal.d.ts.map +1 -1
- package/dist/ui/messages/internal.js +0 -12
- package/dist/ui/messages/internal.js.map +1 -1
- package/dist/ui/messages/preview.d.ts +14 -1
- package/dist/ui/messages/preview.d.ts.map +1 -1
- package/dist/ui/messages/preview.js +24 -7
- package/dist/ui/messages/preview.js.map +1 -1
- package/dist/ui/messages/session.d.ts.map +1 -1
- package/dist/ui/messages/session.js +7 -23
- package/dist/ui/messages/session.js.map +1 -1
- package/dist/ui/messages/validation.d.ts.map +1 -1
- package/dist/ui/messages/validation.js +7 -8
- package/dist/ui/messages/validation.js.map +1 -1
- package/dist/utils/__tests__/atomicFile.test.d.ts +2 -0
- package/dist/utils/__tests__/atomicFile.test.d.ts.map +1 -0
- package/dist/utils/__tests__/atomicFile.test.js +43 -0
- package/dist/utils/__tests__/atomicFile.test.js.map +1 -0
- package/dist/utils/__tests__/objects.test.d.ts +2 -0
- package/dist/utils/__tests__/objects.test.d.ts.map +1 -0
- package/dist/utils/__tests__/objects.test.js +50 -0
- package/dist/utils/__tests__/objects.test.js.map +1 -0
- package/dist/utils/__tests__/session.contract.test.js +13 -3
- package/dist/utils/__tests__/session.contract.test.js.map +1 -1
- package/dist/utils/__tests__/url.test.d.ts +2 -0
- package/dist/utils/__tests__/url.test.d.ts.map +1 -0
- package/dist/utils/__tests__/url.test.js +42 -0
- package/dist/utils/__tests__/url.test.js.map +1 -0
- package/dist/utils/atomicFile.d.ts +31 -5
- package/dist/utils/atomicFile.d.ts.map +1 -1
- package/dist/utils/atomicFile.js +52 -13
- package/dist/utils/atomicFile.js.map +1 -1
- package/dist/utils/concurrency.d.ts +54 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +78 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/daemonErrors.d.ts +60 -0
- package/dist/utils/daemonErrors.d.ts.map +1 -0
- package/dist/utils/daemonErrors.js +58 -0
- package/dist/utils/daemonErrors.js.map +1 -0
- package/dist/utils/errors.d.ts +28 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +33 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/exitCodes.d.ts +41 -5
- package/dist/utils/exitCodes.d.ts.map +1 -1
- package/dist/utils/exitCodes.js +43 -9
- package/dist/utils/exitCodes.js.map +1 -1
- package/dist/utils/http.d.ts +9 -4
- package/dist/utils/http.d.ts.map +1 -1
- package/dist/utils/http.js +44 -10
- package/dist/utils/http.js.map +1 -1
- package/dist/utils/levenshtein.d.ts +45 -0
- package/dist/utils/levenshtein.d.ts.map +1 -0
- package/dist/utils/levenshtein.js +85 -0
- package/dist/utils/levenshtein.js.map +1 -0
- package/dist/utils/objects.d.ts +16 -1
- package/dist/utils/objects.d.ts.map +1 -1
- package/dist/utils/objects.js +16 -1
- package/dist/utils/objects.js.map +1 -1
- package/dist/utils/process.d.ts +45 -0
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +91 -0
- package/dist/utils/process.js.map +1 -0
- package/dist/utils/url.d.ts +10 -3
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +42 -29
- package/dist/utils/url.js.map +1 -1
- package/dist/utils/validation.d.ts +101 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +131 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +1 -1
- package/dist/commands/dom.d.ts.map +0 -1
- package/dist/commands/dom.js.map +0 -1
- package/dist/commands/domEvalHelpers.d.ts.map +0 -1
- package/dist/commands/domEvalHelpers.js.map +0 -1
- package/dist/commands/domOptionsBuilder.d.ts +0 -67
- package/dist/commands/domOptionsBuilder.d.ts.map +0 -1
- package/dist/commands/domOptionsBuilder.js +0 -86
- package/dist/commands/domOptionsBuilder.js.map +0 -1
- package/dist/commands/domSelectorParser.d.ts +0 -20
- package/dist/commands/domSelectorParser.d.ts.map +0 -1
- package/dist/commands/domSelectorParser.js +0 -20
- package/dist/commands/domSelectorParser.js.map +0 -1
- package/dist/commands/shared/OutputBuilder.d.ts.map +0 -1
- package/dist/commands/shared/OutputBuilder.js.map +0 -1
- package/dist/commands/shared/daemonSessionController.d.ts.map +0 -1
- package/dist/commands/shared/daemonSessionController.js.map +0 -1
- package/dist/commands/shared/sessionController.d.ts +0 -21
- package/dist/commands/shared/sessionController.d.ts.map +0 -1
- package/dist/commands/shared/sessionController.js +0 -54
- package/dist/commands/shared/sessionController.js.map +0 -1
- package/dist/connection/__tests__/finder.contract.test.d.ts +0 -2
- package/dist/connection/__tests__/finder.contract.test.d.ts.map +0 -1
- package/dist/connection/__tests__/finder.contract.test.js +0 -239
- package/dist/connection/__tests__/finder.contract.test.js.map +0 -1
- package/dist/connection/domOperations.d.ts +0 -48
- package/dist/connection/domOperations.d.ts.map +0 -1
- package/dist/connection/domOperations.js +0 -106
- package/dist/connection/domOperations.js.map +0 -1
- package/dist/connection/finder.d.ts +0 -12
- package/dist/connection/finder.d.ts.map +0 -1
- package/dist/connection/finder.js +0 -17
- package/dist/connection/finder.js.map +0 -1
- package/dist/ipc/commands.d.ts +0 -260
- package/dist/ipc/commands.d.ts.map +0 -1
- package/dist/ipc/commands.js +0 -77
- package/dist/ipc/commands.js.map +0 -1
- package/dist/ipc/responseValidator.d.ts.map +0 -1
- package/dist/ipc/responseValidator.js.map +0 -1
- package/dist/ipc/types.d.ts +0 -226
- package/dist/ipc/types.d.ts.map +0 -1
- package/dist/ipc/types.js.map +0 -1
- package/dist/session/fileOps.d.ts +0 -25
- package/dist/session/fileOps.d.ts.map +0 -1
- package/dist/session/fileOps.js +0 -39
- package/dist/session/fileOps.js.map +0 -1
- package/dist/session/queryCache.d.ts +0 -36
- package/dist/session/queryCache.d.ts.map +0 -1
- package/dist/session/queryCache.js +0 -66
- package/dist/session/queryCache.js.map +0 -1
- /package/dist/ipc/{responseValidator.d.ts → utils/responseValidator.d.ts} +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chrome preferences loader.
|
|
3
|
+
*
|
|
4
|
+
* Handles loading Chrome preferences from files or inline options,
|
|
5
|
+
* and validates that they are JSON-serializable for chrome-launcher compatibility.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import { ChromeLaunchError, getErrorMessage } from '../../connection/errors.js';
|
|
9
|
+
import { prefsFileNotFoundError, invalidPrefsFormatError, prefsLoadError, } from '../../ui/messages/chrome.js';
|
|
10
|
+
/**
|
|
11
|
+
* Load Chrome preferences from file or inline options.
|
|
12
|
+
*
|
|
13
|
+
* Supports two modes:
|
|
14
|
+
* 1. **File-based**: Load preferences from JSON file (prefsFile)
|
|
15
|
+
* 2. **Inline**: Use preferences directly from options (prefs)
|
|
16
|
+
*
|
|
17
|
+
* File-based loading takes precedence over inline preferences.
|
|
18
|
+
*
|
|
19
|
+
* @param options - Options containing preferences configuration
|
|
20
|
+
* @returns Preferences object, or undefined if none specified
|
|
21
|
+
* @throws ChromeLaunchError if file doesn't exist, is invalid JSON, or wrong format
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // From file
|
|
26
|
+
* const prefs = loadChromePrefs({ prefsFile: './chrome-prefs.json' });
|
|
27
|
+
*
|
|
28
|
+
* // Inline
|
|
29
|
+
* const prefs = loadChromePrefs({
|
|
30
|
+
* prefs: {
|
|
31
|
+
* 'profile.default_content_settings.popups': 0,
|
|
32
|
+
* 'download.default_directory': '/tmp/downloads'
|
|
33
|
+
* }
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function loadChromePrefs(options) {
|
|
38
|
+
if (options.prefsFile) {
|
|
39
|
+
if (!fs.existsSync(options.prefsFile)) {
|
|
40
|
+
throw new ChromeLaunchError(prefsFileNotFoundError(options.prefsFile), new Error('File does not exist'));
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const prefsContent = fs.readFileSync(options.prefsFile, 'utf8');
|
|
44
|
+
const parsed = JSON.parse(prefsContent);
|
|
45
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
46
|
+
throw new ChromeLaunchError(invalidPrefsFormatError(options.prefsFile, typeof parsed), new Error('Invalid JSON structure'));
|
|
47
|
+
}
|
|
48
|
+
return parsed;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error instanceof ChromeLaunchError) {
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
throw new ChromeLaunchError(prefsLoadError(options.prefsFile, getErrorMessage(error)), error instanceof Error ? error : undefined);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return options.prefs;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Type-safe conversion for Chrome preferences from unknown to JSONLike.
|
|
61
|
+
*
|
|
62
|
+
* chrome-launcher requires preferences to match its internal JSONLike type constraint
|
|
63
|
+
* for type safety. This function validates that preferences are JSON-serializable
|
|
64
|
+
* before casting to ensure runtime safety.
|
|
65
|
+
*
|
|
66
|
+
* @param prefs - Preferences object with unknown values from JSON parsing
|
|
67
|
+
* @returns Preferences compatible with chrome-launcher's JSONLike constraint, or undefined
|
|
68
|
+
* @throws ChromeLaunchError if preferences contain non-JSON-serializable values
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const prefs = loadChromePrefs({ prefsFile: './prefs.json' });
|
|
73
|
+
* const compatible = ensureJSONCompatiblePrefs(prefs);
|
|
74
|
+
* // Now safe to pass to chrome-launcher
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export function ensureJSONCompatiblePrefs(prefs) {
|
|
78
|
+
if (prefs === undefined) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
JSON.stringify(prefs);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
throw new ChromeLaunchError(`Chrome preferences must be JSON-serializable: ${getErrorMessage(error)}`, error instanceof Error ? error : undefined);
|
|
86
|
+
}
|
|
87
|
+
return prefs;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=preferencesLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preferencesLoader.js","sourceRoot":"","sources":["../../../src/connection/launcher/preferencesLoader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,GACf,MAAM,yBAAyB,CAAC;AA6BjC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAiC;IAEjC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,iBAAiB,CACzB,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,EACzC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CACjC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAChE,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAEjD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3E,MAAM,IAAI,iBAAiB,CACzB,uBAAuB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,MAAM,CAAC,EACzD,IAAI,KAAK,CAAC,wBAAwB,CAAC,CACpC,CAAC;YACJ,CAAC;YAED,OAAO,MAAiC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,IAAI,iBAAiB,CACzB,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,EACzD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAA0C;IAE1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,iBAAiB,CACzB,iDAAiD,eAAe,CAAC,KAAK,CAAC,EAAE,EACzE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;IACJ,CAAC;IAED,OAAO,KAAiC,CAAC;AAC3C,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { LaunchedChrome, Logger } from './types.js';
|
|
1
2
|
import type { Options as ChromeLaunchOptions } from 'chrome-launcher';
|
|
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.
|
|
@@ -9,6 +9,10 @@ export interface LaunchOptions extends Pick<ChromeLaunchOptions, 'logLevel' | 'c
|
|
|
9
9
|
port?: number;
|
|
10
10
|
/** Directory for Chrome profile data. Falls back to persistent ~/.bdg/chrome-profile directory */
|
|
11
11
|
userDataDir?: string | undefined;
|
|
12
|
+
/** Base directory for creating user data dir (defaults to OS temp dir, injectable for testing) */
|
|
13
|
+
baseDir?: string | undefined;
|
|
14
|
+
/** Logger instance (defaults to console, injectable for testing or custom logging) */
|
|
15
|
+
logger?: Logger | undefined;
|
|
12
16
|
/** When true, launches Chrome in headless mode. Defaults to standard windowed experience */
|
|
13
17
|
headless?: boolean;
|
|
14
18
|
/** Initial URL to open. Defaults to about:blank and is typically replaced during session setup */
|
|
@@ -20,5 +24,24 @@ export interface LaunchOptions extends Pick<ChromeLaunchOptions, 'logLevel' | 'c
|
|
|
20
24
|
/** Override Chrome binary detection with an explicit path */
|
|
21
25
|
chromePath?: string;
|
|
22
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Launch Chrome with remote debugging enabled using chrome-launcher.
|
|
29
|
+
*
|
|
30
|
+
* Supports macOS, Linux, and Windows. Chrome will be launched with
|
|
31
|
+
* the specified debugging port and user data directory.
|
|
32
|
+
*
|
|
33
|
+
* Validates Chrome process is alive after launch to detect immediate crashes
|
|
34
|
+
* or port conflicts. Includes Chrome installation diagnostics in error messages
|
|
35
|
+
* to aid troubleshooting.
|
|
36
|
+
*
|
|
37
|
+
* @param options - Launch configuration options
|
|
38
|
+
* @returns LaunchedChrome instance with PID and kill method
|
|
39
|
+
* @throws ChromeLaunchError if Chrome fails to launch, process dies immediately, or CDP doesn't become available
|
|
40
|
+
* @throws Error if user data directory cannot be created
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* Chrome 136+ requires --user-data-dir with a non-default directory.
|
|
44
|
+
* Uses chrome-launcher for cross-platform Chrome detection and launching.
|
|
45
|
+
*/
|
|
23
46
|
export declare function launchChrome(options?: LaunchOptions): Promise<LaunchedChrome>;
|
|
24
47
|
//# sourceMappingURL=launcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/connection/launcher.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/connection/launcher.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AA6CtE;;;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,GACb,YAAY,CACf;IACD,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,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;IAC/B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgGvF"}
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
|
-
import * as
|
|
2
|
+
import * as os from 'os';
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import * as chromeLauncher from 'chrome-launcher';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { createLogger } from '../ui/logging/index.js';
|
|
9
|
-
import { formatDiagnosticsForError, chromeLaunchSuccessMessage, chromeUserDataDirMessage, invalidPortError, userDataDirError, prefsFileNotFoundError, invalidPrefsFormatError, prefsLoadError, chromeLaunchFailedError, chromeBinaryOverrideNotFound, chromeBinaryOverrideNotExecutable, } from '../ui/messages/chrome.js';
|
|
5
|
+
import { BDG_CHROME_PREFS, DEFAULT_CDP_PORT, CHROME_PROFILE_DIR } from '../constants.js';
|
|
6
|
+
import { DEFAULT_CHROME_LOG_LEVEL, DEFAULT_CHROME_HANDLE_SIGINT } from '../constants.js';
|
|
7
|
+
import { formatDiagnosticsForError, chromeLaunchSuccessMessage, chromeUserDataDirMessage, invalidPortError, userDataDirError, chromeLaunchFailedError, } from '../ui/messages/chrome.js';
|
|
10
8
|
import { filterDefined } from '../utils/objects.js';
|
|
9
|
+
import { isProcessAlive } from '../utils/process.js';
|
|
11
10
|
import { getChromeDiagnostics } from './diagnostics.js';
|
|
12
11
|
import { ChromeLaunchError, getErrorMessage } from './errors.js';
|
|
13
|
-
|
|
12
|
+
import { resolveChromeBinary } from './launcher/binaryResolver.js';
|
|
13
|
+
import { buildChromeFlags } from './launcher/flagsBuilder.js';
|
|
14
|
+
import { loadChromePrefs, ensureJSONCompatiblePrefs } from './launcher/preferencesLoader.js';
|
|
15
|
+
import { reservePort } from './portReservation.js';
|
|
16
|
+
/**
|
|
17
|
+
* Default logger instance for launcher (uses console).
|
|
18
|
+
*
|
|
19
|
+
* Can be overridden in tests or when launcher is used as a library.
|
|
20
|
+
*/
|
|
21
|
+
const defaultLogger = {
|
|
22
|
+
info: (msg) => console.error(msg),
|
|
23
|
+
debug: () => { }, // No-op by default
|
|
24
|
+
};
|
|
14
25
|
/**
|
|
15
26
|
* Get formatted Chrome diagnostics for error messages.
|
|
16
27
|
*
|
|
@@ -23,10 +34,6 @@ function getFormattedDiagnostics() {
|
|
|
23
34
|
const diagnostics = getChromeDiagnostics();
|
|
24
35
|
return formatDiagnosticsForError(diagnostics);
|
|
25
36
|
}
|
|
26
|
-
// Other Constants
|
|
27
|
-
const FILE_NOT_EXIST_ERROR = 'File does not exist';
|
|
28
|
-
const INVALID_JSON_STRUCTURE_ERROR = 'Invalid JSON structure';
|
|
29
|
-
const REMOTE_DEBUGGING_FLAG = (port) => `--remote-debugging-port=${port}`;
|
|
30
37
|
/**
|
|
31
38
|
* Launch Chrome with remote debugging enabled using chrome-launcher.
|
|
32
39
|
*
|
|
@@ -46,58 +53,15 @@ const REMOTE_DEBUGGING_FLAG = (port) => `--remote-debugging-port=${port}`;
|
|
|
46
53
|
* Chrome 136+ requires --user-data-dir with a non-default directory.
|
|
47
54
|
* Uses chrome-launcher for cross-platform Chrome detection and launching.
|
|
48
55
|
*/
|
|
49
|
-
/**
|
|
50
|
-
* Atomically reserve a port to prevent race conditions during Chrome launch.
|
|
51
|
-
*
|
|
52
|
-
* Creates a temporary TCP server on the port, which prevents other processes
|
|
53
|
-
* from binding to it. Returns a release function to free the port.
|
|
54
|
-
*
|
|
55
|
-
* @param port - Port number to reserve
|
|
56
|
-
* @returns Promise resolving to reservation object with release function
|
|
57
|
-
* @throws ChromeLaunchError If port is already in use
|
|
58
|
-
*/
|
|
59
|
-
async function reservePort(port) {
|
|
60
|
-
return new Promise((resolve, reject) => {
|
|
61
|
-
const server = net.createServer();
|
|
62
|
-
server.once('error', (err) => {
|
|
63
|
-
if (err.code === 'EADDRINUSE') {
|
|
64
|
-
// Port is already in use - provide helpful error message
|
|
65
|
-
reject(new ChromeLaunchError(`Port ${port} is already in use.\n\n` +
|
|
66
|
-
`This usually means Chrome is still running from a previous session.\n\n` +
|
|
67
|
-
`Try:\n` +
|
|
68
|
-
` - bdg cleanup --aggressive (kills all Chrome processes)\n` +
|
|
69
|
-
` - bdg cleanup --force (removes session files + kills Chrome on port ${port})\n` +
|
|
70
|
-
` - lsof -ti:${port} | xargs kill -9 (force kill process on port)\n` +
|
|
71
|
-
` - Use different port: bdg <url> --port ${port + 1}`));
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
reject(err);
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
server.listen(port, '127.0.0.1', () => {
|
|
78
|
-
// Port successfully reserved - return release function
|
|
79
|
-
resolve({
|
|
80
|
-
release: () => {
|
|
81
|
-
server.close();
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
56
|
export async function launchChrome(options = {}) {
|
|
57
|
+
const logger = options.logger ?? defaultLogger;
|
|
88
58
|
const port = options.port ?? DEFAULT_CDP_PORT;
|
|
89
|
-
// Validate port range
|
|
90
59
|
if (port < 1 || port > 65535) {
|
|
91
60
|
throw new ChromeLaunchError(invalidPortError(port));
|
|
92
61
|
}
|
|
93
|
-
// Atomically check if port is available
|
|
94
|
-
// We must release BEFORE launching Chrome so Chrome can bind to it
|
|
95
62
|
const reservation = await reservePort(port);
|
|
96
|
-
// Immediately release - we just wanted to atomically check availability
|
|
97
|
-
// Chrome needs to bind to this port, so we can't hold the reservation
|
|
98
63
|
reservation.release();
|
|
99
|
-
const userDataDir = options.userDataDir ?? getPersistentUserDataDir();
|
|
100
|
-
// Ensure userDataDir exists (chrome-launcher needs it for chrome-out.log)
|
|
64
|
+
const userDataDir = options.userDataDir ?? getPersistentUserDataDir(options.baseDir);
|
|
101
65
|
if (!fs.existsSync(userDataDir)) {
|
|
102
66
|
try {
|
|
103
67
|
fs.mkdirSync(userDataDir, { recursive: true });
|
|
@@ -106,24 +70,21 @@ export async function launchChrome(options = {}) {
|
|
|
106
70
|
throw new ChromeLaunchError(userDataDirError(userDataDir, getErrorMessage(error)), error);
|
|
107
71
|
}
|
|
108
72
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
log.debug(chromeUserDataDirMessage(userDataDir));
|
|
73
|
+
logger.info(`Launching Chrome on port ${port}...`);
|
|
74
|
+
logger.debug(chromeUserDataDirMessage(userDataDir));
|
|
112
75
|
const chromeOptions = buildChromeOptions(options);
|
|
113
76
|
const launcher = new chromeLauncher.Launcher(chromeOptions);
|
|
114
77
|
try {
|
|
115
78
|
const launchStart = Date.now();
|
|
116
79
|
await launcher.launch();
|
|
117
|
-
|
|
80
|
+
logger.info('Waiting for Chrome to be ready...');
|
|
118
81
|
await launcher.waitUntilReady();
|
|
119
82
|
const launchDurationMs = Date.now() - launchStart;
|
|
120
|
-
|
|
83
|
+
logger.info(`✓ Chrome ready (${launchDurationMs}ms)`);
|
|
121
84
|
const chromeProcessPid = launcher.pid ?? 0;
|
|
122
|
-
// Validate PID and process liveness before success
|
|
123
85
|
if (!chromeProcessPid || chromeProcessPid <= 0 || !isProcessAlive(chromeProcessPid)) {
|
|
124
86
|
launcher.kill();
|
|
125
87
|
launcher.destroyTmp();
|
|
126
|
-
// Get Chrome diagnostics once for error context
|
|
127
88
|
const diagnosticLines = getFormattedDiagnostics();
|
|
128
89
|
const errorType = !chromeProcessPid || chromeProcessPid <= 0
|
|
129
90
|
? 'failed to launch'
|
|
@@ -140,13 +101,11 @@ export async function launchChrome(options = {}) {
|
|
|
140
101
|
` - Kill conflicting process: kill $(lsof -ti:${port})\n` +
|
|
141
102
|
` - Use different port: bdg <url> --port ${port + 1}`);
|
|
142
103
|
}
|
|
143
|
-
|
|
144
|
-
log.info(chromeLaunchSuccessMessage(chromeProcessPid, launchDurationMs));
|
|
104
|
+
logger.info(chromeLaunchSuccessMessage(chromeProcessPid, launchDurationMs));
|
|
145
105
|
return {
|
|
146
106
|
pid: chromeProcessPid,
|
|
147
107
|
port: launcher.port ?? port,
|
|
148
108
|
userDataDir: launcher.userDataDir,
|
|
149
|
-
process: launcher.chromeProcess ?? null,
|
|
150
109
|
kill: async () => {
|
|
151
110
|
return Promise.resolve().then(() => {
|
|
152
111
|
launcher.kill();
|
|
@@ -158,11 +117,9 @@ export async function launchChrome(options = {}) {
|
|
|
158
117
|
catch (error) {
|
|
159
118
|
launcher.kill();
|
|
160
119
|
launcher.destroyTmp();
|
|
161
|
-
// If it's already a ChromeLaunchError with diagnostics, just re-throw
|
|
162
120
|
if (error instanceof ChromeLaunchError) {
|
|
163
121
|
throw error;
|
|
164
122
|
}
|
|
165
|
-
// For generic launch failures, add Chrome diagnostics
|
|
166
123
|
const diagnosticLines = getFormattedDiagnostics();
|
|
167
124
|
throw new ChromeLaunchError(`${chromeLaunchFailedError(getErrorMessage(error))}\n\n${diagnosticLines.join('\n')}`, error instanceof Error ? error : undefined);
|
|
168
125
|
}
|
|
@@ -174,13 +131,13 @@ export async function launchChrome(options = {}) {
|
|
|
174
131
|
* session storage) across bdg sessions. This prevents users from having to
|
|
175
132
|
* repeatedly log in or accept cookie consent dialogs during debugging workflows.
|
|
176
133
|
*
|
|
134
|
+
* @param baseDir - Optional base directory (defaults to OS temp dir). Allows injection for testing or custom locations.
|
|
177
135
|
* @returns Absolute path to persistent user-data-dir
|
|
178
136
|
* @throws Error if user data directory cannot be created due to permission issues
|
|
179
137
|
*/
|
|
180
|
-
function getPersistentUserDataDir() {
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
const userDataDir = path.join(baseDir, CHROME_PROFILE_DIR);
|
|
138
|
+
function getPersistentUserDataDir(baseDir) {
|
|
139
|
+
const dir = baseDir ?? os.tmpdir();
|
|
140
|
+
const userDataDir = path.join(dir, 'bdg-chrome', CHROME_PROFILE_DIR);
|
|
184
141
|
if (!fs.existsSync(userDataDir)) {
|
|
185
142
|
try {
|
|
186
143
|
fs.mkdirSync(userDataDir, { recursive: true });
|
|
@@ -202,137 +159,6 @@ function getPersistentUserDataDir() {
|
|
|
202
159
|
* @returns Chrome preferences object or undefined if no preferences specified
|
|
203
160
|
* @throws ChromeLaunchError if prefs file cannot be read, parsed, or doesn't exist
|
|
204
161
|
*/
|
|
205
|
-
function loadChromePrefs(options) {
|
|
206
|
-
if (options.prefsFile) {
|
|
207
|
-
// Validate file exists before attempting to read
|
|
208
|
-
if (!fs.existsSync(options.prefsFile)) {
|
|
209
|
-
throw new ChromeLaunchError(prefsFileNotFoundError(options.prefsFile), new Error(FILE_NOT_EXIST_ERROR));
|
|
210
|
-
}
|
|
211
|
-
try {
|
|
212
|
-
const prefsContent = fs.readFileSync(options.prefsFile, 'utf8');
|
|
213
|
-
const parsed = JSON.parse(prefsContent);
|
|
214
|
-
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
215
|
-
throw new ChromeLaunchError(invalidPrefsFormatError(options.prefsFile, typeof parsed), new Error(INVALID_JSON_STRUCTURE_ERROR));
|
|
216
|
-
}
|
|
217
|
-
return parsed;
|
|
218
|
-
}
|
|
219
|
-
catch (error) {
|
|
220
|
-
if (error instanceof ChromeLaunchError) {
|
|
221
|
-
throw error;
|
|
222
|
-
}
|
|
223
|
-
throw new ChromeLaunchError(prefsLoadError(options.prefsFile, getErrorMessage(error)), error instanceof Error ? error : undefined);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
return options.prefs;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Resolve Chrome binary override from LaunchOptions or CHROME_PATH.
|
|
230
|
-
*
|
|
231
|
-
* When users explicitly set a Chrome binary we skip chrome-launcher's fallback
|
|
232
|
-
* auto-detection to ensure mismatched paths fail fast with actionable errors.
|
|
233
|
-
*
|
|
234
|
-
* @param options - Launch options which may include chromePath
|
|
235
|
-
* @returns Validated Chrome binary path or undefined if no override
|
|
236
|
-
* @throws ChromeLaunchError if override path is invalid or not executable
|
|
237
|
-
*/
|
|
238
|
-
function resolveChromeBinaryOverride(options) {
|
|
239
|
-
const override = options.chromePath ?? process.env['CHROME_PATH'];
|
|
240
|
-
if (!override) {
|
|
241
|
-
return undefined;
|
|
242
|
-
}
|
|
243
|
-
const chromePath = override.trim();
|
|
244
|
-
if (!chromePath) {
|
|
245
|
-
return undefined;
|
|
246
|
-
}
|
|
247
|
-
const sourceLabel = options.chromePath ? 'chromePath option' : 'CHROME_PATH';
|
|
248
|
-
if (!fs.existsSync(chromePath)) {
|
|
249
|
-
const diagnostics = getFormattedDiagnostics();
|
|
250
|
-
throw new ChromeLaunchError(`${chromeBinaryOverrideNotFound(chromePath, sourceLabel)}\n\n${diagnostics.join('\n')}`);
|
|
251
|
-
}
|
|
252
|
-
try {
|
|
253
|
-
const stats = fs.statSync(chromePath);
|
|
254
|
-
if (stats.isDirectory()) {
|
|
255
|
-
throw new ChromeLaunchError(chromeBinaryOverrideNotExecutable(chromePath, sourceLabel));
|
|
256
|
-
}
|
|
257
|
-
fs.accessSync(chromePath, fs.constants.X_OK);
|
|
258
|
-
}
|
|
259
|
-
catch (error) {
|
|
260
|
-
if (error instanceof ChromeLaunchError) {
|
|
261
|
-
throw error;
|
|
262
|
-
}
|
|
263
|
-
throw new ChromeLaunchError(`${chromeBinaryOverrideNotExecutable(chromePath, sourceLabel)}\n\n${getErrorMessage(error)}`, error instanceof Error ? error : undefined);
|
|
264
|
-
}
|
|
265
|
-
return chromePath;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Check if running inside a Docker container
|
|
269
|
-
* @returns true if running in Docker, false otherwise
|
|
270
|
-
*/
|
|
271
|
-
function isDocker() {
|
|
272
|
-
try {
|
|
273
|
-
// Check for /.dockerenv file (most reliable indicator)
|
|
274
|
-
if (fs.existsSync('/.dockerenv')) {
|
|
275
|
-
return true;
|
|
276
|
-
}
|
|
277
|
-
// Check /proc/self/cgroup for docker/containerd indicators
|
|
278
|
-
if (fs.existsSync('/proc/self/cgroup')) {
|
|
279
|
-
const cgroup = fs.readFileSync('/proc/self/cgroup', 'utf8');
|
|
280
|
-
return cgroup.includes('docker') || cgroup.includes('containerd');
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
catch {
|
|
284
|
-
// If we can't read these files, assume not Docker
|
|
285
|
-
}
|
|
286
|
-
return false;
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Build Chrome flags array from launch options.
|
|
290
|
-
*
|
|
291
|
-
* Uses chrome-launcher default flags as base (unless ignoreDefaultFlags is true)
|
|
292
|
-
* and layers bdg-specific overrides on top. Headless mode uses the new headless
|
|
293
|
-
* implementation for better compatibility.
|
|
294
|
-
*
|
|
295
|
-
* When running in Docker, automatically adds GPU-disabling flags to work around
|
|
296
|
-
* graphics limitations in containerized environments.
|
|
297
|
-
*
|
|
298
|
-
* @param options - Launch options containing flag preferences
|
|
299
|
-
* @returns Array of Chrome command-line flags
|
|
300
|
-
*/
|
|
301
|
-
function buildChromeFlags(options) {
|
|
302
|
-
const port = options.port ?? DEFAULT_CDP_PORT;
|
|
303
|
-
const baseFlags = options.ignoreDefaultFlags ? [] : chromeLauncher.Launcher.defaultFlags();
|
|
304
|
-
const bdgFlags = [REMOTE_DEBUGGING_FLAG(port), ...BDG_CHROME_FLAGS];
|
|
305
|
-
// Add Docker-specific flags if running in a container
|
|
306
|
-
const dockerFlags = isDocker() ? DOCKER_CHROME_FLAGS : [];
|
|
307
|
-
// Headless flag must come first to ensure it's not overridden by other flags
|
|
308
|
-
if (options.headless) {
|
|
309
|
-
return [
|
|
310
|
-
HEADLESS_FLAG,
|
|
311
|
-
...baseFlags,
|
|
312
|
-
...bdgFlags,
|
|
313
|
-
...dockerFlags,
|
|
314
|
-
...(options.chromeFlags ?? []),
|
|
315
|
-
];
|
|
316
|
-
}
|
|
317
|
-
return [...baseFlags, ...bdgFlags, ...dockerFlags, ...(options.chromeFlags ?? [])];
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* Type-safe conversion for Chrome preferences from unknown to JSONLike.
|
|
321
|
-
*
|
|
322
|
-
* chrome-launcher requires preferences to match its internal JSONLike type constraint
|
|
323
|
-
* for type safety. This conversion is safe because preferences should always be
|
|
324
|
-
* JSON-serializable values loaded from JSON files or constructed with compatible types.
|
|
325
|
-
*
|
|
326
|
-
* @param prefs - Preferences object with unknown values from JSON parsing
|
|
327
|
-
* @returns Preferences compatible with chrome-launcher's JSONLike constraint, or undefined
|
|
328
|
-
*/
|
|
329
|
-
function ensureJSONCompatiblePrefs(prefs) {
|
|
330
|
-
if (prefs === undefined) {
|
|
331
|
-
return undefined;
|
|
332
|
-
}
|
|
333
|
-
// Safe cast because preferences come from JSON.parse or compatible sources
|
|
334
|
-
return prefs;
|
|
335
|
-
}
|
|
336
162
|
/**
|
|
337
163
|
* Build chrome-launcher options from bdg launch options.
|
|
338
164
|
*
|
|
@@ -347,8 +173,7 @@ function ensureJSONCompatiblePrefs(prefs) {
|
|
|
347
173
|
function buildChromeOptions(options) {
|
|
348
174
|
const userPrefs = loadChromePrefs(options);
|
|
349
175
|
const userDataDir = options.userDataDir ?? getPersistentUserDataDir();
|
|
350
|
-
const chromePathOverride =
|
|
351
|
-
// User preferences take precedence over bdg defaults
|
|
176
|
+
const chromePathOverride = resolveChromeBinary(options);
|
|
352
177
|
const mergedPrefs = userPrefs ? { ...BDG_CHROME_PREFS, ...userPrefs } : BDG_CHROME_PREFS;
|
|
353
178
|
return {
|
|
354
179
|
logLevel: options.logLevel ?? DEFAULT_CHROME_LOG_LEVEL,
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/connection/launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Smart page readiness detection using
|
|
2
|
+
* Smart page readiness detection using fixed thresholds
|
|
3
3
|
*
|
|
4
|
-
* This module provides
|
|
4
|
+
* This module provides page load detection that works for most page types
|
|
5
5
|
* without configuration. It uses a three-phase approach:
|
|
6
6
|
* 1. Load event (baseline readiness)
|
|
7
|
-
* 2. Network stability (
|
|
8
|
-
* 3. DOM stability (
|
|
7
|
+
* 2. Network stability (200ms idle threshold)
|
|
8
|
+
* 3. DOM stability (300ms idle threshold)
|
|
9
9
|
*/
|
|
10
10
|
import type { CDPConnection } from '../connection/cdp.js';
|
|
11
11
|
/**
|
|
@@ -19,14 +19,14 @@ export interface PageReadinessOptions {
|
|
|
19
19
|
maxWaitMs?: number;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* Wait for page to be ready using
|
|
22
|
+
* Wait for page to be ready using fixed thresholds
|
|
23
23
|
*
|
|
24
24
|
* Strategy (always applied):
|
|
25
25
|
* 1. Wait for load event (baseline readiness)
|
|
26
|
-
* 2. Wait for network to stabilize (
|
|
27
|
-
* 3. Wait for DOM to stabilize (
|
|
26
|
+
* 2. Wait for network to stabilize (200ms idle threshold)
|
|
27
|
+
* 3. Wait for DOM to stabilize (300ms idle threshold)
|
|
28
28
|
*
|
|
29
|
-
*
|
|
29
|
+
* Uses fixed thresholds that work well for most pages.
|
|
30
30
|
* No framework detection, no configuration needed.
|
|
31
31
|
* Works for static HTML, SPAs, and everything in between.
|
|
32
32
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageReadiness.d.ts","sourceRoot":"","sources":["../../src/connection/pageReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"pageReadiness.d.ts","sourceRoot":"","sources":["../../src/connection/pageReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAazD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|