browser-debugger-cli 0.5.1 → 0.6.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 +50 -4
- package/dist/__tests__/smoke/error-handling.smoke.test.js +0 -11
- package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -1
- package/dist/cdp/protocol.d.ts +121 -0
- package/dist/cdp/protocol.d.ts.map +1 -0
- package/dist/cdp/protocol.js +215 -0
- package/dist/cdp/protocol.js.map +1 -0
- package/dist/cdp/schema.d.ts +159 -0
- package/dist/cdp/schema.d.ts.map +1 -0
- package/dist/cdp/schema.js +256 -0
- package/dist/cdp/schema.js.map +1 -0
- package/dist/cdp/types.d.ts +139 -0
- package/dist/cdp/types.d.ts.map +1 -0
- package/dist/cdp/types.js +7 -0
- package/dist/cdp/types.js.map +1 -0
- package/dist/commands/cdp.d.ts +10 -1
- package/dist/commands/cdp.d.ts.map +1 -1
- package/dist/commands/cdp.js +363 -26
- package/dist/commands/cdp.js.map +1 -1
- package/dist/commands/cleanup.js +3 -3
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/dom.d.ts.map +1 -1
- package/dist/commands/dom.js +1 -0
- package/dist/commands/dom.js.map +1 -1
- package/dist/commands/domEvalHelpers.d.ts +2 -15
- package/dist/commands/domEvalHelpers.d.ts.map +1 -1
- package/dist/commands/domEvalHelpers.js +1 -1
- package/dist/commands/domEvalHelpers.js.map +1 -1
- package/dist/commands/peek.d.ts.map +1 -1
- package/dist/commands/peek.js +12 -6
- package/dist/commands/peek.js.map +1 -1
- package/dist/commands/shared/CommandRunner.d.ts +2 -0
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +13 -1
- 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 +2 -2
- package/dist/commands/shared/commonOptions.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +21 -12
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.js +2 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.js +2 -2
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tail.d.ts.map +1 -1
- package/dist/commands/tail.js +9 -6
- package/dist/commands/tail.js.map +1 -1
- package/dist/connection/cdp.d.ts.map +1 -1
- package/dist/connection/cdp.js +15 -2
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/domOperations.d.ts.map +1 -1
- package/dist/connection/domOperations.js +3 -1
- package/dist/connection/domOperations.js.map +1 -1
- package/dist/connection/handlers.d.ts +34 -2
- package/dist/connection/handlers.d.ts.map +1 -1
- package/dist/connection/handlers.js +28 -2
- package/dist/connection/handlers.js.map +1 -1
- package/dist/connection/launcher.d.ts.map +1 -1
- package/dist/connection/launcher.js +14 -2
- package/dist/connection/launcher.js.map +1 -1
- package/dist/connection/pageReadiness.d.ts.map +1 -1
- package/dist/connection/pageReadiness.js +6 -6
- package/dist/connection/pageReadiness.js.map +1 -1
- package/dist/connection/typed-cdp.d.ts +144 -0
- package/dist/connection/typed-cdp.d.ts.map +1 -0
- package/dist/connection/typed-cdp.js +120 -0
- package/dist/connection/typed-cdp.js.map +1 -0
- package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
- package/dist/daemon/worker/commandRegistry.js.map +1 -1
- package/dist/telemetry/__tests__/network.contract.test.js +124 -93
- package/dist/telemetry/__tests__/network.contract.test.js.map +1 -1
- package/dist/telemetry/console.d.ts.map +1 -1
- package/dist/telemetry/console.js +3 -2
- package/dist/telemetry/console.js.map +1 -1
- package/dist/telemetry/dialogs.d.ts.map +1 -1
- package/dist/telemetry/dialogs.js.map +1 -1
- package/dist/telemetry/dom.d.ts.map +1 -1
- package/dist/telemetry/dom.js +3 -1
- package/dist/telemetry/dom.js.map +1 -1
- package/dist/telemetry/navigation.d.ts.map +1 -1
- package/dist/telemetry/navigation.js.map +1 -1
- package/dist/telemetry/network.d.ts.map +1 -1
- package/dist/telemetry/network.js.map +1 -1
- package/dist/types.d.ts +0 -141
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/messages/commands.d.ts +1 -0
- package/dist/ui/messages/commands.d.ts.map +1 -1
- package/dist/ui/messages/commands.js +1 -0
- package/dist/ui/messages/commands.js.map +1 -1
- package/dist/ui/messages/errors.d.ts +30 -3
- package/dist/ui/messages/errors.d.ts.map +1 -1
- package/dist/ui/messages/errors.js +36 -8
- package/dist/ui/messages/errors.js.map +1 -1
- package/dist/ui/messages/session.d.ts.map +1 -1
- package/dist/ui/messages/session.js +5 -4
- package/dist/ui/messages/session.js.map +1 -1
- package/dist/ui/messages/validation.d.ts +22 -4
- package/dist/ui/messages/validation.d.ts.map +1 -1
- package/dist/ui/messages/validation.js +26 -5
- package/dist/ui/messages/validation.js.map +1 -1
- package/package.json +2 -1
- package/dist/cli/commands/__tests__/start.unit.test.d.ts +0 -2
- package/dist/cli/commands/__tests__/start.unit.test.d.ts.map +0 -1
- package/dist/cli/commands/__tests__/start.unit.test.js +0 -131
- package/dist/cli/commands/__tests__/start.unit.test.js.map +0 -1
- package/dist/cli/commands/cleanup.d.ts +0 -9
- package/dist/cli/commands/cleanup.d.ts.map +0 -1
- package/dist/cli/commands/cleanup.js +0 -148
- package/dist/cli/commands/cleanup.js.map +0 -1
- package/dist/cli/commands/details.d.ts +0 -9
- package/dist/cli/commands/details.d.ts.map +0 -1
- package/dist/cli/commands/details.js +0 -120
- package/dist/cli/commands/details.js.map +0 -1
- package/dist/cli/commands/peek.d.ts +0 -9
- package/dist/cli/commands/peek.d.ts.map +0 -1
- package/dist/cli/commands/peek.js +0 -64
- package/dist/cli/commands/peek.js.map +0 -1
- package/dist/cli/commands/query.d.ts +0 -9
- package/dist/cli/commands/query.d.ts.map +0 -1
- package/dist/cli/commands/query.js +0 -125
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/start.d.ts +0 -83
- package/dist/cli/commands/start.d.ts.map +0 -1
- package/dist/cli/commands/start.js +0 -204
- package/dist/cli/commands/start.js.map +0 -1
- package/dist/cli/commands/status.d.ts +0 -9
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js +0 -75
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/cli/commands/stop.d.ts +0 -9
- package/dist/cli/commands/stop.d.ts.map +0 -1
- package/dist/cli/commands/stop.js +0 -133
- package/dist/cli/commands/stop.js.map +0 -1
- package/dist/cli/formatters/detailsFormatter.d.ts +0 -10
- package/dist/cli/formatters/detailsFormatter.d.ts.map +0 -1
- package/dist/cli/formatters/detailsFormatter.js +0 -63
- package/dist/cli/formatters/detailsFormatter.js.map +0 -1
- package/dist/cli/formatters/previewFormatter.d.ts +0 -27
- package/dist/cli/formatters/previewFormatter.d.ts.map +0 -1
- package/dist/cli/formatters/previewFormatter.js +0 -155
- package/dist/cli/formatters/previewFormatter.js.map +0 -1
- package/dist/cli/formatters/statusFormatter.d.ts +0 -42
- package/dist/cli/formatters/statusFormatter.d.ts.map +0 -1
- package/dist/cli/formatters/statusFormatter.js +0 -126
- package/dist/cli/formatters/statusFormatter.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/OutputBuilder.d.ts +0 -59
- package/dist/cli/handlers/OutputBuilder.d.ts.map +0 -1
- package/dist/cli/handlers/OutputBuilder.js +0 -136
- package/dist/cli/handlers/OutputBuilder.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 -118
- 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 -35
- 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 -41
- package/dist/cli/handlers/ShutdownController.d.ts.map +0 -1
- package/dist/cli/handlers/ShutdownController.js +0 -94
- 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/cli/handlers/sessionController.d.ts +0 -62
- package/dist/cli/handlers/sessionController.d.ts.map +0 -1
- package/dist/cli/handlers/sessionController.js +0 -316
- package/dist/cli/handlers/sessionController.js.map +0 -1
- package/dist/cli/registry.d.ts +0 -11
- package/dist/cli/registry.d.ts.map +0 -1
- package/dist/cli/registry.js +0 -21
- package/dist/cli/registry.js.map +0 -1
- package/dist/collectors/console.d.ts +0 -19
- package/dist/collectors/console.d.ts.map +0 -1
- package/dist/collectors/console.js +0 -87
- package/dist/collectors/console.js.map +0 -1
- package/dist/collectors/dom.d.ts +0 -21
- package/dist/collectors/dom.d.ts.map +0 -1
- package/dist/collectors/dom.js +0 -99
- package/dist/collectors/dom.js.map +0 -1
- package/dist/collectors/network.d.ts +0 -32
- package/dist/collectors/network.d.ts.map +0 -1
- package/dist/collectors/network.js +0 -191
- package/dist/collectors/network.js.map +0 -1
- package/dist/connection/tabs.d.ts +0 -52
- package/dist/connection/tabs.d.ts.map +0 -1
- package/dist/connection/tabs.js +0 -227
- package/dist/connection/tabs.js.map +0 -1
- package/dist/help/machineReadableHelp.d.ts +0 -100
- package/dist/help/machineReadableHelp.d.ts.map +0 -1
- package/dist/help/machineReadableHelp.js +0 -139
- package/dist/help/machineReadableHelp.js.map +0 -1
- package/dist/session/BdgSession.d.ts +0 -91
- package/dist/session/BdgSession.d.ts.map +0 -1
- package/dist/session/BdgSession.js +0 -230
- package/dist/session/BdgSession.js.map +0 -1
- package/dist/ui/errors/SystemErrors.d.ts +0 -22
- package/dist/ui/errors/SystemErrors.d.ts.map +0 -1
- package/dist/ui/errors/SystemErrors.js +0 -23
- package/dist/ui/errors/SystemErrors.js.map +0 -1
- package/dist/ui/errors.d.ts +0 -39
- package/dist/ui/errors.d.ts.map +0 -1
- package/dist/ui/errors.js +0 -48
- package/dist/ui/errors.js.map +0 -1
- package/dist/ui/messages/deprecation.d.ts +0 -30
- package/dist/ui/messages/deprecation.d.ts.map +0 -1
- package/dist/ui/messages/deprecation.js +0 -49
- package/dist/ui/messages/deprecation.js.map +0 -1
- package/dist/ui/messages/index.d.ts +0 -12
- package/dist/ui/messages/index.d.ts.map +0 -1
- package/dist/ui/messages/index.js +0 -12
- package/dist/ui/messages/index.js.map +0 -1
- package/dist/utils/__tests__/filters.unit.test.d.ts +0 -2
- package/dist/utils/__tests__/filters.unit.test.d.ts.map +0 -1
- package/dist/utils/__tests__/filters.unit.test.js +0 -239
- package/dist/utils/__tests__/filters.unit.test.js.map +0 -1
- package/dist/utils/cdpHandlers.d.ts +0 -31
- package/dist/utils/cdpHandlers.d.ts.map +0 -1
- package/dist/utils/cdpHandlers.js +0 -38
- package/dist/utils/cdpHandlers.js.map +0 -1
- package/dist/utils/chromeDiagnostics.d.ts +0 -16
- package/dist/utils/chromeDiagnostics.d.ts.map +0 -1
- package/dist/utils/chromeDiagnostics.js +0 -37
- package/dist/utils/chromeDiagnostics.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -82
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -88
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/filters.d.ts +0 -148
- package/dist/utils/filters.d.ts.map +0 -1
- package/dist/utils/filters.js +0 -358
- package/dist/utils/filters.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -98
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -93
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/pageReadiness.d.ts +0 -46
- package/dist/utils/pageReadiness.d.ts.map +0 -1
- package/dist/utils/pageReadiness.js +0 -270
- package/dist/utils/pageReadiness.js.map +0 -1
- package/dist/utils/session.d.ts +0 -200
- package/dist/utils/session.d.ts.map +0 -1
- package/dist/utils/session.js +0 -498
- package/dist/utils/session.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
|
@@ -1,316 +0,0 @@
|
|
|
1
|
-
import { getChromeDiagnostics, formatDiagnosticsForError } from '../../utils/chromeDiagnostics.js';
|
|
2
|
-
import { ChromeLaunchError } from '../../utils/errors.js';
|
|
3
|
-
import { getExitCodeForError } from '../../utils/exitCodes.js';
|
|
4
|
-
import { writePid, writeSessionMetadata, writeChromePid } from '../../utils/session.js';
|
|
5
|
-
import { ChromeBootstrap } from './ChromeBootstrap.js';
|
|
6
|
-
import { OutputBuilder } from './OutputBuilder.js';
|
|
7
|
-
import { PreviewWriter } from './PreviewWriter.js';
|
|
8
|
-
import { SessionLock } from './SessionLock.js';
|
|
9
|
-
import { SessionLoop } from './SessionLoop.js';
|
|
10
|
-
import { ShutdownController } from './ShutdownController.js';
|
|
11
|
-
import { SignalHandler } from './SignalHandler.js';
|
|
12
|
-
import { TargetSetup } from './TargetSetup.js';
|
|
13
|
-
/**
|
|
14
|
-
* Report detailed diagnostic information when Chrome fails to launch.
|
|
15
|
-
*
|
|
16
|
-
* Uses chrome-launcher APIs to detect available Chrome installations and
|
|
17
|
-
* provide actionable error messages to help users troubleshoot.
|
|
18
|
-
*
|
|
19
|
-
* @param error Original error that caused the failure
|
|
20
|
-
*/
|
|
21
|
-
function reportLauncherFailure(error) {
|
|
22
|
-
console.error('\n--- Chrome Launch Diagnostics ---\n');
|
|
23
|
-
// Show original error
|
|
24
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
25
|
-
console.error(`Error: ${errorMessage}\n`);
|
|
26
|
-
// Get diagnostics using shared utility (cached to avoid repeated scans)
|
|
27
|
-
const diagnostics = getChromeDiagnostics();
|
|
28
|
-
const diagnosticLines = formatDiagnosticsForError(diagnostics);
|
|
29
|
-
diagnosticLines.forEach((line) => console.error(line));
|
|
30
|
-
// Provide troubleshooting steps
|
|
31
|
-
console.error('Troubleshooting:');
|
|
32
|
-
console.error(' 1. Verify Chrome is installed and accessible');
|
|
33
|
-
console.error(' 2. Check file permissions for Chrome binary');
|
|
34
|
-
console.error(' 3. Try specifying a custom port: bdg <url> --port 9223');
|
|
35
|
-
console.error(' 4. Use strict port mode: bdg <url> --port-strict');
|
|
36
|
-
console.error(' 5. Check if another process is using the debugging port\n');
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Aggressively cleanup stale Chrome processes launched by bdg.
|
|
40
|
-
*
|
|
41
|
-
* This function kills Chrome instances that were launched by bdg by:
|
|
42
|
-
* 1. Reading the Chrome PID from persistent cache (~/.bdg/chrome.pid)
|
|
43
|
-
* 2. Killing that specific Chrome process using cross-platform kill logic
|
|
44
|
-
*
|
|
45
|
-
* The cache survives session cleanup, so this works even after a normal session end.
|
|
46
|
-
*
|
|
47
|
-
* Cross-platform killing:
|
|
48
|
-
* - Windows: Uses `taskkill /pid <pid> /T /F` to kill process tree
|
|
49
|
-
* - Unix/macOS: Uses `process.kill(-pid, 'SIGKILL')` to kill process group
|
|
50
|
-
*
|
|
51
|
-
* Note: We can't use chromeLauncher.killAll() because it only tracks instances
|
|
52
|
-
* created via chromeLauncher.launch(), but we use new chromeLauncher.Launcher()
|
|
53
|
-
* which doesn't register in that tracking set.
|
|
54
|
-
*
|
|
55
|
-
* @returns Number of errors encountered during cleanup
|
|
56
|
-
*/
|
|
57
|
-
export async function cleanupStaleChrome() {
|
|
58
|
-
console.error('\nAttempting to kill stale Chrome processes...');
|
|
59
|
-
try {
|
|
60
|
-
// Import session utilities (dynamic import for ES modules)
|
|
61
|
-
const sessionModule = await import('../../utils/session.js');
|
|
62
|
-
const { readChromePid, clearChromePid, killChromeProcess } = sessionModule;
|
|
63
|
-
// Read Chrome PID from persistent cache
|
|
64
|
-
const chromePid = readChromePid();
|
|
65
|
-
if (!chromePid) {
|
|
66
|
-
console.error('Warning: No Chrome PID found in cache');
|
|
67
|
-
console.error(' Either Chrome was already running, or no Chrome was launched by bdg\n');
|
|
68
|
-
return 0;
|
|
69
|
-
}
|
|
70
|
-
// Kill Chrome process (cross-platform)
|
|
71
|
-
console.error(`Killing Chrome process (PID: ${chromePid})...`);
|
|
72
|
-
try {
|
|
73
|
-
// Use SIGKILL for aggressive cleanup (force kill)
|
|
74
|
-
killChromeProcess(chromePid, 'SIGKILL');
|
|
75
|
-
console.error('Chrome process killed successfully');
|
|
76
|
-
// Clear the cache after successful kill
|
|
77
|
-
clearChromePid();
|
|
78
|
-
return 0;
|
|
79
|
-
}
|
|
80
|
-
catch (killError) {
|
|
81
|
-
const errorMessage = killError instanceof Error ? killError.message : String(killError);
|
|
82
|
-
console.error(`Error: Failed to kill Chrome process: ${errorMessage}`);
|
|
83
|
-
console.error(' Try manually killing Chrome processes if issues persist\n');
|
|
84
|
-
return 1;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
console.error(`Error: Failed to cleanup Chrome processes: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
89
|
-
return 1;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Encapsulates session state and lifecycle management
|
|
94
|
-
*/
|
|
95
|
-
class SessionContext {
|
|
96
|
-
session = null;
|
|
97
|
-
launchedChrome = null;
|
|
98
|
-
isShuttingDown = false;
|
|
99
|
-
previewWriter = null;
|
|
100
|
-
startTime;
|
|
101
|
-
target = null;
|
|
102
|
-
compact;
|
|
103
|
-
shutdownController;
|
|
104
|
-
/**
|
|
105
|
-
* Create a new session context and track the start timestamp.
|
|
106
|
-
* The context is shared with signal handlers so they can orchestrate shutdown.
|
|
107
|
-
*
|
|
108
|
-
* @param compact - If true, use compact JSON format (no indentation)
|
|
109
|
-
*/
|
|
110
|
-
constructor(compact = false) {
|
|
111
|
-
this.startTime = Date.now();
|
|
112
|
-
this.compact = compact;
|
|
113
|
-
this.shutdownController = new ShutdownController(this);
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Handle graceful shutdown: stops collectors, writes output, and exits.
|
|
117
|
-
*
|
|
118
|
-
* Idempotent — repeated calls after shutdown has started are ignored.
|
|
119
|
-
*/
|
|
120
|
-
async stop() {
|
|
121
|
-
await this.shutdownController.shutdown();
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Cleanup on error paths without exiting the process.
|
|
125
|
-
* Clears timers, tears down Chrome if bdg launched it, and removes session files.
|
|
126
|
-
*/
|
|
127
|
-
async cleanup() {
|
|
128
|
-
await this.shutdownController.cleanup();
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Phase 4: start requested collectors and persist session metadata for tooling.
|
|
133
|
-
*
|
|
134
|
-
* @param session Active BDG session instance
|
|
135
|
-
* @param collectors Collector types requested by the CLI
|
|
136
|
-
* @param startTime Timestamp when the session began
|
|
137
|
-
* @param port Chrome debugging port in use
|
|
138
|
-
* @param target Target metadata (includes websocket URL)
|
|
139
|
-
* @param chromePid PID of Chrome if bdg launched it (optional)
|
|
140
|
-
*/
|
|
141
|
-
async function startCollectorsAndMetadata(session, collectors, startTime, port, target, chromePid) {
|
|
142
|
-
// Start collectors with timing
|
|
143
|
-
const collectorStartTime = Date.now();
|
|
144
|
-
for (const collector of collectors) {
|
|
145
|
-
const individualStart = Date.now();
|
|
146
|
-
await session.startCollector(collector);
|
|
147
|
-
const individualDuration = Date.now() - individualStart;
|
|
148
|
-
console.error(`[PERF] Collector '${collector}' initialized: ${individualDuration}ms`);
|
|
149
|
-
}
|
|
150
|
-
const totalCollectorDuration = Date.now() - collectorStartTime;
|
|
151
|
-
console.error(`[PERF] All collectors initialized: ${totalCollectorDuration}ms`);
|
|
152
|
-
// Write session metadata
|
|
153
|
-
writePid(process.pid);
|
|
154
|
-
writeSessionMetadata({
|
|
155
|
-
bdgPid: process.pid,
|
|
156
|
-
chromePid,
|
|
157
|
-
startTime,
|
|
158
|
-
port,
|
|
159
|
-
targetId: target.id,
|
|
160
|
-
webSocketDebuggerUrl: target.webSocketDebuggerUrl,
|
|
161
|
-
activeCollectors: collectors,
|
|
162
|
-
});
|
|
163
|
-
// Note: Chrome PID cache is written immediately after launch (Phase 2)
|
|
164
|
-
// to ensure it's available even if later phases fail
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Phase 5: Start preview writer with two-tier system
|
|
168
|
-
*
|
|
169
|
-
* Uses async I/O with mutex to prevent event loop blocking and overlapping writes.
|
|
170
|
-
*/
|
|
171
|
-
function startPreviewWriter(context, compact) {
|
|
172
|
-
if (!context.session) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
// Create and start preview writer
|
|
176
|
-
context.previewWriter = new PreviewWriter(context.session, context.startTime, 5000, // intervalMs
|
|
177
|
-
compact);
|
|
178
|
-
context.previewWriter.start();
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Print collection status message
|
|
182
|
-
*/
|
|
183
|
-
function printCollectionStatus(collectors, timeout) {
|
|
184
|
-
const collectorNames = collectors.length === 3 ? 'network, console, and DOM' : collectors.join(', ');
|
|
185
|
-
if (timeout) {
|
|
186
|
-
console.error(`Collecting ${collectorNames}... (Ctrl+C to stop and output, or wait ${timeout}s for timeout)`);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
console.error(`Collecting ${collectorNames}... (Ctrl+C to stop and output, or use 'bdg stop')`);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Start a new session
|
|
194
|
-
*
|
|
195
|
-
* @param url - Target URL to navigate to
|
|
196
|
-
* @param options - Session configuration options
|
|
197
|
-
* @param options.port - Chrome debugging port
|
|
198
|
-
* @param options.timeout - Auto-stop after timeout (seconds)
|
|
199
|
-
* @param options.reuseTab - Navigate existing tab instead of creating new one
|
|
200
|
-
* @param options.userDataDir - Chrome user data directory
|
|
201
|
-
* @param options.includeAll - Include all data (disable filtering)
|
|
202
|
-
* @param options.logLevel - Chrome launcher log level
|
|
203
|
-
* @param options.prefs - Chrome preferences as object
|
|
204
|
-
* @param options.prefsFile - Path to JSON file containing Chrome preferences
|
|
205
|
-
* @param options.chromeFlags - Additional Chrome command-line flags
|
|
206
|
-
* @param options.connectionPollInterval - Milliseconds between CDP readiness checks
|
|
207
|
-
* @param options.maxConnectionRetries - Maximum retry attempts before failing
|
|
208
|
-
* @param options.portStrictMode - Fail if Chrome debugging port is already in use
|
|
209
|
-
* @param collectors - Array of collector types to enable ('dom', 'network', 'console')
|
|
210
|
-
* @returns Promise that resolves when session completes
|
|
211
|
-
*/
|
|
212
|
-
export async function startSession(url, options, collectors) {
|
|
213
|
-
const context = new SessionContext(options.compact ?? false);
|
|
214
|
-
// Setup signal handlers for graceful shutdown
|
|
215
|
-
const signalHandler = new SignalHandler({
|
|
216
|
-
onShutdown: async () => {
|
|
217
|
-
await context.stop();
|
|
218
|
-
},
|
|
219
|
-
});
|
|
220
|
-
signalHandler.register();
|
|
221
|
-
try {
|
|
222
|
-
// Phase 1: Lock acquisition and validation
|
|
223
|
-
const targetUrl = SessionLock.acquire(url, collectors);
|
|
224
|
-
// Phase 2: Chrome bootstrap
|
|
225
|
-
// Build launcher options, filtering out undefined values
|
|
226
|
-
const launchOptions = Object.fromEntries(Object.entries({
|
|
227
|
-
userDataDir: options.userDataDir,
|
|
228
|
-
logLevel: options.logLevel,
|
|
229
|
-
prefs: options.prefs,
|
|
230
|
-
prefsFile: options.prefsFile,
|
|
231
|
-
chromeFlags: options.chromeFlags,
|
|
232
|
-
connectionPollInterval: options.connectionPollInterval,
|
|
233
|
-
maxConnectionRetries: options.maxConnectionRetries,
|
|
234
|
-
portStrictMode: options.portStrictMode,
|
|
235
|
-
}).filter(([, value]) => value !== undefined));
|
|
236
|
-
context.launchedChrome = await ChromeBootstrap.launch(options.port, targetUrl, launchOptions);
|
|
237
|
-
// Write Chrome PID to persistent cache immediately after launch
|
|
238
|
-
// This must happen before Phase 3 so it's available even if setup fails
|
|
239
|
-
if (context.launchedChrome?.pid) {
|
|
240
|
-
writeChromePid(context.launchedChrome.pid);
|
|
241
|
-
}
|
|
242
|
-
// Phase 3: CDP connection and target setup
|
|
243
|
-
const setupStart = Date.now();
|
|
244
|
-
const sessionOptions = {
|
|
245
|
-
includeAll: options.includeAll ?? false,
|
|
246
|
-
fetchAllBodies: options.fetchAllBodies ?? false,
|
|
247
|
-
compact: options.compact ?? false,
|
|
248
|
-
};
|
|
249
|
-
if (options.fetchBodiesInclude !== undefined) {
|
|
250
|
-
sessionOptions.fetchBodiesInclude = options.fetchBodiesInclude;
|
|
251
|
-
}
|
|
252
|
-
if (options.fetchBodiesExclude !== undefined) {
|
|
253
|
-
sessionOptions.fetchBodiesExclude = options.fetchBodiesExclude;
|
|
254
|
-
}
|
|
255
|
-
if (options.networkInclude !== undefined) {
|
|
256
|
-
sessionOptions.networkInclude = options.networkInclude;
|
|
257
|
-
}
|
|
258
|
-
if (options.networkExclude !== undefined) {
|
|
259
|
-
sessionOptions.networkExclude = options.networkExclude;
|
|
260
|
-
}
|
|
261
|
-
const setupResult = await TargetSetup.setup(url, targetUrl, options.port, options.reuseTab ?? false, sessionOptions);
|
|
262
|
-
const session = setupResult.session;
|
|
263
|
-
const target = setupResult.target;
|
|
264
|
-
context.session = session;
|
|
265
|
-
context.target = target;
|
|
266
|
-
console.error(`[PERF] CDP connection and target setup: ${Date.now() - setupStart}ms`);
|
|
267
|
-
// Phase 4: Start collectors and write metadata
|
|
268
|
-
await startCollectorsAndMetadata(session, collectors, context.startTime, options.port, target, context.launchedChrome?.pid);
|
|
269
|
-
// Log active collectors for forensic tracking and optimization prioritization
|
|
270
|
-
console.error(`[bdg] active collectors: ${collectors.join(', ')} (${url}, port ${options.port})`);
|
|
271
|
-
// Total session startup time
|
|
272
|
-
const totalStartupTime = Date.now() - context.startTime;
|
|
273
|
-
console.error(`[PERF] Total session startup: ${totalStartupTime}ms`);
|
|
274
|
-
// Print status
|
|
275
|
-
printCollectionStatus(collectors, options.timeout);
|
|
276
|
-
// Set timeout if explicitly provided
|
|
277
|
-
if (options.timeout) {
|
|
278
|
-
setTimeout(() => {
|
|
279
|
-
console.error(`\nTimeout reached (${options.timeout}s)`);
|
|
280
|
-
void context.stop();
|
|
281
|
-
}, options.timeout * 1000);
|
|
282
|
-
}
|
|
283
|
-
// Phase 5: Start preview writer
|
|
284
|
-
startPreviewWriter(context, options.compact ?? false);
|
|
285
|
-
// Optional: Log memory usage periodically (every 30s)
|
|
286
|
-
const memoryLogInterval = setInterval(() => {
|
|
287
|
-
const usage = process.memoryUsage();
|
|
288
|
-
const heapUsedMB = (usage.heapUsed / 1024 / 1024).toFixed(2);
|
|
289
|
-
const heapTotalMB = (usage.heapTotal / 1024 / 1024).toFixed(2);
|
|
290
|
-
const rssMB = (usage.rss / 1024 / 1024).toFixed(2);
|
|
291
|
-
console.error(`[PERF] Memory: Heap ${heapUsedMB}/${heapTotalMB} MB, RSS ${rssMB} MB`);
|
|
292
|
-
}, 30000);
|
|
293
|
-
// Store interval in context for cleanup
|
|
294
|
-
const originalCleanup = context.cleanup.bind(context);
|
|
295
|
-
context.cleanup = async () => {
|
|
296
|
-
clearInterval(memoryLogInterval);
|
|
297
|
-
await originalCleanup();
|
|
298
|
-
};
|
|
299
|
-
// Phase 6: Run session loop
|
|
300
|
-
await SessionLoop.run(session, target);
|
|
301
|
-
}
|
|
302
|
-
catch (error) {
|
|
303
|
-
// Show diagnostic information for Chrome launch failures
|
|
304
|
-
if (error instanceof ChromeLaunchError) {
|
|
305
|
-
reportLauncherFailure(error);
|
|
306
|
-
}
|
|
307
|
-
const errorOutput = OutputBuilder.buildError(error, context.startTime, context.target ?? undefined);
|
|
308
|
-
console.log(JSON.stringify(errorOutput, null, 2));
|
|
309
|
-
// Cleanup on error
|
|
310
|
-
await context.cleanup();
|
|
311
|
-
// Use semantic exit codes based on error type
|
|
312
|
-
const exitCode = getExitCodeForError(error);
|
|
313
|
-
process.exit(exitCode);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
//# sourceMappingURL=sessionController.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sessionController.js","sourceRoot":"","sources":["../../../src/cli/handlers/sessionController.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/registry.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Command } from 'commander';
|
|
2
|
-
/**
|
|
3
|
-
* Command registration function type
|
|
4
|
-
*/
|
|
5
|
-
export type CommandRegistrar = (program: Command) => void;
|
|
6
|
-
/**
|
|
7
|
-
* Registry of all CLI commands
|
|
8
|
-
* Order matters: start commands first (includes default), then others
|
|
9
|
-
*/
|
|
10
|
-
export declare const commandRegistry: CommandRegistrar[];
|
|
11
|
-
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,gBAAgB,EAQ7C,CAAC"}
|
package/dist/cli/registry.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { registerCleanupCommand } from './commands/cleanup.js';
|
|
2
|
-
import { registerDetailsCommand } from './commands/details.js';
|
|
3
|
-
import { registerPeekCommand } from './commands/peek.js';
|
|
4
|
-
import { registerQueryCommand } from './commands/query.js';
|
|
5
|
-
import { registerStartCommands } from './commands/start.js';
|
|
6
|
-
import { registerStatusCommand } from './commands/status.js';
|
|
7
|
-
import { registerStopCommand } from './commands/stop.js';
|
|
8
|
-
/**
|
|
9
|
-
* Registry of all CLI commands
|
|
10
|
-
* Order matters: start commands first (includes default), then others
|
|
11
|
-
*/
|
|
12
|
-
export const commandRegistry = [
|
|
13
|
-
registerStartCommands, // Default + dom/network/console
|
|
14
|
-
registerQueryCommand,
|
|
15
|
-
registerStopCommand,
|
|
16
|
-
registerStatusCommand,
|
|
17
|
-
registerCleanupCommand,
|
|
18
|
-
registerDetailsCommand,
|
|
19
|
-
registerPeekCommand,
|
|
20
|
-
];
|
|
21
|
-
//# sourceMappingURL=registry.js.map
|
package/dist/cli/registry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAO7D;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAuB;IACjD,qBAAqB,EAAE,gCAAgC;IACvD,oBAAoB;IACpB,mBAAmB;IACnB,qBAAqB;IACrB,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;CACpB,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { CDPConnection } from '../connection/cdp.js';
|
|
2
|
-
import type { ConsoleMessage, CleanupFunction } from '../types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Start collecting console messages and exceptions via CDP Runtime domain.
|
|
5
|
-
*
|
|
6
|
-
* Captures console.log, console.error, etc. and JavaScript exceptions thrown in the page.
|
|
7
|
-
*
|
|
8
|
-
* @param cdp - CDP connection instance
|
|
9
|
-
* @param messages - Array to populate with console messages
|
|
10
|
-
* @param includeAll - If true, disable default pattern filtering (default: false)
|
|
11
|
-
* @returns Cleanup function to remove event handlers
|
|
12
|
-
*
|
|
13
|
-
* @remarks
|
|
14
|
-
* - Message limit of 10,000 prevents memory issues in long-running sessions
|
|
15
|
-
* - After limit is reached, new messages are silently dropped (warning logged once)
|
|
16
|
-
* - By default, common dev server noise patterns are filtered out (use includeAll to disable)
|
|
17
|
-
*/
|
|
18
|
-
export declare function startConsoleCollection(cdp: CDPConnection, messages: ConsoleMessage[], includeAll?: boolean): Promise<CleanupFunction>;
|
|
19
|
-
//# sourceMappingURL=console.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/collectors/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAGhB,MAAM,SAAS,CAAC;AAIjB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,cAAc,EAAE,EAC1B,UAAU,GAAE,OAAe,GAC1B,OAAO,CAAC,eAAe,CAAC,CAoF1B"}
|
|
@@ -1,87 +0,0 @@
|
|
|
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, 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, 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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/collectors/console.ts"],"names":[],"mappings":"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"}
|
package/dist/collectors/dom.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { CDPConnection } from '../connection/cdp.js';
|
|
2
|
-
import type { DOMData, CleanupFunction } from '../types.js';
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/collectors/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"}
|
package/dist/collectors/dom.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/collectors/dom.ts"],"names":[],"mappings":"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"}
|