claude-chrome-parallel 3.0.3 → 3.4.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/LICENSE +21 -21
- package/README.md +398 -464
- package/assets/demo.svg +278 -173
- package/dist/cdp/client.d.ts +60 -2
- package/dist/cdp/client.d.ts.map +1 -1
- package/dist/cdp/client.js +344 -5
- package/dist/cdp/client.js.map +1 -1
- package/dist/cdp/connection-pool.d.ts.map +1 -1
- package/dist/cdp/connection-pool.js +20 -4
- package/dist/cdp/connection-pool.js.map +1 -1
- package/dist/chrome/launcher.d.ts +11 -0
- package/dist/chrome/launcher.d.ts.map +1 -1
- package/dist/chrome/launcher.js +124 -10
- package/dist/chrome/launcher.js.map +1 -1
- package/dist/chrome/pool.d.ts +54 -0
- package/dist/chrome/pool.d.ts.map +1 -0
- package/dist/chrome/pool.js +301 -0
- package/dist/chrome/pool.js.map +1 -0
- package/dist/chrome/profile-detector.d.ts +52 -0
- package/dist/chrome/profile-detector.d.ts.map +1 -0
- package/dist/chrome/profile-detector.js +246 -0
- package/dist/chrome/profile-detector.js.map +1 -0
- package/dist/cli/claude-session.js +15 -15
- package/dist/cli/index.js +162 -37
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/update-check.d.ts +9 -0
- package/dist/cli/update-check.js +141 -0
- package/dist/cli/update-check.js.map +1 -0
- package/dist/config/global.d.ts +31 -0
- package/dist/config/global.d.ts.map +1 -1
- package/dist/config/global.js.map +1 -1
- package/dist/dashboard/activity-tracker.d.ts +60 -0
- package/dist/dashboard/activity-tracker.d.ts.map +1 -0
- package/dist/dashboard/activity-tracker.js +178 -0
- package/dist/dashboard/activity-tracker.js.map +1 -0
- package/dist/dashboard/ansi.d.ts +117 -0
- package/dist/dashboard/ansi.d.ts.map +1 -0
- package/dist/dashboard/ansi.js +199 -0
- package/dist/dashboard/ansi.js.map +1 -0
- package/dist/dashboard/index.d.ts +110 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +412 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/keyboard-handler.d.ts +43 -0
- package/dist/dashboard/keyboard-handler.d.ts.map +1 -0
- package/dist/dashboard/keyboard-handler.js +215 -0
- package/dist/dashboard/keyboard-handler.js.map +1 -0
- package/dist/dashboard/operation-controller.d.ts +76 -0
- package/dist/dashboard/operation-controller.d.ts.map +1 -0
- package/dist/dashboard/operation-controller.js +167 -0
- package/dist/dashboard/operation-controller.js.map +1 -0
- package/dist/dashboard/renderer.d.ts +76 -0
- package/dist/dashboard/renderer.d.ts.map +1 -0
- package/dist/dashboard/renderer.js +193 -0
- package/dist/dashboard/renderer.js.map +1 -0
- package/dist/dashboard/types.d.ts +56 -0
- package/dist/dashboard/types.d.ts.map +1 -0
- package/dist/dashboard/types.js +12 -0
- package/dist/dashboard/types.js.map +1 -0
- package/dist/dashboard/views/main-view.d.ts +23 -0
- package/dist/dashboard/views/main-view.d.ts.map +1 -0
- package/dist/dashboard/views/main-view.js +143 -0
- package/dist/dashboard/views/main-view.js.map +1 -0
- package/dist/dashboard/views/sessions-view.d.ts +22 -0
- package/dist/dashboard/views/sessions-view.d.ts.map +1 -0
- package/dist/dashboard/views/sessions-view.js +104 -0
- package/dist/dashboard/views/sessions-view.js.map +1 -0
- package/dist/dashboard/views/tabs-view.d.ts +21 -0
- package/dist/dashboard/views/tabs-view.d.ts.map +1 -0
- package/dist/dashboard/views/tabs-view.js +92 -0
- package/dist/dashboard/views/tabs-view.js.map +1 -0
- package/dist/hints/hint-engine.d.ts +65 -0
- package/dist/hints/hint-engine.d.ts.map +1 -0
- package/dist/hints/hint-engine.js +156 -0
- package/dist/hints/hint-engine.js.map +1 -0
- package/dist/hints/index.d.ts +8 -0
- package/dist/hints/index.d.ts.map +1 -0
- package/dist/hints/index.js +11 -0
- package/dist/hints/index.js.map +1 -0
- package/dist/hints/pattern-learner.d.ts +76 -0
- package/dist/hints/pattern-learner.d.ts.map +1 -0
- package/dist/hints/pattern-learner.js +254 -0
- package/dist/hints/pattern-learner.js.map +1 -0
- package/dist/hints/rules/composite-suggestions.d.ts +6 -0
- package/dist/hints/rules/composite-suggestions.d.ts.map +1 -0
- package/dist/hints/rules/composite-suggestions.js +66 -0
- package/dist/hints/rules/composite-suggestions.js.map +1 -0
- package/dist/hints/rules/error-recovery.d.ts +7 -0
- package/dist/hints/rules/error-recovery.d.ts.map +1 -0
- package/dist/hints/rules/error-recovery.js +47 -0
- package/dist/hints/rules/error-recovery.js.map +1 -0
- package/dist/hints/rules/learned-rules.d.ts +13 -0
- package/dist/hints/rules/learned-rules.d.ts.map +1 -0
- package/dist/hints/rules/learned-rules.js +27 -0
- package/dist/hints/rules/learned-rules.js.map +1 -0
- package/dist/hints/rules/repetition-detection.d.ts +7 -0
- package/dist/hints/rules/repetition-detection.d.ts.map +1 -0
- package/dist/hints/rules/repetition-detection.js +82 -0
- package/dist/hints/rules/repetition-detection.js.map +1 -0
- package/dist/hints/rules/sequence-detection.d.ts +6 -0
- package/dist/hints/rules/sequence-detection.d.ts.map +1 -0
- package/dist/hints/rules/sequence-detection.js +61 -0
- package/dist/hints/rules/sequence-detection.js.map +1 -0
- package/dist/hints/rules/success-hints.d.ts +6 -0
- package/dist/hints/rules/success-hints.d.ts.map +1 -0
- package/dist/hints/rules/success-hints.js +62 -0
- package/dist/hints/rules/success-hints.js.map +1 -0
- package/dist/index.js +190 -55
- package/dist/index.js.map +1 -1
- package/dist/lightpanda/launcher.d.ts +58 -0
- package/dist/lightpanda/launcher.d.ts.map +1 -0
- package/dist/lightpanda/launcher.js +199 -0
- package/dist/lightpanda/launcher.js.map +1 -0
- package/dist/mcp-server.d.ts +38 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +220 -6
- package/dist/mcp-server.js.map +1 -1
- package/dist/orchestration/state-manager.js +46 -46
- package/dist/orchestration/workflow-engine.d.ts +1 -0
- package/dist/orchestration/workflow-engine.d.ts.map +1 -1
- package/dist/orchestration/workflow-engine.js +112 -114
- package/dist/orchestration/workflow-engine.js.map +1 -1
- package/dist/resources/usage-guide.d.ts +13 -0
- package/dist/resources/usage-guide.d.ts.map +1 -0
- package/dist/resources/usage-guide.js +101 -0
- package/dist/resources/usage-guide.js.map +1 -0
- package/dist/router/browser-router.d.ts +51 -0
- package/dist/router/browser-router.d.ts.map +1 -0
- package/dist/router/browser-router.js +178 -0
- package/dist/router/browser-router.js.map +1 -0
- package/dist/router/cookie-sync.d.ts +48 -0
- package/dist/router/cookie-sync.d.ts.map +1 -0
- package/dist/router/cookie-sync.js +106 -0
- package/dist/router/cookie-sync.js.map +1 -0
- package/dist/router/index.d.ts +5 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +10 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/tool-routing-registry.d.ts +21 -0
- package/dist/router/tool-routing-registry.d.ts.map +1 -0
- package/dist/router/tool-routing-registry.js +90 -0
- package/dist/router/tool-routing-registry.js.map +1 -0
- package/dist/session-manager.d.ts +41 -1
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +216 -21
- package/dist/session-manager.js.map +1 -1
- package/dist/tools/click-element.d.ts +8 -0
- package/dist/tools/click-element.d.ts.map +1 -0
- package/dist/tools/click-element.js +383 -0
- package/dist/tools/click-element.js.map +1 -0
- package/dist/tools/computer.d.ts.map +1 -1
- package/dist/tools/computer.js +198 -34
- package/dist/tools/computer.js.map +1 -1
- package/dist/tools/console-capture.d.ts +6 -0
- package/dist/tools/console-capture.d.ts.map +1 -0
- package/dist/tools/console-capture.js +320 -0
- package/dist/tools/console-capture.js.map +1 -0
- package/dist/tools/cookies.d.ts +6 -0
- package/dist/tools/cookies.d.ts.map +1 -0
- package/dist/tools/cookies.js +263 -0
- package/dist/tools/cookies.js.map +1 -0
- package/dist/tools/drag-drop.d.ts +6 -0
- package/dist/tools/drag-drop.d.ts.map +1 -0
- package/dist/tools/drag-drop.js +252 -0
- package/dist/tools/drag-drop.js.map +1 -0
- package/dist/tools/emulate-device.d.ts +6 -0
- package/dist/tools/emulate-device.d.ts.map +1 -0
- package/dist/tools/emulate-device.js +221 -0
- package/dist/tools/emulate-device.js.map +1 -0
- package/dist/tools/file-upload.d.ts +6 -0
- package/dist/tools/file-upload.d.ts.map +1 -0
- package/dist/tools/file-upload.js +208 -0
- package/dist/tools/file-upload.js.map +1 -0
- package/dist/tools/fill-form.d.ts +8 -0
- package/dist/tools/fill-form.d.ts.map +1 -0
- package/dist/tools/fill-form.js +342 -0
- package/dist/tools/fill-form.js.map +1 -0
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/find.js +153 -65
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/form-input.js +52 -52
- package/dist/tools/form-input.js.map +1 -1
- package/dist/tools/geolocation.d.ts +6 -0
- package/dist/tools/geolocation.d.ts.map +1 -0
- package/dist/tools/geolocation.js +172 -0
- package/dist/tools/geolocation.js.map +1 -0
- package/dist/tools/http-auth.d.ts +6 -0
- package/dist/tools/http-auth.d.ts.map +1 -0
- package/dist/tools/http-auth.js +136 -0
- package/dist/tools/http-auth.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +50 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/javascript.js +1 -1
- package/dist/tools/javascript.js.map +1 -1
- package/dist/tools/navigate.d.ts.map +1 -1
- package/dist/tools/navigate.js +5 -2
- package/dist/tools/navigate.js.map +1 -1
- package/dist/tools/network.js +4 -4
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/orchestration.d.ts.map +1 -1
- package/dist/tools/orchestration.js +13 -8
- package/dist/tools/orchestration.js.map +1 -1
- package/dist/tools/page-content.d.ts +6 -0
- package/dist/tools/page-content.d.ts.map +1 -0
- package/dist/tools/page-content.js +120 -0
- package/dist/tools/page-content.js.map +1 -0
- package/dist/tools/page-pdf.d.ts +6 -0
- package/dist/tools/page-pdf.d.ts.map +1 -0
- package/dist/tools/page-pdf.js +245 -0
- package/dist/tools/page-pdf.js.map +1 -0
- package/dist/tools/page-reload.d.ts +6 -0
- package/dist/tools/page-reload.d.ts.map +1 -0
- package/dist/tools/page-reload.js +89 -0
- package/dist/tools/page-reload.js.map +1 -0
- package/dist/tools/performance-metrics.d.ts +6 -0
- package/dist/tools/performance-metrics.d.ts.map +1 -0
- package/dist/tools/performance-metrics.js +158 -0
- package/dist/tools/performance-metrics.js.map +1 -0
- package/dist/tools/read-page.d.ts.map +1 -1
- package/dist/tools/read-page.js +4 -2
- package/dist/tools/read-page.js.map +1 -1
- package/dist/tools/request-intercept.d.ts +6 -0
- package/dist/tools/request-intercept.d.ts.map +1 -0
- package/dist/tools/request-intercept.js +439 -0
- package/dist/tools/request-intercept.js.map +1 -0
- package/dist/tools/selector-query.d.ts +6 -0
- package/dist/tools/selector-query.d.ts.map +1 -0
- package/dist/tools/selector-query.js +206 -0
- package/dist/tools/selector-query.js.map +1 -0
- package/dist/tools/storage.d.ts +6 -0
- package/dist/tools/storage.d.ts.map +1 -0
- package/dist/tools/storage.js +264 -0
- package/dist/tools/storage.js.map +1 -0
- package/dist/tools/tabs-close.d.ts +6 -0
- package/dist/tools/tabs-close.d.ts.map +1 -0
- package/dist/tools/tabs-close.js +124 -0
- package/dist/tools/tabs-close.js.map +1 -0
- package/dist/tools/tabs-context.js +1 -1
- package/dist/tools/tabs-context.js.map +1 -1
- package/dist/tools/user-agent.d.ts +6 -0
- package/dist/tools/user-agent.d.ts.map +1 -0
- package/dist/tools/user-agent.js +128 -0
- package/dist/tools/user-agent.js.map +1 -0
- package/dist/tools/wait-and-click.d.ts +8 -0
- package/dist/tools/wait-and-click.d.ts.map +1 -0
- package/dist/tools/wait-and-click.js +290 -0
- package/dist/tools/wait-and-click.js.map +1 -0
- package/dist/tools/wait-for.d.ts +6 -0
- package/dist/tools/wait-for.d.ts.map +1 -0
- package/dist/tools/wait-for.js +248 -0
- package/dist/tools/wait-for.js.map +1 -0
- package/dist/tools/xpath-query.d.ts +6 -0
- package/dist/tools/xpath-query.d.ts.map +1 -0
- package/dist/tools/xpath-query.js +230 -0
- package/dist/tools/xpath-query.js.map +1 -0
- package/dist/types/browser-backend.d.ts +30 -0
- package/dist/types/browser-backend.d.ts.map +1 -0
- package/dist/types/browser-backend.js +9 -0
- package/dist/types/browser-backend.js.map +1 -0
- package/dist/types/profile.d.ts +76 -0
- package/dist/types/profile.d.ts.map +1 -0
- package/dist/types/profile.js +35 -0
- package/dist/types/profile.js.map +1 -0
- package/dist/types/session.d.ts +7 -3
- package/dist/types/session.d.ts.map +1 -1
- package/package.json +78 -75
- package/dist/master/index.d.ts +0 -18
- package/dist/master/index.d.ts.map +0 -1
- package/dist/master/index.js +0 -75
- package/dist/master/index.js.map +0 -1
- package/dist/master/ipc-server.d.ts +0 -21
- package/dist/master/ipc-server.d.ts.map +0 -1
- package/dist/master/ipc-server.js +0 -175
- package/dist/master/ipc-server.js.map +0 -1
- package/dist/master/request-handler.d.ts +0 -17
- package/dist/master/request-handler.d.ts.map +0 -1
- package/dist/master/request-handler.js +0 -134
- package/dist/master/request-handler.js.map +0 -1
- package/dist/master/session-registry.d.ts +0 -120
- package/dist/master/session-registry.d.ts.map +0 -1
- package/dist/master/session-registry.js +0 -247
- package/dist/master/session-registry.js.map +0 -1
- package/dist/shared/ipc-constants.d.ts +0 -16
- package/dist/shared/ipc-constants.d.ts.map +0 -1
- package/dist/shared/ipc-constants.js +0 -66
- package/dist/shared/ipc-constants.js.map +0 -1
- package/dist/shared/ipc-protocol.d.ts +0 -33
- package/dist/shared/ipc-protocol.d.ts.map +0 -1
- package/dist/shared/ipc-protocol.js +0 -20
- package/dist/shared/ipc-protocol.js.map +0 -1
- package/dist/worker/auto-master.d.ts +0 -24
- package/dist/worker/auto-master.d.ts.map +0 -1
- package/dist/worker/auto-master.js +0 -135
- package/dist/worker/auto-master.js.map +0 -1
- package/dist/worker/index.d.ts +0 -25
- package/dist/worker/index.d.ts.map +0 -1
- package/dist/worker/index.js +0 -93
- package/dist/worker/index.js.map +0 -1
- package/dist/worker/ipc-client.d.ts +0 -26
- package/dist/worker/ipc-client.d.ts.map +0 -1
- package/dist/worker/ipc-client.js +0 -211
- package/dist/worker/ipc-client.js.map +0 -1
- package/dist/worker/remote-session-manager.d.ts +0 -114
- package/dist/worker/remote-session-manager.d.ts.map +0 -1
- package/dist/worker/remote-session-manager.js +0 -151
- package/dist/worker/remote-session-manager.js.map +0 -1
- package/dist/worker/tools.d.ts +0 -7
- package/dist/worker/tools.d.ts.map +0 -1
- package/dist/worker/tools.js +0 -340
- package/dist/worker/tools.js.map +0 -1
- package/dist/worker/worker-mcp-server.d.ts +0 -70
- package/dist/worker/worker-mcp-server.d.ts.map +0 -1
- package/dist/worker/worker-mcp-server.js +0 -295
- package/dist/worker/worker-mcp-server.js.map +0 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BrowserRouter = void 0;
|
|
4
|
+
const browser_backend_1 = require("../types/browser-backend");
|
|
5
|
+
const tool_routing_registry_1 = require("./tool-routing-registry");
|
|
6
|
+
const launcher_1 = require("../lightpanda/launcher");
|
|
7
|
+
const cookie_sync_1 = require("./cookie-sync");
|
|
8
|
+
class BrowserRouter {
|
|
9
|
+
config;
|
|
10
|
+
launcher = null;
|
|
11
|
+
cookieSync;
|
|
12
|
+
stats;
|
|
13
|
+
// Circuit breaker state
|
|
14
|
+
consecutiveFailures = 0;
|
|
15
|
+
circuitOpen = false;
|
|
16
|
+
circuitOpenedAt = 0;
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.config = config;
|
|
19
|
+
this.cookieSync = new cookie_sync_1.CookieSync({ intervalMs: config.cookieSync.intervalMs });
|
|
20
|
+
this.stats = {
|
|
21
|
+
chromeRequests: 0,
|
|
22
|
+
lightpandaRequests: 0,
|
|
23
|
+
fallbacks: 0,
|
|
24
|
+
circuitBreakerTrips: 0,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Route a tool request to the appropriate backend.
|
|
29
|
+
*
|
|
30
|
+
* Decision order:
|
|
31
|
+
* 1. Hybrid disabled → always Chrome
|
|
32
|
+
* 2. Visual tool → always Chrome
|
|
33
|
+
* 3. Circuit breaker open and cooldown not expired → Chrome (increment circuitBreakerTrips)
|
|
34
|
+
* 4. Circuit breaker open and cooldown expired → reset, try LP
|
|
35
|
+
* 5. LP page provided and page is healthy → LP
|
|
36
|
+
* 6. LP page missing or unhealthy → fallback to Chrome, record failure
|
|
37
|
+
*/
|
|
38
|
+
async route(toolName, chromePage, lightpandaPage) {
|
|
39
|
+
// 1. Hybrid disabled
|
|
40
|
+
if (!this.config.enabled) {
|
|
41
|
+
this.stats.chromeRequests++;
|
|
42
|
+
return { backend: browser_backend_1.BrowserBackend.CHROME, page: chromePage, fallback: false };
|
|
43
|
+
}
|
|
44
|
+
// 2. Visual tool always goes to Chrome
|
|
45
|
+
if (tool_routing_registry_1.ToolRoutingRegistry.isVisualTool(toolName)) {
|
|
46
|
+
this.stats.chromeRequests++;
|
|
47
|
+
return { backend: browser_backend_1.BrowserBackend.CHROME, page: chromePage, fallback: false };
|
|
48
|
+
}
|
|
49
|
+
// 3 & 4. Check circuit breaker
|
|
50
|
+
if (this.circuitOpen) {
|
|
51
|
+
const cooldownExpired = Date.now() - this.circuitOpenedAt >= this.config.circuitBreaker.cooldownMs;
|
|
52
|
+
if (!cooldownExpired) {
|
|
53
|
+
// Circuit still open → serve from Chrome
|
|
54
|
+
this.stats.chromeRequests++;
|
|
55
|
+
this.stats.circuitBreakerTrips++;
|
|
56
|
+
return { backend: browser_backend_1.BrowserBackend.CHROME, page: chromePage, fallback: false };
|
|
57
|
+
}
|
|
58
|
+
// Cooldown expired → reset circuit and allow LP attempt
|
|
59
|
+
this.circuitOpen = false;
|
|
60
|
+
this.consecutiveFailures = 0;
|
|
61
|
+
}
|
|
62
|
+
// 5. Attempt Lightpanda
|
|
63
|
+
if (lightpandaPage != null) {
|
|
64
|
+
let pageHealthy = false;
|
|
65
|
+
try {
|
|
66
|
+
pageHealthy = !lightpandaPage.isClosed();
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// isClosed() threw → page is not usable
|
|
70
|
+
pageHealthy = false;
|
|
71
|
+
}
|
|
72
|
+
if (pageHealthy) {
|
|
73
|
+
this.stats.lightpandaRequests++;
|
|
74
|
+
this.recordSuccess();
|
|
75
|
+
return { backend: browser_backend_1.BrowserBackend.LIGHTPANDA, page: lightpandaPage, fallback: false };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// 6. Fallback to Chrome
|
|
79
|
+
this.stats.chromeRequests++;
|
|
80
|
+
this.stats.fallbacks++;
|
|
81
|
+
this.recordFailure();
|
|
82
|
+
return { backend: browser_backend_1.BrowserBackend.CHROME, page: chromePage, fallback: true };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Escalate from Lightpanda to Chrome.
|
|
86
|
+
* - Gets current URL from LP page
|
|
87
|
+
* - Syncs cookies LP → Chrome
|
|
88
|
+
* - Navigates Chrome to same URL
|
|
89
|
+
*/
|
|
90
|
+
async escalate(lightpandaPage, chromePage) {
|
|
91
|
+
const url = lightpandaPage.url();
|
|
92
|
+
let cookiesSynced = false;
|
|
93
|
+
try {
|
|
94
|
+
const count = await this.cookieSync.lightpandaToChrome(lightpandaPage, chromePage);
|
|
95
|
+
cookiesSynced = count >= 0; // lightpandaToChrome returns count (0 is still "synced" successfully)
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
cookiesSynced = false;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
await chromePage.goto(url);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// best-effort navigation
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
success: true,
|
|
108
|
+
previousBackend: browser_backend_1.BrowserBackend.LIGHTPANDA,
|
|
109
|
+
newBackend: browser_backend_1.BrowserBackend.CHROME,
|
|
110
|
+
cookiesSynced,
|
|
111
|
+
url,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/** Get routing statistics */
|
|
115
|
+
getStats() {
|
|
116
|
+
return { ...this.stats };
|
|
117
|
+
}
|
|
118
|
+
/** Reset statistics */
|
|
119
|
+
resetStats() {
|
|
120
|
+
this.stats = {
|
|
121
|
+
chromeRequests: 0,
|
|
122
|
+
lightpandaRequests: 0,
|
|
123
|
+
fallbacks: 0,
|
|
124
|
+
circuitBreakerTrips: 0,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/** Check if circuit breaker is currently open */
|
|
128
|
+
isCircuitOpen() {
|
|
129
|
+
return this.circuitOpen;
|
|
130
|
+
}
|
|
131
|
+
/** Initialize launcher and connect to Lightpanda */
|
|
132
|
+
async initialize() {
|
|
133
|
+
if (!this.config.enabled) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
this.launcher = new launcher_1.LightpandaLauncher({
|
|
137
|
+
port: this.config.lightpandaPort,
|
|
138
|
+
});
|
|
139
|
+
await this.launcher.start();
|
|
140
|
+
await this.launcher.connect();
|
|
141
|
+
}
|
|
142
|
+
/** Cleanup resources */
|
|
143
|
+
async cleanup() {
|
|
144
|
+
this.cookieSync.cleanup();
|
|
145
|
+
if (this.launcher) {
|
|
146
|
+
await this.launcher.disconnect();
|
|
147
|
+
await this.launcher.stop();
|
|
148
|
+
this.launcher = null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// ─── Private helpers ──────────────────────────────────────────────────────
|
|
152
|
+
recordSuccess() {
|
|
153
|
+
this.consecutiveFailures = 0;
|
|
154
|
+
}
|
|
155
|
+
recordFailure() {
|
|
156
|
+
this.consecutiveFailures++;
|
|
157
|
+
if (!this.circuitOpen &&
|
|
158
|
+
this.consecutiveFailures >= this.config.circuitBreaker.maxFailures) {
|
|
159
|
+
this.circuitOpen = true;
|
|
160
|
+
this.circuitOpenedAt = Date.now();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/** Returns true if the circuit breaker should cause LP to be skipped */
|
|
164
|
+
checkCircuitBreaker() {
|
|
165
|
+
if (!this.circuitOpen) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
const cooldownExpired = Date.now() - this.circuitOpenedAt >= this.config.circuitBreaker.cooldownMs;
|
|
169
|
+
if (cooldownExpired) {
|
|
170
|
+
this.circuitOpen = false;
|
|
171
|
+
this.consecutiveFailures = 0;
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.BrowserRouter = BrowserRouter;
|
|
178
|
+
//# sourceMappingURL=browser-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-router.js","sourceRoot":"","sources":["../../src/router/browser-router.ts"],"names":[],"mappings":";;;AACA,8DAKkC;AAClC,mEAA8D;AAC9D,qDAA4D;AAC5D,+CAA2C;AAQ3C,MAAa,aAAa;IAChB,MAAM,CAAe;IACrB,QAAQ,GAA8B,IAAI,CAAC;IAC3C,UAAU,CAAa;IACvB,KAAK,CAAc;IAE3B,wBAAwB;IAChB,mBAAmB,GAAW,CAAC,CAAC;IAChC,WAAW,GAAY,KAAK,CAAC;IAC7B,eAAe,GAAW,CAAC,CAAC;IAEpC,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,KAAK,GAAG;YACX,cAAc,EAAE,CAAC;YACjB,kBAAkB,EAAE,CAAC;YACrB,SAAS,EAAE,CAAC;YACZ,mBAAmB,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,KAAK,CACT,QAAgB,EAChB,UAAgB,EAChB,cAA4B;QAE5B,qBAAqB;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC5B,OAAO,EAAE,OAAO,EAAE,gCAAc,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC/E,CAAC;QAED,uCAAuC;QACvC,IAAI,2CAAmB,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC5B,OAAO,EAAE,OAAO,EAAE,gCAAc,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC/E,CAAC;QAED,+BAA+B;QAC/B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,eAAe,GACnB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC;YAE7E,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,yCAAyC;gBACzC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,gCAAc,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC/E,CAAC;YAED,wDAAwD;YACxD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC/B,CAAC;QAED,wBAAwB;QACxB,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;YAC3B,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC;gBACH,WAAW,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;gBACxC,WAAW,GAAG,KAAK,CAAC;YACtB,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;gBAChC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,gCAAc,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACvF,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,gCAAc,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9E,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,cAAoB,EAAE,UAAgB;QACnD,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC;QAEjC,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;YACnF,aAAa,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,sEAAsE;QACpG,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,gCAAc,CAAC,UAAU;YAC1C,UAAU,EAAE,gCAAc,CAAC,MAAM;YACjC,aAAa;YACb,GAAG;SACJ,CAAC;IACJ,CAAC;IAED,6BAA6B;IAC7B,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,uBAAuB;IACvB,UAAU;QACR,IAAI,CAAC,KAAK,GAAG;YACX,cAAc,EAAE,CAAC;YACjB,kBAAkB,EAAE,CAAC;YACrB,SAAS,EAAE,CAAC;YACZ,mBAAmB,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,6BAAkB,CAAC;YACrC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;SACjC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,6EAA6E;IAErE,aAAa;QACnB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IACE,CAAC,IAAI,CAAC,WAAW;YACjB,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,EAClE,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED,wEAAwE;IAChE,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,eAAe,GACnB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC;QAE7E,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA3MD,sCA2MC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Page } from 'puppeteer-core';
|
|
2
|
+
export interface CookieSyncConfig {
|
|
3
|
+
/** Interval between periodic syncs in milliseconds. Default: 5000 */
|
|
4
|
+
intervalMs: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* CookieSync handles bidirectional cookie synchronisation between Chrome and
|
|
8
|
+
* Lightpanda pages. All operations are best-effort – errors are caught and
|
|
9
|
+
* logged but never thrown so callers are not disrupted.
|
|
10
|
+
*/
|
|
11
|
+
export declare class CookieSync {
|
|
12
|
+
private syncTimer;
|
|
13
|
+
private readonly intervalMs;
|
|
14
|
+
constructor(config?: Partial<CookieSyncConfig>);
|
|
15
|
+
/**
|
|
16
|
+
* Core sync primitive. Reads cookies from `source`, optionally filters by
|
|
17
|
+
* `domain`, then writes them to `target`.
|
|
18
|
+
*
|
|
19
|
+
* @returns Number of cookies actually synced, or 0 on error.
|
|
20
|
+
*/
|
|
21
|
+
syncCookies(source: Page, target: Page, domain?: string): Promise<number>;
|
|
22
|
+
/**
|
|
23
|
+
* Sync cookies from Chrome to Lightpanda (e.g. before delegating a task).
|
|
24
|
+
*/
|
|
25
|
+
chromeToLightpanda(chromePage: Page, lightpandaPage: Page, domain?: string): Promise<number>;
|
|
26
|
+
/**
|
|
27
|
+
* Sync cookies from Lightpanda back to Chrome on escalation.
|
|
28
|
+
* Uses a MERGE strategy – only cookies not already present in Chrome are
|
|
29
|
+
* added; existing Chrome cookies are never overwritten.
|
|
30
|
+
*
|
|
31
|
+
* @returns Number of new cookies added to Chrome.
|
|
32
|
+
*/
|
|
33
|
+
lightpandaToChrome(lightpandaPage: Page, chromePage: Page): Promise<number>;
|
|
34
|
+
/**
|
|
35
|
+
* Start a periodic background sync from `source` to `target`.
|
|
36
|
+
* The timer is unref'd so it will not prevent process exit.
|
|
37
|
+
*/
|
|
38
|
+
startPeriodicSync(source: Page, target: Page, domain?: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* Stop the periodic sync timer if one is running.
|
|
41
|
+
*/
|
|
42
|
+
stopPeriodicSync(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Alias for stopPeriodicSync – stops the timer and releases resources.
|
|
45
|
+
*/
|
|
46
|
+
cleanup(): void;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=cookie-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookie-sync.d.ts","sourceRoot":"","sources":["../../src/router/cookie-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAuB,MAAM,gBAAgB,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAID;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAI9C;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB/E;;OAEG;IACG,kBAAkB,CACtB,UAAU,EAAE,IAAI,EAChB,cAAc,EAAE,IAAI,EACpB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IAIlB;;;;;;OAMG;IACG,kBAAkB,CAAC,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BjF;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAiBpE;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAOxB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CookieSync = void 0;
|
|
4
|
+
const DEFAULT_INTERVAL_MS = 5000;
|
|
5
|
+
/**
|
|
6
|
+
* CookieSync handles bidirectional cookie synchronisation between Chrome and
|
|
7
|
+
* Lightpanda pages. All operations are best-effort – errors are caught and
|
|
8
|
+
* logged but never thrown so callers are not disrupted.
|
|
9
|
+
*/
|
|
10
|
+
class CookieSync {
|
|
11
|
+
syncTimer = null;
|
|
12
|
+
intervalMs;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.intervalMs = config?.intervalMs ?? DEFAULT_INTERVAL_MS;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Core sync primitive. Reads cookies from `source`, optionally filters by
|
|
18
|
+
* `domain`, then writes them to `target`.
|
|
19
|
+
*
|
|
20
|
+
* @returns Number of cookies actually synced, or 0 on error.
|
|
21
|
+
*/
|
|
22
|
+
async syncCookies(source, target, domain) {
|
|
23
|
+
try {
|
|
24
|
+
let cookies = await source.cookies();
|
|
25
|
+
if (domain) {
|
|
26
|
+
cookies = cookies.filter((c) => c.domain === domain || c.domain === `.${domain}`);
|
|
27
|
+
}
|
|
28
|
+
if (cookies.length === 0) {
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
await target.setCookie(...cookies);
|
|
32
|
+
return cookies.length;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
console.error('[CookieSync] syncCookies error:', err);
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Sync cookies from Chrome to Lightpanda (e.g. before delegating a task).
|
|
41
|
+
*/
|
|
42
|
+
async chromeToLightpanda(chromePage, lightpandaPage, domain) {
|
|
43
|
+
return this.syncCookies(chromePage, lightpandaPage, domain);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Sync cookies from Lightpanda back to Chrome on escalation.
|
|
47
|
+
* Uses a MERGE strategy – only cookies not already present in Chrome are
|
|
48
|
+
* added; existing Chrome cookies are never overwritten.
|
|
49
|
+
*
|
|
50
|
+
* @returns Number of new cookies added to Chrome.
|
|
51
|
+
*/
|
|
52
|
+
async lightpandaToChrome(lightpandaPage, chromePage) {
|
|
53
|
+
try {
|
|
54
|
+
const [lpCookies, chromeCookies] = await Promise.all([
|
|
55
|
+
lightpandaPage.cookies(),
|
|
56
|
+
chromePage.cookies(),
|
|
57
|
+
]);
|
|
58
|
+
// Build a set of existing Chrome cookie keys for fast lookup
|
|
59
|
+
const existingKeys = new Set(chromeCookies.map((c) => `${c.name}::${c.domain}::${c.path}`));
|
|
60
|
+
const newCookies = lpCookies.filter((c) => !existingKeys.has(`${c.name}::${c.domain}::${c.path}`));
|
|
61
|
+
if (newCookies.length === 0) {
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
await chromePage.setCookie(...newCookies);
|
|
65
|
+
return newCookies.length;
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
console.error('[CookieSync] lightpandaToChrome error:', err);
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Start a periodic background sync from `source` to `target`.
|
|
74
|
+
* The timer is unref'd so it will not prevent process exit.
|
|
75
|
+
*/
|
|
76
|
+
startPeriodicSync(source, target, domain) {
|
|
77
|
+
this.stopPeriodicSync();
|
|
78
|
+
const timer = setInterval(() => {
|
|
79
|
+
this.syncCookies(source, target, domain).catch((err) => {
|
|
80
|
+
console.error('[CookieSync] periodic sync error:', err);
|
|
81
|
+
});
|
|
82
|
+
}, this.intervalMs);
|
|
83
|
+
// Do not block process exit
|
|
84
|
+
if (typeof timer.unref === 'function') {
|
|
85
|
+
timer.unref();
|
|
86
|
+
}
|
|
87
|
+
this.syncTimer = timer;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Stop the periodic sync timer if one is running.
|
|
91
|
+
*/
|
|
92
|
+
stopPeriodicSync() {
|
|
93
|
+
if (this.syncTimer !== null) {
|
|
94
|
+
clearInterval(this.syncTimer);
|
|
95
|
+
this.syncTimer = null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Alias for stopPeriodicSync – stops the timer and releases resources.
|
|
100
|
+
*/
|
|
101
|
+
cleanup() {
|
|
102
|
+
this.stopPeriodicSync();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.CookieSync = CookieSync;
|
|
106
|
+
//# sourceMappingURL=cookie-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookie-sync.js","sourceRoot":"","sources":["../../src/router/cookie-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CookieSync = exports.ToolRoutingRegistry = exports.BrowserRouter = void 0;
|
|
4
|
+
var browser_router_1 = require("./browser-router");
|
|
5
|
+
Object.defineProperty(exports, "BrowserRouter", { enumerable: true, get: function () { return browser_router_1.BrowserRouter; } });
|
|
6
|
+
var tool_routing_registry_1 = require("./tool-routing-registry");
|
|
7
|
+
Object.defineProperty(exports, "ToolRoutingRegistry", { enumerable: true, get: function () { return tool_routing_registry_1.ToolRoutingRegistry; } });
|
|
8
|
+
var cookie_sync_1 = require("./cookie-sync");
|
|
9
|
+
Object.defineProperty(exports, "CookieSync", { enumerable: true, get: function () { return cookie_sync_1.CookieSync; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAEtB,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,6CAA2C;AAAlC,yGAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ToolRouting } from '../types/browser-backend';
|
|
2
|
+
export declare class ToolRoutingRegistry {
|
|
3
|
+
/**
|
|
4
|
+
* Returns the routing preference for a given tool name.
|
|
5
|
+
* Unknown tools default to 'chrome-only' as a safe fallback.
|
|
6
|
+
*/
|
|
7
|
+
static getRouting(toolName: string): ToolRouting;
|
|
8
|
+
/**
|
|
9
|
+
* Returns true if the tool requires Chrome (screenshot/PDF capability).
|
|
10
|
+
*/
|
|
11
|
+
static isVisualTool(toolName: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Returns the list of all chrome-only tool names.
|
|
14
|
+
*/
|
|
15
|
+
static getChromeOnlyTools(): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Returns the list of all prefer-lightpanda tool names.
|
|
18
|
+
*/
|
|
19
|
+
static getPreferLightpandaTools(): string[];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=tool-routing-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-routing-registry.d.ts","sourceRoot":"","sources":["../../src/router/tool-routing-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAiE5D,qBAAa,mBAAmB;IAC9B;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAIhD;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9C;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM,EAAE;IAMrC;;OAEG;IACH,MAAM,CAAC,wBAAwB,IAAI,MAAM,EAAE;CAK5C"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToolRoutingRegistry = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Static mapping of all tool names to their backend routing preference.
|
|
6
|
+
*
|
|
7
|
+
* chrome-only: Tools that require Chrome capabilities (screenshots, PDF).
|
|
8
|
+
* prefer-lightpanda: Tools that can run on Lightpanda for better performance.
|
|
9
|
+
*/
|
|
10
|
+
const TOOL_ROUTING_MAP = {
|
|
11
|
+
// Chrome-only tools (visual capabilities)
|
|
12
|
+
computer: 'chrome-only',
|
|
13
|
+
page_pdf: 'chrome-only',
|
|
14
|
+
// Core tools - prefer-lightpanda
|
|
15
|
+
navigate: 'prefer-lightpanda',
|
|
16
|
+
read_page: 'prefer-lightpanda',
|
|
17
|
+
find: 'prefer-lightpanda',
|
|
18
|
+
form_input: 'prefer-lightpanda',
|
|
19
|
+
javascript_tool: 'prefer-lightpanda',
|
|
20
|
+
network: 'prefer-lightpanda',
|
|
21
|
+
// Phase 1 tools - prefer-lightpanda
|
|
22
|
+
page_reload: 'prefer-lightpanda',
|
|
23
|
+
cookies: 'prefer-lightpanda',
|
|
24
|
+
selector_query: 'prefer-lightpanda',
|
|
25
|
+
page_content: 'prefer-lightpanda',
|
|
26
|
+
wait_for: 'prefer-lightpanda',
|
|
27
|
+
storage: 'prefer-lightpanda',
|
|
28
|
+
// Phase 2 tools - prefer-lightpanda
|
|
29
|
+
user_agent: 'prefer-lightpanda',
|
|
30
|
+
geolocation: 'prefer-lightpanda',
|
|
31
|
+
emulate_device: 'prefer-lightpanda',
|
|
32
|
+
console_capture: 'prefer-lightpanda',
|
|
33
|
+
performance_metrics: 'prefer-lightpanda',
|
|
34
|
+
request_intercept: 'prefer-lightpanda',
|
|
35
|
+
// Phase 3 tools - prefer-lightpanda
|
|
36
|
+
xpath_query: 'prefer-lightpanda',
|
|
37
|
+
file_upload: 'prefer-lightpanda',
|
|
38
|
+
http_auth: 'prefer-lightpanda',
|
|
39
|
+
drag_drop: 'prefer-lightpanda',
|
|
40
|
+
// UX composite tools - prefer-lightpanda
|
|
41
|
+
click_element: 'prefer-lightpanda',
|
|
42
|
+
fill_form: 'prefer-lightpanda',
|
|
43
|
+
wait_and_click: 'prefer-lightpanda',
|
|
44
|
+
// Tab management tools - prefer-lightpanda
|
|
45
|
+
tabs_context: 'prefer-lightpanda',
|
|
46
|
+
tabs_create: 'prefer-lightpanda',
|
|
47
|
+
tabs_close: 'prefer-lightpanda',
|
|
48
|
+
// Worker management tools - prefer-lightpanda
|
|
49
|
+
worker_create: 'prefer-lightpanda',
|
|
50
|
+
worker_list: 'prefer-lightpanda',
|
|
51
|
+
worker_delete: 'prefer-lightpanda',
|
|
52
|
+
// Orchestration tools - prefer-lightpanda
|
|
53
|
+
workflow_init: 'prefer-lightpanda',
|
|
54
|
+
workflow_status: 'prefer-lightpanda',
|
|
55
|
+
workflow_collect: 'prefer-lightpanda',
|
|
56
|
+
workflow_cleanup: 'prefer-lightpanda',
|
|
57
|
+
};
|
|
58
|
+
class ToolRoutingRegistry {
|
|
59
|
+
/**
|
|
60
|
+
* Returns the routing preference for a given tool name.
|
|
61
|
+
* Unknown tools default to 'chrome-only' as a safe fallback.
|
|
62
|
+
*/
|
|
63
|
+
static getRouting(toolName) {
|
|
64
|
+
return TOOL_ROUTING_MAP[toolName] ?? 'chrome-only';
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns true if the tool requires Chrome (screenshot/PDF capability).
|
|
68
|
+
*/
|
|
69
|
+
static isVisualTool(toolName) {
|
|
70
|
+
return TOOL_ROUTING_MAP[toolName] === 'chrome-only';
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Returns the list of all chrome-only tool names.
|
|
74
|
+
*/
|
|
75
|
+
static getChromeOnlyTools() {
|
|
76
|
+
return Object.entries(TOOL_ROUTING_MAP)
|
|
77
|
+
.filter(([, routing]) => routing === 'chrome-only')
|
|
78
|
+
.map(([name]) => name);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Returns the list of all prefer-lightpanda tool names.
|
|
82
|
+
*/
|
|
83
|
+
static getPreferLightpandaTools() {
|
|
84
|
+
return Object.entries(TOOL_ROUTING_MAP)
|
|
85
|
+
.filter(([, routing]) => routing === 'prefer-lightpanda')
|
|
86
|
+
.map(([name]) => name);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.ToolRoutingRegistry = ToolRoutingRegistry;
|
|
90
|
+
//# sourceMappingURL=tool-routing-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-routing-registry.js","sourceRoot":"","sources":["../../src/router/tool-routing-registry.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,MAAM,gBAAgB,GAAgC;IACpD,0CAA0C;IAC1C,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,aAAa;IAEvB,iCAAiC;IACjC,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,mBAAmB;IAC9B,IAAI,EAAE,mBAAmB;IACzB,UAAU,EAAE,mBAAmB;IAC/B,eAAe,EAAE,mBAAmB;IACpC,OAAO,EAAE,mBAAmB;IAE5B,oCAAoC;IACpC,WAAW,EAAE,mBAAmB;IAChC,OAAO,EAAE,mBAAmB;IAC5B,cAAc,EAAE,mBAAmB;IACnC,YAAY,EAAE,mBAAmB;IACjC,QAAQ,EAAE,mBAAmB;IAC7B,OAAO,EAAE,mBAAmB;IAE5B,oCAAoC;IACpC,UAAU,EAAE,mBAAmB;IAC/B,WAAW,EAAE,mBAAmB;IAChC,cAAc,EAAE,mBAAmB;IACnC,eAAe,EAAE,mBAAmB;IACpC,mBAAmB,EAAE,mBAAmB;IACxC,iBAAiB,EAAE,mBAAmB;IAEtC,oCAAoC;IACpC,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,mBAAmB;IAChC,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAE9B,yCAAyC;IACzC,aAAa,EAAE,mBAAmB;IAClC,SAAS,EAAE,mBAAmB;IAC9B,cAAc,EAAE,mBAAmB;IAEnC,2CAA2C;IAC3C,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,mBAAmB;IAChC,UAAU,EAAE,mBAAmB;IAE/B,8CAA8C;IAC9C,aAAa,EAAE,mBAAmB;IAClC,WAAW,EAAE,mBAAmB;IAChC,aAAa,EAAE,mBAAmB;IAElC,0CAA0C;IAC1C,aAAa,EAAE,mBAAmB;IAClC,eAAe,EAAE,mBAAmB;IACpC,gBAAgB,EAAE,mBAAmB;IACrC,gBAAgB,EAAE,mBAAmB;CACtC,CAAC;AAEF,MAAa,mBAAmB;IAC9B;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,QAAgB;QAChC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,QAAgB;QAClC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB;QACvB,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,aAAa,CAAC;aAClD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,wBAAwB;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,mBAAmB,CAAC;aACxD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF;AAjCD,kDAiCC"}
|
|
@@ -6,6 +6,8 @@ import { Page } from 'puppeteer-core';
|
|
|
6
6
|
import { Session, SessionInfo, SessionCreateOptions, SessionEvent, Worker, WorkerInfo, WorkerCreateOptions } from './types/session';
|
|
7
7
|
import { CDPClient } from './cdp/client';
|
|
8
8
|
import { PoolStats } from './cdp/connection-pool';
|
|
9
|
+
import { BrowserRouter } from './router';
|
|
10
|
+
import { HybridConfig } from './types/browser-backend';
|
|
9
11
|
export interface SessionManagerConfig {
|
|
10
12
|
/** Session TTL in milliseconds (default: 30 minutes) */
|
|
11
13
|
sessionTTL?: number;
|
|
@@ -19,6 +21,10 @@ export interface SessionManagerConfig {
|
|
|
19
21
|
maxWorkersPerSession?: number;
|
|
20
22
|
/** Use connection pool for page management (default: false for worker isolation) */
|
|
21
23
|
useConnectionPool?: boolean;
|
|
24
|
+
/** Use default browser context (shares cookies/sessions with Chrome profile) */
|
|
25
|
+
useDefaultContext?: boolean;
|
|
26
|
+
/** Enable Chrome pool for origin-aware instance distribution (default: false) */
|
|
27
|
+
usePool?: boolean;
|
|
22
28
|
}
|
|
23
29
|
export interface SessionManagerStats {
|
|
24
30
|
activeSessions: number;
|
|
@@ -36,8 +42,11 @@ export declare class SessionManager {
|
|
|
36
42
|
private targetToWorker;
|
|
37
43
|
private cdpClient;
|
|
38
44
|
private connectionPool;
|
|
45
|
+
private chromePool;
|
|
46
|
+
private cdpFactory;
|
|
39
47
|
private queueManager;
|
|
40
48
|
private eventListeners;
|
|
49
|
+
private browserRouter;
|
|
41
50
|
private config;
|
|
42
51
|
private cleanupTimer;
|
|
43
52
|
private startTime;
|
|
@@ -45,6 +54,10 @@ export declare class SessionManager {
|
|
|
45
54
|
private totalSessionsCleaned;
|
|
46
55
|
private lastCleanupTime;
|
|
47
56
|
constructor(cdpClient?: CDPClient, config?: SessionManagerConfig);
|
|
57
|
+
/**
|
|
58
|
+
* Get the CDPClient for a specific worker (may be on a different Chrome instance)
|
|
59
|
+
*/
|
|
60
|
+
private getCDPClientForWorker;
|
|
48
61
|
/**
|
|
49
62
|
* Start automatic cleanup interval
|
|
50
63
|
*/
|
|
@@ -142,8 +155,9 @@ export declare class SessionManager {
|
|
|
142
155
|
* @param sessionId Session ID
|
|
143
156
|
* @param targetId Target/Tab ID
|
|
144
157
|
* @param workerId Optional worker ID for validation
|
|
158
|
+
* @param toolName Optional MCP tool name for hybrid BrowserRouter routing
|
|
145
159
|
*/
|
|
146
|
-
getPage(sessionId: string, targetId: string, workerId?: string): Promise<Page | null>;
|
|
160
|
+
getPage(sessionId: string, targetId: string, workerId?: string, toolName?: string): Promise<Page | null>;
|
|
147
161
|
/**
|
|
148
162
|
* Get all pages for a worker
|
|
149
163
|
*/
|
|
@@ -164,6 +178,20 @@ export declare class SessionManager {
|
|
|
164
178
|
* Get the worker ID that owns a target
|
|
165
179
|
*/
|
|
166
180
|
getTargetWorkerId(targetId: string): string | undefined;
|
|
181
|
+
/**
|
|
182
|
+
* Close a specific target/tab
|
|
183
|
+
* @param sessionId Session ID
|
|
184
|
+
* @param targetId Target/Tab ID to close
|
|
185
|
+
* @returns true if closed, false if not found
|
|
186
|
+
*/
|
|
187
|
+
closeTarget(sessionId: string, targetId: string): Promise<boolean>;
|
|
188
|
+
/**
|
|
189
|
+
* Close all tabs in a worker (without deleting the worker)
|
|
190
|
+
* @param sessionId Session ID
|
|
191
|
+
* @param workerId Worker ID
|
|
192
|
+
* @returns Number of tabs closed
|
|
193
|
+
*/
|
|
194
|
+
closeWorkerTabs(sessionId: string, workerId: string): Promise<number>;
|
|
167
195
|
/**
|
|
168
196
|
* Execute a CDP command through the session's queue
|
|
169
197
|
*/
|
|
@@ -200,6 +228,18 @@ export declare class SessionManager {
|
|
|
200
228
|
* Get CDPClient
|
|
201
229
|
*/
|
|
202
230
|
getCDPClient(): CDPClient;
|
|
231
|
+
/**
|
|
232
|
+
* Initialize hybrid mode with BrowserRouter
|
|
233
|
+
*/
|
|
234
|
+
initHybrid(config: HybridConfig): Promise<void>;
|
|
235
|
+
/**
|
|
236
|
+
* Get the BrowserRouter (for stats/escalation)
|
|
237
|
+
*/
|
|
238
|
+
getBrowserRouter(): BrowserRouter | null;
|
|
239
|
+
/**
|
|
240
|
+
* Cleanup hybrid mode
|
|
241
|
+
*/
|
|
242
|
+
cleanupHybrid(): Promise<void>;
|
|
203
243
|
}
|
|
204
244
|
export declare function getSessionManager(): SessionManager;
|
|
205
245
|
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAA0B,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACpI,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
|