@monoes/monobrowse 1.0.13 → 1.0.14

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 (107) hide show
  1. package/dist/src/__tests__/bridge-instruments.test.d.ts +2 -0
  2. package/dist/src/__tests__/bridge-instruments.test.d.ts.map +1 -0
  3. package/dist/src/__tests__/bridge-instruments.test.js +132 -0
  4. package/dist/src/__tests__/bridge-instruments.test.js.map +1 -0
  5. package/dist/src/__tests__/bridge-transport.test.d.ts +2 -0
  6. package/dist/src/__tests__/bridge-transport.test.d.ts.map +1 -0
  7. package/dist/src/__tests__/bridge-transport.test.js +287 -0
  8. package/dist/src/__tests__/bridge-transport.test.js.map +1 -0
  9. package/dist/src/__tests__/cdp-transport.test.d.ts +2 -0
  10. package/dist/src/__tests__/cdp-transport.test.d.ts.map +1 -0
  11. package/dist/src/__tests__/cdp-transport.test.js +167 -0
  12. package/dist/src/__tests__/cdp-transport.test.js.map +1 -0
  13. package/dist/src/browser/bridge.d.ts +119 -0
  14. package/dist/src/browser/bridge.d.ts.map +1 -0
  15. package/dist/src/browser/bridge.js +264 -0
  16. package/dist/src/browser/bridge.js.map +1 -0
  17. package/dist/src/browser/cdp.d.ts +11 -1
  18. package/dist/src/browser/cdp.d.ts.map +1 -1
  19. package/dist/src/browser/cdp.js +60 -56
  20. package/dist/src/browser/cdp.js.map +1 -1
  21. package/dist/src/browser/index.d.ts +2 -0
  22. package/dist/src/browser/index.d.ts.map +1 -1
  23. package/dist/src/browser/index.js +2 -0
  24. package/dist/src/browser/index.js.map +1 -1
  25. package/dist/src/browser/transport.d.ts +62 -0
  26. package/dist/src/browser/transport.d.ts.map +1 -0
  27. package/dist/src/browser/transport.js +65 -0
  28. package/dist/src/browser/transport.js.map +1 -0
  29. package/dist/src/cli/commander-adapter.d.ts +16 -0
  30. package/dist/src/cli/commander-adapter.d.ts.map +1 -0
  31. package/dist/src/cli/commander-adapter.js +68 -0
  32. package/dist/src/cli/commander-adapter.js.map +1 -0
  33. package/dist/src/cli/commands-context.d.ts +14 -0
  34. package/dist/src/cli/commands-context.d.ts.map +1 -0
  35. package/dist/src/cli/commands-context.js +351 -0
  36. package/dist/src/cli/commands-context.js.map +1 -0
  37. package/dist/src/cli/commands-data.d.ts +12 -0
  38. package/dist/src/cli/commands-data.d.ts.map +1 -0
  39. package/dist/src/cli/commands-data.js +246 -0
  40. package/dist/src/cli/commands-data.js.map +1 -0
  41. package/dist/src/cli/commands-element.d.ts +15 -0
  42. package/dist/src/cli/commands-element.d.ts.map +1 -0
  43. package/dist/src/cli/commands-element.js +262 -0
  44. package/dist/src/cli/commands-element.js.map +1 -0
  45. package/dist/src/cli/commands-files.d.ts +9 -0
  46. package/dist/src/cli/commands-files.d.ts.map +1 -0
  47. package/dist/src/cli/commands-files.js +207 -0
  48. package/dist/src/cli/commands-files.js.map +1 -0
  49. package/dist/src/cli/commands-input.d.ts +26 -0
  50. package/dist/src/cli/commands-input.d.ts.map +1 -0
  51. package/dist/src/cli/commands-input.js +399 -0
  52. package/dist/src/cli/commands-input.js.map +1 -0
  53. package/dist/src/cli/commands-navigate.d.ts +12 -0
  54. package/dist/src/cli/commands-navigate.d.ts.map +1 -0
  55. package/dist/src/cli/commands-navigate.js +389 -0
  56. package/dist/src/cli/commands-navigate.js.map +1 -0
  57. package/dist/src/cli/commands-page.d.ts +25 -0
  58. package/dist/src/cli/commands-page.d.ts.map +1 -0
  59. package/dist/src/cli/commands-page.js +377 -0
  60. package/dist/src/cli/commands-page.js.map +1 -0
  61. package/dist/src/cli/commands-report.d.ts +8 -0
  62. package/dist/src/cli/commands-report.d.ts.map +1 -0
  63. package/dist/src/cli/commands-report.js +256 -0
  64. package/dist/src/cli/commands-report.js.map +1 -0
  65. package/dist/src/cli/commands-script.d.ts +43 -0
  66. package/dist/src/cli/commands-script.d.ts.map +1 -0
  67. package/dist/src/cli/commands-script.js +168 -0
  68. package/dist/src/cli/commands-script.js.map +1 -0
  69. package/dist/src/cli/commands-session.d.ts +15 -0
  70. package/dist/src/cli/commands-session.d.ts.map +1 -0
  71. package/dist/src/cli/commands-session.js +357 -0
  72. package/dist/src/cli/commands-session.js.map +1 -0
  73. package/dist/src/cli/commands-trace.d.ts +12 -0
  74. package/dist/src/cli/commands-trace.d.ts.map +1 -0
  75. package/dist/src/cli/commands-trace.js +347 -0
  76. package/dist/src/cli/commands-trace.js.map +1 -0
  77. package/dist/src/cli/commands.d.ts +22 -42
  78. package/dist/src/cli/commands.d.ts.map +1 -1
  79. package/dist/src/cli/commands.js +42 -3648
  80. package/dist/src/cli/commands.js.map +1 -1
  81. package/dist/src/cli/session.d.ts +47 -0
  82. package/dist/src/cli/session.d.ts.map +1 -0
  83. package/dist/src/cli/session.js +343 -0
  84. package/dist/src/cli/session.js.map +1 -0
  85. package/dist/tsconfig.tsbuildinfo +1 -1
  86. package/package.json +1 -1
  87. package/src/__tests__/bridge-instruments.test.ts +180 -0
  88. package/src/__tests__/bridge-transport.test.ts +365 -0
  89. package/src/__tests__/cdp-transport.test.ts +198 -0
  90. package/src/browser/bridge.ts +354 -0
  91. package/src/browser/cdp.ts +57 -52
  92. package/src/browser/index.ts +2 -0
  93. package/src/browser/transport.ts +111 -0
  94. package/src/cli/commander-adapter.ts +65 -0
  95. package/src/cli/commands-context.ts +367 -0
  96. package/src/cli/commands-data.ts +248 -0
  97. package/src/cli/commands-element.ts +305 -0
  98. package/src/cli/commands-files.ts +248 -0
  99. package/src/cli/commands-input.ts +434 -0
  100. package/src/cli/commands-navigate.ts +442 -0
  101. package/src/cli/commands-page.ts +420 -0
  102. package/src/cli/commands-report.ts +275 -0
  103. package/src/cli/commands-script.ts +183 -0
  104. package/src/cli/commands-session.ts +376 -0
  105. package/src/cli/commands-trace.ts +349 -0
  106. package/src/cli/commands.ts +95 -3943
  107. package/src/cli/session.ts +412 -0
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Asking about elements — locating them by semantic query, and reading back
3
+ * whether one is visible, enabled or checked.
4
+ *
5
+ * These answer questions; they never change the page (`highlight` aside, which
6
+ * draws a temporary overlay).
7
+ */
8
+ import type { Command } from './types.js';
9
+ export declare const isvisibleCommand: Command;
10
+ export declare const isenabledCommand: Command;
11
+ export declare const ischeckedCommand: Command;
12
+ export declare const isCommand: Command;
13
+ export declare const findCommand: Command;
14
+ export declare const highlightCommand: Command;
15
+ //# sourceMappingURL=commands-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands-element.d.ts","sourceRoot":"","sources":["../../../src/cli/commands-element.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;AAEzE,eAAO,MAAM,gBAAgB,EAAE,OA0B9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,OA2B9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,OA2B9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,OAoCvB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,OAuJzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,OAc9B,CAAC"}
@@ -0,0 +1,262 @@
1
+ /**
2
+ * Asking about elements — locating them by semantic query, and reading back
3
+ * whether one is visible, enabled or checked.
4
+ *
5
+ * These answer questions; they never change the page (`highlight` aside, which
6
+ * draws a temporary overlay).
7
+ */
8
+ import { output } from './output.js';
9
+ import { ensureConnected, getBrowser, print, resolveElementObjectId, session } from './session.js';
10
+ export const isvisibleCommand = {
11
+ name: 'isvisible',
12
+ description: 'Check if element is visible. Usage: monomind browse isvisible @e1|"selector"',
13
+ options: [{ name: 'json', type: 'boolean', description: 'Output as JSON', default: false }],
14
+ action: async (ctx) => {
15
+ const { client, sessionId } = await ensureConnected(session.port);
16
+ const arg = ctx.args[0];
17
+ if (!arg)
18
+ throw new Error('Usage: monomind browse isvisible @e1|".selector"');
19
+ const objectId = await resolveElementObjectId(client, sessionId, session.refs, arg);
20
+ const r = await client.send('Runtime.callFunctionOn', {
21
+ functionDeclaration: `function(){var r=this.getBoundingClientRect(),s=window.getComputedStyle(this);return r.width>0&&r.height>0&&s.visibility!=='hidden'&&s.display!=='none'&&parseFloat(s.opacity)>0;}`,
22
+ objectId,
23
+ returnByValue: true,
24
+ }, sessionId);
25
+ const visible = r.result?.value ?? false;
26
+ if (ctx.flags.json) {
27
+ print(JSON.stringify({ visible }));
28
+ }
29
+ else {
30
+ output.printSuccess(`isvisible: ${visible}`);
31
+ }
32
+ return { success: true, data: { visible } };
33
+ },
34
+ };
35
+ export const isenabledCommand = {
36
+ name: 'isenabled',
37
+ description: 'Check if element is enabled (not disabled). Usage: monomind browse isenabled @e1|"selector"',
38
+ options: [{ name: 'json', type: 'boolean', description: 'Output as JSON', default: false }],
39
+ action: async (ctx) => {
40
+ const { client, sessionId } = await ensureConnected(session.port);
41
+ const arg = ctx.args[0];
42
+ if (!arg)
43
+ throw new Error('Usage: monomind browse isenabled @e1|".selector"');
44
+ const objectId = await resolveElementObjectId(client, sessionId, session.refs, arg);
45
+ const r = await client.send('Runtime.callFunctionOn', {
46
+ functionDeclaration: `function(){return !this.disabled;}`,
47
+ objectId,
48
+ returnByValue: true,
49
+ }, sessionId);
50
+ const enabled = r.result?.value ?? true;
51
+ if (ctx.flags.json) {
52
+ print(JSON.stringify({ enabled }));
53
+ }
54
+ else {
55
+ output.printSuccess(`isenabled: ${enabled}`);
56
+ }
57
+ return { success: true, data: { enabled } };
58
+ },
59
+ };
60
+ export const ischeckedCommand = {
61
+ name: 'ischecked',
62
+ description: 'Check if checkbox/radio is checked. Usage: monomind browse ischecked @e1|"selector"',
63
+ options: [{ name: 'json', type: 'boolean', description: 'Output as JSON', default: false }],
64
+ action: async (ctx) => {
65
+ const { client, sessionId } = await ensureConnected(session.port);
66
+ const arg = ctx.args[0];
67
+ if (!arg)
68
+ throw new Error('Usage: monomind browse ischecked @e1|".selector"');
69
+ const objectId = await resolveElementObjectId(client, sessionId, session.refs, arg);
70
+ const r = await client.send('Runtime.callFunctionOn', {
71
+ functionDeclaration: `function(){var el=this,tag=el.tagName&&el.tagName.toUpperCase();if(tag==='INPUT'&&(el.type==='checkbox'||el.type==='radio'))return el.checked;var role=el.getAttribute&&el.getAttribute('role');if(role&&['checkbox','radio','switch','menuitemcheckbox','menuitemradio','option','treeitem'].indexOf(role)!==-1)return el.getAttribute('aria-checked')==='true';var label=tag!=='LABEL'?el.closest&&el.closest('label'):el;if(label&&label.control&&(label.control.type==='checkbox'||label.control.type==='radio'))return label.control.checked;var inp=el.querySelector&&el.querySelector('input[type="checkbox"],input[type="radio"]');return inp?inp.checked:false;}`,
72
+ objectId,
73
+ returnByValue: true,
74
+ }, sessionId);
75
+ const checked = r.result?.value ?? false;
76
+ if (ctx.flags.json) {
77
+ print(JSON.stringify({ checked }));
78
+ }
79
+ else {
80
+ output.printSuccess(`ischecked: ${checked}`);
81
+ }
82
+ return { success: true, data: { checked } };
83
+ },
84
+ };
85
+ export const isCommand = {
86
+ name: 'is',
87
+ description: 'Check element state. Usage: monomind browse is visible|enabled|checked @e1',
88
+ options: [{ name: 'json', type: 'boolean', description: 'Output as JSON', default: false }],
89
+ action: async (ctx) => {
90
+ const { client, sessionId } = await ensureConnected(session.port);
91
+ const browser = await getBrowser();
92
+ const check = ctx.args[0];
93
+ const refArg = ctx.args[1];
94
+ if (!check || !refArg)
95
+ throw new Error('Usage: monomind browse is visible|enabled|checked @e1');
96
+ const refKey = refArg.startsWith('@') ? refArg.slice(1) : refArg;
97
+ const ref = await browser.resolveRef(client, sessionId, session.refs, refKey);
98
+ let result;
99
+ switch (check) {
100
+ case 'visible':
101
+ result = await browser.isVisible(client, sessionId, ref);
102
+ break;
103
+ case 'enabled':
104
+ result = await browser.isEnabled(client, sessionId, ref);
105
+ break;
106
+ case 'checked':
107
+ result = await browser.isChecked(client, sessionId, ref);
108
+ break;
109
+ default:
110
+ throw new Error(`Unknown check: ${check}. Use: visible|enabled|checked`);
111
+ }
112
+ if (ctx.flags.json) {
113
+ print(JSON.stringify({ data: { [check]: result } }));
114
+ }
115
+ else {
116
+ print(result ? 'true' : 'false');
117
+ }
118
+ return { success: true, data: { [check]: result } };
119
+ },
120
+ };
121
+ export const findCommand = {
122
+ name: 'find',
123
+ description: 'Find elements by semantic locators. Usage: monomind browse find role|text|label|placeholder|testid|alttext|title|selector <value> [action]',
124
+ options: [
125
+ { name: 'name', type: 'string', description: 'Filter by accessible name' },
126
+ { name: 'exact', type: 'boolean', description: 'Require exact match', default: false },
127
+ { name: 'nth', type: 'number', description: 'Find nth match' },
128
+ { name: 'last', type: 'boolean', description: 'Find last match', default: false },
129
+ ],
130
+ action: async (ctx) => {
131
+ const { client, sessionId } = await ensureConnected(session.port);
132
+ const browser = await getBrowser();
133
+ const locator = ctx.args[0];
134
+ const value = ctx.args[1];
135
+ const action = ctx.args[2];
136
+ if (!locator || !value)
137
+ throw new Error('Usage: monomind browse find role|text|label|placeholder|testid|alttext|title|selector <value> [action]');
138
+ const opts = {
139
+ name: ctx.flags.name,
140
+ exact: ctx.flags.exact,
141
+ nth: ctx.flags.nth,
142
+ last: ctx.flags.last,
143
+ };
144
+ // alttext: find element by alt attribute (images, icons)
145
+ if (locator === 'alttext') {
146
+ // I2: use JS attribute comparison to avoid broken CSS selectors for values with spaces/quotes
147
+ const valJson = JSON.stringify(value);
148
+ const found = (await browser.evaluateJs(client, sessionId, `(function(v){var el=document.querySelector('img[alt]')||null;var all=document.querySelectorAll('[alt]');for(var i=0;i<all.length;i++){if(all[i].getAttribute('alt')===v){all[i].setAttribute('data-mm-located','true');return true;}}return false;})(${valJson})`));
149
+ if (!found) {
150
+ output.printWarning(`alttext not found: ${value}`);
151
+ return { success: false };
152
+ }
153
+ output.printSuccess(`Found element with alt="${value}"`);
154
+ return { success: true, data: { alttext: value } };
155
+ }
156
+ // title: find element by title attribute
157
+ if (locator === 'title') {
158
+ // I2: use JS attribute comparison to avoid broken CSS selectors for values with spaces/quotes
159
+ const valJson = JSON.stringify(value);
160
+ const found = (await browser.evaluateJs(client, sessionId, `(function(v){var all=document.querySelectorAll('[title]');for(var i=0;i<all.length;i++){if(all[i].getAttribute('title')===v){all[i].setAttribute('data-mm-located','true');return true;}}return false;})(${valJson})`));
161
+ if (!found) {
162
+ output.printWarning(`title not found: ${value}`);
163
+ return { success: false };
164
+ }
165
+ output.printSuccess(`Found element with title="${value}"`);
166
+ return { success: true, data: { title: value } };
167
+ }
168
+ let ref = null;
169
+ switch (locator) {
170
+ case 'role':
171
+ ref = await browser.findByRole(client, sessionId, session.refs, value, opts);
172
+ break;
173
+ case 'text':
174
+ ref = await browser.findByText(client, sessionId, session.refs, value, opts);
175
+ break;
176
+ case 'label':
177
+ ref = await browser.findByLabel(client, sessionId, session.refs, value, opts);
178
+ break;
179
+ case 'placeholder':
180
+ ref = await browser.findByPlaceholder(client, sessionId, session.refs, value, opts);
181
+ break;
182
+ case 'selector':
183
+ ref = await browser.findBySelector(client, sessionId, session.refs, value, opts);
184
+ break;
185
+ case 'testid': {
186
+ const sel = await browser.findByTestId(client, sessionId, value);
187
+ if (!sel) {
188
+ output.printWarning(`testid not found: ${value}`);
189
+ return { success: false };
190
+ }
191
+ output.printSuccess(`Found testid selector: ${sel}`);
192
+ return { success: true, data: { selector: sel } };
193
+ }
194
+ default:
195
+ throw new Error(`Unknown locator: ${locator}. Use: role|text|label|placeholder|testid|alttext|title|selector`);
196
+ }
197
+ if (!ref) {
198
+ output.printWarning(`No element found: ${locator}="${value}"`);
199
+ return { success: false };
200
+ }
201
+ output.printSuccess(`Found: ${ref.role} "${ref.name}" [@${ref.ref}]`);
202
+ if (action) {
203
+ switch (action) {
204
+ case 'click':
205
+ await browser.clickElement(client, sessionId, ref);
206
+ break;
207
+ case 'fill': {
208
+ const fillValue = ctx.args[3];
209
+ await browser.fillElement(client, sessionId, ref, fillValue ?? '');
210
+ break;
211
+ }
212
+ case 'type': {
213
+ const typeValue = ctx.args[3];
214
+ await browser.typeIntoElement(client, sessionId, ref, typeValue ?? '');
215
+ break;
216
+ }
217
+ case 'hover':
218
+ await browser.hoverElement(client, sessionId, ref);
219
+ break;
220
+ case 'focus':
221
+ await browser.focusElement(client, sessionId, ref);
222
+ break;
223
+ case 'check':
224
+ await browser.checkElement(client, sessionId, ref, true);
225
+ break;
226
+ case 'uncheck':
227
+ await browser.checkElement(client, sessionId, ref, false);
228
+ break;
229
+ case 'text': {
230
+ const objectId = await browser.getObjectIdForRef(client, sessionId, ref);
231
+ if (objectId) {
232
+ const r = await client.send('Runtime.callFunctionOn', {
233
+ functionDeclaration: 'function() { return this.innerText || this.textContent || ""; }',
234
+ objectId,
235
+ returnByValue: true,
236
+ }, sessionId);
237
+ print(r.result?.value ?? '');
238
+ }
239
+ break;
240
+ }
241
+ }
242
+ }
243
+ return { success: true, data: { ref } };
244
+ },
245
+ };
246
+ export const highlightCommand = {
247
+ name: 'highlight',
248
+ description: 'Highlight an element for 2 seconds. Usage: monomind browse highlight @e1',
249
+ action: async (ctx) => {
250
+ const { client, sessionId } = await ensureConnected(session.port);
251
+ const browser = await getBrowser();
252
+ const refArg = ctx.args[0];
253
+ if (!refArg)
254
+ throw new Error('Usage: monomind browse highlight @e1');
255
+ const refKey = refArg.startsWith('@') ? refArg.slice(1) : refArg;
256
+ const ref = await browser.resolveRef(client, sessionId, session.refs, refKey);
257
+ await browser.highlightElement(client, sessionId, ref);
258
+ output.printSuccess(`Highlighted: ${ref.role} "${ref.name}"`);
259
+ return { success: true };
260
+ },
261
+ };
262
+ //# sourceMappingURL=commands-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands-element.js","sourceRoot":"","sources":["../../../src/cli/commands-element.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Files in and out of the page — screenshots, PDFs, uploads and downloads.
3
+ */
4
+ import type { Command } from './types.js';
5
+ export declare const screenshotCommand: Command;
6
+ export declare const uploadCommand: Command;
7
+ export declare const downloadCommand: Command;
8
+ export declare const pdfCommand: Command;
9
+ //# sourceMappingURL=commands-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands-files.d.ts","sourceRoot":"","sources":["../../../src/cli/commands-files.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;AAEzE,eAAO,MAAM,iBAAiB,EAAE,OA4E/B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,OAgB3B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,OAoH7B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,OAkBxB,CAAC"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Files in and out of the page — screenshots, PDFs, uploads and downloads.
3
+ */
4
+ import { output } from './output.js';
5
+ import { ensureConnected, getBrowser, imageFormat, print, resolveElementObjectId, session, } from './session.js';
6
+ export const screenshotCommand = {
7
+ name: 'screenshot',
8
+ description: 'Capture a screenshot. Usage: monomind browse screenshot [path] [--annotate] [--hide-scrollbars]',
9
+ options: [
10
+ { name: 'full', type: 'boolean', description: 'Full page screenshot', default: false },
11
+ { name: 'format', type: 'string', description: 'Format: png|jpeg|webp', default: 'png' },
12
+ { name: 'quality', type: 'number', description: 'Quality 0-100 for jpeg/webp', default: 80 },
13
+ {
14
+ name: 'annotate',
15
+ type: 'boolean',
16
+ description: 'Overlay numbered labels keyed to @eN refs from last snapshot (viewport-only; do not combine with --full)',
17
+ default: false,
18
+ },
19
+ {
20
+ name: 'hide-scrollbars',
21
+ type: 'boolean',
22
+ description: 'Hide native scrollbars via CSS injection before capture',
23
+ default: false,
24
+ },
25
+ { name: 'json', type: 'boolean', description: 'Output JSON with path', default: false },
26
+ ],
27
+ action: async (ctx) => {
28
+ const { client, sessionId } = await ensureConnected(session.port);
29
+ const browser = await getBrowser();
30
+ const hideScrollbars = ctx.flags['hide-scrollbars'];
31
+ if (hideScrollbars) {
32
+ await client
33
+ .send('Runtime.evaluate', {
34
+ expression: `(function(){var s=document.getElementById('__mm_noscroll__');if(s)return;var el=document.createElement('style');el.id='__mm_noscroll__';el.textContent='*::-webkit-scrollbar{display:none!important}*{scrollbar-width:none!important;-ms-overflow-style:none!important}';document.head.appendChild(el);})()`,
35
+ returnByValue: false,
36
+ }, sessionId)
37
+ .catch(() => { });
38
+ }
39
+ const annotate = ctx.flags.annotate;
40
+ // eslint-disable-next-line prefer-const
41
+ let result;
42
+ try {
43
+ result = await browser.captureScreenshot(client, sessionId, {
44
+ path: ctx.args[0],
45
+ fullPage: ctx.flags.full,
46
+ format: imageFormat(ctx.flags.format, ['png', 'jpeg', 'webp'], 'png'),
47
+ quality: ctx.flags.quality,
48
+ annotate,
49
+ refs: annotate ? session.refs : undefined,
50
+ });
51
+ }
52
+ finally {
53
+ if (hideScrollbars) {
54
+ await client
55
+ .send('Runtime.evaluate', {
56
+ expression: `(function(){var s=document.getElementById('__mm_noscroll__');if(s)s.remove();})()`,
57
+ returnByValue: false,
58
+ }, sessionId)
59
+ .catch(() => { });
60
+ }
61
+ }
62
+ if (ctx.flags.json) {
63
+ print(JSON.stringify({ data: { path: result.path } }));
64
+ }
65
+ else {
66
+ output.printSuccess(`Screenshot saved: ${result.path}`);
67
+ }
68
+ return { success: true, data: result };
69
+ },
70
+ };
71
+ export const uploadCommand = {
72
+ name: 'upload',
73
+ description: 'Upload files to a file input. Usage: monomind browse upload @e1 ./file.pdf',
74
+ action: async (ctx) => {
75
+ const { client, sessionId } = await ensureConnected(session.port);
76
+ const browser = await getBrowser();
77
+ const refArg = ctx.args[0];
78
+ const files = ctx.args.slice(1);
79
+ if (!refArg || files.length === 0)
80
+ throw new Error('Usage: monomind browse upload @e1 <file1> [file2...]');
81
+ const refKey = refArg.startsWith('@') ? refArg.slice(1) : refArg;
82
+ const ref = await browser.resolveRef(client, sessionId, session.refs, refKey);
83
+ await browser.uploadFile(client, sessionId, ref, files);
84
+ output.printSuccess(`Uploaded ${files.length} file(s) to @${refKey}`);
85
+ return { success: true };
86
+ },
87
+ };
88
+ export const downloadCommand = {
89
+ name: 'download',
90
+ description: 'Click an element and capture the triggered file download. Usage: monomind browse download @e1 ./output.pdf',
91
+ options: [
92
+ {
93
+ name: 'timeout',
94
+ short: 't',
95
+ type: 'number',
96
+ description: 'Max wait for download in ms',
97
+ default: 30000,
98
+ },
99
+ { name: 'json', type: 'boolean', description: 'Output result as JSON', default: false },
100
+ ],
101
+ action: async (ctx) => {
102
+ const { client, sessionId } = await ensureConnected(session.port);
103
+ const _browser = await getBrowser();
104
+ const refOrSel = ctx.args[0];
105
+ const savePath = ctx.args[1];
106
+ if (!refOrSel || !savePath)
107
+ throw new Error('Usage: monomind browse download @e1|selector <save-path>');
108
+ const { mkdir } = await import('node:fs/promises');
109
+ const { dirname } = await import('node:path');
110
+ const { tmpdir } = await import('node:os');
111
+ const { join } = await import('node:path');
112
+ const downloadDir = join(tmpdir(), `mm-download-${Date.now()}`);
113
+ await mkdir(downloadDir, { recursive: true });
114
+ // Enable Page.downloadWillBegin / Page.downloadProgress events
115
+ await client
116
+ .send('Browser.setDownloadBehavior', {
117
+ behavior: 'allow',
118
+ downloadPath: downloadDir,
119
+ eventsEnabled: true,
120
+ }, undefined)
121
+ .catch(() => {
122
+ // Fallback: older Chrome API (session-scoped)
123
+ return client
124
+ .send('Page.setDownloadBehavior', {
125
+ behavior: 'allow',
126
+ downloadPath: downloadDir,
127
+ }, sessionId)
128
+ .catch(() => { });
129
+ });
130
+ // Track when download completes
131
+ const downloadPromise = new Promise((resolve, reject) => {
132
+ let guid = '';
133
+ // C2: capture off() functions to avoid listener leaks in batch mode
134
+ const offBegin = client.on('Browser.downloadWillBegin', (params) => {
135
+ guid = params.guid;
136
+ });
137
+ let offProgress;
138
+ // cleanup defined before setTimeout so the timeout callback can call it
139
+ let timeout;
140
+ const cleanup = () => {
141
+ clearTimeout(timeout);
142
+ offBegin?.();
143
+ offProgress?.();
144
+ };
145
+ timeout = setTimeout(() => {
146
+ cleanup();
147
+ reject(new Error('Download timed out'));
148
+ }, ctx.flags.timeout);
149
+ offProgress = client.on('Browser.downloadProgress', async (params) => {
150
+ if (params.guid === guid && params.state === 'completed') {
151
+ cleanup();
152
+ // Find the downloaded file in downloadDir
153
+ const { readdir, rename, rmdir } = await import('node:fs/promises');
154
+ const files = await readdir(downloadDir);
155
+ if (files.length > 0) {
156
+ const src = join(downloadDir, files[0]);
157
+ await mkdir(dirname(savePath), { recursive: true });
158
+ await rename(src, savePath);
159
+ await rmdir(downloadDir).catch(() => { }); // I1: cleanup temp dir
160
+ resolve(savePath);
161
+ }
162
+ else {
163
+ await rmdir(downloadDir).catch(() => { }); // I1: cleanup temp dir
164
+ reject(new Error('Download completed but no file found'));
165
+ }
166
+ }
167
+ else if (params.guid === guid && params.state === 'canceled') {
168
+ cleanup();
169
+ reject(new Error('Download was canceled'));
170
+ }
171
+ });
172
+ });
173
+ // Click the element to trigger download
174
+ const objectId = await resolveElementObjectId(client, sessionId, session.refs, refOrSel);
175
+ await client.send('Runtime.callFunctionOn', {
176
+ functionDeclaration: 'function(){ this.click(); }',
177
+ objectId,
178
+ returnByValue: true,
179
+ }, sessionId);
180
+ const finalPath = await downloadPromise;
181
+ if (ctx.flags.json)
182
+ print(JSON.stringify({ data: { path: finalPath } }));
183
+ else
184
+ output.printSuccess(`Downloaded: ${finalPath}`);
185
+ return { success: true, data: { path: finalPath } };
186
+ },
187
+ };
188
+ export const pdfCommand = {
189
+ name: 'pdf',
190
+ description: 'Save page as PDF. Usage: monomind browse pdf [path]',
191
+ options: [
192
+ { name: 'landscape', type: 'boolean', description: 'Landscape orientation', default: false },
193
+ { name: 'background', type: 'boolean', description: 'Print background', default: true },
194
+ ],
195
+ action: async (ctx) => {
196
+ const { client, sessionId } = await ensureConnected(session.port);
197
+ const browser = await getBrowser();
198
+ const path = await browser.capturePdf(client, sessionId, {
199
+ path: ctx.args[0],
200
+ landscape: ctx.flags.landscape,
201
+ printBackground: ctx.flags.background,
202
+ });
203
+ output.printSuccess(`PDF saved: ${path}`);
204
+ return { success: true, data: { path } };
205
+ },
206
+ };
207
+ //# sourceMappingURL=commands-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands-files.js","sourceRoot":"","sources":["../../../src/cli/commands-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Acting on elements — mouse, keyboard, touch and drag input.
3
+ *
4
+ * Every command here targets an element by `@eN` ref or CSS selector and
5
+ * performs a real input event through CDP, rather than scripting the DOM.
6
+ */
7
+ import type { Command } from './types.js';
8
+ export declare const clickCommand: Command;
9
+ export declare const fillCommand: Command;
10
+ export declare const pressCommand: Command;
11
+ export declare const dblclickCommand: Command;
12
+ export declare const focusCommand: Command;
13
+ export declare const typeCommand: Command;
14
+ export declare const keyboardCommand: Command;
15
+ export declare const keydownCommand: Command;
16
+ export declare const keyupCommand: Command;
17
+ export declare const hoverCommand: Command;
18
+ export declare const selectCommand: Command;
19
+ export declare const checkCommand: Command;
20
+ export declare const uncheckCommand: Command;
21
+ export declare const tapCommand: Command;
22
+ export declare const swipeCommand: Command;
23
+ export declare const scrollIntoViewCommand: Command;
24
+ export declare const dragCommand: Command;
25
+ export declare const mouseCommand: Command;
26
+ //# sourceMappingURL=commands-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands-input.d.ts","sourceRoot":"","sources":["../../../src/cli/commands-input.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;AAEzE,eAAO,MAAM,YAAY,EAAE,OAgC1B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,OAkBzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,OAc1B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,OAc7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,OAc1B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,OAgBzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,OAa7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,OAY5B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,OAY1B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,OAc1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,OAe3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,OAc1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,OAc5B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,OAyCxB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,OAiE1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,OAcnC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,OAiBzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,OAiD1B,CAAC"}