@monoes/monobrowse 1.0.25 → 1.0.27

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 (67) hide show
  1. package/dist/src/__tests__/browser-launch.test.d.ts +3 -2
  2. package/dist/src/__tests__/browser-launch.test.d.ts.map +1 -1
  3. package/dist/src/__tests__/browser-launch.test.js +71 -6
  4. package/dist/src/__tests__/browser-launch.test.js.map +1 -1
  5. package/dist/src/__tests__/launch-close-settle.test.d.ts +6 -0
  6. package/dist/src/__tests__/launch-close-settle.test.d.ts.map +1 -1
  7. package/dist/src/__tests__/launch-close-settle.test.js +29 -8
  8. package/dist/src/__tests__/launch-close-settle.test.js.map +1 -1
  9. package/dist/src/browser/actions-eval.d.ts +8 -0
  10. package/dist/src/browser/actions-eval.d.ts.map +1 -0
  11. package/dist/src/browser/actions-eval.js +72 -0
  12. package/dist/src/browser/actions-eval.js.map +1 -0
  13. package/dist/src/browser/actions-form.d.ts +10 -0
  14. package/dist/src/browser/actions-form.d.ts.map +1 -0
  15. package/dist/src/browser/actions-form.js +133 -0
  16. package/dist/src/browser/actions-form.js.map +1 -0
  17. package/dist/src/browser/actions-keyboard.d.ts +7 -0
  18. package/dist/src/browser/actions-keyboard.d.ts.map +1 -0
  19. package/dist/src/browser/actions-keyboard.js +131 -0
  20. package/dist/src/browser/actions-keyboard.js.map +1 -0
  21. package/dist/src/browser/actions-mouse.d.ts +11 -0
  22. package/dist/src/browser/actions-mouse.d.ts.map +1 -0
  23. package/dist/src/browser/actions-mouse.js +105 -0
  24. package/dist/src/browser/actions-mouse.js.map +1 -0
  25. package/dist/src/browser/actions.d.ts +12 -28
  26. package/dist/src/browser/actions.d.ts.map +1 -1
  27. package/dist/src/browser/actions.js +12 -434
  28. package/dist/src/browser/actions.js.map +1 -1
  29. package/dist/src/browser/browser-discovery.d.ts +26 -0
  30. package/dist/src/browser/browser-discovery.d.ts.map +1 -0
  31. package/dist/src/browser/browser-discovery.js +113 -0
  32. package/dist/src/browser/browser-discovery.js.map +1 -0
  33. package/dist/src/browser/browser-launch.d.ts +3 -0
  34. package/dist/src/browser/browser-launch.d.ts.map +1 -0
  35. package/dist/src/browser/browser-launch.js +324 -0
  36. package/dist/src/browser/browser-launch.js.map +1 -0
  37. package/dist/src/browser/browser-lifecycle.d.ts +52 -0
  38. package/dist/src/browser/browser-lifecycle.d.ts.map +1 -0
  39. package/dist/src/browser/browser-lifecycle.js +233 -0
  40. package/dist/src/browser/browser-lifecycle.js.map +1 -0
  41. package/dist/src/browser/browser-page.d.ts +13 -0
  42. package/dist/src/browser/browser-page.d.ts.map +1 -0
  43. package/dist/src/browser/browser-page.js +179 -0
  44. package/dist/src/browser/browser-page.js.map +1 -0
  45. package/dist/src/browser/browser-state.d.ts +7 -0
  46. package/dist/src/browser/browser-state.d.ts.map +1 -0
  47. package/dist/src/browser/browser-state.js +19 -0
  48. package/dist/src/browser/browser-state.js.map +1 -0
  49. package/dist/src/browser/browser.d.ts +5 -68
  50. package/dist/src/browser/browser.d.ts.map +1 -1
  51. package/dist/src/browser/browser.js +9 -794
  52. package/dist/src/browser/browser.js.map +1 -1
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +1 -1
  55. package/src/__tests__/browser-launch.test.ts +78 -6
  56. package/src/__tests__/launch-close-settle.test.ts +32 -10
  57. package/src/browser/actions-eval.ts +118 -0
  58. package/src/browser/actions-form.ts +218 -0
  59. package/src/browser/actions-keyboard.ts +171 -0
  60. package/src/browser/actions-mouse.ts +212 -0
  61. package/src/browser/actions.ts +37 -712
  62. package/src/browser/browser-discovery.ts +116 -0
  63. package/src/browser/browser-launch.ts +358 -0
  64. package/src/browser/browser-lifecycle.ts +238 -0
  65. package/src/browser/browser-page.ts +213 -0
  66. package/src/browser/browser-state.ts +21 -0
  67. package/src/browser/browser.ts +17 -859
@@ -1,435 +1,13 @@
1
- import { resolve } from 'node:path';
2
- import { getElementBox, getObjectIdForRef } from './snapshot.js';
3
- export async function clickElement(client, sessionId, ref, options = {}) {
4
- const box = await getElementBox(client, sessionId, ref);
5
- if (box) {
6
- await clickPoint(client, sessionId, box.x, box.y, options);
7
- return;
8
- }
9
- // Fallback: use JS click via objectId
10
- const objectId = await getObjectIdForRef(client, sessionId, ref);
11
- if (objectId) {
12
- await client.send('Runtime.callFunctionOn', {
13
- functionDeclaration: 'function() { this.click(); }',
14
- objectId,
15
- returnByValue: true,
16
- }, sessionId);
17
- return;
18
- }
19
- throw new Error(`Cannot click ref @${ref.ref}: element not found in DOM`);
20
- }
21
- export async function clickPoint(client, sessionId, x, y, options = {}) {
22
- const button = options.button ?? 'left';
23
- // Cap clickCount to prevent unbounded loop DoS
24
- const clickCount = Math.min(Math.max(1, Math.floor(options.clickCount ?? 1)), 100);
25
- const modifiers = options.modifiers ?? 0;
26
- const shared = { x, y, button, modifiers };
27
- const buttonsMask = button === 'right' ? 2 : button === 'middle' ? 4 : 1;
28
- for (let i = 0; i < clickCount; i++) {
29
- const count = i + 1;
30
- await client.send('Input.dispatchMouseEvent', { ...shared, type: 'mousePressed', buttons: buttonsMask, clickCount: count }, sessionId);
31
- await client.send('Input.dispatchMouseEvent', {
32
- ...shared,
33
- type: 'mouseReleased',
34
- buttons: i < clickCount - 1 ? buttonsMask : 0,
35
- clickCount: count,
36
- }, sessionId);
37
- }
38
- }
39
- export async function fillElement(client, sessionId, ref, value) {
40
- const box = await getElementBox(client, sessionId, ref);
41
- if (box) {
42
- // Click to focus
43
- await clickPoint(client, sessionId, box.x, box.y);
44
- }
45
- // Select all and replace
46
- const objectId = await getObjectIdForRef(client, sessionId, ref);
47
- if (objectId) {
48
- const fillSelectResult = await client.send('Runtime.callFunctionOn', {
49
- functionDeclaration: `function() {
50
- this.focus();
51
- if (this.tagName === 'INPUT' || this.tagName === 'TEXTAREA') {
52
- this.select();
53
- } else if (this.isContentEditable) {
54
- const range = document.createRange();
55
- range.selectNodeContents(this);
56
- const sel = window.getSelection();
57
- if (sel) { sel.removeAllRanges(); sel.addRange(range); }
58
- }
59
- }`,
60
- objectId,
61
- returnByValue: true,
62
- }, sessionId);
63
- if (fillSelectResult.exceptionDetails) {
64
- throw new Error(`fillElement select-all failed: ${fillSelectResult.exceptionDetails.exception?.description ?? fillSelectResult.exceptionDetails.text}`);
65
- }
66
- }
67
- else if (box) {
68
- // Fallback for elements without a resolvable objectId: keyboard select-all clears existing content
69
- const mod = process.platform === 'darwin' ? 4 : 2;
70
- await pressKeyCombo(client, sessionId, 'a', mod);
71
- }
72
- if (!objectId && !box)
73
- throw new Error(`Cannot fill ref @${ref.ref}: element not found in DOM`);
74
- // Type the value character by character for natural input
75
- await typeText(client, sessionId, value);
76
- }
77
- export async function typeText(client, sessionId, text) {
78
- // Cap to 100 KB to prevent OOM in CDP message serializer
79
- const safeText = text.length > 102_400 ? text.slice(0, 102_400) : text;
80
- await client.send('Input.insertText', { text: safeText }, sessionId);
81
- }
82
- export async function pressKeyCombo(client, sessionId, key, modifiers) {
83
- const { text: _text, ...keyInfo } = resolveKey(key);
84
- // rawKeyDown prevents Chrome from inserting the character text; only the shortcut fires
85
- await client.send('Input.dispatchKeyEvent', { type: 'rawKeyDown', ...keyInfo, modifiers }, sessionId);
86
- await client.send('Input.dispatchKeyEvent', { type: 'keyUp', ...keyInfo, modifiers }, sessionId);
87
- }
88
- export async function pressKey(client, sessionId, key) {
89
- const { text, ...keyInfo } = resolveKey(key);
90
- // rawKeyDown does not insert text; the explicit char event handles insertion
91
- await client.send('Input.dispatchKeyEvent', {
92
- type: 'rawKeyDown',
93
- ...keyInfo,
94
- }, sessionId);
95
- if (text) {
96
- await client.send('Input.dispatchKeyEvent', {
97
- type: 'char',
98
- text,
99
- }, sessionId);
100
- }
101
- await client.send('Input.dispatchKeyEvent', {
102
- type: 'keyUp',
103
- ...keyInfo,
104
- }, sessionId);
105
- }
106
- function resolveKey(key) {
107
- const keyMap = {
108
- Enter: { key: 'Enter', code: 'Enter', text: '\r', windowsVirtualKeyCode: 13 },
109
- Tab: { key: 'Tab', code: 'Tab', windowsVirtualKeyCode: 9 },
110
- Escape: { key: 'Escape', code: 'Escape', windowsVirtualKeyCode: 27 },
111
- Backspace: { key: 'Backspace', code: 'Backspace', windowsVirtualKeyCode: 8 },
112
- Delete: { key: 'Delete', code: 'Delete', windowsVirtualKeyCode: 46 },
113
- ArrowUp: { key: 'ArrowUp', code: 'ArrowUp', windowsVirtualKeyCode: 38 },
114
- ArrowDown: { key: 'ArrowDown', code: 'ArrowDown', windowsVirtualKeyCode: 40 },
115
- ArrowLeft: { key: 'ArrowLeft', code: 'ArrowLeft', windowsVirtualKeyCode: 37 },
116
- ArrowRight: { key: 'ArrowRight', code: 'ArrowRight', windowsVirtualKeyCode: 39 },
117
- Home: { key: 'Home', code: 'Home', windowsVirtualKeyCode: 36 },
118
- End: { key: 'End', code: 'End', windowsVirtualKeyCode: 35 },
119
- PageUp: { key: 'PageUp', code: 'PageUp', windowsVirtualKeyCode: 33 },
120
- PageDown: { key: 'PageDown', code: 'PageDown', windowsVirtualKeyCode: 34 },
121
- Space: { key: ' ', code: 'Space', text: ' ', windowsVirtualKeyCode: 32 },
122
- ' ': { key: ' ', code: 'Space', text: ' ', windowsVirtualKeyCode: 32 },
123
- Shift: { key: 'Shift', code: 'ShiftLeft', windowsVirtualKeyCode: 16 },
124
- Control: { key: 'Control', code: 'ControlLeft', windowsVirtualKeyCode: 17 },
125
- Alt: { key: 'Alt', code: 'AltLeft', windowsVirtualKeyCode: 18 },
126
- Meta: { key: 'Meta', code: 'MetaLeft', windowsVirtualKeyCode: 91 },
127
- F1: { key: 'F1', code: 'F1', windowsVirtualKeyCode: 112 },
128
- F2: { key: 'F2', code: 'F2', windowsVirtualKeyCode: 113 },
129
- F3: { key: 'F3', code: 'F3', windowsVirtualKeyCode: 114 },
130
- F4: { key: 'F4', code: 'F4', windowsVirtualKeyCode: 115 },
131
- F5: { key: 'F5', code: 'F5', windowsVirtualKeyCode: 116 },
132
- F6: { key: 'F6', code: 'F6', windowsVirtualKeyCode: 117 },
133
- F7: { key: 'F7', code: 'F7', windowsVirtualKeyCode: 118 },
134
- F8: { key: 'F8', code: 'F8', windowsVirtualKeyCode: 119 },
135
- F9: { key: 'F9', code: 'F9', windowsVirtualKeyCode: 120 },
136
- F10: { key: 'F10', code: 'F10', windowsVirtualKeyCode: 121 },
137
- F11: { key: 'F11', code: 'F11', windowsVirtualKeyCode: 122 },
138
- F12: { key: 'F12', code: 'F12', windowsVirtualKeyCode: 123 },
139
- };
140
- if (keyMap[key])
141
- return keyMap[key];
142
- // Single printable character — windowsVirtualKeyCode required for rawKeyDown shortcut dispatch
143
- if (key.length === 1) {
144
- const charCode = key.charCodeAt(0);
145
- if (charCode >= 48 && charCode <= 57) {
146
- return { key, code: `Digit${key}`, text: key, windowsVirtualKeyCode: charCode };
147
- }
148
- if ((charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122)) {
149
- return {
150
- key,
151
- code: `Key${key.toUpperCase()}`,
152
- text: key,
153
- windowsVirtualKeyCode: key.toUpperCase().charCodeAt(0),
154
- };
155
- }
156
- // Symbol keys: map to the physical key's code and Windows virtual key code
157
- const symbolMap = {
158
- '!': { code: 'Digit1', windowsVirtualKeyCode: 49 },
159
- '@': { code: 'Digit2', windowsVirtualKeyCode: 50 },
160
- '#': { code: 'Digit3', windowsVirtualKeyCode: 51 },
161
- $: { code: 'Digit4', windowsVirtualKeyCode: 52 },
162
- '%': { code: 'Digit5', windowsVirtualKeyCode: 53 },
163
- '^': { code: 'Digit6', windowsVirtualKeyCode: 54 },
164
- '&': { code: 'Digit7', windowsVirtualKeyCode: 55 },
165
- '*': { code: 'Digit8', windowsVirtualKeyCode: 56 },
166
- '(': { code: 'Digit9', windowsVirtualKeyCode: 57 },
167
- ')': { code: 'Digit0', windowsVirtualKeyCode: 48 },
168
- '-': { code: 'Minus', windowsVirtualKeyCode: 189 },
169
- _: { code: 'Minus', windowsVirtualKeyCode: 189 },
170
- '=': { code: 'Equal', windowsVirtualKeyCode: 187 },
171
- '+': { code: 'Equal', windowsVirtualKeyCode: 187 },
172
- '[': { code: 'BracketLeft', windowsVirtualKeyCode: 219 },
173
- '{': { code: 'BracketLeft', windowsVirtualKeyCode: 219 },
174
- ']': { code: 'BracketRight', windowsVirtualKeyCode: 221 },
175
- '}': { code: 'BracketRight', windowsVirtualKeyCode: 221 },
176
- '\\': { code: 'Backslash', windowsVirtualKeyCode: 220 },
177
- '|': { code: 'Backslash', windowsVirtualKeyCode: 220 },
178
- ';': { code: 'Semicolon', windowsVirtualKeyCode: 186 },
179
- ':': { code: 'Semicolon', windowsVirtualKeyCode: 186 },
180
- "'": { code: 'Quote', windowsVirtualKeyCode: 222 },
181
- '"': { code: 'Quote', windowsVirtualKeyCode: 222 },
182
- '`': { code: 'Backquote', windowsVirtualKeyCode: 192 },
183
- '~': { code: 'Backquote', windowsVirtualKeyCode: 192 },
184
- ',': { code: 'Comma', windowsVirtualKeyCode: 188 },
185
- '<': { code: 'Comma', windowsVirtualKeyCode: 188 },
186
- '.': { code: 'Period', windowsVirtualKeyCode: 190 },
187
- '>': { code: 'Period', windowsVirtualKeyCode: 190 },
188
- '/': { code: 'Slash', windowsVirtualKeyCode: 191 },
189
- '?': { code: 'Slash', windowsVirtualKeyCode: 191 },
190
- };
191
- const sym = symbolMap[key];
192
- if (sym)
193
- return { key, code: sym.code, text: key, windowsVirtualKeyCode: sym.windowsVirtualKeyCode };
194
- // Unknown/non-ASCII character — omit code since no valid DOM KeyboardEvent.code exists
195
- return { key, code: '', text: key };
196
- }
197
- return { key, code: key };
198
- }
199
- export async function scrollElement(client, sessionId, direction, amount = 300, ref) {
200
- // Cap scroll amount to prevent extreme delta values
201
- amount = Math.min(Math.max(1, Math.floor(amount)), 100_000);
202
- let x = 0;
203
- let y = 0;
204
- let deltaX = 0;
205
- let deltaY = 0;
206
- if (ref) {
207
- const box = await getElementBox(client, sessionId, ref);
208
- if (!box)
209
- throw new Error(`Cannot scroll: ref @${ref.ref} not found in DOM`);
210
- x = box.x;
211
- y = box.y;
212
- }
213
- else {
214
- // Center of viewport
215
- const vp = await client.send('Runtime.evaluate', {
216
- expression: 'JSON.stringify({w: window.innerWidth, h: window.innerHeight})',
217
- returnByValue: true,
218
- }, sessionId);
219
- const dims = JSON.parse(vp.result?.value ?? '{"w":1280,"h":720}');
220
- x = dims.w / 2;
221
- y = dims.h / 2;
222
- }
223
- switch (direction) {
224
- case 'down':
225
- deltaY = amount;
226
- break;
227
- case 'up':
228
- deltaY = -amount;
229
- break;
230
- case 'right':
231
- deltaX = amount;
232
- break;
233
- case 'left':
234
- deltaX = -amount;
235
- break;
236
- }
237
- await client.send('Input.dispatchMouseEvent', {
238
- type: 'mouseWheel',
239
- x,
240
- y,
241
- deltaX,
242
- deltaY,
243
- }, sessionId);
244
- }
245
- export async function hoverElement(client, sessionId, ref) {
246
- const box = await getElementBox(client, sessionId, ref);
247
- if (!box)
248
- throw new Error(`Cannot hover ref @${ref.ref}: element not found in DOM`);
249
- await client.send('Input.dispatchMouseEvent', {
250
- type: 'mouseMoved',
251
- x: box.x,
252
- y: box.y,
253
- }, sessionId);
254
- }
255
- export async function selectOption(client, sessionId, ref, value) {
256
- const objectId = await getObjectIdForRef(client, sessionId, ref);
257
- if (!objectId)
258
- throw new Error(`Cannot select: ref @${ref.ref} not found in DOM`);
259
- const selectResult = await client.send('Runtime.callFunctionOn', {
260
- functionDeclaration: `function(value) {
261
- if (this.tagName !== 'SELECT') throw new Error('Not a select element');
262
- for (const opt of this.options) {
263
- if (opt.value === value || opt.textContent.trim() === value) {
264
- this.value = opt.value;
265
- this.dispatchEvent(new Event('change', { bubbles: true }));
266
- return;
267
- }
268
- }
269
- throw new Error('Option not found: ' + value);
270
- }`,
271
- objectId,
272
- arguments: [{ value }],
273
- returnByValue: true,
274
- }, sessionId);
275
- if (selectResult.exceptionDetails) {
276
- throw new Error(`selectOption failed: ${selectResult.exceptionDetails.exception?.description ?? selectResult.exceptionDetails.text}`);
277
- }
278
- }
279
- export async function checkElement(client, sessionId, ref, checked = true) {
280
- const objectId = await getObjectIdForRef(client, sessionId, ref);
281
- if (!objectId)
282
- throw new Error(`Cannot check: ref @${ref.ref} not found in DOM`);
283
- const checkResult = await client.send('Runtime.callFunctionOn', {
284
- functionDeclaration: `function(checked) {
285
- if (this.checked !== checked) {
286
- this.click();
287
- }
288
- }`,
289
- objectId,
290
- arguments: [{ value: checked }],
291
- returnByValue: true,
292
- }, sessionId);
293
- if (checkResult.exceptionDetails) {
294
- throw new Error(`checkElement failed: ${checkResult.exceptionDetails.exception?.description ?? checkResult.exceptionDetails.text}`);
295
- }
296
- }
297
- export async function focusElement(client, sessionId, ref) {
298
- const objectId = await getObjectIdForRef(client, sessionId, ref);
299
- if (objectId) {
300
- await client.send('Runtime.callFunctionOn', {
301
- functionDeclaration: 'function() { this.focus(); }',
302
- objectId,
303
- returnByValue: true,
304
- }, sessionId);
305
- return;
306
- }
307
- const box = await getElementBox(client, sessionId, ref);
308
- if (box) {
309
- await clickPoint(client, sessionId, box.x, box.y);
310
- }
311
- else {
312
- throw new Error(`Cannot focus ref @${ref.ref}: element not found in DOM`);
313
- }
314
- }
315
- export async function typeIntoElement(client, sessionId, ref, text) {
316
- await focusElement(client, sessionId, ref);
317
- await typeText(client, sessionId, text);
318
- }
319
- export async function keyDown(client, sessionId, key) {
320
- const { text: _text, ...keyInfo } = resolveKey(key);
321
- await client.send('Input.dispatchKeyEvent', { type: 'rawKeyDown', ...keyInfo }, sessionId);
322
- }
323
- export async function keyUp(client, sessionId, key) {
324
- const { text: _text, ...keyInfo } = resolveKey(key);
325
- await client.send('Input.dispatchKeyEvent', { type: 'keyUp', ...keyInfo }, sessionId);
326
- }
327
- export async function mouseMove(client, sessionId, x, y) {
328
- await client.send('Input.dispatchMouseEvent', { type: 'mouseMoved', x, y }, sessionId);
329
- }
330
- export async function mouseDown(client, sessionId, x, y, button = 'left') {
331
- const buttonsMask = button === 'right' ? 2 : button === 'middle' ? 4 : 1;
332
- await client.send('Input.dispatchMouseEvent', { type: 'mousePressed', x, y, button, buttons: buttonsMask, clickCount: 1 }, sessionId);
333
- }
334
- export async function mouseUp(client, sessionId, x, y, button = 'left') {
335
- await client.send('Input.dispatchMouseEvent', { type: 'mouseReleased', x, y, button, buttons: 0, clickCount: 1 }, sessionId);
336
- }
337
- export async function mouseWheel(client, sessionId, x, y, deltaY, deltaX = 0) {
338
- await client.send('Input.dispatchMouseEvent', { type: 'mouseWheel', x, y, deltaX, deltaY }, sessionId);
339
- }
340
- export async function dragAndDrop(client, sessionId, src, tgt) {
341
- const srcBox = await getElementBox(client, sessionId, src);
342
- const tgtBox = await getElementBox(client, sessionId, tgt);
343
- if (!srcBox || !tgtBox)
344
- throw new Error('Cannot drag: one or both elements not found in DOM');
345
- await client.send('Input.dispatchMouseEvent', { type: 'mousePressed', x: srcBox.x, y: srcBox.y, button: 'left', buttons: 1, clickCount: 1 }, sessionId);
346
- await client.send('Input.dispatchMouseEvent', { type: 'mouseMoved', x: srcBox.x, y: srcBox.y, button: 'left', buttons: 1 }, sessionId);
347
- // Move in steps for smooth drag
348
- const steps = 10;
349
- for (let i = 1; i <= steps; i++) {
350
- const x = srcBox.x + (tgtBox.x - srcBox.x) * (i / steps);
351
- const y = srcBox.y + (tgtBox.y - srcBox.y) * (i / steps);
352
- await client.send('Input.dispatchMouseEvent', { type: 'mouseMoved', x, y, button: 'left', buttons: 1 }, sessionId);
353
- }
354
- await client.send('Input.dispatchMouseEvent', { type: 'mouseReleased', x: tgtBox.x, y: tgtBox.y, button: 'left', buttons: 0, clickCount: 1 }, sessionId);
355
- }
356
- export async function uploadFile(client, sessionId, ref, filePaths) {
357
- if (!ref.backendDOMNodeId)
358
- throw new Error(`Cannot upload: ref @${ref.ref} has no DOM node`);
359
- await client.send('DOM.setFileInputFiles', {
360
- files: filePaths.map((f) => resolve(f)),
361
- backendNodeId: ref.backendDOMNodeId,
362
- }, sessionId);
363
- }
364
- export async function readClipboard(client, sessionId) {
365
- const result = await evaluateJs(client, sessionId, 'navigator.clipboard.readText()');
366
- return result;
367
- }
368
- export async function writeClipboard(client, sessionId, text) {
369
- // Cap to 100 KB to prevent OOM when serializing the CDP expression
370
- const safeText = text.length > 102_400 ? text.slice(0, 102_400) : text;
371
- await evaluateJs(client, sessionId, `navigator.clipboard.writeText(${JSON.stringify(safeText)})`);
372
- }
373
- export async function pushState(client, sessionId, url) {
374
- // Try Next.js router first, then fallback to history.pushState
375
- await evaluateJs(client, sessionId, `
376
- (function() {
377
- const url = ${JSON.stringify(url)};
378
- if (window.next && window.next.router) {
379
- window.next.router.push(url).catch(function() {});
380
- return;
381
- } else {
382
- history.pushState({}, '', url);
383
- window.dispatchEvent(new PopStateEvent('popstate'));
384
- }
385
- })()
386
- `);
387
- }
388
- export async function addInitScript(client, sessionId, script) {
389
- const result = await client.send('Page.addScriptToEvaluateOnNewDocument', {
390
- source: script,
391
- }, sessionId);
392
- return result.identifier;
393
- }
394
- export async function removeInitScript(client, sessionId, identifier) {
395
- await client.send('Page.removeScriptToEvaluateOnNewDocument', { identifier }, sessionId);
396
- }
397
- // Default cap on how long an evaluateJs() call waits for Runtime.evaluate to
398
- // resolve. Because this always passes `awaitPromise: true`, an expression
399
- // like `new Promise(() => {})` never settles — the underlying CdpClient.send()
400
- // has no timeout of its own (the CDP_RESPONSE_SIZE_LIMIT in cdp.ts only guards
401
- // the HTTP /json/* endpoints, not WebSocket command responses), so without
402
- // this the caller (e.g. the `eval` CLI command) would hang forever with
403
- // nothing to kill it.
404
- const DEFAULT_EVAL_TIMEOUT_MS = 30_000;
405
- export async function evaluateJs(client, sessionId, expression, timeoutMs = DEFAULT_EVAL_TIMEOUT_MS) {
406
- const evalPromise = client.send('Runtime.evaluate', {
407
- expression,
408
- returnByValue: true,
409
- awaitPromise: true,
410
- }, sessionId);
411
- // Not unref'd (same rule as CdpClient.send): this timer settles the awaited
412
- // race, so it has to hold the event loop open while the evaluation is in
413
- // flight. Cleared in the finally so a fast evaluation does not keep the
414
- // process alive for the rest of timeoutMs.
415
- let evalTimer;
416
- let result;
417
- try {
418
- result = await (timeoutMs > 0
419
- ? Promise.race([
420
- evalPromise,
421
- new Promise((_, reject) => {
422
- evalTimer = setTimeout(() => reject(new Error(`JS evaluation timed out after ${timeoutMs}ms`)), timeoutMs);
423
- }),
424
- ])
425
- : evalPromise);
426
- }
427
- finally {
428
- clearTimeout(evalTimer);
429
- }
430
- if (result.exceptionDetails) {
431
- throw new Error(`JS evaluation error: ${result.exceptionDetails.exception?.description ?? result.exceptionDetails.text}`);
432
- }
433
- return result.result?.value;
434
- }
1
+ /**
2
+ * Browser action helpers (click, type, scroll, drag, JS evaluation, ...).
3
+ *
4
+ * File-size sweep: split into sibling modules (actions-keyboard.ts,
5
+ * actions-mouse.ts, actions-form.ts, actions-eval.ts). This file remains the
6
+ * entry point and re-exports everything that used to live here so every
7
+ * existing import keeps working.
8
+ */
9
+ export { addInitScript, evaluateJs, pushState, readClipboard, removeInitScript, writeClipboard, } from './actions-eval.js';
10
+ export { checkElement, clickElement, fillElement, focusElement, selectOption, typeIntoElement, uploadFile, } from './actions-form.js';
11
+ export { keyDown, keyUp, pressKey, pressKeyCombo, typeText } from './actions-keyboard.js';
12
+ export { clickPoint, dragAndDrop, hoverElement, mouseDown, mouseMove, mouseUp, mouseWheel, scrollElement, } from './actions-mouse.js';
435
13
  //# sourceMappingURL=actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/browser/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/browser/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,OAAO,EACP,UAAU,EACV,aAAa,GACd,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,26 @@
1
+ export declare function findChrome(executablePath?: string): string;
2
+ export declare function isPortOpen(port: number): Promise<boolean>;
3
+ /**
4
+ * Confirm the CDP endpoint on `port` actually identifies as Chrome/Chromium
5
+ * via `/json/version`'s `Browser` field, rather than assuming any CDP-speaking
6
+ * responder is "ours". Reduces (does not eliminate) the risk of silently
7
+ * attaching to an unrelated real browser that happens to be listening there.
8
+ */
9
+ export declare function isChromeIdentity(port: number): Promise<boolean>;
10
+ /** isChromeIdentity, telling "answered as something else" apart from "did
11
+ * not answer in time" ('unknown': a timeout, a refused or reset connection,
12
+ * a non-OK status or an unparseable body). */
13
+ export declare function chromeIdentity(port: number): Promise<'chrome' | 'other' | 'unknown'>;
14
+ /** Raw TCP connect probe — distinguishes "nothing listening" from "something listening that isn't CDP". */
15
+ export declare function isTcpPortOpen(port: number, timeoutMs?: number): Promise<boolean>;
16
+ /** The port Chrome wrote to `<userDataDir>/DevToolsActivePort` once its
17
+ * DevTools server was listening, or null if it has not (yet). */
18
+ export declare function readDevToolsActivePort(file: string): number | null;
19
+ /** The per-process id in a browser-level CDP websocket URL
20
+ * (`ws://host:port/devtools/browser/<id>`), or null. */
21
+ export declare function browserIdOf(wsUrl: string | undefined): string | null;
22
+ /** Chrome's browser-level debugger endpoint, from /json/version — the
23
+ * connection `Browser.close` belongs on. Null if the port isn't answering as
24
+ * a Chrome/Chromium CDP endpoint (same identity check as isChromeIdentity). */
25
+ export declare function fetchBrowserWebSocketUrl(port: number): Promise<string | null>;
26
+ //# sourceMappingURL=browser-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-discovery.d.ts","sourceRoot":"","sources":["../../../src/browser/browser-discovery.ts"],"names":[],"mappings":"AAQA,wBAAgB,UAAU,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAsB1D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAErE;AAED;;+CAE+C;AAC/C,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAgB1F;AAED,2GAA2G;AAC3G,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAY9E;AAED;kEACkE;AAClE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED;yDACyD;AACzD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAEpE;AAED;;gFAEgF;AAChF,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQnF"}
@@ -0,0 +1,113 @@
1
+ // Split out of browser.ts (file-size sweep). Pure move: no behaviour change.
2
+ import { execSync } from 'node:child_process';
3
+ import { existsSync, readFileSync } from 'node:fs';
4
+ import { connect } from 'node:net';
5
+ import { fetchTargets } from './cdp.js';
6
+ import { CHROME_EXECUTABLES } from './types.js';
7
+ export function findChrome(executablePath) {
8
+ if (executablePath) {
9
+ if (existsSync(executablePath))
10
+ return executablePath;
11
+ throw new Error(`Chrome executable not found: ${executablePath}`);
12
+ }
13
+ for (const candidate of CHROME_EXECUTABLES) {
14
+ if (existsSync(candidate))
15
+ return candidate;
16
+ }
17
+ // Try PATH
18
+ try {
19
+ const result = execSync('which google-chrome chromium-browser chromium microsoft-edge microsoft-edge-stable 2>/dev/null', { encoding: 'utf8' }).trim();
20
+ const first = result.split('\n')[0];
21
+ if (first)
22
+ return first;
23
+ }
24
+ catch {
25
+ // ignore
26
+ }
27
+ throw new Error('No supported browser found. Install Google Chrome, Microsoft Edge, or Chromium — or pass executablePath in BrowserConfig.');
28
+ }
29
+ export async function isPortOpen(port) {
30
+ try {
31
+ await fetchTargets(port);
32
+ return true;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ }
38
+ /**
39
+ * Confirm the CDP endpoint on `port` actually identifies as Chrome/Chromium
40
+ * via `/json/version`'s `Browser` field, rather than assuming any CDP-speaking
41
+ * responder is "ours". Reduces (does not eliminate) the risk of silently
42
+ * attaching to an unrelated real browser that happens to be listening there.
43
+ */
44
+ export async function isChromeIdentity(port) {
45
+ return (await chromeIdentity(port)) === 'chrome';
46
+ }
47
+ /** isChromeIdentity, telling "answered as something else" apart from "did
48
+ * not answer in time" ('unknown': a timeout, a refused or reset connection,
49
+ * a non-OK status or an unparseable body). */
50
+ export async function chromeIdentity(port) {
51
+ try {
52
+ const res = await fetch(`http://127.0.0.1:${port}/json/version`, {
53
+ signal: AbortSignal.timeout(1000),
54
+ });
55
+ if (!res.ok)
56
+ return 'unknown';
57
+ const info = (await res.json());
58
+ // Edge's Browser field is "Edg/<version>" with no "chrome"/"chromium"
59
+ // substring, even though it's Chromium-based and CDP-compatible —
60
+ // accept it alongside Chrome/Chromium rather than rejecting a valid target.
61
+ return typeof info.Browser === 'string' && /chrom(e|ium)|edg/i.test(info.Browser)
62
+ ? 'chrome'
63
+ : 'other';
64
+ }
65
+ catch {
66
+ return 'unknown';
67
+ }
68
+ }
69
+ /** Raw TCP connect probe — distinguishes "nothing listening" from "something listening that isn't CDP". */
70
+ export function isTcpPortOpen(port, timeoutMs = 1000) {
71
+ return new Promise((resolve) => {
72
+ const socket = connect({ host: '127.0.0.1', port, timeout: timeoutMs });
73
+ const done = (result) => {
74
+ socket.removeAllListeners();
75
+ socket.destroy();
76
+ resolve(result);
77
+ };
78
+ socket.once('connect', () => done(true));
79
+ socket.once('timeout', () => done(false));
80
+ socket.once('error', () => done(false));
81
+ });
82
+ }
83
+ /** The port Chrome wrote to `<userDataDir>/DevToolsActivePort` once its
84
+ * DevTools server was listening, or null if it has not (yet). */
85
+ export function readDevToolsActivePort(file) {
86
+ try {
87
+ const port = Number.parseInt(readFileSync(file, 'utf8').split('\n')[0], 10);
88
+ return Number.isInteger(port) && port > 0 && port <= 65535 ? port : null;
89
+ }
90
+ catch {
91
+ return null;
92
+ }
93
+ }
94
+ /** The per-process id in a browser-level CDP websocket URL
95
+ * (`ws://host:port/devtools/browser/<id>`), or null. */
96
+ export function browserIdOf(wsUrl) {
97
+ return wsUrl?.match(/\/devtools\/browser\/([^/?#\s]+)/)?.[1] ?? null;
98
+ }
99
+ /** Chrome's browser-level debugger endpoint, from /json/version — the
100
+ * connection `Browser.close` belongs on. Null if the port isn't answering as
101
+ * a Chrome/Chromium CDP endpoint (same identity check as isChromeIdentity). */
102
+ export async function fetchBrowserWebSocketUrl(port) {
103
+ const res = await fetch(`http://127.0.0.1:${port}/json/version`, {
104
+ signal: AbortSignal.timeout(1000),
105
+ });
106
+ if (!res.ok)
107
+ return null;
108
+ const info = (await res.json());
109
+ if (typeof info.Browser !== 'string' || !/chrom(e|ium)|edg/i.test(info.Browser))
110
+ return null;
111
+ return typeof info.webSocketDebuggerUrl === 'string' ? info.webSocketDebuggerUrl : null;
112
+ }
113
+ //# sourceMappingURL=browser-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-discovery.js","sourceRoot":"","sources":["../../../src/browser/browser-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BrowserConfig } from './types.js';
2
+ export declare function launchBrowser(config?: BrowserConfig): Promise<number>;
3
+ //# sourceMappingURL=browser-launch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-launch.d.ts","sourceRoot":"","sources":["../../../src/browser/browser-launch.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAehD,wBAAsB,aAAa,CAAC,MAAM,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyF/E"}