mcp-accessibility-scanner 2.0.17 → 3.0.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.
Files changed (54) hide show
  1. package/README.md +86 -32
  2. package/config.d.ts +17 -0
  3. package/index.d.ts +0 -1
  4. package/lib/browserContextFactory.js +22 -6
  5. package/lib/browserContextFactory.js.map +1 -1
  6. package/lib/config.js +73 -3
  7. package/lib/config.js.map +1 -1
  8. package/lib/extension/browserModel.js +194 -0
  9. package/lib/extension/browserModel.js.map +1 -0
  10. package/lib/extension/cdpRelay.js +99 -78
  11. package/lib/extension/cdpRelay.js.map +1 -1
  12. package/lib/extension/cdpRelayV2.js +90 -0
  13. package/lib/extension/cdpRelayV2.js.map +1 -0
  14. package/lib/extension/protocol.js +5 -3
  15. package/lib/extension/protocol.js.map +1 -1
  16. package/lib/index.js +1 -1
  17. package/lib/index.js.map +1 -1
  18. package/lib/mcp/http.js +18 -5
  19. package/lib/mcp/http.js.map +1 -1
  20. package/lib/mcp/mdb.js +1 -1
  21. package/lib/mcp/mdb.js.map +1 -1
  22. package/lib/mcp/server.js +11 -6
  23. package/lib/mcp/server.js.map +1 -1
  24. package/lib/program.js +11 -1
  25. package/lib/program.js.map +1 -1
  26. package/lib/response.js +16 -8
  27. package/lib/response.js.map +1 -1
  28. package/lib/tab.js +40 -24
  29. package/lib/tab.js.map +1 -1
  30. package/lib/tools/auditKeyboard.js +1 -1
  31. package/lib/tools/auditKeyboard.js.map +1 -1
  32. package/lib/tools/console.js +3 -1
  33. package/lib/tools/console.js.map +1 -1
  34. package/lib/tools/mouse.js +14 -7
  35. package/lib/tools/mouse.js.map +1 -1
  36. package/lib/tools/navigate.js +1 -1
  37. package/lib/tools/navigate.js.map +1 -1
  38. package/lib/tools/network.js +2 -1
  39. package/lib/tools/network.js.map +1 -1
  40. package/lib/tools/screenshot.js +2 -1
  41. package/lib/tools/screenshot.js.map +1 -1
  42. package/lib/tools/snapshot.js +132 -2
  43. package/lib/tools/snapshot.js.map +1 -1
  44. package/lib/tools/utils.js +2 -2
  45. package/lib/tools/utils.js.map +1 -1
  46. package/lib/utils/ariaCompression.js +247 -0
  47. package/lib/utils/ariaCompression.js.map +1 -0
  48. package/lib/utils/codegen.js +6 -0
  49. package/lib/utils/codegen.js.map +1 -1
  50. package/lib/utils/dataUrl.js +265 -0
  51. package/lib/utils/dataUrl.js.map +1 -0
  52. package/lib/vscode/main.js +1 -1
  53. package/lib/vscode/main.js.map +1 -1
  54. package/package.json +23 -34
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { logUnhandledError } from '../utils/log.js';
17
+ export class BrowserModel {
18
+ _connectPagePrefix;
19
+ _sendToExtension;
20
+ _sendToCDPClient = null;
21
+ _knownTabs = new Map();
22
+ _tabSessions = new Map();
23
+ _tabAttachmentPromises = new Map();
24
+ _autoAttachOperation = Promise.resolve();
25
+ _autoAttach = false;
26
+ _nextSessionId = 1;
27
+ constructor(sendToExtension, _connectPagePrefix) {
28
+ this._connectPagePrefix = _connectPagePrefix;
29
+ this._sendToExtension = sendToExtension;
30
+ }
31
+ connectOverCDP(sendToCDPClient) {
32
+ this._sendToCDPClient = sendToCDPClient;
33
+ }
34
+ _emit(message) {
35
+ this._sendToCDPClient?.(message);
36
+ }
37
+ onTabCreated(tab) {
38
+ if (tab.id === undefined)
39
+ return;
40
+ this._knownTabs.set(tab.id, tab);
41
+ if (this._autoAttach)
42
+ void this._attachTab(tab.id).catch(logUnhandledError);
43
+ }
44
+ onTabRemoved(tabId) {
45
+ this._knownTabs.delete(tabId);
46
+ this._detachTab(tabId);
47
+ }
48
+ onDebuggerEvent(source, method, params) {
49
+ if (source.tabId === undefined)
50
+ return;
51
+ const tabSession = this._tabSessions.get(source.tabId);
52
+ if (!tabSession)
53
+ return;
54
+ const childSessionId = params?.sessionId;
55
+ if (method === 'Target.attachedToTarget' && childSessionId)
56
+ tabSession.childSessions.add(childSessionId);
57
+ else if (method === 'Target.detachedFromTarget' && childSessionId)
58
+ tabSession.childSessions.delete(childSessionId);
59
+ this._emit({ sessionId: source.sessionId || tabSession.sessionId, method, params });
60
+ }
61
+ onDebuggerDetach(source) {
62
+ if (source.tabId !== undefined)
63
+ this._detachTab(source.tabId);
64
+ }
65
+ enableAutoAttach() {
66
+ return this._runAutoAttachOperation(async () => {
67
+ this._autoAttach = true;
68
+ await Promise.all([...this._knownTabs.keys()].map(tabId => this._attachTab(tabId)));
69
+ });
70
+ }
71
+ disableAutoAttach() {
72
+ return this._runAutoAttachOperation(async () => {
73
+ this._autoAttach = false;
74
+ await Promise.allSettled(this._tabAttachmentPromises.values());
75
+ await Promise.all([...this._tabSessions.keys()].map(async (tabId) => {
76
+ await this._sendToExtension('chrome.debugger.detach', [{ tabId }]);
77
+ this._detachTab(tabId);
78
+ }));
79
+ });
80
+ }
81
+ async createTarget(url) {
82
+ const tab = await this._sendToExtension('chrome.tabs.create', [{ url }]);
83
+ if (tab?.id === undefined)
84
+ throw new Error('Failed to create tab');
85
+ this._knownTabs.set(tab.id, tab);
86
+ const tabSession = await this._attachTab(tab.id);
87
+ if (this._connectPagePrefix) {
88
+ const connectPagePrefix = this._connectPagePrefix;
89
+ await Promise.allSettled([...this._knownTabs]
90
+ .filter(([tabId, knownTab]) => tabId !== tab.id && knownTab.url?.startsWith(connectPagePrefix))
91
+ .map(async ([tabId]) => {
92
+ const result = await this._sendDebuggerCommand({ tabId }, 'Target.getTargetInfo', undefined);
93
+ if (result?.targetInfo?.url?.startsWith(connectPagePrefix))
94
+ await this._sendToExtension('chrome.tabs.remove', [tabId]);
95
+ }));
96
+ }
97
+ return { targetId: tabSession.targetInfo?.targetId };
98
+ }
99
+ async closeTarget(targetId) {
100
+ const tabSession = targetId ? this._findTabSession(session => session.targetInfo?.targetId === targetId) : undefined;
101
+ if (!tabSession)
102
+ return { success: false };
103
+ await this._sendToExtension('chrome.tabs.remove', [tabSession.tabId]);
104
+ return { success: true };
105
+ }
106
+ getTargetInfo(sessionId) {
107
+ if (!sessionId)
108
+ return undefined;
109
+ return this._findTabSession(session => session.sessionId === sessionId)?.targetInfo;
110
+ }
111
+ async sendBrowserCommand(method, params) {
112
+ const tabSession = this._tabSessions.values().next().value;
113
+ if (!tabSession)
114
+ throw new Error(`No attached tab to forward browser-level command: ${method}`);
115
+ return await this._sendDebuggerCommand({ tabId: tabSession.tabId }, method, params);
116
+ }
117
+ async sendCommand(sessionId, method, params) {
118
+ let tabSession = this._findTabSession(session => session.sessionId === sessionId);
119
+ let cdpSessionId;
120
+ if (!tabSession) {
121
+ tabSession = this._findTabSession(session => session.childSessions.has(sessionId));
122
+ cdpSessionId = sessionId;
123
+ }
124
+ if (!tabSession)
125
+ throw new Error(`No tab found for sessionId: ${sessionId}`);
126
+ return await this._sendDebuggerCommand({ tabId: tabSession.tabId, sessionId: cdpSessionId }, method, params);
127
+ }
128
+ async _sendDebuggerCommand(target, method, params) {
129
+ const command = [target, method];
130
+ if (params !== undefined)
131
+ command.push(params);
132
+ return await this._sendToExtension('chrome.debugger.sendCommand', command);
133
+ }
134
+ _attachTab(tabId) {
135
+ const existing = this._tabSessions.get(tabId);
136
+ if (existing)
137
+ return Promise.resolve(existing);
138
+ const inFlight = this._tabAttachmentPromises.get(tabId);
139
+ if (inFlight)
140
+ return inFlight;
141
+ const promise = Promise.resolve().then(() => this._attachTabImpl(tabId));
142
+ this._tabAttachmentPromises.set(tabId, promise);
143
+ return promise.finally(() => {
144
+ if (this._tabAttachmentPromises.get(tabId) === promise)
145
+ this._tabAttachmentPromises.delete(tabId);
146
+ });
147
+ }
148
+ _runAutoAttachOperation(operation) {
149
+ const result = this._autoAttachOperation.then(operation);
150
+ this._autoAttachOperation = result.catch(() => { });
151
+ return result;
152
+ }
153
+ async _attachTabImpl(tabId) {
154
+ await this._sendToExtension('chrome.debugger.attach', [{ tabId }, '1.3']);
155
+ const result = await this._sendToExtension('chrome.debugger.sendCommand', [
156
+ { tabId },
157
+ 'Target.getTargetInfo',
158
+ ]);
159
+ const targetInfo = result?.targetInfo;
160
+ const sessionId = `pw-tab-${this._nextSessionId++}`;
161
+ const tabSession = { tabId, sessionId, targetInfo, childSessions: new Set() };
162
+ this._tabSessions.set(tabId, tabSession);
163
+ this._emit({
164
+ method: 'Target.attachedToTarget',
165
+ params: {
166
+ sessionId,
167
+ targetInfo: { ...targetInfo, attached: true },
168
+ waitingForDebugger: false,
169
+ },
170
+ });
171
+ return tabSession;
172
+ }
173
+ _detachTab(tabId) {
174
+ const tabSession = this._tabSessions.get(tabId);
175
+ if (!tabSession)
176
+ return;
177
+ this._tabSessions.delete(tabId);
178
+ this._emit({
179
+ method: 'Target.detachedFromTarget',
180
+ params: {
181
+ sessionId: tabSession.sessionId,
182
+ targetId: tabSession.targetInfo?.targetId,
183
+ },
184
+ });
185
+ }
186
+ _findTabSession(predicate) {
187
+ for (const session of this._tabSessions.values()) {
188
+ if (predicate(session))
189
+ return session;
190
+ }
191
+ return undefined;
192
+ }
193
+ }
194
+ //# sourceMappingURL=browserModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserModel.js","sourceRoot":"","sources":["../../src/extension/browserModel.ts"],"names":[],"mappings":"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"}
@@ -21,12 +21,15 @@
21
21
  * - /extension/guid - Extension connection for chrome.debugger forwarding
22
22
  */
23
23
  import { spawn } from 'node:child_process';
24
+ import fs from 'node:fs/promises';
24
25
  import http from 'node:http';
26
+ import path from 'node:path';
25
27
  import debug from 'debug';
26
28
  import { WebSocket, WebSocketServer } from 'ws';
27
29
  import { httpAddressToString } from '../mcp/http.js';
28
30
  import { logUnhandledError } from '../utils/log.js';
29
31
  import { ManualPromise } from '../mcp/manualPromise.js';
32
+ import { ExtensionProtocolV2 } from './cdpRelayV2.js';
30
33
  import * as protocol from './protocol.js';
31
34
  // @ts-ignore -- internal bundle entry point exposed via package exports
32
35
  const coreBundle = (await import('playwright-core/lib/coreBundle')).default;
@@ -39,11 +42,11 @@ export class CDPRelayServer {
39
42
  _executablePath;
40
43
  _cdpPath;
41
44
  _extensionPath;
45
+ _connectPagePrefix;
42
46
  _wss;
43
47
  _playwrightConnection = null;
44
48
  _extensionConnection = null;
45
- _connectedTabInfo;
46
- _nextSessionId = 1;
49
+ _handler;
47
50
  _extensionConnectionPromise;
48
51
  constructor(server, browserChannel, userDataDir, executablePath) {
49
52
  this._wsHost = httpAddressToString(server.address()).replace(/^http/, 'ws');
@@ -53,6 +56,9 @@ export class CDPRelayServer {
53
56
  const uuid = crypto.randomUUID();
54
57
  this._cdpPath = `/cdp/${uuid}`;
55
58
  this._extensionPath = `/extension/${uuid}`;
59
+ const connectPageUrl = new URL(`chrome-extension://${protocol.EXTENSION_ID}/connect.html`);
60
+ connectPageUrl.searchParams.set('mcpRelayUrl', this.extensionEndpoint());
61
+ this._connectPagePrefix = connectPageUrl.toString();
56
62
  this._resetExtensionConnection();
57
63
  this._wss = new WebSocketServer({ server });
58
64
  this._wss.on('connection', this._onConnection.bind(this));
@@ -63,34 +69,43 @@ export class CDPRelayServer {
63
69
  extensionEndpoint() {
64
70
  return `${this._wsHost}${this._extensionPath}`;
65
71
  }
66
- async ensureExtensionConnectionForMCPContext(clientInfo, abortSignal, toolName) {
72
+ async ensureExtensionConnectionForMCPContext(clientInfo, abortSignal, _toolName) {
67
73
  debugLogger('Ensuring extension connection for MCP context');
68
- if (this._extensionConnection)
69
- return;
70
- this._connectBrowser(clientInfo, toolName);
71
- debugLogger('Waiting for incoming extension connection');
72
- await Promise.race([
73
- this._extensionConnectionPromise,
74
- new Promise((_, reject) => setTimeout(() => {
75
- reject(new Error(`Extension connection timeout. Make sure the "Playwright MCP Bridge" extension is installed. See https://github.com/microsoft/playwright-mcp/blob/main/extension/README.md for installation instructions.`));
76
- }, process.env.PWMCP_TEST_CONNECTION_TIMEOUT ? parseInt(process.env.PWMCP_TEST_CONNECTION_TIMEOUT, 10) : 5_000)),
77
- new Promise((_, reject) => abortSignal.addEventListener('abort', reject))
78
- ]);
74
+ if (abortSignal.aborted)
75
+ throw abortSignal.reason;
76
+ let abortListener = () => { };
77
+ const abortPromise = new Promise((_, reject) => {
78
+ abortListener = () => reject(abortSignal.reason);
79
+ abortSignal.addEventListener('abort', abortListener, { once: true });
80
+ });
81
+ try {
82
+ // Protocol v2 requires explicit tab selection; the legacy newTab hint hides its only approval controls.
83
+ if (!this._extensionConnection)
84
+ await Promise.race([this._connectBrowser(clientInfo, abortSignal), abortPromise]);
85
+ debugLogger('Waiting for incoming extension connection');
86
+ // Manual approval is intentionally unbounded; callers cancel it through the abort signal.
87
+ await Promise.race([
88
+ Promise.all([this._extensionConnectionPromise, this._handler.ready()]),
89
+ abortPromise,
90
+ ]);
91
+ }
92
+ finally {
93
+ abortSignal.removeEventListener('abort', abortListener);
94
+ }
79
95
  debugLogger('Extension connection established');
80
96
  }
81
- _connectBrowser(clientInfo, toolName) {
82
- const mcpRelayEndpoint = `${this._wsHost}${this._extensionPath}`;
97
+ async _connectBrowser(clientInfo, abortSignal) {
83
98
  // Need to specify "key" in the manifest.json to make the id stable when loading from file.
84
- const url = new URL('chrome-extension://jakfalbnbhgkpmoaakfflhflbfpkailf/connect.html');
85
- url.searchParams.set('mcpRelayUrl', mcpRelayEndpoint);
99
+ const url = new URL(this._connectPagePrefix);
86
100
  const client = {
87
101
  name: clientInfo.name,
88
102
  version: clientInfo.version,
89
103
  };
90
104
  url.searchParams.set('client', JSON.stringify(client));
91
105
  url.searchParams.set('protocolVersion', process.env.PWMCP_TEST_PROTOCOL_VERSION ?? protocol.VERSION.toString());
92
- if (toolName)
93
- url.searchParams.set('newTab', String(toolName === 'browser_navigate'));
106
+ const token = process.env.PLAYWRIGHT_MCP_EXTENSION_TOKEN;
107
+ if (token)
108
+ url.searchParams.set('token', token);
94
109
  const href = url.toString();
95
110
  let executablePath = this._executablePath;
96
111
  if (!executablePath) {
@@ -102,8 +117,13 @@ export class CDPRelayServer {
102
117
  throw new Error(`"${this._browserChannel}" executable not found. Make sure it is installed at a standard location.`);
103
118
  }
104
119
  const args = [];
105
- if (this._userDataDir)
120
+ if (this._userDataDir) {
106
121
  args.push(`--user-data-dir=${this._userDataDir}`);
122
+ const profileDirectory = await findPlaywrightExtensionProfile(this._userDataDir);
123
+ if (profileDirectory)
124
+ args.push(`--profile-directory=${profileDirectory}`);
125
+ }
126
+ abortSignal.throwIfAborted();
107
127
  args.push(href);
108
128
  spawn(executablePath, args, {
109
129
  windowsHide: true,
@@ -135,12 +155,18 @@ export class CDPRelayServer {
135
155
  }
136
156
  }
137
157
  _handlePlaywrightConnection(ws) {
158
+ if (!this._extensionConnection) {
159
+ debugLogger('Rejecting Playwright connection: extension not connected');
160
+ ws.close(1000, 'Extension not connected');
161
+ return;
162
+ }
138
163
  if (this._playwrightConnection) {
139
164
  debugLogger('Rejecting second Playwright connection');
140
165
  ws.close(1000, 'Another CDP client already connected');
141
166
  return;
142
167
  }
143
168
  this._playwrightConnection = ws;
169
+ this._handler.connectOverCDP(message => this._sendToPlaywright(message));
144
170
  ws.on('message', async (data) => {
145
171
  try {
146
172
  const message = JSON.parse(data.toString());
@@ -164,14 +190,20 @@ export class CDPRelayServer {
164
190
  }
165
191
  _closeExtensionConnection(reason) {
166
192
  this._extensionConnection?.close(reason);
167
- this._extensionConnectionPromise.reject(new Error(reason));
193
+ if (!this._extensionConnectionPromise.isDone())
194
+ this._extensionConnectionPromise.reject(new Error(reason));
195
+ this._handler.onExtensionDisconnect(reason);
168
196
  this._resetExtensionConnection();
169
197
  }
170
198
  _resetExtensionConnection() {
171
- this._connectedTabInfo = undefined;
172
199
  this._extensionConnection = null;
173
200
  this._extensionConnectionPromise = new ManualPromise();
174
201
  void this._extensionConnectionPromise.catch(logUnhandledError);
202
+ this._handler = new ExtensionProtocolV2((method, params) => {
203
+ if (!this._extensionConnection)
204
+ throw new Error('Extension not connected');
205
+ return this._extensionConnection.send(method, params);
206
+ }, this._connectPagePrefix);
175
207
  }
176
208
  _closePlaywrightConnection(reason) {
177
209
  if (this._playwrightConnection?.readyState === WebSocket.OPEN)
@@ -183,29 +215,20 @@ export class CDPRelayServer {
183
215
  ws.close(1000, 'Another extension connection already established');
184
216
  return;
185
217
  }
186
- this._extensionConnection = new ExtensionConnection(ws);
187
- this._extensionConnection.onclose = (c, reason) => {
188
- debugLogger('Extension WebSocket closed:', reason, c === this._extensionConnection);
189
- if (this._extensionConnection !== c)
218
+ const connection = new ExtensionConnection(ws);
219
+ const handler = this._handler;
220
+ this._extensionConnection = connection;
221
+ connection.onclose = reason => {
222
+ if (this._extensionConnection !== connection)
190
223
  return;
191
- this._resetExtensionConnection();
224
+ debugLogger('Extension WebSocket closed:', reason);
225
+ handler.onExtensionDisconnect(reason);
192
226
  this._closePlaywrightConnection(`Extension disconnected: ${reason}`);
227
+ this._resetExtensionConnection();
193
228
  };
194
- this._extensionConnection.onmessage = this._handleExtensionMessage.bind(this);
229
+ connection.onmessage = (method, params) => handler.handleExtensionEvent(method, params);
195
230
  this._extensionConnectionPromise.resolve();
196
231
  }
197
- _handleExtensionMessage(method, params) {
198
- switch (method) {
199
- case 'forwardCDPEvent':
200
- const sessionId = params.sessionId || this._connectedTabInfo?.sessionId;
201
- this._sendToPlaywright({
202
- sessionId,
203
- method: params.method,
204
- params: params.params
205
- });
206
- break;
207
- }
208
- }
209
232
  async _handlePlaywrightMessage(message) {
210
233
  debugLogger('← Playwright:', `${message.method} (id=${message.id})`);
211
234
  const { id, sessionId, method, params } = message;
@@ -234,49 +257,47 @@ export class CDPRelayServer {
234
257
  case 'Browser.setDownloadBehavior': {
235
258
  return {};
236
259
  }
237
- case 'Target.setAutoAttach': {
238
- // Forward child session handling.
239
- if (sessionId)
240
- break;
241
- // Simulate auto-attach behavior with real target info
242
- const { targetInfo } = await this._extensionConnection.send('attachToTab', {});
243
- this._connectedTabInfo = {
244
- targetInfo,
245
- sessionId: `pw-tab-${this._nextSessionId++}`,
246
- };
247
- debugLogger('Simulating auto-attach');
248
- this._sendToPlaywright({
249
- method: 'Target.attachedToTarget',
250
- params: {
251
- sessionId: this._connectedTabInfo.sessionId,
252
- targetInfo: {
253
- ...this._connectedTabInfo.targetInfo,
254
- attached: true,
255
- },
256
- waitingForDebugger: false
257
- }
258
- });
259
- return {};
260
- }
261
- case 'Target.getTargetInfo': {
262
- return this._connectedTabInfo?.targetInfo;
263
- }
264
260
  }
265
- return await this._forwardToExtension(method, params, sessionId);
266
- }
267
- async _forwardToExtension(method, params, sessionId) {
268
- if (!this._extensionConnection)
269
- throw new Error('Extension not connected');
270
- // Top level sessionId is only passed between the relay and the client.
271
- if (this._connectedTabInfo?.sessionId === sessionId)
272
- sessionId = undefined;
273
- return await this._extensionConnection.send('forwardCDPCommand', { sessionId, method, params });
261
+ const handled = await this._handler.handleCDPCommand(method, params, sessionId);
262
+ if (handled)
263
+ return handled.result;
264
+ return await this._handler.forwardToExtension(method, params, sessionId);
274
265
  }
275
266
  _sendToPlaywright(message) {
276
267
  debugLogger('→ Playwright:', `${message.method ?? `response(id=${message.id})`}`);
277
268
  this._playwrightConnection?.send(JSON.stringify(message));
278
269
  }
279
270
  }
271
+ async function findPlaywrightExtensionProfile(userDataDir) {
272
+ let profiles;
273
+ try {
274
+ profiles = (await fs.readdir(userDataDir, { withFileTypes: true }))
275
+ .filter(entry => entry.isDirectory() && (entry.name === 'Default' || /^Profile \d+$/.test(entry.name)))
276
+ .map(entry => entry.name)
277
+ .sort((a, b) => a === 'Default' ? -1 : b === 'Default' ? 1 : parseInt(a.slice(8), 10) - parseInt(b.slice(8), 10));
278
+ }
279
+ catch {
280
+ return;
281
+ }
282
+ try {
283
+ const localState = JSON.parse(await fs.readFile(path.join(userDataDir, 'Local State'), 'utf8'));
284
+ const lastUsed = localState?.profile?.last_used;
285
+ if (typeof lastUsed === 'string' && profiles.includes(lastUsed))
286
+ profiles = [lastUsed, ...profiles.filter(profile => profile !== lastUsed)];
287
+ }
288
+ catch {
289
+ // Fall back to the deterministic profile order when Local State is unavailable.
290
+ }
291
+ for (const profile of profiles) {
292
+ try {
293
+ await fs.access(path.join(userDataDir, profile, 'Extensions', protocol.EXTENSION_ID));
294
+ return profile;
295
+ }
296
+ catch {
297
+ continue;
298
+ }
299
+ }
300
+ }
280
301
  class ExtensionConnection {
281
302
  _ws;
282
303
  _callbacks = new Map();
@@ -346,7 +367,7 @@ class ExtensionConnection {
346
367
  _onClose(event) {
347
368
  debugLogger(`<ws closed> code=${event.code} reason=${event.reason}`);
348
369
  this._dispose();
349
- this.onclose?.(this, event.reason);
370
+ this.onclose?.(event.reason);
350
371
  }
351
372
  _onError(event) {
352
373
  debugLogger(`<ws error> message=${event.message} type=${event.type} target=${event.target}`);
@@ -1 +1 @@
1
- {"version":3,"file":"cdpRelay.js","sourceRoot":"","sources":["../../src/extension/cdpRelay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdpRelay.js","sourceRoot":"","sources":["../../src/extension/cdpRelay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ManualPromise } from '../mcp/manualPromise.js';
17
+ import { logUnhandledError } from '../utils/log.js';
18
+ import { BrowserModel } from './browserModel.js';
19
+ export class ExtensionProtocolV2 {
20
+ _model;
21
+ _ready = new ManualPromise();
22
+ constructor(sendCommand, connectPagePrefix) {
23
+ this._model = new BrowserModel(sendCommand, connectPagePrefix);
24
+ void this._ready.catch(logUnhandledError);
25
+ }
26
+ ready() {
27
+ return this._ready;
28
+ }
29
+ connectOverCDP(sendToCDPClient) {
30
+ this._model.connectOverCDP(sendToCDPClient);
31
+ }
32
+ onExtensionDisconnect(reason) {
33
+ if (!this._ready.isDone())
34
+ this._ready.reject(new Error(`Extension disconnected before initialization: ${reason}`));
35
+ }
36
+ handleExtensionEvent(method, params) {
37
+ switch (method) {
38
+ case 'chrome.debugger.onEvent': {
39
+ const [source, cdpMethod, cdpParams] = params;
40
+ this._model.onDebuggerEvent(source, cdpMethod, cdpParams);
41
+ break;
42
+ }
43
+ case 'chrome.debugger.onDetach': {
44
+ const [source] = params;
45
+ this._model.onDebuggerDetach(source);
46
+ break;
47
+ }
48
+ case 'chrome.tabs.onCreated': {
49
+ const [tab] = params;
50
+ this._model.onTabCreated(tab);
51
+ break;
52
+ }
53
+ case 'chrome.tabs.onRemoved': {
54
+ const [tabId] = params;
55
+ this._model.onTabRemoved(tabId);
56
+ break;
57
+ }
58
+ case 'extension.initialized': {
59
+ this._ready.resolve();
60
+ break;
61
+ }
62
+ }
63
+ }
64
+ async handleCDPCommand(method, params, sessionId) {
65
+ switch (method) {
66
+ case 'Target.setAutoAttach': {
67
+ if (sessionId)
68
+ return undefined;
69
+ if (params?.autoAttach)
70
+ await this._model.enableAutoAttach();
71
+ else
72
+ await this._model.disableAutoAttach();
73
+ return { result: {} };
74
+ }
75
+ case 'Target.createTarget':
76
+ return { result: await this._model.createTarget(params?.url) };
77
+ case 'Target.closeTarget':
78
+ return { result: await this._model.closeTarget(params?.targetId) };
79
+ case 'Target.getTargetInfo':
80
+ return { result: this._model.getTargetInfo(sessionId) };
81
+ }
82
+ return undefined;
83
+ }
84
+ async forwardToExtension(method, params, sessionId) {
85
+ if (!sessionId)
86
+ return await this._model.sendBrowserCommand(method, params);
87
+ return await this._model.sendCommand(sessionId, method, params);
88
+ }
89
+ }
90
+ //# sourceMappingURL=cdpRelayV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdpRelayV2.js","sourceRoot":"","sources":["../../src/extension/cdpRelayV2.ts"],"names":[],"mappings":"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"}