ultimate-playwright-mcp 0.1.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 +26 -0
- package/README.md +286 -0
- package/dist/browser/cdp.d.ts +37 -0
- package/dist/browser/cdp.d.ts.map +1 -0
- package/dist/browser/cdp.helpers.d.ts +13 -0
- package/dist/browser/cdp.helpers.d.ts.map +1 -0
- package/dist/browser/cdp.helpers.js +38 -0
- package/dist/browser/cdp.helpers.js.map +1 -0
- package/dist/browser/cdp.js +77 -0
- package/dist/browser/cdp.js.map +1 -0
- package/dist/browser/chrome-tab-groups.d.ts +93 -0
- package/dist/browser/chrome-tab-groups.d.ts.map +1 -0
- package/dist/browser/chrome-tab-groups.js +458 -0
- package/dist/browser/chrome-tab-groups.js.map +1 -0
- package/dist/browser/chrome.d.ts +11 -0
- package/dist/browser/chrome.d.ts.map +1 -0
- package/dist/browser/chrome.js +74 -0
- package/dist/browser/chrome.js.map +1 -0
- package/dist/browser/pw-role-snapshot.d.ts +41 -0
- package/dist/browser/pw-role-snapshot.d.ts.map +1 -0
- package/dist/browser/pw-role-snapshot.js +346 -0
- package/dist/browser/pw-role-snapshot.js.map +1 -0
- package/dist/browser/pw-session.d.ts +145 -0
- package/dist/browser/pw-session.d.ts.map +1 -0
- package/dist/browser/pw-session.js +468 -0
- package/dist/browser/pw-session.js.map +1 -0
- package/dist/browser/pw-tools-activity.d.ts +27 -0
- package/dist/browser/pw-tools-activity.d.ts.map +1 -0
- package/dist/browser/pw-tools-activity.js +52 -0
- package/dist/browser/pw-tools-activity.js.map +1 -0
- package/dist/browser/pw-tools-downloads.d.ts +40 -0
- package/dist/browser/pw-tools-downloads.d.ts.map +1 -0
- package/dist/browser/pw-tools-downloads.js +191 -0
- package/dist/browser/pw-tools-downloads.js.map +1 -0
- package/dist/browser/pw-tools-interactions.d.ts +122 -0
- package/dist/browser/pw-tools-interactions.d.ts.map +1 -0
- package/dist/browser/pw-tools-interactions.js +434 -0
- package/dist/browser/pw-tools-interactions.js.map +1 -0
- package/dist/browser/pw-tools-responses.d.ts +19 -0
- package/dist/browser/pw-tools-responses.d.ts.map +1 -0
- package/dist/browser/pw-tools-responses.js +98 -0
- package/dist/browser/pw-tools-responses.js.map +1 -0
- package/dist/browser/pw-tools-shared.d.ts +12 -0
- package/dist/browser/pw-tools-shared.d.ts.map +1 -0
- package/dist/browser/pw-tools-shared.js +55 -0
- package/dist/browser/pw-tools-shared.js.map +1 -0
- package/dist/browser/pw-tools-snapshot.d.ts +70 -0
- package/dist/browser/pw-tools-snapshot.d.ts.map +1 -0
- package/dist/browser/pw-tools-snapshot.js +151 -0
- package/dist/browser/pw-tools-snapshot.js.map +1 -0
- package/dist/browser/pw-tools-state.d.ts +52 -0
- package/dist/browser/pw-tools-state.d.ts.map +1 -0
- package/dist/browser/pw-tools-state.js +159 -0
- package/dist/browser/pw-tools-state.js.map +1 -0
- package/dist/browser/pw-tools-storage.d.ts +53 -0
- package/dist/browser/pw-tools-storage.d.ts.map +1 -0
- package/dist/browser/pw-tools-storage.js +81 -0
- package/dist/browser/pw-tools-storage.js.map +1 -0
- package/dist/browser/pw-tools-trace.d.ts +18 -0
- package/dist/browser/pw-tools-trace.d.ts.map +1 -0
- package/dist/browser/pw-tools-trace.js +31 -0
- package/dist/browser/pw-tools-trace.js.map +1 -0
- package/dist/browser/tab-groups.d.ts +94 -0
- package/dist/browser/tab-groups.d.ts.map +1 -0
- package/dist/browser/tab-groups.js +303 -0
- package/dist/browser/tab-groups.js.map +1 -0
- package/dist/browser/target-id.d.ts +20 -0
- package/dist/browser/target-id.d.ts.map +1 -0
- package/dist/browser/target-id.js +29 -0
- package/dist/browser/target-id.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +35 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +32 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon/chrome-daemon.d.ts +7 -0
- package/dist/daemon/chrome-daemon.d.ts.map +1 -0
- package/dist/daemon/chrome-daemon.js +264 -0
- package/dist/daemon/chrome-daemon.js.map +1 -0
- package/dist/daemon/cli.d.ts +6 -0
- package/dist/daemon/cli.d.ts.map +1 -0
- package/dist/daemon/cli.js +110 -0
- package/dist/daemon/cli.js.map +1 -0
- package/dist/daemon/manager.d.ts +22 -0
- package/dist/daemon/manager.d.ts.map +1 -0
- package/dist/daemon/manager.js +89 -0
- package/dist/daemon/manager.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +41 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +122 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/actions.d.ts +6 -0
- package/dist/mcp/tools/actions.d.ts.map +1 -0
- package/dist/mcp/tools/actions.js +214 -0
- package/dist/mcp/tools/actions.js.map +1 -0
- package/dist/mcp/tools/navigate.d.ts +6 -0
- package/dist/mcp/tools/navigate.d.ts.map +1 -0
- package/dist/mcp/tools/navigate.js +31 -0
- package/dist/mcp/tools/navigate.js.map +1 -0
- package/dist/mcp/tools/snapshot.d.ts +6 -0
- package/dist/mcp/tools/snapshot.d.ts.map +1 -0
- package/dist/mcp/tools/snapshot.js +26 -0
- package/dist/mcp/tools/snapshot.js.map +1 -0
- package/dist/mcp/tools/tab-group.d.ts +9 -0
- package/dist/mcp/tools/tab-group.d.ts.map +1 -0
- package/dist/mcp/tools/tab-group.js +173 -0
- package/dist/mcp/tools/tab-group.js.map +1 -0
- package/dist/mcp/tools/tabs.d.ts +6 -0
- package/dist/mcp/tools/tabs.d.ts.map +1 -0
- package/dist/mcp/tools/tabs.js +209 -0
- package/dist/mcp/tools/tabs.js.map +1 -0
- package/dist/utils/command-format.d.ts +6 -0
- package/dist/utils/command-format.d.ts.map +1 -0
- package/dist/utils/command-format.js +8 -0
- package/dist/utils/command-format.js.map +1 -0
- package/dist/utils/errors.d.ts +6 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +22 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/extension-installer.d.ts +16 -0
- package/dist/utils/extension-installer.d.ts.map +1 -0
- package/dist/utils/extension-installer.js +134 -0
- package/dist/utils/extension-installer.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracted from OpenClaw (https://github.com/openclaw/openclaw)
|
|
3
|
+
* Original: src/browser/pw-session.ts
|
|
4
|
+
* License: MIT
|
|
5
|
+
*
|
|
6
|
+
* Modified for ultimate-playwright-mcp:
|
|
7
|
+
* - Updated import paths to use our simplified utilities
|
|
8
|
+
* - Removed logging dependencies
|
|
9
|
+
*/
|
|
10
|
+
import { chromium } from "playwright-core";
|
|
11
|
+
import { formatErrorMessage } from "../utils/errors.js";
|
|
12
|
+
import { getHeadersWithAuth } from "./cdp.helpers.js";
|
|
13
|
+
import { getChromeWebSocketUrl } from "./chrome.js";
|
|
14
|
+
const pageStates = new WeakMap();
|
|
15
|
+
const contextStates = new WeakMap();
|
|
16
|
+
const observedContexts = new WeakSet();
|
|
17
|
+
const observedPages = new WeakSet();
|
|
18
|
+
// Best-effort cache to make role refs stable even if Playwright returns a different Page object
|
|
19
|
+
// for the same CDP target across requests.
|
|
20
|
+
const roleRefsByTarget = new Map();
|
|
21
|
+
const MAX_ROLE_REFS_CACHE = 50;
|
|
22
|
+
const MAX_CONSOLE_MESSAGES = 500;
|
|
23
|
+
const MAX_PAGE_ERRORS = 200;
|
|
24
|
+
const MAX_NETWORK_REQUESTS = 500;
|
|
25
|
+
let cached = null;
|
|
26
|
+
let connecting = null;
|
|
27
|
+
function normalizeCdpUrl(raw) {
|
|
28
|
+
return raw.replace(/\/$/, "");
|
|
29
|
+
}
|
|
30
|
+
function roleRefsKey(cdpUrl, targetId) {
|
|
31
|
+
return `${normalizeCdpUrl(cdpUrl)}::${targetId}`;
|
|
32
|
+
}
|
|
33
|
+
export function rememberRoleRefsForTarget(opts) {
|
|
34
|
+
const targetId = opts.targetId.trim();
|
|
35
|
+
if (!targetId) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
roleRefsByTarget.set(roleRefsKey(opts.cdpUrl, targetId), {
|
|
39
|
+
refs: opts.refs,
|
|
40
|
+
...(opts.frameSelector ? { frameSelector: opts.frameSelector } : {}),
|
|
41
|
+
...(opts.mode ? { mode: opts.mode } : {}),
|
|
42
|
+
});
|
|
43
|
+
while (roleRefsByTarget.size > MAX_ROLE_REFS_CACHE) {
|
|
44
|
+
const first = roleRefsByTarget.keys().next();
|
|
45
|
+
if (first.done) {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
roleRefsByTarget.delete(first.value);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export function storeRoleRefsForTarget(opts) {
|
|
52
|
+
const state = ensurePageState(opts.page);
|
|
53
|
+
state.roleRefs = opts.refs;
|
|
54
|
+
state.roleRefsFrameSelector = opts.frameSelector;
|
|
55
|
+
state.roleRefsMode = opts.mode;
|
|
56
|
+
if (!opts.targetId?.trim()) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
rememberRoleRefsForTarget({
|
|
60
|
+
cdpUrl: opts.cdpUrl,
|
|
61
|
+
targetId: opts.targetId,
|
|
62
|
+
refs: opts.refs,
|
|
63
|
+
frameSelector: opts.frameSelector,
|
|
64
|
+
mode: opts.mode,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
export function restoreRoleRefsForTarget(opts) {
|
|
68
|
+
const targetId = opts.targetId?.trim() || "";
|
|
69
|
+
if (!targetId) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const cached = roleRefsByTarget.get(roleRefsKey(opts.cdpUrl, targetId));
|
|
73
|
+
if (!cached) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const state = ensurePageState(opts.page);
|
|
77
|
+
if (state.roleRefs) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
state.roleRefs = cached.refs;
|
|
81
|
+
state.roleRefsFrameSelector = cached.frameSelector;
|
|
82
|
+
state.roleRefsMode = cached.mode;
|
|
83
|
+
}
|
|
84
|
+
export function ensurePageState(page) {
|
|
85
|
+
const existing = pageStates.get(page);
|
|
86
|
+
if (existing) {
|
|
87
|
+
return existing;
|
|
88
|
+
}
|
|
89
|
+
const state = {
|
|
90
|
+
console: [],
|
|
91
|
+
errors: [],
|
|
92
|
+
requests: [],
|
|
93
|
+
requestIds: new WeakMap(),
|
|
94
|
+
nextRequestId: 0,
|
|
95
|
+
armIdUpload: 0,
|
|
96
|
+
armIdDialog: 0,
|
|
97
|
+
armIdDownload: 0,
|
|
98
|
+
};
|
|
99
|
+
pageStates.set(page, state);
|
|
100
|
+
if (!observedPages.has(page)) {
|
|
101
|
+
observedPages.add(page);
|
|
102
|
+
page.on("console", (msg) => {
|
|
103
|
+
const entry = {
|
|
104
|
+
type: msg.type(),
|
|
105
|
+
text: msg.text(),
|
|
106
|
+
timestamp: new Date().toISOString(),
|
|
107
|
+
location: msg.location(),
|
|
108
|
+
};
|
|
109
|
+
state.console.push(entry);
|
|
110
|
+
if (state.console.length > MAX_CONSOLE_MESSAGES) {
|
|
111
|
+
state.console.shift();
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
page.on("pageerror", (err) => {
|
|
115
|
+
state.errors.push({
|
|
116
|
+
message: err?.message ? String(err.message) : String(err),
|
|
117
|
+
name: err?.name ? String(err.name) : undefined,
|
|
118
|
+
stack: err?.stack ? String(err.stack) : undefined,
|
|
119
|
+
timestamp: new Date().toISOString(),
|
|
120
|
+
});
|
|
121
|
+
if (state.errors.length > MAX_PAGE_ERRORS) {
|
|
122
|
+
state.errors.shift();
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
page.on("request", (req) => {
|
|
126
|
+
state.nextRequestId += 1;
|
|
127
|
+
const id = `r${state.nextRequestId}`;
|
|
128
|
+
state.requestIds.set(req, id);
|
|
129
|
+
state.requests.push({
|
|
130
|
+
id,
|
|
131
|
+
timestamp: new Date().toISOString(),
|
|
132
|
+
method: req.method(),
|
|
133
|
+
url: req.url(),
|
|
134
|
+
resourceType: req.resourceType(),
|
|
135
|
+
});
|
|
136
|
+
if (state.requests.length > MAX_NETWORK_REQUESTS) {
|
|
137
|
+
state.requests.shift();
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
page.on("response", (resp) => {
|
|
141
|
+
const req = resp.request();
|
|
142
|
+
const id = state.requestIds.get(req);
|
|
143
|
+
if (!id) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
let rec;
|
|
147
|
+
for (let i = state.requests.length - 1; i >= 0; i -= 1) {
|
|
148
|
+
const candidate = state.requests[i];
|
|
149
|
+
if (candidate && candidate.id === id) {
|
|
150
|
+
rec = candidate;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (!rec) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
rec.status = resp.status();
|
|
158
|
+
rec.ok = resp.ok();
|
|
159
|
+
});
|
|
160
|
+
page.on("requestfailed", (req) => {
|
|
161
|
+
const id = state.requestIds.get(req);
|
|
162
|
+
if (!id) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
let rec;
|
|
166
|
+
for (let i = state.requests.length - 1; i >= 0; i -= 1) {
|
|
167
|
+
const candidate = state.requests[i];
|
|
168
|
+
if (candidate && candidate.id === id) {
|
|
169
|
+
rec = candidate;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (!rec) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
rec.failureText = req.failure()?.errorText;
|
|
177
|
+
rec.ok = false;
|
|
178
|
+
});
|
|
179
|
+
page.on("close", () => {
|
|
180
|
+
pageStates.delete(page);
|
|
181
|
+
observedPages.delete(page);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return state;
|
|
185
|
+
}
|
|
186
|
+
function observeContext(context) {
|
|
187
|
+
if (observedContexts.has(context)) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
observedContexts.add(context);
|
|
191
|
+
ensureContextState(context);
|
|
192
|
+
for (const page of context.pages()) {
|
|
193
|
+
ensurePageState(page);
|
|
194
|
+
}
|
|
195
|
+
context.on("page", (page) => ensurePageState(page));
|
|
196
|
+
}
|
|
197
|
+
export function ensureContextState(context) {
|
|
198
|
+
const existing = contextStates.get(context);
|
|
199
|
+
if (existing) {
|
|
200
|
+
return existing;
|
|
201
|
+
}
|
|
202
|
+
const state = { traceActive: false };
|
|
203
|
+
contextStates.set(context, state);
|
|
204
|
+
return state;
|
|
205
|
+
}
|
|
206
|
+
function observeBrowser(browser) {
|
|
207
|
+
for (const context of browser.contexts()) {
|
|
208
|
+
observeContext(context);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
async function connectBrowser(cdpUrl) {
|
|
212
|
+
const normalized = normalizeCdpUrl(cdpUrl);
|
|
213
|
+
if (cached?.cdpUrl === normalized) {
|
|
214
|
+
return cached;
|
|
215
|
+
}
|
|
216
|
+
if (connecting) {
|
|
217
|
+
return await connecting;
|
|
218
|
+
}
|
|
219
|
+
const connectWithRetry = async () => {
|
|
220
|
+
let lastErr;
|
|
221
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
222
|
+
try {
|
|
223
|
+
const timeout = 5000 + attempt * 2000;
|
|
224
|
+
const wsUrl = await getChromeWebSocketUrl(normalized, timeout).catch(() => null);
|
|
225
|
+
const endpoint = wsUrl ?? normalized;
|
|
226
|
+
const headers = getHeadersWithAuth(endpoint);
|
|
227
|
+
const browser = await chromium.connectOverCDP(endpoint, { timeout, headers });
|
|
228
|
+
const connected = { browser, cdpUrl: normalized };
|
|
229
|
+
cached = connected;
|
|
230
|
+
observeBrowser(browser);
|
|
231
|
+
browser.on("disconnected", () => {
|
|
232
|
+
if (cached?.browser === browser) {
|
|
233
|
+
cached = null;
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
return connected;
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
lastErr = err;
|
|
240
|
+
const delay = 250 + attempt * 250;
|
|
241
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (lastErr instanceof Error) {
|
|
245
|
+
throw lastErr;
|
|
246
|
+
}
|
|
247
|
+
const message = lastErr ? formatErrorMessage(lastErr) : "CDP connect failed";
|
|
248
|
+
throw new Error(message);
|
|
249
|
+
};
|
|
250
|
+
connecting = connectWithRetry().finally(() => {
|
|
251
|
+
connecting = null;
|
|
252
|
+
});
|
|
253
|
+
return await connecting;
|
|
254
|
+
}
|
|
255
|
+
async function getAllPages(browser) {
|
|
256
|
+
const contexts = browser.contexts();
|
|
257
|
+
const pages = contexts.flatMap((c) => c.pages());
|
|
258
|
+
return pages;
|
|
259
|
+
}
|
|
260
|
+
async function pageTargetId(page) {
|
|
261
|
+
const session = await page.context().newCDPSession(page);
|
|
262
|
+
try {
|
|
263
|
+
const info = (await session.send("Target.getTargetInfo"));
|
|
264
|
+
const targetId = String(info?.targetInfo?.targetId ?? "").trim();
|
|
265
|
+
return targetId || null;
|
|
266
|
+
}
|
|
267
|
+
finally {
|
|
268
|
+
await session.detach().catch(() => { });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
async function findPageByTargetId(browser, targetId, cdpUrl) {
|
|
272
|
+
const pages = await getAllPages(browser);
|
|
273
|
+
// First, try the standard CDP session approach
|
|
274
|
+
for (const page of pages) {
|
|
275
|
+
const tid = await pageTargetId(page).catch(() => null);
|
|
276
|
+
if (tid && tid === targetId) {
|
|
277
|
+
return page;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// If CDP sessions fail (e.g., extension relay blocks Target.attachToBrowserTarget),
|
|
281
|
+
// fall back to URL-based matching using the /json/list endpoint
|
|
282
|
+
if (cdpUrl) {
|
|
283
|
+
try {
|
|
284
|
+
const baseUrl = cdpUrl
|
|
285
|
+
.replace(/\/+$/, "")
|
|
286
|
+
.replace(/^ws:/, "http:")
|
|
287
|
+
.replace(/\/cdp$/, "");
|
|
288
|
+
const listUrl = `${baseUrl}/json/list`;
|
|
289
|
+
const response = await fetch(listUrl, { headers: getHeadersWithAuth(listUrl) });
|
|
290
|
+
if (response.ok) {
|
|
291
|
+
const targets = (await response.json());
|
|
292
|
+
const target = targets.find((t) => t.id === targetId);
|
|
293
|
+
if (target) {
|
|
294
|
+
// Try to find a page with matching URL
|
|
295
|
+
const urlMatch = pages.filter((p) => p.url() === target.url);
|
|
296
|
+
if (urlMatch.length === 1) {
|
|
297
|
+
return urlMatch[0];
|
|
298
|
+
}
|
|
299
|
+
// If multiple URL matches, use index-based matching as fallback
|
|
300
|
+
// This works when Playwright and the relay enumerate tabs in the same order
|
|
301
|
+
if (urlMatch.length > 1) {
|
|
302
|
+
const sameUrlTargets = targets.filter((t) => t.url === target.url);
|
|
303
|
+
if (sameUrlTargets.length === urlMatch.length) {
|
|
304
|
+
const idx = sameUrlTargets.findIndex((t) => t.id === targetId);
|
|
305
|
+
if (idx >= 0 && idx < urlMatch.length) {
|
|
306
|
+
return urlMatch[idx];
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
// Ignore fetch errors and fall through to return null
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
export async function getPageForTargetId(opts) {
|
|
320
|
+
const { browser } = await connectBrowser(opts.cdpUrl);
|
|
321
|
+
const pages = await getAllPages(browser);
|
|
322
|
+
if (!pages.length) {
|
|
323
|
+
throw new Error("No pages available in the connected browser.");
|
|
324
|
+
}
|
|
325
|
+
const first = pages[0];
|
|
326
|
+
if (!opts.targetId) {
|
|
327
|
+
return first;
|
|
328
|
+
}
|
|
329
|
+
const found = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
|
|
330
|
+
if (!found) {
|
|
331
|
+
// Extension relays can block CDP attachment APIs (e.g. Target.attachToBrowserTarget),
|
|
332
|
+
// which prevents us from resolving a page's targetId via newCDPSession(). If Playwright
|
|
333
|
+
// only exposes a single Page, use it as a best-effort fallback.
|
|
334
|
+
if (pages.length === 1) {
|
|
335
|
+
return first;
|
|
336
|
+
}
|
|
337
|
+
throw new Error("tab not found");
|
|
338
|
+
}
|
|
339
|
+
return found;
|
|
340
|
+
}
|
|
341
|
+
export function refLocator(page, ref) {
|
|
342
|
+
const normalized = ref.startsWith("@")
|
|
343
|
+
? ref.slice(1)
|
|
344
|
+
: ref.startsWith("ref=")
|
|
345
|
+
? ref.slice(4)
|
|
346
|
+
: ref;
|
|
347
|
+
if (/^e\d+$/.test(normalized)) {
|
|
348
|
+
const state = pageStates.get(page);
|
|
349
|
+
if (state?.roleRefsMode === "aria") {
|
|
350
|
+
const scope = state.roleRefsFrameSelector
|
|
351
|
+
? page.frameLocator(state.roleRefsFrameSelector)
|
|
352
|
+
: page;
|
|
353
|
+
return scope.locator(`aria-ref=${normalized}`);
|
|
354
|
+
}
|
|
355
|
+
const info = state?.roleRefs?.[normalized];
|
|
356
|
+
if (!info) {
|
|
357
|
+
throw new Error(`Unknown ref "${normalized}". Run a new snapshot and use a ref from that snapshot.`);
|
|
358
|
+
}
|
|
359
|
+
const scope = state?.roleRefsFrameSelector
|
|
360
|
+
? page.frameLocator(state.roleRefsFrameSelector)
|
|
361
|
+
: page;
|
|
362
|
+
const locAny = scope;
|
|
363
|
+
const locator = info.name
|
|
364
|
+
? locAny.getByRole(info.role, { name: info.name, exact: true })
|
|
365
|
+
: locAny.getByRole(info.role);
|
|
366
|
+
return info.nth !== undefined ? locator.nth(info.nth) : locator;
|
|
367
|
+
}
|
|
368
|
+
return page.locator(`aria-ref=${normalized}`);
|
|
369
|
+
}
|
|
370
|
+
export async function closePlaywrightBrowserConnection() {
|
|
371
|
+
const cur = cached;
|
|
372
|
+
cached = null;
|
|
373
|
+
if (!cur) {
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
await cur.browser.close().catch(() => { });
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* List all pages/tabs from the persistent Playwright connection.
|
|
380
|
+
* Used for remote profiles where HTTP-based /json/list is ephemeral.
|
|
381
|
+
*/
|
|
382
|
+
export async function listPagesViaPlaywright(opts) {
|
|
383
|
+
const { browser } = await connectBrowser(opts.cdpUrl);
|
|
384
|
+
const pages = await getAllPages(browser);
|
|
385
|
+
const results = [];
|
|
386
|
+
for (const page of pages) {
|
|
387
|
+
const tid = await pageTargetId(page).catch(() => null);
|
|
388
|
+
if (tid) {
|
|
389
|
+
results.push({
|
|
390
|
+
targetId: tid,
|
|
391
|
+
title: await page.title().catch(() => ""),
|
|
392
|
+
url: page.url(),
|
|
393
|
+
type: "page",
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return results;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Create a new page/tab using the persistent Playwright connection.
|
|
401
|
+
* Used for remote profiles where HTTP-based /json/new is ephemeral.
|
|
402
|
+
* Returns the new page's targetId and metadata.
|
|
403
|
+
*/
|
|
404
|
+
export async function createPageViaPlaywright(opts) {
|
|
405
|
+
const { browser } = await connectBrowser(opts.cdpUrl);
|
|
406
|
+
const context = browser.contexts()[0] ?? (await browser.newContext());
|
|
407
|
+
ensureContextState(context);
|
|
408
|
+
const page = await context.newPage();
|
|
409
|
+
ensurePageState(page);
|
|
410
|
+
// Navigate to the URL
|
|
411
|
+
const targetUrl = opts.url.trim() || "about:blank";
|
|
412
|
+
if (targetUrl !== "about:blank") {
|
|
413
|
+
await page.goto(targetUrl, { timeout: 30_000 }).catch(() => {
|
|
414
|
+
// Navigation might fail for some URLs, but page is still created
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
// Get the targetId for this page
|
|
418
|
+
const tid = await pageTargetId(page).catch(() => null);
|
|
419
|
+
if (!tid) {
|
|
420
|
+
throw new Error("Failed to get targetId for new page");
|
|
421
|
+
}
|
|
422
|
+
return {
|
|
423
|
+
targetId: tid,
|
|
424
|
+
title: await page.title().catch(() => ""),
|
|
425
|
+
url: page.url(),
|
|
426
|
+
type: "page",
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Close a page/tab by targetId using the persistent Playwright connection.
|
|
431
|
+
* Used for remote profiles where HTTP-based /json/close is ephemeral.
|
|
432
|
+
*/
|
|
433
|
+
export async function closePageByTargetIdViaPlaywright(opts) {
|
|
434
|
+
const { browser } = await connectBrowser(opts.cdpUrl);
|
|
435
|
+
const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
|
|
436
|
+
if (!page) {
|
|
437
|
+
throw new Error("tab not found");
|
|
438
|
+
}
|
|
439
|
+
await page.close();
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Focus a page/tab by targetId using the persistent Playwright connection.
|
|
443
|
+
* Used for remote profiles where HTTP-based /json/activate can be ephemeral.
|
|
444
|
+
*/
|
|
445
|
+
export async function focusPageByTargetIdViaPlaywright(opts) {
|
|
446
|
+
const { browser } = await connectBrowser(opts.cdpUrl);
|
|
447
|
+
const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
|
|
448
|
+
if (!page) {
|
|
449
|
+
throw new Error("tab not found");
|
|
450
|
+
}
|
|
451
|
+
try {
|
|
452
|
+
await page.bringToFront();
|
|
453
|
+
}
|
|
454
|
+
catch (err) {
|
|
455
|
+
const session = await page.context().newCDPSession(page);
|
|
456
|
+
try {
|
|
457
|
+
await session.send("Page.bringToFront");
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
catch {
|
|
461
|
+
throw err;
|
|
462
|
+
}
|
|
463
|
+
finally {
|
|
464
|
+
await session.detach().catch(() => { });
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
//# sourceMappingURL=pw-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-session.js","sourceRoot":"","sources":["../../src/browser/pw-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracted from OpenClaw (https://github.com/openclaw/openclaw)
|
|
3
|
+
* Original: src/browser/pw-tools-core.activity.ts
|
|
4
|
+
* License: MIT
|
|
5
|
+
*/
|
|
6
|
+
import type { BrowserConsoleMessage, BrowserNetworkRequest, BrowserPageError } from "./pw-session.js";
|
|
7
|
+
export declare function getPageErrorsViaPlaywright(opts: {
|
|
8
|
+
cdpUrl: string;
|
|
9
|
+
targetId?: string;
|
|
10
|
+
clear?: boolean;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
errors: BrowserPageError[];
|
|
13
|
+
}>;
|
|
14
|
+
export declare function getNetworkRequestsViaPlaywright(opts: {
|
|
15
|
+
cdpUrl: string;
|
|
16
|
+
targetId?: string;
|
|
17
|
+
filter?: string;
|
|
18
|
+
clear?: boolean;
|
|
19
|
+
}): Promise<{
|
|
20
|
+
requests: BrowserNetworkRequest[];
|
|
21
|
+
}>;
|
|
22
|
+
export declare function getConsoleMessagesViaPlaywright(opts: {
|
|
23
|
+
cdpUrl: string;
|
|
24
|
+
targetId?: string;
|
|
25
|
+
level?: string;
|
|
26
|
+
}): Promise<BrowserConsoleMessage[]>;
|
|
27
|
+
//# sourceMappingURL=pw-tools-activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-tools-activity.d.ts","sourceRoot":"","sources":["../../src/browser/pw-tools-activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAGzB,wBAAsB,0BAA0B,CAAC,IAAI,EAAE;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAAC,CAQ1C;AAED,wBAAsB,+BAA+B,CAAC,IAAI,EAAE;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAC,CAWjD;AAkBD,wBAAsB,+BAA+B,CAAC,IAAI,EAAE;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAQnC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracted from OpenClaw (https://github.com/openclaw/openclaw)
|
|
3
|
+
* Original: src/browser/pw-tools-core.activity.ts
|
|
4
|
+
* License: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { ensurePageState, getPageForTargetId } from "./pw-session.js";
|
|
7
|
+
export async function getPageErrorsViaPlaywright(opts) {
|
|
8
|
+
const page = await getPageForTargetId(opts);
|
|
9
|
+
const state = ensurePageState(page);
|
|
10
|
+
const errors = [...state.errors];
|
|
11
|
+
if (opts.clear) {
|
|
12
|
+
state.errors = [];
|
|
13
|
+
}
|
|
14
|
+
return { errors };
|
|
15
|
+
}
|
|
16
|
+
export async function getNetworkRequestsViaPlaywright(opts) {
|
|
17
|
+
const page = await getPageForTargetId(opts);
|
|
18
|
+
const state = ensurePageState(page);
|
|
19
|
+
const raw = [...state.requests];
|
|
20
|
+
const filter = typeof opts.filter === "string" ? opts.filter.trim() : "";
|
|
21
|
+
const requests = filter ? raw.filter((r) => r.url.includes(filter)) : raw;
|
|
22
|
+
if (opts.clear) {
|
|
23
|
+
state.requests = [];
|
|
24
|
+
state.requestIds = new WeakMap();
|
|
25
|
+
}
|
|
26
|
+
return { requests };
|
|
27
|
+
}
|
|
28
|
+
function consolePriority(level) {
|
|
29
|
+
switch (level) {
|
|
30
|
+
case "error":
|
|
31
|
+
return 3;
|
|
32
|
+
case "warning":
|
|
33
|
+
return 2;
|
|
34
|
+
case "info":
|
|
35
|
+
case "log":
|
|
36
|
+
return 1;
|
|
37
|
+
case "debug":
|
|
38
|
+
return 0;
|
|
39
|
+
default:
|
|
40
|
+
return 1;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export async function getConsoleMessagesViaPlaywright(opts) {
|
|
44
|
+
const page = await getPageForTargetId(opts);
|
|
45
|
+
const state = ensurePageState(page);
|
|
46
|
+
if (!opts.level) {
|
|
47
|
+
return [...state.console];
|
|
48
|
+
}
|
|
49
|
+
const min = consolePriority(opts.level);
|
|
50
|
+
return state.console.filter((msg) => consolePriority(msg.type) >= min);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=pw-tools-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-tools-activity.js","sourceRoot":"","sources":["../../src/browser/pw-tools-activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,IAIhD;IACC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,IAKrD;IACC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1E,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,CAAC,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YACV,OAAO,CAAC,CAAC;QACX,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,CAAC,CAAC;QACX,KAAK,OAAO;YACV,OAAO,CAAC,CAAC;QACX;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,IAIrD;IACC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracted from OpenClaw (https://github.com/openclaw/openclaw)
|
|
3
|
+
* Original: src/browser/pw-tools-core.downloads.ts
|
|
4
|
+
* License: MIT
|
|
5
|
+
*/
|
|
6
|
+
export declare function armFileUploadViaPlaywright(opts: {
|
|
7
|
+
cdpUrl: string;
|
|
8
|
+
targetId?: string;
|
|
9
|
+
paths?: string[];
|
|
10
|
+
timeoutMs?: number;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
export declare function armDialogViaPlaywright(opts: {
|
|
13
|
+
cdpUrl: string;
|
|
14
|
+
targetId?: string;
|
|
15
|
+
accept: boolean;
|
|
16
|
+
promptText?: string;
|
|
17
|
+
timeoutMs?: number;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
export declare function waitForDownloadViaPlaywright(opts: {
|
|
20
|
+
cdpUrl: string;
|
|
21
|
+
targetId?: string;
|
|
22
|
+
path?: string;
|
|
23
|
+
timeoutMs?: number;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
url: string;
|
|
26
|
+
suggestedFilename: string;
|
|
27
|
+
path: string;
|
|
28
|
+
}>;
|
|
29
|
+
export declare function downloadViaPlaywright(opts: {
|
|
30
|
+
cdpUrl: string;
|
|
31
|
+
targetId?: string;
|
|
32
|
+
ref: string;
|
|
33
|
+
path: string;
|
|
34
|
+
timeoutMs?: number;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
url: string;
|
|
37
|
+
suggestedFilename: string;
|
|
38
|
+
path: string;
|
|
39
|
+
}>;
|
|
40
|
+
//# sourceMappingURL=pw-tools-downloads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-tools-downloads.d.ts","sourceRoot":"","sources":["../../src/browser/pw-tools-downloads.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4EH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ChB;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB;AAED,wBAAsB,4BAA4B,CAAC,IAAI,EAAE;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CA+BD;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CA4CD"}
|