@n8n/mcp-browser 0.1.0-rc1

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.
Files changed (73) hide show
  1. package/LICENSE.md +88 -0
  2. package/README.md +175 -0
  3. package/dist/adapters/playwright.d.ts +72 -0
  4. package/dist/adapters/playwright.js +684 -0
  5. package/dist/adapters/playwright.js.map +1 -0
  6. package/dist/browser-discovery.d.ts +12 -0
  7. package/dist/browser-discovery.js +219 -0
  8. package/dist/browser-discovery.js.map +1 -0
  9. package/dist/build.tsbuildinfo +1 -0
  10. package/dist/cdp-relay-protocol.d.ts +81 -0
  11. package/dist/cdp-relay-protocol.js +5 -0
  12. package/dist/cdp-relay-protocol.js.map +1 -0
  13. package/dist/cdp-relay.d.ts +52 -0
  14. package/dist/cdp-relay.js +508 -0
  15. package/dist/cdp-relay.js.map +1 -0
  16. package/dist/connection.d.ts +15 -0
  17. package/dist/connection.js +137 -0
  18. package/dist/connection.js.map +1 -0
  19. package/dist/errors.d.ts +40 -0
  20. package/dist/errors.js +83 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/index.d.ts +7 -0
  23. package/dist/index.js +12 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/logger.d.ts +10 -0
  26. package/dist/logger.js +88 -0
  27. package/dist/logger.js.map +1 -0
  28. package/dist/server-config.d.ts +7 -0
  29. package/dist/server-config.js +45 -0
  30. package/dist/server-config.js.map +1 -0
  31. package/dist/server.d.ts +2 -0
  32. package/dist/server.js +93 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/tools/helpers.d.ts +15 -0
  35. package/dist/tools/helpers.js +77 -0
  36. package/dist/tools/helpers.js.map +1 -0
  37. package/dist/tools/index.d.ts +2 -0
  38. package/dist/tools/index.js +25 -0
  39. package/dist/tools/index.js.map +1 -0
  40. package/dist/tools/inspection.d.ts +3 -0
  41. package/dist/tools/inspection.js +205 -0
  42. package/dist/tools/inspection.js.map +1 -0
  43. package/dist/tools/interaction.d.ts +3 -0
  44. package/dist/tools/interaction.js +211 -0
  45. package/dist/tools/interaction.js.map +1 -0
  46. package/dist/tools/navigation.d.ts +3 -0
  47. package/dist/tools/navigation.js +75 -0
  48. package/dist/tools/navigation.js.map +1 -0
  49. package/dist/tools/response-envelope.d.ts +13 -0
  50. package/dist/tools/response-envelope.js +92 -0
  51. package/dist/tools/response-envelope.js.map +1 -0
  52. package/dist/tools/schemas.d.ts +236 -0
  53. package/dist/tools/schemas.js +46 -0
  54. package/dist/tools/schemas.js.map +1 -0
  55. package/dist/tools/session.d.ts +3 -0
  56. package/dist/tools/session.js +81 -0
  57. package/dist/tools/session.js.map +1 -0
  58. package/dist/tools/state.d.ts +3 -0
  59. package/dist/tools/state.js +108 -0
  60. package/dist/tools/state.js.map +1 -0
  61. package/dist/tools/tabs.d.ts +3 -0
  62. package/dist/tools/tabs.js +121 -0
  63. package/dist/tools/tabs.js.map +1 -0
  64. package/dist/tools/wait.d.ts +3 -0
  65. package/dist/tools/wait.js +39 -0
  66. package/dist/tools/wait.js.map +1 -0
  67. package/dist/types.d.ts +170 -0
  68. package/dist/types.js +15 -0
  69. package/dist/types.js.map +1 -0
  70. package/dist/utils.d.ts +8 -0
  71. package/dist/utils.js +54 -0
  72. package/dist/utils.js.map +1 -0
  73. package/package.json +48 -0
@@ -0,0 +1,52 @@
1
+ export interface CDPRelayServerOptions {
2
+ connectionTimeoutMs?: number;
3
+ }
4
+ export interface WaitForExtensionOptions {
5
+ browserWasLaunched?: boolean;
6
+ }
7
+ export declare class CDPRelayServer {
8
+ private readonly httpServer;
9
+ private readonly wss;
10
+ private readonly cdpPath;
11
+ private readonly extensionPath;
12
+ private playwrightWs;
13
+ private extensionConn;
14
+ private readonly tabCache;
15
+ private readonly activatedTabs;
16
+ private primaryTabId;
17
+ private lastCreatedTabId;
18
+ private browserContextId;
19
+ private extensionConnectedResolve?;
20
+ private extensionConnectedReject?;
21
+ private extensionConnectedPromise;
22
+ private readonly connectionTimeoutMs;
23
+ constructor(options?: CDPRelayServerOptions);
24
+ listen(): Promise<number>;
25
+ cdpEndpoint(port: number): string;
26
+ extensionEndpoint(port: number): string;
27
+ waitForExtension(options?: WaitForExtensionOptions): Promise<void>;
28
+ stop(): void;
29
+ getLastCreatedTabId(): string | undefined;
30
+ hasTab(id: string): boolean;
31
+ listTabs(): Promise<Array<{
32
+ id: string;
33
+ title: string;
34
+ url: string;
35
+ }>>;
36
+ activateTab(id: string): Promise<void>;
37
+ deactivateTab(id: string): void;
38
+ private onConnection;
39
+ private handlePlaywrightConnection;
40
+ private handlePlaywrightMessage;
41
+ private handleCDPCommand;
42
+ private forwardToExtension;
43
+ private createTab;
44
+ closeTab(id: string): Promise<void>;
45
+ private handleTabOpened;
46
+ private handleTabClosed;
47
+ private sendToPlaywright;
48
+ private handleExtensionConnection;
49
+ private closeExtensionConnection;
50
+ private resetState;
51
+ private closePlaywrightConnection;
52
+ }
@@ -0,0 +1,508 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CDPRelayServer = void 0;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const node_http_1 = __importDefault(require("node:http"));
9
+ const ws_1 = require("ws");
10
+ const browser_discovery_1 = require("./browser-discovery");
11
+ const errors_1 = require("./errors");
12
+ const logger_1 = require("./logger");
13
+ const log = (0, logger_1.createLogger)('relay');
14
+ class CDPRelayServer {
15
+ constructor(options) {
16
+ this.playwrightWs = null;
17
+ this.extensionConn = null;
18
+ this.tabCache = new Map();
19
+ this.activatedTabs = new Set();
20
+ this.browserContextId = 'n8n-default-context';
21
+ this.connectionTimeoutMs = options?.connectionTimeoutMs ?? 15_000;
22
+ const uuid = (0, node_crypto_1.randomUUID)();
23
+ this.cdpPath = `/cdp/${uuid}`;
24
+ this.extensionPath = `/extension/${uuid}`;
25
+ this.extensionConnectedPromise = new Promise((resolve, reject) => {
26
+ this.extensionConnectedResolve = resolve;
27
+ this.extensionConnectedReject = reject;
28
+ });
29
+ this.extensionConnectedPromise.catch(() => { });
30
+ this.httpServer = node_http_1.default.createServer((_req, res) => {
31
+ res.writeHead(404);
32
+ res.end();
33
+ });
34
+ this.wss = new ws_1.WebSocketServer({ server: this.httpServer });
35
+ this.wss.on('connection', (ws, req) => this.onConnection(ws, req));
36
+ }
37
+ async listen() {
38
+ return await new Promise((resolve, reject) => {
39
+ this.httpServer.listen(0, '127.0.0.1', () => {
40
+ const addr = this.httpServer.address();
41
+ log.debug('listening on port', addr.port);
42
+ resolve(addr.port);
43
+ });
44
+ this.httpServer.on('error', reject);
45
+ });
46
+ }
47
+ cdpEndpoint(port) {
48
+ return `ws://127.0.0.1:${port}${this.cdpPath}`;
49
+ }
50
+ extensionEndpoint(port) {
51
+ return `ws://127.0.0.1:${port}${this.extensionPath}`;
52
+ }
53
+ async waitForExtension(options) {
54
+ if (this.extensionConn)
55
+ return;
56
+ log.debug('waiting for extension to connect (timeout:', this.connectionTimeoutMs, 'ms)');
57
+ const phase = options?.browserWasLaunched === false ? 'browser_not_launched' : 'extension_missing';
58
+ const timer = setTimeout(() => {
59
+ log.error('extension connection timed out, phase:', phase);
60
+ this.extensionConnectedReject?.(new errors_1.ExtensionNotConnectedError(this.connectionTimeoutMs, phase, (0, browser_discovery_1.getExtensionInstallInstructions)()));
61
+ }, this.connectionTimeoutMs);
62
+ try {
63
+ await this.extensionConnectedPromise;
64
+ log.debug('extension connected');
65
+ }
66
+ finally {
67
+ clearTimeout(timer);
68
+ }
69
+ }
70
+ stop() {
71
+ log.debug('stopping relay server');
72
+ this.closePlaywrightConnection('Server stopped');
73
+ this.closeExtensionConnection('Server stopped');
74
+ this.wss.close();
75
+ this.httpServer.close();
76
+ }
77
+ getLastCreatedTabId() {
78
+ return this.lastCreatedTabId;
79
+ }
80
+ hasTab(id) {
81
+ return this.tabCache.has(id);
82
+ }
83
+ async listTabs() {
84
+ if (this.extensionConn) {
85
+ const result = (await this.extensionConn.send('listTabs', {}));
86
+ for (const tab of result.tabs) {
87
+ const cached = this.tabCache.get(tab.id);
88
+ if (cached) {
89
+ cached.title = tab.title;
90
+ cached.url = tab.url;
91
+ }
92
+ }
93
+ return result.tabs;
94
+ }
95
+ return [...this.tabCache.entries()].map(([id, meta]) => ({
96
+ id,
97
+ title: meta.title,
98
+ url: meta.url,
99
+ }));
100
+ }
101
+ async activateTab(id) {
102
+ if (this.activatedTabs.has(id)) {
103
+ log.debug('activateTab: already activated:', id);
104
+ return;
105
+ }
106
+ if (!this.extensionConn) {
107
+ log.debug('activateTab: no extension connection');
108
+ return;
109
+ }
110
+ const cached = this.tabCache.get(id);
111
+ log.debug('activateTab:', id, 'title:', cached?.title, 'url:', cached?.url);
112
+ this.activatedTabs.add(id);
113
+ log.debug('activateTab: sending attachTab to extension for', id);
114
+ await this.extensionConn.send('attachTab', { id });
115
+ log.debug('activateTab: extension confirmed attach for', id);
116
+ log.debug('activateTab: sending Target.attachedToTarget to Playwright for', id);
117
+ this.sendToPlaywright({
118
+ method: 'Target.attachedToTarget',
119
+ params: {
120
+ sessionId: id,
121
+ targetInfo: {
122
+ targetId: id,
123
+ type: 'page',
124
+ title: cached?.title ?? '',
125
+ url: cached?.url ?? '',
126
+ attached: true,
127
+ browserContextId: this.browserContextId,
128
+ },
129
+ waitingForDebugger: false,
130
+ },
131
+ });
132
+ }
133
+ deactivateTab(id) {
134
+ const removed = this.activatedTabs.delete(id);
135
+ if (removed) {
136
+ log.debug('deactivateTab: cleared activation for', id);
137
+ }
138
+ }
139
+ onConnection(ws, req) {
140
+ const url = new URL(`http://localhost${req.url ?? '/'}`);
141
+ log.debug('new WebSocket connection:', url.pathname);
142
+ if (url.pathname === this.cdpPath) {
143
+ this.handlePlaywrightConnection(ws);
144
+ }
145
+ else if (url.pathname === this.extensionPath) {
146
+ this.handleExtensionConnection(ws);
147
+ }
148
+ else {
149
+ log.debug('rejected connection to unknown path:', url.pathname);
150
+ ws.close(4004, 'Invalid path');
151
+ }
152
+ }
153
+ handlePlaywrightConnection(ws) {
154
+ if (this.playwrightWs) {
155
+ log.debug('rejected duplicate Playwright connection');
156
+ ws.close(1000, 'Another CDP client already connected');
157
+ return;
158
+ }
159
+ log.debug('Playwright connected');
160
+ this.playwrightWs = ws;
161
+ ws.on('message', (data) => {
162
+ try {
163
+ const raw = Buffer.isBuffer(data)
164
+ ? data.toString('utf8')
165
+ : Buffer.from(data).toString('utf8');
166
+ const message = JSON.parse(raw);
167
+ void this.handlePlaywrightMessage(message);
168
+ }
169
+ catch {
170
+ }
171
+ });
172
+ ws.on('close', () => {
173
+ if (this.playwrightWs !== ws)
174
+ return;
175
+ log.debug('Playwright disconnected');
176
+ this.playwrightWs = null;
177
+ this.closeExtensionConnection('Playwright client disconnected');
178
+ });
179
+ }
180
+ async handlePlaywrightMessage(message) {
181
+ const { id, sessionId, method, params } = message;
182
+ log.debug('← PW:', method, 'id=' + String(id), sessionId ? 'session=' + sessionId : '');
183
+ try {
184
+ const result = await this.handleCDPCommand(method, params, sessionId);
185
+ this.sendToPlaywright({ id, sessionId, result });
186
+ }
187
+ catch (e) {
188
+ log.debug('CDP command error:', method, e instanceof Error ? e.message : e);
189
+ this.sendToPlaywright({
190
+ id,
191
+ sessionId,
192
+ error: { message: e instanceof Error ? e.message : String(e) },
193
+ });
194
+ }
195
+ }
196
+ async handleCDPCommand(method, params, sessionId) {
197
+ switch (method) {
198
+ case 'Browser.getVersion':
199
+ return {
200
+ protocolVersion: '1.3',
201
+ product: 'Chrome/Extension-Bridge',
202
+ userAgent: 'n8n-CDP-Bridge/1.0.0',
203
+ };
204
+ case 'Browser.setDownloadBehavior':
205
+ return {};
206
+ case 'Target.createBrowserContext': {
207
+ this.browserContextId = 'context_' + Math.random().toString(36).slice(2, 8);
208
+ log.debug('Target.createBrowserContext:', this.browserContextId);
209
+ return { browserContextId: this.browserContextId };
210
+ }
211
+ case 'Target.disposeBrowserContext':
212
+ return {};
213
+ case 'Target.setAutoAttach': {
214
+ if (sessionId)
215
+ return {};
216
+ log.debug('Target.setAutoAttach: listing tabs from extension');
217
+ const { tabs } = (await this.extensionConn.send('listRegisteredTabs', {}));
218
+ log.debug('listRegisteredTabs result:', tabs.length, 'tabs');
219
+ for (const tab of tabs) {
220
+ this.tabCache.set(tab.id, { title: tab.title, url: tab.url });
221
+ this.primaryTabId ??= tab.id;
222
+ }
223
+ return {};
224
+ }
225
+ case 'Target.createTarget': {
226
+ const createParams = (params ?? {});
227
+ const url = createParams.url ?? undefined;
228
+ log.debug('Target.createTarget: url =', url);
229
+ const tab = await this.createTab(url);
230
+ return { targetId: tab.id };
231
+ }
232
+ case 'Target.closeTarget': {
233
+ const closeParams = (params ?? {});
234
+ const id = closeParams.targetId;
235
+ log.debug('Target.closeTarget: id =', id);
236
+ if (id && this.tabCache.has(id)) {
237
+ await this.closeTab(id);
238
+ }
239
+ return { success: true };
240
+ }
241
+ case 'Target.getTargetInfo': {
242
+ const id = sessionId ?? this.primaryTabId;
243
+ if (id) {
244
+ const cached = this.tabCache.get(id);
245
+ if (cached) {
246
+ return {
247
+ targetId: id,
248
+ type: 'page',
249
+ title: cached.title,
250
+ url: cached.url,
251
+ attached: true,
252
+ browserContextId: this.browserContextId,
253
+ };
254
+ }
255
+ }
256
+ return undefined;
257
+ }
258
+ }
259
+ return await this.forwardToExtension(method, params, sessionId);
260
+ }
261
+ async forwardToExtension(method, params, sessionId) {
262
+ if (!this.extensionConn)
263
+ throw new Error('Extension not connected');
264
+ log.debug('→ EXT: forwardCDPCommand', method, sessionId ? 'id=' + sessionId : '(primary)');
265
+ const result = await this.extensionConn.send('forwardCDPCommand', {
266
+ id: sessionId,
267
+ method,
268
+ params,
269
+ });
270
+ log.debug('← EXT: forwardCDPCommand result for', method, sessionId ? 'id=' + sessionId : '(primary)');
271
+ return result;
272
+ }
273
+ async createTab(url) {
274
+ if (!this.extensionConn)
275
+ throw new Error('Extension not connected');
276
+ log.debug('createTab: requesting from extension, url =', url);
277
+ const result = (await this.extensionConn.send('createTab', { url }));
278
+ log.debug('createTab: result targetId =', result.id, 'url =', result.url);
279
+ this.tabCache.set(result.id, { title: result.title, url: result.url });
280
+ this.lastCreatedTabId = result.id;
281
+ this.activatedTabs.add(result.id);
282
+ this.sendToPlaywright({
283
+ method: 'Target.attachedToTarget',
284
+ params: {
285
+ sessionId: result.id,
286
+ targetInfo: {
287
+ targetId: result.id,
288
+ type: 'page',
289
+ title: result.title,
290
+ url: result.url,
291
+ attached: true,
292
+ browserContextId: this.browserContextId,
293
+ },
294
+ waitingForDebugger: false,
295
+ },
296
+ });
297
+ return result;
298
+ }
299
+ async closeTab(id) {
300
+ if (!this.extensionConn)
301
+ throw new Error('Extension not connected');
302
+ await this.extensionConn.send('closeTab', { id });
303
+ this.tabCache.delete(id);
304
+ const wasActivated = this.activatedTabs.delete(id);
305
+ if (id === this.primaryTabId) {
306
+ const remaining = [...this.tabCache.keys()];
307
+ this.primaryTabId = remaining.length > 0 ? remaining[0] : undefined;
308
+ }
309
+ if (wasActivated) {
310
+ this.sendToPlaywright({
311
+ method: 'Target.detachedFromTarget',
312
+ params: { sessionId: id },
313
+ });
314
+ }
315
+ }
316
+ handleTabOpened(id, title, url) {
317
+ if (this.tabCache.has(id))
318
+ return;
319
+ log.debug('tabOpened:', id, url);
320
+ this.tabCache.set(id, { title, url });
321
+ this.primaryTabId ??= id;
322
+ }
323
+ handleTabClosed(id) {
324
+ log.debug('tabClosed:', id);
325
+ this.tabCache.delete(id);
326
+ const wasActivated = this.activatedTabs.delete(id);
327
+ if (id === this.primaryTabId) {
328
+ const remaining = [...this.tabCache.keys()];
329
+ this.primaryTabId = remaining.length > 0 ? remaining[0] : undefined;
330
+ }
331
+ if (wasActivated) {
332
+ this.sendToPlaywright({
333
+ method: 'Target.detachedFromTarget',
334
+ params: { sessionId: id },
335
+ });
336
+ }
337
+ }
338
+ sendToPlaywright(message) {
339
+ if (this.playwrightWs?.readyState === ws_1.WebSocket.OPEN) {
340
+ const json = JSON.stringify(message);
341
+ log.debug('→ PW:', json.length > 200 ? json.slice(0, 200) + '…' : json);
342
+ this.playwrightWs.send(json);
343
+ }
344
+ else {
345
+ log.debug('sendToPlaywright: no Playwright connection');
346
+ }
347
+ }
348
+ handleExtensionConnection(ws) {
349
+ if (this.extensionConn) {
350
+ log.debug('rejected duplicate extension connection');
351
+ ws.close(1000, 'Another extension already connected');
352
+ return;
353
+ }
354
+ log.debug('extension connected');
355
+ this.extensionConn = new ExtensionConnection(ws);
356
+ this.extensionConn.onclose = () => {
357
+ log.debug('extension disconnected');
358
+ this.resetState();
359
+ this.closePlaywrightConnection('Extension disconnected');
360
+ };
361
+ this.extensionConn.onmessage = (method, params) => {
362
+ log.debug('← EXT event:', method);
363
+ if (method === 'forwardCDPEvent') {
364
+ const eventParams = params;
365
+ const sessionId = eventParams.id ?? this.primaryTabId;
366
+ if (eventParams.method === 'Page.frameNavigated' && sessionId) {
367
+ const frame = eventParams.params?.frame;
368
+ if (frame?.url && !frame.parentId) {
369
+ const cached = this.tabCache.get(sessionId);
370
+ if (cached) {
371
+ cached.url = frame.url;
372
+ if (frame.title)
373
+ cached.title = frame.title;
374
+ }
375
+ }
376
+ }
377
+ this.sendToPlaywright({
378
+ sessionId,
379
+ method: eventParams.method,
380
+ params: eventParams.params,
381
+ });
382
+ }
383
+ else if (method === 'tabOpened') {
384
+ const p = params;
385
+ this.handleTabOpened(p.id, p.title, p.url);
386
+ }
387
+ else if (method === 'tabClosed') {
388
+ const p = params;
389
+ this.handleTabClosed(p.id);
390
+ }
391
+ };
392
+ this.extensionConnectedResolve?.();
393
+ }
394
+ closeExtensionConnection(reason) {
395
+ log.debug('closing extension connection:', reason);
396
+ this.extensionConn?.close(reason);
397
+ this.extensionConnectedReject?.(new Error(reason));
398
+ this.resetState();
399
+ }
400
+ resetState() {
401
+ this.tabCache.clear();
402
+ this.activatedTabs.clear();
403
+ this.primaryTabId = undefined;
404
+ this.lastCreatedTabId = undefined;
405
+ this.browserContextId = 'n8n-default-context';
406
+ this.extensionConn = null;
407
+ this.extensionConnectedPromise = new Promise((resolve, reject) => {
408
+ this.extensionConnectedResolve = resolve;
409
+ this.extensionConnectedReject = reject;
410
+ });
411
+ this.extensionConnectedPromise.catch(() => { });
412
+ }
413
+ closePlaywrightConnection(reason) {
414
+ if (this.playwrightWs?.readyState === ws_1.WebSocket.OPEN) {
415
+ log.debug('closing Playwright connection:', reason);
416
+ this.playwrightWs.close(1000, reason);
417
+ }
418
+ this.playwrightWs = null;
419
+ }
420
+ }
421
+ exports.CDPRelayServer = CDPRelayServer;
422
+ class ExtensionConnection {
423
+ constructor(ws) {
424
+ this.callbacks = new Map();
425
+ this.lastId = 0;
426
+ this.ws = ws;
427
+ this.ws.on('message', (data) => this.handleMessage(data));
428
+ this.ws.on('close', () => {
429
+ log.debug('ExtensionConnection WebSocket closed');
430
+ this.handleClose();
431
+ });
432
+ this.ws.on('error', (error) => {
433
+ log.debug('ExtensionConnection WebSocket error:', error);
434
+ this.handleClose();
435
+ });
436
+ }
437
+ async send(method, params, timeoutMs = 30_000) {
438
+ if (this.ws.readyState !== ws_1.WebSocket.OPEN) {
439
+ throw new Error(`WebSocket not open (state=${this.ws.readyState})`);
440
+ }
441
+ const id = ++this.lastId;
442
+ const payload = JSON.stringify({ id, method, params });
443
+ log.debug('→ EXT:', method, 'id=' + String(id));
444
+ this.ws.send(payload);
445
+ return await new Promise((resolve, reject) => {
446
+ const timer = setTimeout(() => {
447
+ this.callbacks.delete(id);
448
+ log.error('→ EXT TIMEOUT:', method, 'id=' + String(id), 'after', timeoutMs, 'ms', 'pending:', this.callbacks.size);
449
+ reject(new Error(`Extension command '${String(method)}' (id=${id}) timed out after ${timeoutMs}ms`));
450
+ }, timeoutMs);
451
+ this.callbacks.set(id, {
452
+ resolve: (value) => {
453
+ clearTimeout(timer);
454
+ resolve(value);
455
+ },
456
+ reject: (reason) => {
457
+ clearTimeout(timer);
458
+ reject(reason);
459
+ },
460
+ });
461
+ });
462
+ }
463
+ close(reason) {
464
+ if (this.ws.readyState === ws_1.WebSocket.OPEN) {
465
+ this.ws.close(1000, reason);
466
+ }
467
+ }
468
+ handleMessage(data) {
469
+ let parsed;
470
+ try {
471
+ parsed = JSON.parse(String(data));
472
+ }
473
+ catch {
474
+ log.debug('failed to parse extension message:', String(data).slice(0, 200));
475
+ return;
476
+ }
477
+ if (parsed.id && this.callbacks.has(parsed.id)) {
478
+ const pending = this.callbacks.get(parsed.id);
479
+ this.callbacks.delete(parsed.id);
480
+ if (parsed.error) {
481
+ log.debug('← EXT error for id=' + String(parsed.id) + ':', parsed.error);
482
+ pending.reject(new Error(parsed.error));
483
+ }
484
+ else {
485
+ log.debug('← EXT response for id=' + String(parsed.id));
486
+ pending.resolve(parsed.result);
487
+ }
488
+ }
489
+ else if (parsed.method) {
490
+ this.onmessage?.(parsed.method, parsed.params);
491
+ }
492
+ else {
493
+ log.debug('← EXT unhandled message:', JSON.stringify(parsed).slice(0, 200));
494
+ }
495
+ }
496
+ handleClose() {
497
+ const pendingCount = this.callbacks.size;
498
+ if (pendingCount > 0) {
499
+ log.debug('ExtensionConnection closed with', pendingCount, 'pending callbacks');
500
+ }
501
+ for (const pending of this.callbacks.values()) {
502
+ pending.reject(new Error('WebSocket closed'));
503
+ }
504
+ this.callbacks.clear();
505
+ this.onclose?.();
506
+ }
507
+ }
508
+ //# sourceMappingURL=cdp-relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-relay.js","sourceRoot":"","sources":["../src/cdp-relay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { BrowserName, Config, ConnectResult, ConnectionState, ResolvedConfig } from './types';
2
+ export declare class BrowserConnection {
3
+ private state;
4
+ private readonly config;
5
+ constructor(userConfig?: Partial<Config>);
6
+ connect(overrideBrowser?: BrowserName): Promise<ConnectResult>;
7
+ disconnect(): Promise<void>;
8
+ getConnection(): ConnectionState;
9
+ get isConnected(): boolean;
10
+ shutdown(): Promise<void>;
11
+ getResolvedConfig(): ResolvedConfig;
12
+ getAvailableBrowsers(): BrowserName[];
13
+ private requireBrowserAvailable;
14
+ private createAdapter;
15
+ }