@poe-platform/safe-bash 0.1.635 → 0.1.636
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/dist/safe-bash/commands/playwright/index.d.ts +12 -0
- package/dist/safe-bash/commands/playwright/index.d.ts.map +1 -0
- package/dist/safe-bash/commands/playwright/index.js +47 -0
- package/dist/safe-bash/commands/playwright/index.js.map +1 -0
- package/dist/safe-bash/contracts/playwright.d.ts +71 -0
- package/dist/safe-bash/contracts/playwright.d.ts.map +1 -0
- package/dist/safe-bash/contracts/playwright.js +2 -0
- package/dist/safe-bash/contracts/playwright.js.map +1 -0
- package/dist/safe-bash/playwright/adapter.d.ts +97 -0
- package/dist/safe-bash/playwright/adapter.d.ts.map +1 -0
- package/dist/safe-bash/playwright/adapter.js +123 -0
- package/dist/safe-bash/playwright/adapter.js.map +1 -0
- package/dist/safe-bash/playwright/billing.d.ts +71 -0
- package/dist/safe-bash/playwright/billing.d.ts.map +1 -0
- package/dist/safe-bash/playwright/billing.js +2 -0
- package/dist/safe-bash/playwright/billing.js.map +1 -0
- package/dist/safe-bash/playwright/controller.d.ts +21 -0
- package/dist/safe-bash/playwright/controller.d.ts.map +1 -0
- package/dist/safe-bash/playwright/controller.js +369 -0
- package/dist/safe-bash/playwright/controller.js.map +1 -0
- package/dist/safe-bash/playwright/index.d.ts +5 -0
- package/dist/safe-bash/playwright/index.d.ts.map +1 -0
- package/dist/safe-bash/playwright/index.js +4 -0
- package/dist/safe-bash/playwright/index.js.map +1 -0
- package/dist/safe-bash/playwright/invocation.d.ts +26 -0
- package/dist/safe-bash/playwright/invocation.d.ts.map +1 -0
- package/dist/safe-bash/playwright/invocation.js +112 -0
- package/dist/safe-bash/playwright/invocation.js.map +1 -0
- package/dist/safe-bash/playwright/snapshot.d.ts +15 -0
- package/dist/safe-bash/playwright/snapshot.d.ts.map +1 -0
- package/dist/safe-bash/playwright/snapshot.js +96 -0
- package/dist/safe-bash/playwright/snapshot.js.map +1 -0
- package/package.json +12 -2
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { createSnapshotEngine } from './snapshot.js';
|
|
2
|
+
import { parseInvocation } from './invocation.js';
|
|
3
|
+
export function createPlaywrightController(options) {
|
|
4
|
+
if (!options?.adapter || typeof options.adapter.acquire !== 'function')
|
|
5
|
+
throw new TypeError('An injected Playwright adapter is required');
|
|
6
|
+
if (Object.keys(options).some(key => !['adapter', 'limits', 'billing'].includes(key)))
|
|
7
|
+
throw new TypeError('Unsupported Playwright configuration');
|
|
8
|
+
if (options.limits !== undefined && (!options.limits || typeof options.limits !== 'object' || Object.keys(options.limits).some(key => !['maxSessions', 'actionTimeoutMs', 'maxSnapshotBytes', 'maxSnapshotRefs', 'maxArtifactBytes', 'maxTabs'].includes(key))))
|
|
9
|
+
throw new TypeError('Unsupported Playwright limits');
|
|
10
|
+
if (options.billing !== undefined)
|
|
11
|
+
throw new Error('Live billing is not implemented');
|
|
12
|
+
const maxSessions = options.limits?.maxSessions ?? 4;
|
|
13
|
+
const actionTimeoutMs = options.limits?.actionTimeoutMs ?? 30_000;
|
|
14
|
+
const maxSnapshotBytes = options.limits?.maxSnapshotBytes ?? 256 * 1024;
|
|
15
|
+
const maxSnapshotRefs = options.limits?.maxSnapshotRefs ?? 1000;
|
|
16
|
+
const maxArtifactBytes = options.limits?.maxArtifactBytes ?? 16 * 1024 * 1024;
|
|
17
|
+
const maxTabs = options.limits?.maxTabs ?? 16;
|
|
18
|
+
let refSequence = 0;
|
|
19
|
+
for (const value of [maxSessions, actionTimeoutMs, maxSnapshotBytes, maxSnapshotRefs, maxArtifactBytes, maxTabs])
|
|
20
|
+
if (!Number.isSafeInteger(value) || value < 1)
|
|
21
|
+
throw new RangeError('Invalid Playwright limit');
|
|
22
|
+
const sessions = new Map();
|
|
23
|
+
const tails = new Map();
|
|
24
|
+
const work = new Set();
|
|
25
|
+
const lifetime = new AbortController();
|
|
26
|
+
let generation = 0;
|
|
27
|
+
let disposal;
|
|
28
|
+
const release = (session) => {
|
|
29
|
+
if (session.releasing)
|
|
30
|
+
return session.releasing;
|
|
31
|
+
session.state = 'closing';
|
|
32
|
+
session.releasing = Promise.resolve().then(async () => {
|
|
33
|
+
try {
|
|
34
|
+
session.detachPage?.();
|
|
35
|
+
const results = await Promise.allSettled([session.snapshot.invalidate(), Promise.resolve().then(() => session.lease?.release())]);
|
|
36
|
+
const errors = results.flatMap(result => result.status === 'rejected' ? [result.reason] : []);
|
|
37
|
+
if (errors.length === 1)
|
|
38
|
+
throw errors[0];
|
|
39
|
+
if (errors.length > 1)
|
|
40
|
+
throw new AggregateError(errors, 'Playwright session retirement failed');
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
session.unsubscribe?.();
|
|
44
|
+
delete session.page;
|
|
45
|
+
session.state = 'closed';
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
// Notifications and abort handlers cannot throw unhandled rejections.
|
|
49
|
+
void session.releasing.catch(() => { });
|
|
50
|
+
return session.releasing;
|
|
51
|
+
};
|
|
52
|
+
const enqueue = (name, task) => {
|
|
53
|
+
const operation = (tails.get(name) ?? Promise.resolve()).then(task);
|
|
54
|
+
const tail = operation.then(() => { }, () => { });
|
|
55
|
+
tails.set(name, tail);
|
|
56
|
+
void tail.then(() => { if (tails.get(name) === tail)
|
|
57
|
+
tails.delete(name); });
|
|
58
|
+
return operation;
|
|
59
|
+
};
|
|
60
|
+
const selectPage = async (session, page, check) => {
|
|
61
|
+
check();
|
|
62
|
+
session.detachPage?.();
|
|
63
|
+
await session.snapshot.invalidate();
|
|
64
|
+
check();
|
|
65
|
+
session.page = page;
|
|
66
|
+
if (page.on && page.off) {
|
|
67
|
+
const invalidate = () => { void session.snapshot.invalidate().catch(() => { }); };
|
|
68
|
+
page.on('framenavigated', invalidate);
|
|
69
|
+
page.on('close', invalidate);
|
|
70
|
+
session.detachPage = () => { page.off('framenavigated', invalidate); page.off('close', invalidate); };
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const run = async (invocation) => {
|
|
74
|
+
if (lifetime.signal.aborted)
|
|
75
|
+
throw new Error('Playwright controller is disposed');
|
|
76
|
+
const parsed = parseInvocation(invocation, options.adapter);
|
|
77
|
+
invocation.signal.throwIfAborted();
|
|
78
|
+
const local = new AbortController();
|
|
79
|
+
let active;
|
|
80
|
+
let retained = false;
|
|
81
|
+
let finished = false;
|
|
82
|
+
let cleanupCompletion;
|
|
83
|
+
const cleanup = () => {
|
|
84
|
+
if (cleanupCompletion)
|
|
85
|
+
return cleanupCompletion;
|
|
86
|
+
// Install completion before abort dispatch can reenter cleanup.
|
|
87
|
+
cleanupCompletion = Promise.resolve().then(async () => {
|
|
88
|
+
await operation.catch(() => { });
|
|
89
|
+
if (active && (!retained || active.releasing))
|
|
90
|
+
await release(active);
|
|
91
|
+
});
|
|
92
|
+
void cleanupCompletion.catch(() => { });
|
|
93
|
+
// Close admission immediately and unblock cooperative browser work before
|
|
94
|
+
// waiting for the operation, including opaque late acquisition.
|
|
95
|
+
if (!finished)
|
|
96
|
+
local.abort(new Error('Playwright invocation cleaned up'));
|
|
97
|
+
if (active && (!retained || !finished) && active.lease)
|
|
98
|
+
void release(active).catch(() => { });
|
|
99
|
+
return cleanupCompletion;
|
|
100
|
+
};
|
|
101
|
+
// Synchronous registration precedes queue admission and all browser effects.
|
|
102
|
+
invocation.registerCleanup?.(cleanup);
|
|
103
|
+
const abort = () => {
|
|
104
|
+
local.abort(invocation.signal.aborted ? invocation.signal.reason : lifetime.signal.reason);
|
|
105
|
+
if (active && (!retained || !finished) && active.lease)
|
|
106
|
+
void release(active).catch(() => { });
|
|
107
|
+
};
|
|
108
|
+
invocation.signal.addEventListener('abort', abort, { once: true });
|
|
109
|
+
lifetime.signal.addEventListener('abort', abort, { once: true });
|
|
110
|
+
if (invocation.signal.aborted || lifetime.signal.aborted)
|
|
111
|
+
abort();
|
|
112
|
+
const check = () => {
|
|
113
|
+
invocation.signal.throwIfAborted();
|
|
114
|
+
local.signal.throwIfAborted();
|
|
115
|
+
lifetime.signal.throwIfAborted();
|
|
116
|
+
};
|
|
117
|
+
const checkSession = (session) => {
|
|
118
|
+
check();
|
|
119
|
+
if (session.releasing)
|
|
120
|
+
throw new Error(`Session closed: ${session.name}; reopen explicitly`);
|
|
121
|
+
};
|
|
122
|
+
const execute = async () => {
|
|
123
|
+
check();
|
|
124
|
+
if (parsed.command === 'list') {
|
|
125
|
+
await invocation.write([...sessions.values()].map(s => `${s.name}\t${s.state}\n`).join(''));
|
|
126
|
+
check();
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (parsed.command === 'close-all') {
|
|
130
|
+
const results = await Promise.allSettled([...new Set([...sessions.keys(), ...tails.keys()])].map(name => enqueue(name, async () => {
|
|
131
|
+
check();
|
|
132
|
+
const session = sessions.get(name);
|
|
133
|
+
if (session)
|
|
134
|
+
await release(session);
|
|
135
|
+
})));
|
|
136
|
+
const errors = results.flatMap(result => result.status === 'rejected' ? [result.reason] : []);
|
|
137
|
+
if (errors.length)
|
|
138
|
+
throw new AggregateError(errors, 'Playwright close-all failed');
|
|
139
|
+
check();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
await enqueue(parsed.session, async () => {
|
|
143
|
+
try {
|
|
144
|
+
check();
|
|
145
|
+
if (parsed.command === 'close') {
|
|
146
|
+
const session = sessions.get(parsed.session);
|
|
147
|
+
if (session)
|
|
148
|
+
await release(session);
|
|
149
|
+
check();
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (parsed.command === 'open') {
|
|
153
|
+
const previous = sessions.get(parsed.session);
|
|
154
|
+
if (previous && previous.state !== 'closed')
|
|
155
|
+
throw new Error(`Session already ${previous.state}: ${parsed.session}`);
|
|
156
|
+
// Remote-loss retirement must finish before reusing its capacity.
|
|
157
|
+
if (previous?.releasing)
|
|
158
|
+
await previous.releasing;
|
|
159
|
+
check();
|
|
160
|
+
// Preflight and reservation are synchronous: another session cannot
|
|
161
|
+
// claim this slot during retirement's asynchronous boundary.
|
|
162
|
+
const occupied = [...sessions.values()].filter(s => s.state !== 'closed').length;
|
|
163
|
+
if (occupied >= maxSessions)
|
|
164
|
+
throw new Error('Playwright session capacity exceeded');
|
|
165
|
+
active = { name: parsed.session, generation: ++generation, state: 'acquiring', snapshot: createSnapshotEngine({ maxSnapshotBytes, maxSnapshotRefs }, () => `e${++refSequence}`) };
|
|
166
|
+
sessions.set(parsed.session, active);
|
|
167
|
+
const session = active;
|
|
168
|
+
session.lease = await options.adapter.acquire({ acquisitionId: `playwright-${session.generation}`, session: session.name, browser: parsed.browser, headless: parsed.headless, signal: local.signal });
|
|
169
|
+
check();
|
|
170
|
+
const unsubscribe = session.lease.onClosed(() => {
|
|
171
|
+
// A late notification belongs only to the lease's own generation.
|
|
172
|
+
if (sessions.get(session.name) !== session || session.state === 'closed')
|
|
173
|
+
return;
|
|
174
|
+
delete session.page;
|
|
175
|
+
session.state = 'closed';
|
|
176
|
+
void release(session).catch(() => { });
|
|
177
|
+
});
|
|
178
|
+
session.unsubscribe = unsubscribe;
|
|
179
|
+
if (session.releasing) {
|
|
180
|
+
unsubscribe();
|
|
181
|
+
throw new Error(`Session closed: ${session.name}`);
|
|
182
|
+
}
|
|
183
|
+
if (session.lease.context.pages().length >= maxTabs)
|
|
184
|
+
throw new Error('Playwright tab limit exceeded');
|
|
185
|
+
await selectPage(session, await session.lease.context.newPage(), () => checkSession(session));
|
|
186
|
+
session.pages = [...session.lease.context.pages()];
|
|
187
|
+
checkSession(session);
|
|
188
|
+
if (parsed.url)
|
|
189
|
+
await session.page.goto(parsed.url, { timeout: actionTimeoutMs });
|
|
190
|
+
checkSession(session);
|
|
191
|
+
await invocation.write(`Session ${session.name} open\n`);
|
|
192
|
+
checkSession(session);
|
|
193
|
+
session.state = 'open';
|
|
194
|
+
retained = true;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
const session = sessions.get(parsed.session);
|
|
198
|
+
if (!session || session.state !== 'open')
|
|
199
|
+
throw new Error(`Session closed: ${parsed.session}; reopen explicitly`);
|
|
200
|
+
active = session;
|
|
201
|
+
if (parsed.command === 'goto') {
|
|
202
|
+
if (!session.page) {
|
|
203
|
+
retained = true;
|
|
204
|
+
throw new Error('Selected tab closed; select a tab explicitly');
|
|
205
|
+
}
|
|
206
|
+
await session.snapshot.invalidate();
|
|
207
|
+
checkSession(session);
|
|
208
|
+
await session.page.goto(parsed.url, { timeout: actionTimeoutMs });
|
|
209
|
+
checkSession(session);
|
|
210
|
+
await invocation.write(`Session ${session.name} navigated\n`);
|
|
211
|
+
checkSession(session);
|
|
212
|
+
retained = true;
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
// Preflight failures do not retire an otherwise healthy session.
|
|
216
|
+
retained = true;
|
|
217
|
+
const pages = [...session.lease.context.pages()];
|
|
218
|
+
if (!session.pages || pages.length !== session.pages.length || pages.some((page, index) => page !== session.pages[index]))
|
|
219
|
+
await session.snapshot.invalidate();
|
|
220
|
+
session.pages = pages;
|
|
221
|
+
const page = session.page;
|
|
222
|
+
if ((!page || !pages.includes(page)) && !['tab-list', 'tab-new', 'tab-select'].includes(parsed.command) && !(parsed.command === 'tab-close' && parsed.tab !== undefined)) {
|
|
223
|
+
await session.snapshot.invalidate();
|
|
224
|
+
throw new Error('Selected tab closed; select a tab explicitly');
|
|
225
|
+
}
|
|
226
|
+
checkSession(session);
|
|
227
|
+
if (parsed.command === 'tab-list') {
|
|
228
|
+
await invocation.write(pages.map((tab, index) => `${index}\t${tab === page ? 'selected' : 'open'}\t${JSON.stringify(tab.url())}\n`).join(''));
|
|
229
|
+
}
|
|
230
|
+
else if (parsed.command === 'tab-new') {
|
|
231
|
+
if (pages.length >= maxTabs)
|
|
232
|
+
throw new Error('Playwright tab limit exceeded');
|
|
233
|
+
retained = false;
|
|
234
|
+
await session.snapshot.invalidate();
|
|
235
|
+
checkSession(session);
|
|
236
|
+
const tab = await session.lease.context.newPage();
|
|
237
|
+
await selectPage(session, tab, () => checkSession(session));
|
|
238
|
+
session.pages = [...session.lease.context.pages()];
|
|
239
|
+
if (parsed.url)
|
|
240
|
+
await tab.goto(parsed.url, { timeout: actionTimeoutMs });
|
|
241
|
+
checkSession(session);
|
|
242
|
+
await invocation.write(`Tab ${session.pages.indexOf(tab)} selected\n`);
|
|
243
|
+
}
|
|
244
|
+
else if (parsed.command === 'tab-select' || parsed.command === 'tab-close') {
|
|
245
|
+
const index = parsed.tab ?? pages.indexOf(page);
|
|
246
|
+
const tab = pages[index];
|
|
247
|
+
if (!tab)
|
|
248
|
+
throw new Error('Unknown tab index');
|
|
249
|
+
retained = false;
|
|
250
|
+
await session.snapshot.invalidate();
|
|
251
|
+
checkSession(session);
|
|
252
|
+
if (parsed.command === 'tab-close') {
|
|
253
|
+
await tab.close();
|
|
254
|
+
checkSession(session);
|
|
255
|
+
session.pages = [...session.lease.context.pages()];
|
|
256
|
+
const next = tab === page ? session.pages[0] : page;
|
|
257
|
+
if (next)
|
|
258
|
+
await selectPage(session, next, () => checkSession(session));
|
|
259
|
+
else {
|
|
260
|
+
session.detachPage?.();
|
|
261
|
+
delete session.page;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
else
|
|
265
|
+
await selectPage(session, tab, () => checkSession(session));
|
|
266
|
+
checkSession(session);
|
|
267
|
+
await invocation.write(`Tab ${index} ${parsed.command === 'tab-close' ? 'closed' : 'selected'}\n`);
|
|
268
|
+
}
|
|
269
|
+
else if (parsed.command === 'snapshot') {
|
|
270
|
+
if (typeof page.on !== 'function' || typeof page.off !== 'function')
|
|
271
|
+
throw new Error('Snapshot engine unsupported: navigation events required');
|
|
272
|
+
const text = await session.snapshot.capture(page, local.signal);
|
|
273
|
+
checkSession(session);
|
|
274
|
+
if (parsed.filename !== undefined) {
|
|
275
|
+
const bytes = new TextEncoder().encode(text);
|
|
276
|
+
if (bytes.byteLength > maxArtifactBytes)
|
|
277
|
+
throw new Error('Artifact byte limit exceeded');
|
|
278
|
+
await invocation.writeArtifact(bytes, parsed.filename);
|
|
279
|
+
}
|
|
280
|
+
else
|
|
281
|
+
await invocation.write(text);
|
|
282
|
+
}
|
|
283
|
+
else if (parsed.command === 'click' || parsed.command === 'fill') {
|
|
284
|
+
const target = await session.snapshot.resolve(parsed.ref);
|
|
285
|
+
if (typeof target[parsed.command] !== 'function')
|
|
286
|
+
throw new Error('Snapshot action unsupported');
|
|
287
|
+
checkSession(session);
|
|
288
|
+
retained = false;
|
|
289
|
+
if (parsed.command === 'click')
|
|
290
|
+
await target.click({ timeout: actionTimeoutMs });
|
|
291
|
+
else
|
|
292
|
+
await target.fill(parsed.value, { timeout: actionTimeoutMs });
|
|
293
|
+
}
|
|
294
|
+
else if (parsed.command === 'press') {
|
|
295
|
+
if (typeof page.keyboard?.press !== 'function')
|
|
296
|
+
throw new Error('Keyboard press unsupported');
|
|
297
|
+
retained = false;
|
|
298
|
+
await page.keyboard.press(parsed.value);
|
|
299
|
+
}
|
|
300
|
+
else if (parsed.command === 'screenshot') {
|
|
301
|
+
if (typeof page.screenshot !== 'function')
|
|
302
|
+
throw new Error('Screenshot engine unsupported');
|
|
303
|
+
const bytes = await page.screenshot({ type: parsed.imageType, fullPage: parsed.fullPage, timeout: actionTimeoutMs });
|
|
304
|
+
if (!(bytes instanceof Uint8Array))
|
|
305
|
+
throw new TypeError('Screenshot must return bytes');
|
|
306
|
+
if (bytes.byteLength > maxArtifactBytes)
|
|
307
|
+
throw new Error('Artifact byte limit exceeded');
|
|
308
|
+
checkSession(session);
|
|
309
|
+
// Uint8Array constructor copies even when bytes is a Buffer view.
|
|
310
|
+
await invocation.writeArtifact(new Uint8Array(bytes), parsed.filename);
|
|
311
|
+
}
|
|
312
|
+
checkSession(session);
|
|
313
|
+
retained = true;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
finally {
|
|
317
|
+
// Retirement is part of the session queue. Keep its rejection for
|
|
318
|
+
// shared invocation cleanup so both execution and cleanup causes survive.
|
|
319
|
+
if (active && !retained)
|
|
320
|
+
await release(active).catch(() => { });
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
};
|
|
324
|
+
const operation = execute();
|
|
325
|
+
work.add(operation);
|
|
326
|
+
let failure;
|
|
327
|
+
try {
|
|
328
|
+
await operation;
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
failure = { error: invocation.signal.aborted ? invocation.signal.reason : error };
|
|
332
|
+
}
|
|
333
|
+
finished = true;
|
|
334
|
+
invocation.signal.removeEventListener('abort', abort);
|
|
335
|
+
lifetime.signal.removeEventListener('abort', abort);
|
|
336
|
+
// Preserve execution failure alongside cleanup failure; finally must never
|
|
337
|
+
// replace the former with a repeated rejection from shared cleanup.
|
|
338
|
+
try {
|
|
339
|
+
await cleanup();
|
|
340
|
+
}
|
|
341
|
+
catch (cleanupError) {
|
|
342
|
+
if (failure)
|
|
343
|
+
throw new AggregateError([failure.error, cleanupError], 'Playwright command and cleanup failed');
|
|
344
|
+
throw cleanupError;
|
|
345
|
+
}
|
|
346
|
+
finally {
|
|
347
|
+
work.delete(operation);
|
|
348
|
+
}
|
|
349
|
+
if (failure)
|
|
350
|
+
throw failure.error;
|
|
351
|
+
};
|
|
352
|
+
const dispose = () => {
|
|
353
|
+
if (disposal)
|
|
354
|
+
return disposal;
|
|
355
|
+
// Install shared completion before notifying potentially reentrant hosts.
|
|
356
|
+
disposal = Promise.resolve().then(async () => {
|
|
357
|
+
const retirements = [...sessions.values()].filter(s => s.lease).map(release);
|
|
358
|
+
await Promise.allSettled([...work]);
|
|
359
|
+
const results = await Promise.allSettled([...retirements, ...[...sessions.values()].map(release)]);
|
|
360
|
+
const errors = [...new Set(results.flatMap(result => result.status === 'rejected' ? [result.reason] : []))];
|
|
361
|
+
if (errors.length)
|
|
362
|
+
throw new AggregateError(errors, 'Playwright disposal failed');
|
|
363
|
+
});
|
|
364
|
+
lifetime.abort(new Error('Playwright controller is disposed'));
|
|
365
|
+
return disposal;
|
|
366
|
+
};
|
|
367
|
+
return { run, dispose };
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/playwright/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { BrowserEngine, PlaywrightAdapter } from './adapter.js';
|
|
2
|
+
export interface PlaywrightInvocation {
|
|
3
|
+
readonly args: readonly string[];
|
|
4
|
+
/** Only exported shell variables. Never read the host environment. */
|
|
5
|
+
readonly env: Readonly<Record<string, string>>;
|
|
6
|
+
readonly signal: AbortSignal;
|
|
7
|
+
write(text: string): Promise<void>;
|
|
8
|
+
/** Byte destination: optional guest filename, resolved by the injected VFS. */
|
|
9
|
+
readonly writeArtifact?: ((bytes: Uint8Array, filename?: string) => Promise<void>) | undefined;
|
|
10
|
+
readonly registerCleanup?: ((cleanup: () => Promise<void>) => void) | undefined;
|
|
11
|
+
}
|
|
12
|
+
export type ParsedInvocation = {
|
|
13
|
+
command: 'open' | 'goto' | 'list' | 'close' | 'close-all' | 'snapshot' | 'click' | 'fill' | 'press' | 'screenshot' | 'tab-list' | 'tab-new' | 'tab-select' | 'tab-close';
|
|
14
|
+
session: string;
|
|
15
|
+
browser: BrowserEngine;
|
|
16
|
+
headless: boolean;
|
|
17
|
+
url?: string;
|
|
18
|
+
ref?: string;
|
|
19
|
+
value?: string;
|
|
20
|
+
tab?: number;
|
|
21
|
+
filename?: string;
|
|
22
|
+
fullPage: boolean;
|
|
23
|
+
imageType: 'png' | 'jpeg';
|
|
24
|
+
};
|
|
25
|
+
export declare function parseInvocation(invocation: PlaywrightInvocation, adapter: PlaywrightAdapter): ParsedInvocation;
|
|
26
|
+
//# sourceMappingURL=invocation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invocation.d.ts","sourceRoot":"","sources":["../../src/playwright/invocation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IAC/F,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACjF;AACD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC;IACzK,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAgB,eAAe,CAAC,UAAU,EAAE,oBAAoB,EAAE,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CA0E9G"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
export function parseInvocation(invocation, adapter) {
|
|
2
|
+
let session;
|
|
3
|
+
let browser = 'chromium';
|
|
4
|
+
let headless = true;
|
|
5
|
+
let filename;
|
|
6
|
+
let fullPage = false;
|
|
7
|
+
let browserOption = false;
|
|
8
|
+
let modeOption = false;
|
|
9
|
+
const positional = [];
|
|
10
|
+
const seen = new Set();
|
|
11
|
+
let literal = false;
|
|
12
|
+
for (let i = 0; i < invocation.args.length; i++) {
|
|
13
|
+
const arg = invocation.args[i];
|
|
14
|
+
if (arg === '--' && !literal) {
|
|
15
|
+
literal = true;
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (literal || !arg.startsWith('-')) {
|
|
19
|
+
positional.push(arg);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const separator = arg.indexOf('=');
|
|
23
|
+
const flag = separator === -1 ? arg : arg.slice(0, separator);
|
|
24
|
+
const key = flag === '-s' ? '--session' : flag;
|
|
25
|
+
if (seen.has(key))
|
|
26
|
+
throw new Error(`Repeated option: ${flag}`);
|
|
27
|
+
seen.add(key);
|
|
28
|
+
if (key === '--session' || key === '--browser' || key === '--filename') {
|
|
29
|
+
const value = separator === -1 ? invocation.args[++i] : arg.slice(separator + 1);
|
|
30
|
+
if (!value || value.startsWith('-') || value.includes('\0'))
|
|
31
|
+
throw new Error(`Missing or invalid value: ${flag}`);
|
|
32
|
+
if (key === '--session')
|
|
33
|
+
session = value;
|
|
34
|
+
else if (key === '--filename')
|
|
35
|
+
filename = value;
|
|
36
|
+
else {
|
|
37
|
+
browser = value;
|
|
38
|
+
browserOption = true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else if (key === '--headed' || key === '--headless') {
|
|
42
|
+
if (separator !== -1 || modeOption)
|
|
43
|
+
throw new Error(`Invalid option: ${arg}`);
|
|
44
|
+
headless = key === '--headless';
|
|
45
|
+
modeOption = true;
|
|
46
|
+
}
|
|
47
|
+
else if (key === '--full-page' && separator === -1)
|
|
48
|
+
fullPage = true;
|
|
49
|
+
else
|
|
50
|
+
throw new Error(`Unsupported option: ${arg}`);
|
|
51
|
+
}
|
|
52
|
+
session ??= invocation.env.PLAYWRIGHT_CLI_SESSION ?? 'default';
|
|
53
|
+
if (!session || session.length > 128 || [...session].some(char => !'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'.includes(char)))
|
|
54
|
+
throw new Error('Invalid session name');
|
|
55
|
+
// Accept both agent-oriented CLI tab-* spellings and tab <operation>.
|
|
56
|
+
if (positional[0] === 'tab')
|
|
57
|
+
positional.splice(0, 2, `tab-${positional[1] ?? ''}`);
|
|
58
|
+
const command = positional[0];
|
|
59
|
+
const arity = {
|
|
60
|
+
open: [1, 2], goto: [2, 2], list: [1, 1], close: [1, 1], 'close-all': [1, 1], snapshot: [1, 1], click: [2, 2], fill: [3, 3], press: [2, 2], screenshot: [1, 1], 'tab-list': [1, 1], 'tab-new': [1, 2], 'tab-select': [2, 2], 'tab-close': [1, 2],
|
|
61
|
+
};
|
|
62
|
+
if (!Object.hasOwn(arity, command))
|
|
63
|
+
throw new Error(`Unsupported command in qualified subset: ${command ?? ''}`);
|
|
64
|
+
const [min, max] = arity[command];
|
|
65
|
+
if (positional.length < min || positional.length > max)
|
|
66
|
+
throw new Error(`Invalid arguments for ${command}`);
|
|
67
|
+
if (command !== 'open' && (browserOption || modeOption))
|
|
68
|
+
throw new Error('Browser options require open');
|
|
69
|
+
if (filename !== undefined && command !== 'snapshot' && command !== 'screenshot')
|
|
70
|
+
throw new Error('Filename requires snapshot or screenshot');
|
|
71
|
+
if (fullPage && command !== 'screenshot')
|
|
72
|
+
throw new Error('Full page requires screenshot');
|
|
73
|
+
if (command === 'screenshot' || filename !== undefined) {
|
|
74
|
+
if (typeof invocation.writeArtifact !== 'function')
|
|
75
|
+
throw new Error('Artifact byte destination unsupported');
|
|
76
|
+
}
|
|
77
|
+
if (browser !== 'chromium' && browser !== 'firefox' && browser !== 'webkit')
|
|
78
|
+
throw new Error(`Unsupported browser: ${browser}`);
|
|
79
|
+
if (command === 'open') {
|
|
80
|
+
const capability = adapter.browsers[browser];
|
|
81
|
+
if (!capability)
|
|
82
|
+
throw new Error(`Unsupported browser: ${browser}`);
|
|
83
|
+
if (!headless && !capability.headed)
|
|
84
|
+
throw new Error(`Headed mode is unsupported for ${browser}`);
|
|
85
|
+
}
|
|
86
|
+
let imageType = 'png';
|
|
87
|
+
if (command === 'screenshot' && filename !== undefined) {
|
|
88
|
+
const lower = filename.toLowerCase();
|
|
89
|
+
if (lower.endsWith('.jpg') || lower.endsWith('.jpeg'))
|
|
90
|
+
imageType = 'jpeg';
|
|
91
|
+
else if (!lower.endsWith('.png'))
|
|
92
|
+
throw new Error('Unsupported screenshot extension; use png or jpeg');
|
|
93
|
+
}
|
|
94
|
+
const url = command === 'open' || command === 'goto' || command === 'tab-new' ? positional[1] : undefined;
|
|
95
|
+
if (url !== undefined) {
|
|
96
|
+
const parsed = new URL(url);
|
|
97
|
+
if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:' && url !== 'about:blank')
|
|
98
|
+
throw new Error('Unsupported navigation URL');
|
|
99
|
+
}
|
|
100
|
+
const ref = command === 'click' || command === 'fill' ? positional[1] : undefined;
|
|
101
|
+
if (ref !== undefined && (ref[0] !== 'e' || ref.length < 2 || [...ref.slice(1)].some(char => !'0123456789'.includes(char))))
|
|
102
|
+
throw new Error('Action requires a snapshot ref');
|
|
103
|
+
const value = command === 'fill' ? positional[2] : command === 'press' ? positional[1] : undefined;
|
|
104
|
+
if (command === 'press' && !value)
|
|
105
|
+
throw new Error('Missing press key');
|
|
106
|
+
const tabValue = command === 'tab-select' || command === 'tab-close' ? positional[1] : undefined;
|
|
107
|
+
const tab = tabValue === undefined ? undefined : Number(tabValue);
|
|
108
|
+
if (tabValue !== undefined && (!tabValue || [...tabValue].some(char => !'0123456789'.includes(char)) || !Number.isSafeInteger(tab)))
|
|
109
|
+
throw new Error('Invalid tab index');
|
|
110
|
+
return { command, session, browser, headless, fullPage, imageType, ...(url === undefined ? {} : { url }), ...(ref === undefined ? {} : { ref }), ...(value === undefined ? {} : { value }), ...(tab === undefined ? {} : { tab }), ...(filename === undefined ? {} : { filename }) };
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=invocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invocation.js","sourceRoot":"","sources":["../../src/playwright/invocation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PlaywrightPage, PlaywrightElementHandle } from './adapter.js';
|
|
2
|
+
export interface SnapshotLimits {
|
|
3
|
+
readonly maxSnapshotBytes: number;
|
|
4
|
+
readonly maxSnapshotRefs: number;
|
|
5
|
+
}
|
|
6
|
+
/** Public element handles only. Shared by regular and Cloudflare injected pages.
|
|
7
|
+
* This is a DOM interaction summary, not the full Playwright CLI accessibility tree.
|
|
8
|
+
* Guest text is never compiled or evaluated as a locator or browser program.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createSnapshotEngine(limits: SnapshotLimits, nextRef?: () => string): {
|
|
11
|
+
capture: (page: PlaywrightPage, signal?: AbortSignal) => Promise<string>;
|
|
12
|
+
resolve: (ref: string) => Promise<PlaywrightElementHandle>;
|
|
13
|
+
invalidate: () => Promise<void>;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/playwright/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,cAAc;IAAG,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CAAE;AAEvG;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM;oBAiBpD,cAAc,WAAW,WAAW,KAAG,OAAO,CAAC,MAAM,CAAC;mBA2CvD,MAAM,KAAG,OAAO,CAAC,uBAAuB,CAAC;;EAWtE"}
|