@monoes/monobrowse 1.0.12 → 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.
- package/dist/src/__tests__/bridge-instruments.test.d.ts +2 -0
- package/dist/src/__tests__/bridge-instruments.test.d.ts.map +1 -0
- package/dist/src/__tests__/bridge-instruments.test.js +132 -0
- package/dist/src/__tests__/bridge-instruments.test.js.map +1 -0
- package/dist/src/__tests__/bridge-transport.test.d.ts +2 -0
- package/dist/src/__tests__/bridge-transport.test.d.ts.map +1 -0
- package/dist/src/__tests__/bridge-transport.test.js +287 -0
- package/dist/src/__tests__/bridge-transport.test.js.map +1 -0
- package/dist/src/__tests__/cdp-transport.test.d.ts +2 -0
- package/dist/src/__tests__/cdp-transport.test.d.ts.map +1 -0
- package/dist/src/__tests__/cdp-transport.test.js +167 -0
- package/dist/src/__tests__/cdp-transport.test.js.map +1 -0
- package/dist/src/__tests__/profiler-heap.test.d.ts +2 -0
- package/dist/src/__tests__/profiler-heap.test.d.ts.map +1 -0
- package/dist/src/__tests__/profiler-heap.test.js +154 -0
- package/dist/src/__tests__/profiler-heap.test.js.map +1 -0
- package/dist/src/__tests__/report-a11y.test.d.ts +2 -0
- package/dist/src/__tests__/report-a11y.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-a11y.test.js +147 -0
- package/dist/src/__tests__/report-a11y.test.js.map +1 -0
- package/dist/src/__tests__/report-analyze.test.d.ts +2 -0
- package/dist/src/__tests__/report-analyze.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-analyze.test.js +157 -0
- package/dist/src/__tests__/report-analyze.test.js.map +1 -0
- package/dist/src/__tests__/report-budget.test.d.ts +2 -0
- package/dist/src/__tests__/report-budget.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-budget.test.js +80 -0
- package/dist/src/__tests__/report-budget.test.js.map +1 -0
- package/dist/src/__tests__/report-diff.test.d.ts +2 -0
- package/dist/src/__tests__/report-diff.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-diff.test.js +231 -0
- package/dist/src/__tests__/report-diff.test.js.map +1 -0
- package/dist/src/__tests__/report-evidence.test.d.ts +2 -0
- package/dist/src/__tests__/report-evidence.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-evidence.test.js +214 -0
- package/dist/src/__tests__/report-evidence.test.js.map +1 -0
- package/dist/src/__tests__/report-flake.test.d.ts +2 -0
- package/dist/src/__tests__/report-flake.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-flake.test.js +182 -0
- package/dist/src/__tests__/report-flake.test.js.map +1 -0
- package/dist/src/__tests__/report-history.test.d.ts +2 -0
- package/dist/src/__tests__/report-history.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-history.test.js +229 -0
- package/dist/src/__tests__/report-history.test.js.map +1 -0
- package/dist/src/__tests__/report-output.test.d.ts +2 -0
- package/dist/src/__tests__/report-output.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-output.test.js +169 -0
- package/dist/src/__tests__/report-output.test.js.map +1 -0
- package/dist/src/__tests__/report-png.test.d.ts +2 -0
- package/dist/src/__tests__/report-png.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-png.test.js +84 -0
- package/dist/src/__tests__/report-png.test.js.map +1 -0
- package/dist/src/__tests__/report-render-extras.test.d.ts +2 -0
- package/dist/src/__tests__/report-render-extras.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-render-extras.test.js +285 -0
- package/dist/src/__tests__/report-render-extras.test.js.map +1 -0
- package/dist/src/__tests__/report-render.test.d.ts +2 -0
- package/dist/src/__tests__/report-render.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-render.test.js +143 -0
- package/dist/src/__tests__/report-render.test.js.map +1 -0
- package/dist/src/__tests__/report-run.test.d.ts +2 -0
- package/dist/src/__tests__/report-run.test.d.ts.map +1 -0
- package/dist/src/__tests__/report-run.test.js +234 -0
- package/dist/src/__tests__/report-run.test.js.map +1 -0
- package/dist/src/browser/bridge.d.ts +119 -0
- package/dist/src/browser/bridge.d.ts.map +1 -0
- package/dist/src/browser/bridge.js +264 -0
- package/dist/src/browser/bridge.js.map +1 -0
- package/dist/src/browser/cdp.d.ts +11 -1
- package/dist/src/browser/cdp.d.ts.map +1 -1
- package/dist/src/browser/cdp.js +60 -56
- package/dist/src/browser/cdp.js.map +1 -1
- package/dist/src/browser/index.d.ts +3 -0
- package/dist/src/browser/index.d.ts.map +1 -1
- package/dist/src/browser/index.js +3 -0
- package/dist/src/browser/index.js.map +1 -1
- package/dist/src/browser/profiler.d.ts.map +1 -1
- package/dist/src/browser/profiler.js +19 -22
- package/dist/src/browser/profiler.js.map +1 -1
- package/dist/src/browser/transport.d.ts +62 -0
- package/dist/src/browser/transport.d.ts.map +1 -0
- package/dist/src/browser/transport.js +65 -0
- package/dist/src/browser/transport.js.map +1 -0
- package/dist/src/cli/commander-adapter.d.ts +16 -0
- package/dist/src/cli/commander-adapter.d.ts.map +1 -0
- package/dist/src/cli/commander-adapter.js +68 -0
- package/dist/src/cli/commander-adapter.js.map +1 -0
- package/dist/src/cli/commands-context.d.ts +14 -0
- package/dist/src/cli/commands-context.d.ts.map +1 -0
- package/dist/src/cli/commands-context.js +351 -0
- package/dist/src/cli/commands-context.js.map +1 -0
- package/dist/src/cli/commands-data.d.ts +12 -0
- package/dist/src/cli/commands-data.d.ts.map +1 -0
- package/dist/src/cli/commands-data.js +246 -0
- package/dist/src/cli/commands-data.js.map +1 -0
- package/dist/src/cli/commands-element.d.ts +15 -0
- package/dist/src/cli/commands-element.d.ts.map +1 -0
- package/dist/src/cli/commands-element.js +262 -0
- package/dist/src/cli/commands-element.js.map +1 -0
- package/dist/src/cli/commands-files.d.ts +9 -0
- package/dist/src/cli/commands-files.d.ts.map +1 -0
- package/dist/src/cli/commands-files.js +207 -0
- package/dist/src/cli/commands-files.js.map +1 -0
- package/dist/src/cli/commands-input.d.ts +26 -0
- package/dist/src/cli/commands-input.d.ts.map +1 -0
- package/dist/src/cli/commands-input.js +399 -0
- package/dist/src/cli/commands-input.js.map +1 -0
- package/dist/src/cli/commands-navigate.d.ts +12 -0
- package/dist/src/cli/commands-navigate.d.ts.map +1 -0
- package/dist/src/cli/commands-navigate.js +389 -0
- package/dist/src/cli/commands-navigate.js.map +1 -0
- package/dist/src/cli/commands-page.d.ts +25 -0
- package/dist/src/cli/commands-page.d.ts.map +1 -0
- package/dist/src/cli/commands-page.js +377 -0
- package/dist/src/cli/commands-page.js.map +1 -0
- package/dist/src/cli/commands-report.d.ts +8 -0
- package/dist/src/cli/commands-report.d.ts.map +1 -0
- package/dist/src/cli/commands-report.js +256 -0
- package/dist/src/cli/commands-report.js.map +1 -0
- package/dist/src/cli/commands-script.d.ts +43 -0
- package/dist/src/cli/commands-script.d.ts.map +1 -0
- package/dist/src/cli/commands-script.js +168 -0
- package/dist/src/cli/commands-script.js.map +1 -0
- package/dist/src/cli/commands-session.d.ts +15 -0
- package/dist/src/cli/commands-session.d.ts.map +1 -0
- package/dist/src/cli/commands-session.js +357 -0
- package/dist/src/cli/commands-session.js.map +1 -0
- package/dist/src/cli/commands-trace.d.ts +12 -0
- package/dist/src/cli/commands-trace.d.ts.map +1 -0
- package/dist/src/cli/commands-trace.js +347 -0
- package/dist/src/cli/commands-trace.js.map +1 -0
- package/dist/src/cli/commands.d.ts +22 -42
- package/dist/src/cli/commands.d.ts.map +1 -1
- package/dist/src/cli/commands.js +48 -3400
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/session.d.ts +47 -0
- package/dist/src/cli/session.d.ts.map +1 -0
- package/dist/src/cli/session.js +343 -0
- package/dist/src/cli/session.js.map +1 -0
- package/dist/src/report/a11y.d.ts +52 -0
- package/dist/src/report/a11y.d.ts.map +1 -0
- package/dist/src/report/a11y.js +231 -0
- package/dist/src/report/a11y.js.map +1 -0
- package/dist/src/report/analyze.d.ts +20 -0
- package/dist/src/report/analyze.d.ts.map +1 -0
- package/dist/src/report/analyze.js +136 -0
- package/dist/src/report/analyze.js.map +1 -0
- package/dist/src/report/budget.d.ts +27 -0
- package/dist/src/report/budget.d.ts.map +1 -0
- package/dist/src/report/budget.js +143 -0
- package/dist/src/report/budget.js.map +1 -0
- package/dist/src/report/collect-a11y.d.ts +25 -0
- package/dist/src/report/collect-a11y.d.ts.map +1 -0
- package/dist/src/report/collect-a11y.js +154 -0
- package/dist/src/report/collect-a11y.js.map +1 -0
- package/dist/src/report/collect.d.ts +45 -0
- package/dist/src/report/collect.d.ts.map +1 -0
- package/dist/src/report/collect.js +275 -0
- package/dist/src/report/collect.js.map +1 -0
- package/dist/src/report/evidence.d.ts +80 -0
- package/dist/src/report/evidence.d.ts.map +1 -0
- package/dist/src/report/evidence.js +279 -0
- package/dist/src/report/evidence.js.map +1 -0
- package/dist/src/report/flake.d.ts +88 -0
- package/dist/src/report/flake.d.ts.map +1 -0
- package/dist/src/report/flake.js +232 -0
- package/dist/src/report/flake.js.map +1 -0
- package/dist/src/report/history.d.ts +85 -0
- package/dist/src/report/history.d.ts.map +1 -0
- package/dist/src/report/history.js +176 -0
- package/dist/src/report/history.js.map +1 -0
- package/dist/src/report/index.d.ts +102 -0
- package/dist/src/report/index.d.ts.map +1 -0
- package/dist/src/report/index.js +216 -0
- package/dist/src/report/index.js.map +1 -0
- package/dist/src/report/pixel-diff.d.ts +30 -0
- package/dist/src/report/pixel-diff.d.ts.map +1 -0
- package/dist/src/report/pixel-diff.js +175 -0
- package/dist/src/report/pixel-diff.js.map +1 -0
- package/dist/src/report/png.d.ts +28 -0
- package/dist/src/report/png.d.ts.map +1 -0
- package/dist/src/report/png.js +259 -0
- package/dist/src/report/png.js.map +1 -0
- package/dist/src/report/render-evidence.d.ts +16 -0
- package/dist/src/report/render-evidence.d.ts.map +1 -0
- package/dist/src/report/render-evidence.js +174 -0
- package/dist/src/report/render-evidence.js.map +1 -0
- package/dist/src/report/render-trend.d.ts +16 -0
- package/dist/src/report/render-trend.d.ts.map +1 -0
- package/dist/src/report/render-trend.js +194 -0
- package/dist/src/report/render-trend.js.map +1 -0
- package/dist/src/report/render.d.ts +21 -0
- package/dist/src/report/render.d.ts.map +1 -0
- package/dist/src/report/render.js +286 -0
- package/dist/src/report/render.js.map +1 -0
- package/dist/src/report/run-diff.d.ts +18 -0
- package/dist/src/report/run-diff.d.ts.map +1 -0
- package/dist/src/report/run-diff.js +51 -0
- package/dist/src/report/run-diff.js.map +1 -0
- package/dist/src/report/structure.d.ts +41 -0
- package/dist/src/report/structure.d.ts.map +1 -0
- package/dist/src/report/structure.js +210 -0
- package/dist/src/report/structure.js.map +1 -0
- package/dist/src/report/trend.d.ts +26 -0
- package/dist/src/report/trend.d.ts.map +1 -0
- package/dist/src/report/trend.js +164 -0
- package/dist/src/report/trend.js.map +1 -0
- package/dist/src/report/types.d.ts +320 -0
- package/dist/src/report/types.d.ts.map +1 -0
- package/dist/src/report/types.js +11 -0
- package/dist/src/report/types.js.map +1 -0
- package/dist/src/report/util.d.ts +17 -0
- package/dist/src/report/util.d.ts.map +1 -0
- package/dist/src/report/util.js +45 -0
- package/dist/src/report/util.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/__tests__/bridge-instruments.test.ts +180 -0
- package/src/__tests__/bridge-transport.test.ts +365 -0
- package/src/__tests__/cdp-transport.test.ts +198 -0
- package/src/__tests__/profiler-heap.test.ts +191 -0
- package/src/__tests__/report-a11y.test.ts +180 -0
- package/src/__tests__/report-analyze.test.ts +202 -0
- package/src/__tests__/report-budget.test.ts +92 -0
- package/src/__tests__/report-diff.test.ts +272 -0
- package/src/__tests__/report-evidence.test.ts +276 -0
- package/src/__tests__/report-flake.test.ts +214 -0
- package/src/__tests__/report-history.test.ts +293 -0
- package/src/__tests__/report-output.test.ts +210 -0
- package/src/__tests__/report-png.test.ts +95 -0
- package/src/__tests__/report-render-extras.test.ts +315 -0
- package/src/__tests__/report-render.test.ts +175 -0
- package/src/__tests__/report-run.test.ts +264 -0
- package/src/browser/bridge.ts +354 -0
- package/src/browser/cdp.ts +57 -52
- package/src/browser/index.ts +3 -0
- package/src/browser/profiler.ts +28 -21
- package/src/browser/transport.ts +111 -0
- package/src/cli/commander-adapter.ts +65 -0
- package/src/cli/commands-context.ts +367 -0
- package/src/cli/commands-data.ts +248 -0
- package/src/cli/commands-element.ts +305 -0
- package/src/cli/commands-files.ts +248 -0
- package/src/cli/commands-input.ts +434 -0
- package/src/cli/commands-navigate.ts +442 -0
- package/src/cli/commands-page.ts +420 -0
- package/src/cli/commands-report.ts +275 -0
- package/src/cli/commands-script.ts +183 -0
- package/src/cli/commands-session.ts +376 -0
- package/src/cli/commands-trace.ts +349 -0
- package/src/cli/commands.ts +101 -3677
- package/src/cli/session.ts +412 -0
- package/src/report/a11y.ts +242 -0
- package/src/report/analyze.ts +181 -0
- package/src/report/budget.ts +155 -0
- package/src/report/collect-a11y.ts +200 -0
- package/src/report/collect.ts +408 -0
- package/src/report/evidence.ts +379 -0
- package/src/report/flake.ts +303 -0
- package/src/report/history.ts +219 -0
- package/src/report/index.ts +307 -0
- package/src/report/pixel-diff.ts +197 -0
- package/src/report/png.ts +290 -0
- package/src/report/render-evidence.ts +194 -0
- package/src/report/render-trend.ts +225 -0
- package/src/report/render.ts +314 -0
- package/src/report/run-diff.ts +63 -0
- package/src/report/structure.ts +212 -0
- package/src/report/trend.ts +189 -0
- package/src/report/types.ts +356 -0
- package/src/report/util.ts +48 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-report.js","sourceRoot":"","sources":["../../../src/cli/commands-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Running things in the page — `eval` for a single expression, `batch` for a
|
|
3
|
+
* sequence of browse subcommands in one process, and the init scripts that run
|
|
4
|
+
* before every navigation.
|
|
5
|
+
*
|
|
6
|
+
* The tokenizer is shared: a batch line is parsed the same way the CLI would
|
|
7
|
+
* have parsed it on the command line, so `eval` expressions survive quoting.
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from './types.js';
|
|
10
|
+
export declare const evalCommand: Command;
|
|
11
|
+
/**
|
|
12
|
+
* Splits one line of a `batch` command string into a subcommand name, its
|
|
13
|
+
* args, and any recognized leading flags.
|
|
14
|
+
*
|
|
15
|
+
* `eval` is special-cased: its sole argument is a raw JS expression, which
|
|
16
|
+
* legitimately contains its own string-literal quotes (e.g.
|
|
17
|
+
* `eval document.querySelector('a')`). tokenizeBatchCommand's shell-style
|
|
18
|
+
* word-splitting treats `'...'`/`"..."` as grouping delimiters and discards
|
|
19
|
+
* them — correct for a value like `fill @e1 "some text"`, but for `eval` it
|
|
20
|
+
* silently deletes the expression's own quotes, turning a string literal
|
|
21
|
+
* into a bare (undefined) identifier reference and producing a
|
|
22
|
+
* ReferenceError instead of evaluating the intended expression. For `eval`,
|
|
23
|
+
* only its own known --flags are consumed from the front; everything after
|
|
24
|
+
* them is taken verbatim as one argument, untouched by tokenization.
|
|
25
|
+
*
|
|
26
|
+
/**
|
|
27
|
+
* `get box`'s output shape: browser.getElementBox() returns the element's
|
|
28
|
+
* CENTER point under x/y (correct for internal click-target callers), but
|
|
29
|
+
* `get box` is a bounding-box accessor where x/y conventionally means the
|
|
30
|
+
* top-left origin — a caller computing its own center as `box.x + width/2`
|
|
31
|
+
* would otherwise double-offset away from the element (issue #15). Expose
|
|
32
|
+
* both conventions, explicitly labeled, so neither is ambiguous.
|
|
33
|
+
*
|
|
34
|
+
* Exported for direct unit testing — not part of the CLI's public API.
|
|
35
|
+
*/
|
|
36
|
+
export declare function parseBatchCommandLine(cmdStr: string): {
|
|
37
|
+
subName: string;
|
|
38
|
+
subArgs: string[];
|
|
39
|
+
flags: Record<string, unknown>;
|
|
40
|
+
};
|
|
41
|
+
export declare const addinitscriptCommand: Command;
|
|
42
|
+
export declare const removeinitscriptCommand: Command;
|
|
43
|
+
//# sourceMappingURL=commands-script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-script.d.ts","sourceRoot":"","sources":["../../../src/cli/commands-script.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;AAEzE,eAAO,MAAM,WAAW,EAAE,OA8CzB,CAAC;AA4BF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CA4BA;AAED,eAAO,MAAM,oBAAoB,EAAE,OAalC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,OAarC,CAAC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Running things in the page — `eval` for a single expression, `batch` for a
|
|
3
|
+
* sequence of browse subcommands in one process, and the init scripts that run
|
|
4
|
+
* before every navigation.
|
|
5
|
+
*
|
|
6
|
+
* The tokenizer is shared: a batch line is parsed the same way the CLI would
|
|
7
|
+
* have parsed it on the command line, so `eval` expressions survive quoting.
|
|
8
|
+
*/
|
|
9
|
+
import { output } from './output.js';
|
|
10
|
+
import { DEFAULT_EVAL_MAX_OUTPUT, ensureConnected, getBrowser, print, session, truncateForOutput, } from './session.js';
|
|
11
|
+
export const evalCommand = {
|
|
12
|
+
name: 'eval',
|
|
13
|
+
description: 'Evaluate JavaScript in page context. Usage: monomind browse eval "document.title"',
|
|
14
|
+
options: [
|
|
15
|
+
{ name: 'json', type: 'boolean', description: 'Output as JSON', default: false },
|
|
16
|
+
{
|
|
17
|
+
name: 'stdin',
|
|
18
|
+
type: 'boolean',
|
|
19
|
+
description: 'Read JS expression from stdin (heredoc-friendly for multiline scripts)',
|
|
20
|
+
default: false,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'max-output',
|
|
24
|
+
type: 'number',
|
|
25
|
+
description: `Truncate printed output to N characters (default ${DEFAULT_EVAL_MAX_OUTPUT}; 0 disables truncation)`,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'timeout',
|
|
29
|
+
type: 'number',
|
|
30
|
+
description: 'Max ms to wait for evaluation to settle (default 30000)',
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
action: async (ctx) => {
|
|
34
|
+
const { client, sessionId } = await ensureConnected(session.port);
|
|
35
|
+
const browser = await getBrowser();
|
|
36
|
+
let expr = ctx.args[0];
|
|
37
|
+
if (ctx.flags.stdin) {
|
|
38
|
+
const chunks = [];
|
|
39
|
+
for await (const chunk of process.stdin)
|
|
40
|
+
chunks.push(chunk);
|
|
41
|
+
expr = Buffer.concat(chunks).toString('utf8').trim();
|
|
42
|
+
}
|
|
43
|
+
if (!expr)
|
|
44
|
+
throw new Error('Usage: monomind browse eval "<expression>" (or pipe with --stdin)');
|
|
45
|
+
const timeoutMs = ctx.flags.timeout;
|
|
46
|
+
const result = await browser.evaluateJs(client, sessionId, expr, timeoutMs);
|
|
47
|
+
const maxOutput = ctx.flags['max-output'] ?? DEFAULT_EVAL_MAX_OUTPUT;
|
|
48
|
+
if (ctx.flags.json) {
|
|
49
|
+
print(truncateForOutput(JSON.stringify({ data: result }), maxOutput));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
print(truncateForOutput(String(result ?? ''), maxOutput));
|
|
53
|
+
}
|
|
54
|
+
return { success: true, data: { result } };
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
function tokenizeBatchCommand(input) {
|
|
58
|
+
const tokens = [];
|
|
59
|
+
let current = '';
|
|
60
|
+
let inQuote = null;
|
|
61
|
+
for (const ch of input.trim()) {
|
|
62
|
+
if (inQuote) {
|
|
63
|
+
if (ch === inQuote) {
|
|
64
|
+
inQuote = null;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
current += ch;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (ch === '"' || ch === "'") {
|
|
71
|
+
inQuote = ch;
|
|
72
|
+
}
|
|
73
|
+
else if (/\s/.test(ch)) {
|
|
74
|
+
if (current) {
|
|
75
|
+
tokens.push(current);
|
|
76
|
+
current = '';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
current += ch;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (current)
|
|
84
|
+
tokens.push(current);
|
|
85
|
+
return tokens;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Splits one line of a `batch` command string into a subcommand name, its
|
|
89
|
+
* args, and any recognized leading flags.
|
|
90
|
+
*
|
|
91
|
+
* `eval` is special-cased: its sole argument is a raw JS expression, which
|
|
92
|
+
* legitimately contains its own string-literal quotes (e.g.
|
|
93
|
+
* `eval document.querySelector('a')`). tokenizeBatchCommand's shell-style
|
|
94
|
+
* word-splitting treats `'...'`/`"..."` as grouping delimiters and discards
|
|
95
|
+
* them — correct for a value like `fill @e1 "some text"`, but for `eval` it
|
|
96
|
+
* silently deletes the expression's own quotes, turning a string literal
|
|
97
|
+
* into a bare (undefined) identifier reference and producing a
|
|
98
|
+
* ReferenceError instead of evaluating the intended expression. For `eval`,
|
|
99
|
+
* only its own known --flags are consumed from the front; everything after
|
|
100
|
+
* them is taken verbatim as one argument, untouched by tokenization.
|
|
101
|
+
*
|
|
102
|
+
/**
|
|
103
|
+
* `get box`'s output shape: browser.getElementBox() returns the element's
|
|
104
|
+
* CENTER point under x/y (correct for internal click-target callers), but
|
|
105
|
+
* `get box` is a bounding-box accessor where x/y conventionally means the
|
|
106
|
+
* top-left origin — a caller computing its own center as `box.x + width/2`
|
|
107
|
+
* would otherwise double-offset away from the element (issue #15). Expose
|
|
108
|
+
* both conventions, explicitly labeled, so neither is ambiguous.
|
|
109
|
+
*
|
|
110
|
+
* Exported for direct unit testing — not part of the CLI's public API.
|
|
111
|
+
*/
|
|
112
|
+
export function parseBatchCommandLine(cmdStr) {
|
|
113
|
+
const trimmed = cmdStr.trim();
|
|
114
|
+
const evalMatch = trimmed.match(/^eval\b\s*/);
|
|
115
|
+
if (!evalMatch) {
|
|
116
|
+
const parts = tokenizeBatchCommand(trimmed);
|
|
117
|
+
return { subName: parts[0], subArgs: parts.slice(1), flags: {} };
|
|
118
|
+
}
|
|
119
|
+
let rest = trimmed.slice(evalMatch[0].length);
|
|
120
|
+
const flags = {};
|
|
121
|
+
let consumedAnother = true;
|
|
122
|
+
while (consumedAnother) {
|
|
123
|
+
consumedAnother = false;
|
|
124
|
+
const withValue = rest.match(/^--(max-output|timeout)\s+(-?\d+)\s*/);
|
|
125
|
+
if (withValue) {
|
|
126
|
+
flags[withValue[1]] = Number(withValue[2]);
|
|
127
|
+
rest = rest.slice(withValue[0].length);
|
|
128
|
+
consumedAnother = true;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const boolFlag = rest.match(/^--(json|stdin)\b\s*/);
|
|
132
|
+
if (boolFlag) {
|
|
133
|
+
flags[boolFlag[1]] = true;
|
|
134
|
+
rest = rest.slice(boolFlag[0].length);
|
|
135
|
+
consumedAnother = true;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return { subName: 'eval', subArgs: [rest], flags };
|
|
139
|
+
}
|
|
140
|
+
export const addinitscriptCommand = {
|
|
141
|
+
name: 'addinitscript',
|
|
142
|
+
description: 'Add script to run before page navigation. Usage: monomind browse addinitscript "window.x=1"',
|
|
143
|
+
action: async (ctx) => {
|
|
144
|
+
const { client, sessionId } = await ensureConnected(session.port);
|
|
145
|
+
const browser = await getBrowser();
|
|
146
|
+
const script = ctx.args[0];
|
|
147
|
+
if (!script)
|
|
148
|
+
throw new Error('Usage: monomind browse addinitscript "<js>"');
|
|
149
|
+
const id = await browser.addInitScript(client, sessionId, script);
|
|
150
|
+
output.printSuccess(`Init script added: ${id}`);
|
|
151
|
+
return { success: true, data: { identifier: id } };
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
export const removeinitscriptCommand = {
|
|
155
|
+
name: 'removeinitscript',
|
|
156
|
+
description: 'Remove a previously added init script. Usage: monomind browse removeinitscript <id>',
|
|
157
|
+
action: async (ctx) => {
|
|
158
|
+
const { client, sessionId } = await ensureConnected(session.port);
|
|
159
|
+
const browser = await getBrowser();
|
|
160
|
+
const id = ctx.args[0];
|
|
161
|
+
if (!id)
|
|
162
|
+
throw new Error('Usage: monomind browse removeinitscript <identifier>');
|
|
163
|
+
await browser.removeInitScript(client, sessionId, id);
|
|
164
|
+
output.printSuccess(`Init script removed: ${id}`);
|
|
165
|
+
return { success: true };
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
//# sourceMappingURL=commands-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-script.js","sourceRoot":"","sources":["../../../src/cli/commands-script.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session lifecycle — starting a browser session, attaching to one someone
|
|
3
|
+
* else started, and ending it.
|
|
4
|
+
*
|
|
5
|
+
* `open` launches (or reuses) headless Chrome and is the only command that can
|
|
6
|
+
* escalate to a headed window for a login/CAPTCHA wall. `connect` attaches to
|
|
7
|
+
* a browser the user already runs, which is why `close` treats the two
|
|
8
|
+
* differently: it must never kill a Chrome it did not launch.
|
|
9
|
+
*/
|
|
10
|
+
import type { Command } from './types.js';
|
|
11
|
+
export declare const openCommand: Command;
|
|
12
|
+
export declare const closeCommand: Command;
|
|
13
|
+
export declare const connectCommand: Command;
|
|
14
|
+
export declare const resizeCommand: Command;
|
|
15
|
+
//# sourceMappingURL=commands-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-session.d.ts","sourceRoot":"","sources":["../../../src/cli/commands-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;AAEzE,eAAO,MAAM,WAAW,EAAE,OAyIzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,OAwG1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,OA6F5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,OAc3B,CAAC"}
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session lifecycle — starting a browser session, attaching to one someone
|
|
3
|
+
* else started, and ending it.
|
|
4
|
+
*
|
|
5
|
+
* `open` launches (or reuses) headless Chrome and is the only command that can
|
|
6
|
+
* escalate to a headed window for a login/CAPTCHA wall. `connect` attaches to
|
|
7
|
+
* a browser the user already runs, which is why `close` treats the two
|
|
8
|
+
* differently: it must never kill a Chrome it did not launch.
|
|
9
|
+
*/
|
|
10
|
+
import { output } from './output.js';
|
|
11
|
+
import { detectAttentionNeeded, ensureConnected, ensureSignalCleanupHandlers, getBrowser, session, switchToHeaded, } from './session.js';
|
|
12
|
+
export const openCommand = {
|
|
13
|
+
name: 'open',
|
|
14
|
+
description: 'Open a URL in the browser. Usage: monomind browse open <url>',
|
|
15
|
+
options: [
|
|
16
|
+
{ name: 'port', short: 'p', type: 'number', description: 'CDP port', default: 9222 },
|
|
17
|
+
{
|
|
18
|
+
name: 'headed',
|
|
19
|
+
type: 'boolean',
|
|
20
|
+
description: 'Force visible browser window',
|
|
21
|
+
default: false,
|
|
22
|
+
},
|
|
23
|
+
{ name: 'session', short: 's', type: 'string', description: 'Session name to restore' },
|
|
24
|
+
{ name: 'state', type: 'string', description: 'State file to load' },
|
|
25
|
+
],
|
|
26
|
+
action: async (ctx) => {
|
|
27
|
+
const url = ctx.args[0];
|
|
28
|
+
if (!url)
|
|
29
|
+
throw new Error('URL required. Usage: monomind browse open <url>');
|
|
30
|
+
const port = ctx.flags.port ?? 9222;
|
|
31
|
+
const forceHeaded = ctx.flags.headed;
|
|
32
|
+
const browser = await getBrowser();
|
|
33
|
+
if (session.client) {
|
|
34
|
+
const prevSid = session.sessionId;
|
|
35
|
+
const prevClient = session.client;
|
|
36
|
+
if (browser.getHarStatus(prevSid).recording) {
|
|
37
|
+
try {
|
|
38
|
+
await browser.stopHarRecording(prevClient, prevSid);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
/* ignore */
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (browser.getTraceStatus(prevSid)) {
|
|
45
|
+
try {
|
|
46
|
+
await browser.stopTrace(prevClient, prevSid);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
/* ignore */
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (browser.isProfilingActive(prevSid)) {
|
|
53
|
+
try {
|
|
54
|
+
await browser.stopCpuProfile(prevClient, prevSid);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* ignore */
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
browser.teardownRouteInterception(prevSid);
|
|
61
|
+
browser.stopRequestCapture(prevSid);
|
|
62
|
+
browser.teardownDialogHandling(prevSid);
|
|
63
|
+
browser.teardownConsoleCapture(prevSid);
|
|
64
|
+
prevClient.close();
|
|
65
|
+
session.client = null;
|
|
66
|
+
session.sessionId = '';
|
|
67
|
+
session.parentSessionId = '';
|
|
68
|
+
session.targetId = '';
|
|
69
|
+
session.refs = new Map();
|
|
70
|
+
}
|
|
71
|
+
session.port = await browser.launchBrowser({ port, headless: !forceHeaded });
|
|
72
|
+
// Persist the active port so subsequent CLI invocations (each a fresh
|
|
73
|
+
// process) default to attaching here instead of hardcoded 9222. Also
|
|
74
|
+
// persist the launched PID/userDataDir so a later process's closeBrowser
|
|
75
|
+
// can still kill this Chrome even though launchedPids (browser.ts) is
|
|
76
|
+
// per-process and empty there.
|
|
77
|
+
//
|
|
78
|
+
// launchBrowser() can either LAUNCH a fresh Chrome or ATTACH to one
|
|
79
|
+
// already listening on the requested port (see its own "attach if
|
|
80
|
+
// already Chrome" comment) — it returns only a port number, with no
|
|
81
|
+
// signal telling this caller which happened. getLaunchedPid(session.port) is
|
|
82
|
+
// undefined on the attach path (this process never spawned anything).
|
|
83
|
+
// Bug fixed here: unconditionally saving {pid: undefined, ...} on
|
|
84
|
+
// attach used to CLOBBER a real PID a previous `open` had already
|
|
85
|
+
// persisted for this exact port, destroying the only way a later
|
|
86
|
+
// process's closeBrowser() PID-kill fallback could ever find it.
|
|
87
|
+
const freshPid = browser.getLaunchedPid(session.port);
|
|
88
|
+
const freshUserDataDir = browser.getLaunchedUserDataDir(session.port);
|
|
89
|
+
if (freshPid !== undefined) {
|
|
90
|
+
await browser.saveActivePort(session.port, { pid: freshPid, userDataDir: freshUserDataDir });
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// Attach path: preserve whatever PID/userDataDir was already on file
|
|
94
|
+
// for this port (most likely from the process that originally
|
|
95
|
+
// launched it) instead of overwriting with undefined.
|
|
96
|
+
const existing = await browser.loadActivePortInfo();
|
|
97
|
+
const preserved = existing && existing.port === session.port ? existing : undefined;
|
|
98
|
+
await browser.saveActivePort(session.port, {
|
|
99
|
+
pid: preserved?.pid,
|
|
100
|
+
userDataDir: preserved?.userDataDir,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
ensureSignalCleanupHandlers();
|
|
104
|
+
const conn = await browser.connectToTarget(session.port);
|
|
105
|
+
session.client = conn.client;
|
|
106
|
+
session.sessionId = conn.sessionId;
|
|
107
|
+
session.targetId = conn.target.id;
|
|
108
|
+
session.refs = new Map();
|
|
109
|
+
// A snapshot taken before this navigation is no longer valid for the new
|
|
110
|
+
// page — drop the persisted ref cache so a stale process's weak
|
|
111
|
+
// time-based check can't resurrect it before the next explicit snapshot.
|
|
112
|
+
await browser.clearRefCache();
|
|
113
|
+
if (ctx.flags.state && ctx.flags.session) {
|
|
114
|
+
output.printWarning('Both --state and --session provided; --state takes precedence');
|
|
115
|
+
}
|
|
116
|
+
if (ctx.flags.state) {
|
|
117
|
+
await browser.loadStateFile(session.client, session.sessionId, ctx.flags.state);
|
|
118
|
+
}
|
|
119
|
+
else if (ctx.flags.session) {
|
|
120
|
+
await browser.loadSession(session.client, session.sessionId, ctx.flags.session);
|
|
121
|
+
}
|
|
122
|
+
await browser.openUrl(session.client, session.sessionId, url);
|
|
123
|
+
const currentUrl = await browser.getCurrentUrl(session.client, session.sessionId);
|
|
124
|
+
// Auto-detect login/CAPTCHA walls and switch to headed if needed
|
|
125
|
+
if (!forceHeaded) {
|
|
126
|
+
const attentionType = await detectAttentionNeeded(session.client, session.sessionId, currentUrl);
|
|
127
|
+
if (attentionType) {
|
|
128
|
+
output.printWarning(`${attentionType === 'captcha' ? 'CAPTCHA' : 'Login'} detected — switching to headed mode`);
|
|
129
|
+
await switchToHeaded(currentUrl, port);
|
|
130
|
+
await browser.openUrl(session.client, session.sessionId, currentUrl);
|
|
131
|
+
output.printSuccess(`Resumed headless after ${attentionType === 'captcha' ? 'CAPTCHA' : 'login'}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const finalUrl = await browser.getCurrentUrl(session.client, session.sessionId);
|
|
135
|
+
const title = await browser.getCurrentTitle(session.client, session.sessionId);
|
|
136
|
+
output.printSuccess(`Opened: ${title} (${finalUrl})`);
|
|
137
|
+
return { success: true, data: { url: finalUrl, title } };
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
export const closeCommand = {
|
|
141
|
+
name: 'close',
|
|
142
|
+
description: 'Close the active browser session',
|
|
143
|
+
action: async (_ctx) => {
|
|
144
|
+
if (session.client) {
|
|
145
|
+
const browser = await getBrowser();
|
|
146
|
+
const sid = session.sessionId;
|
|
147
|
+
const client = session.client;
|
|
148
|
+
// Tear down per-session Maps and listeners before closing
|
|
149
|
+
if (browser.getHarStatus(sid).recording) {
|
|
150
|
+
try {
|
|
151
|
+
await browser.stopHarRecording(client, sid);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
/* ignore */
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (browser.getTraceStatus(sid)) {
|
|
158
|
+
try {
|
|
159
|
+
await browser.stopTrace(client, sid);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
/* ignore */
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (browser.isProfilingActive(sid)) {
|
|
166
|
+
try {
|
|
167
|
+
await browser.stopCpuProfile(client, sid);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
/* ignore */
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
browser.teardownRouteInterception(sid);
|
|
174
|
+
browser.stopRequestCapture(sid);
|
|
175
|
+
browser.teardownDialogHandling(sid);
|
|
176
|
+
browser.teardownConsoleCapture(sid);
|
|
177
|
+
client.close();
|
|
178
|
+
session.client = null;
|
|
179
|
+
session.sessionId = '';
|
|
180
|
+
session.parentSessionId = '';
|
|
181
|
+
session.targetId = '';
|
|
182
|
+
session.refs = new Map();
|
|
183
|
+
// Session is gone — forget the persisted port and stale refs so later
|
|
184
|
+
// invocations don't chase a dead endpoint (or the wrong elements).
|
|
185
|
+
await browser.clearActivePort();
|
|
186
|
+
await browser.clearRefCache();
|
|
187
|
+
output.printSuccess('Browser session closed');
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// Each CLI invocation is a fresh process, so `close` almost always
|
|
191
|
+
// lands here. The persisted port file is the real session handle:
|
|
192
|
+
// if monobrowse LAUNCHED that browser (open), gracefully Browser.close
|
|
193
|
+
// it — otherwise every open→close cycle leaks a headless Chrome. If we
|
|
194
|
+
// merely ATTACHED to it (connect, launched:false), never kill it: it's
|
|
195
|
+
// the user's own browser. Either way, forget the port and refs.
|
|
196
|
+
const browser = await getBrowser();
|
|
197
|
+
const persisted = await browser.loadActivePortInfo();
|
|
198
|
+
if (persisted?.launched) {
|
|
199
|
+
try {
|
|
200
|
+
const conn = await browser.connectToTarget(persisted.port);
|
|
201
|
+
try {
|
|
202
|
+
await browser.closeBrowser(conn.client, persisted.port);
|
|
203
|
+
}
|
|
204
|
+
finally {
|
|
205
|
+
// Always drop our websocket — a hung Browser.close must not keep
|
|
206
|
+
// this CLI process's event loop alive.
|
|
207
|
+
try {
|
|
208
|
+
conn.client.close();
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
/* already gone */
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// closeBrowser has no PID fallback in a fresh process (launchedPids
|
|
215
|
+
// is per-process) — re-probe so we report what actually happened.
|
|
216
|
+
// Poll briefly: Browser.close is acknowledged before the process
|
|
217
|
+
// actually exits, so a single immediate probe false-alarms.
|
|
218
|
+
let stillUp = true;
|
|
219
|
+
const probeDeadline = Date.now() + 3000;
|
|
220
|
+
while (stillUp && Date.now() < probeDeadline) {
|
|
221
|
+
try {
|
|
222
|
+
await fetch(`http://127.0.0.1:${persisted.port}/json/version`, {
|
|
223
|
+
signal: AbortSignal.timeout(800),
|
|
224
|
+
});
|
|
225
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
stillUp = false;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (stillUp)
|
|
232
|
+
output.printWarning(`Browser on port ${persisted.port} did not exit — kill it manually if needed`);
|
|
233
|
+
else
|
|
234
|
+
output.printSuccess(`Closed browser on port ${persisted.port}`);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
output.printInfo(`No browser answering on port ${persisted.port} — nothing to close`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
output.printInfo(persisted
|
|
242
|
+
? `Detached from browser on port ${persisted.port} (attached via connect — left running)`
|
|
243
|
+
: 'No active browser session');
|
|
244
|
+
}
|
|
245
|
+
await browser.clearActivePort();
|
|
246
|
+
await browser.clearRefCache();
|
|
247
|
+
}
|
|
248
|
+
return { success: true };
|
|
249
|
+
},
|
|
250
|
+
};
|
|
251
|
+
export const connectCommand = {
|
|
252
|
+
name: 'connect',
|
|
253
|
+
description: 'Connect to existing Chrome instance; later commands reuse this session (note: `open` without --port still launches on its own default). Usage: monomind browse connect [--port 9222] [--target <id>] [--auto-connect]',
|
|
254
|
+
options: [
|
|
255
|
+
{ name: 'port', short: 'p', type: 'number', description: 'CDP port', default: 9222 },
|
|
256
|
+
{ name: 'target', type: 'string', description: 'Target ID to attach to' },
|
|
257
|
+
{
|
|
258
|
+
name: 'auto-connect',
|
|
259
|
+
type: 'boolean',
|
|
260
|
+
description: 'Auto-discover running Chrome on ports 9222 and 9229',
|
|
261
|
+
default: false,
|
|
262
|
+
},
|
|
263
|
+
],
|
|
264
|
+
action: async (ctx) => {
|
|
265
|
+
let port = ctx.flags.port ?? 9222;
|
|
266
|
+
if (ctx.flags['auto-connect']) {
|
|
267
|
+
const probePorts = [9222, 9229];
|
|
268
|
+
let found = false;
|
|
269
|
+
for (const p of probePorts) {
|
|
270
|
+
try {
|
|
271
|
+
const r = await fetch(`http://127.0.0.1:${p}/json/version`);
|
|
272
|
+
if (r.ok) {
|
|
273
|
+
port = p;
|
|
274
|
+
found = true;
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
/* port not open */
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (!found)
|
|
283
|
+
throw new Error('No running Chrome instance found. Launch Chrome with --remote-debugging-port or use --port.');
|
|
284
|
+
}
|
|
285
|
+
const browser = await getBrowser();
|
|
286
|
+
if (session.client) {
|
|
287
|
+
const prevSid = session.sessionId;
|
|
288
|
+
const prevClient = session.client;
|
|
289
|
+
if (browser.getHarStatus(prevSid).recording) {
|
|
290
|
+
try {
|
|
291
|
+
await browser.stopHarRecording(prevClient, prevSid);
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
/* ignore */
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (browser.getTraceStatus(prevSid)) {
|
|
298
|
+
try {
|
|
299
|
+
await browser.stopTrace(prevClient, prevSid);
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
/* ignore */
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
if (browser.isProfilingActive(prevSid)) {
|
|
306
|
+
try {
|
|
307
|
+
await browser.stopCpuProfile(prevClient, prevSid);
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
/* ignore */
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
browser.teardownRouteInterception(prevSid);
|
|
314
|
+
browser.stopRequestCapture(prevSid);
|
|
315
|
+
browser.teardownDialogHandling(prevSid);
|
|
316
|
+
browser.teardownConsoleCapture(prevSid);
|
|
317
|
+
prevClient.close();
|
|
318
|
+
session.client = null;
|
|
319
|
+
session.sessionId = '';
|
|
320
|
+
session.parentSessionId = '';
|
|
321
|
+
session.targetId = '';
|
|
322
|
+
session.refs = new Map();
|
|
323
|
+
}
|
|
324
|
+
const conn = await browser.connectToTarget(port, ctx.flags.target);
|
|
325
|
+
session.client = conn.client;
|
|
326
|
+
session.sessionId = conn.sessionId;
|
|
327
|
+
session.targetId = conn.target.id;
|
|
328
|
+
session.port = port;
|
|
329
|
+
session.refs = new Map();
|
|
330
|
+
// Persist the port like `open` does — without this, the NEXT CLI process
|
|
331
|
+
// (each command is a fresh process) resolves the hardcoded default and
|
|
332
|
+
// tries to launch its own Chrome on 9222 instead of reusing this session.
|
|
333
|
+
// launched:false marks this browser as someone else's — close must never
|
|
334
|
+
// kill it, and a dead endpoint must not be silently relaunched.
|
|
335
|
+
await browser.saveActivePort(port, { launched: false });
|
|
336
|
+
const url = await browser.getCurrentUrl(session.client, session.sessionId);
|
|
337
|
+
const title = await browser.getCurrentTitle(session.client, session.sessionId);
|
|
338
|
+
output.printSuccess(`Connected: ${title} (${url})`);
|
|
339
|
+
return { success: true, data: { targetId: session.targetId, url, title } };
|
|
340
|
+
},
|
|
341
|
+
};
|
|
342
|
+
export const resizeCommand = {
|
|
343
|
+
name: 'resize',
|
|
344
|
+
description: 'Resize browser window. Usage: monomind browse resize <width> <height>',
|
|
345
|
+
action: async (ctx) => {
|
|
346
|
+
const { client, sessionId } = await ensureConnected(session.port);
|
|
347
|
+
const browser = await getBrowser();
|
|
348
|
+
const width = parseInt(ctx.args[0], 10);
|
|
349
|
+
const height = parseInt(ctx.args[1], 10);
|
|
350
|
+
if (Number.isNaN(width) || Number.isNaN(height))
|
|
351
|
+
throw new Error('Usage: monomind browse resize <width> <height>');
|
|
352
|
+
await browser.setViewport(client, sessionId, width, height);
|
|
353
|
+
output.printSuccess(`Resized to ${width}x${height}`);
|
|
354
|
+
return { success: true, data: { width, height } };
|
|
355
|
+
},
|
|
356
|
+
};
|
|
357
|
+
//# sourceMappingURL=commands-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-session.js","sourceRoot":"","sources":["../../../src/cli/commands-session.ts"],"names":[],"mappings":"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"}
|