@monoes/monobrowse 1.0.5 → 1.0.7
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/README.md +68 -0
- package/dist/src/__tests__/adapters.test.d.ts +2 -0
- package/dist/src/__tests__/adapters.test.d.ts.map +1 -0
- package/dist/src/__tests__/adapters.test.js +104 -0
- package/dist/src/__tests__/adapters.test.js.map +1 -0
- package/dist/src/__tests__/batch-eval-parsing.test.d.ts +0 -0
- package/dist/src/__tests__/batch-eval-parsing.test.d.ts.map +0 -0
- package/dist/src/__tests__/batch-eval-parsing.test.js +0 -0
- package/dist/src/__tests__/batch-eval-parsing.test.js.map +0 -0
- package/dist/src/__tests__/box-model.test.d.ts +2 -0
- package/dist/src/__tests__/box-model.test.d.ts.map +1 -0
- package/dist/src/__tests__/box-model.test.js +36 -0
- package/dist/src/__tests__/box-model.test.js.map +1 -0
- package/dist/src/__tests__/browser-launch.test.d.ts +0 -0
- package/dist/src/__tests__/browser-launch.test.d.ts.map +0 -0
- package/dist/src/__tests__/browser-launch.test.js +0 -0
- package/dist/src/__tests__/browser-launch.test.js.map +0 -0
- package/dist/src/__tests__/cdp-client.test.d.ts +2 -0
- package/dist/src/__tests__/cdp-client.test.d.ts.map +1 -0
- package/dist/src/__tests__/cdp-client.test.js +326 -0
- package/dist/src/__tests__/cdp-client.test.js.map +1 -0
- package/dist/src/__tests__/close-browser.test.d.ts +2 -0
- package/dist/src/__tests__/close-browser.test.d.ts.map +1 -0
- package/dist/src/__tests__/close-browser.test.js +128 -0
- package/dist/src/__tests__/close-browser.test.js.map +1 -0
- package/dist/src/__tests__/console-log.test.d.ts +2 -0
- package/dist/src/__tests__/console-log.test.d.ts.map +1 -0
- package/dist/src/__tests__/console-log.test.js +195 -0
- package/dist/src/__tests__/console-log.test.js.map +1 -0
- package/dist/src/__tests__/find.test.d.ts +2 -0
- package/dist/src/__tests__/find.test.d.ts.map +1 -0
- package/dist/src/__tests__/find.test.js +299 -0
- package/dist/src/__tests__/find.test.js.map +1 -0
- package/dist/src/__tests__/frame-command.test.d.ts +2 -0
- package/dist/src/__tests__/frame-command.test.d.ts.map +1 -0
- package/dist/src/__tests__/frame-command.test.js +85 -0
- package/dist/src/__tests__/frame-command.test.js.map +1 -0
- package/dist/src/__tests__/output.test.d.ts +0 -0
- package/dist/src/__tests__/output.test.d.ts.map +0 -0
- package/dist/src/__tests__/output.test.js +0 -0
- package/dist/src/__tests__/output.test.js.map +0 -0
- package/dist/src/__tests__/ref-cache.test.d.ts +0 -0
- package/dist/src/__tests__/ref-cache.test.d.ts.map +0 -0
- package/dist/src/__tests__/ref-cache.test.js +43 -2
- package/dist/src/__tests__/ref-cache.test.js.map +1 -1
- package/dist/src/__tests__/session-state.test.d.ts +2 -0
- package/dist/src/__tests__/session-state.test.d.ts.map +1 -0
- package/dist/src/__tests__/session-state.test.js +203 -0
- package/dist/src/__tests__/session-state.test.js.map +1 -0
- package/dist/src/__tests__/snapshot.test.d.ts +2 -0
- package/dist/src/__tests__/snapshot.test.d.ts.map +1 -0
- package/dist/src/__tests__/snapshot.test.js +262 -0
- package/dist/src/__tests__/snapshot.test.js.map +1 -0
- package/dist/src/__tests__/storage-eval.test.d.ts +2 -0
- package/dist/src/__tests__/storage-eval.test.d.ts.map +1 -0
- package/dist/src/__tests__/storage-eval.test.js +133 -0
- package/dist/src/__tests__/storage-eval.test.js.map +1 -0
- package/dist/src/__tests__/tabs.test.d.ts +2 -0
- package/dist/src/__tests__/tabs.test.d.ts.map +1 -0
- package/dist/src/__tests__/tabs.test.js +161 -0
- package/dist/src/__tests__/tabs.test.js.map +1 -0
- package/dist/src/browser/action-builder/analyzer.d.ts +0 -0
- package/dist/src/browser/action-builder/analyzer.d.ts.map +0 -0
- package/dist/src/browser/action-builder/analyzer.js +0 -0
- package/dist/src/browser/action-builder/analyzer.js.map +0 -0
- package/dist/src/browser/action-builder/types.d.ts +0 -0
- package/dist/src/browser/action-builder/types.d.ts.map +0 -0
- package/dist/src/browser/action-builder/types.js +0 -0
- package/dist/src/browser/action-builder/types.js.map +0 -0
- package/dist/src/browser/actions.d.ts +0 -0
- package/dist/src/browser/actions.d.ts.map +0 -0
- package/dist/src/browser/actions.js +0 -0
- package/dist/src/browser/actions.js.map +0 -0
- package/dist/src/browser/adapters/gemini.d.ts +0 -0
- package/dist/src/browser/adapters/gemini.d.ts.map +0 -0
- package/dist/src/browser/adapters/gemini.js +0 -0
- package/dist/src/browser/adapters/gemini.js.map +0 -0
- package/dist/src/browser/adapters/google.d.ts +0 -0
- package/dist/src/browser/adapters/google.d.ts.map +0 -0
- package/dist/src/browser/adapters/google.js +0 -0
- package/dist/src/browser/adapters/google.js.map +0 -0
- package/dist/src/browser/adapters/index.d.ts +0 -0
- package/dist/src/browser/adapters/index.d.ts.map +0 -0
- package/dist/src/browser/adapters/index.js +0 -0
- package/dist/src/browser/adapters/index.js.map +0 -0
- package/dist/src/browser/adapters/instagram.d.ts +0 -0
- package/dist/src/browser/adapters/instagram.d.ts.map +0 -0
- package/dist/src/browser/adapters/instagram.js +0 -0
- package/dist/src/browser/adapters/instagram.js.map +0 -0
- package/dist/src/browser/adapters/linkedin.d.ts +0 -0
- package/dist/src/browser/adapters/linkedin.d.ts.map +0 -0
- package/dist/src/browser/adapters/linkedin.js +0 -0
- package/dist/src/browser/adapters/linkedin.js.map +0 -0
- package/dist/src/browser/adapters/microsoft.d.ts +0 -0
- package/dist/src/browser/adapters/microsoft.d.ts.map +0 -0
- package/dist/src/browser/adapters/microsoft.js +0 -0
- package/dist/src/browser/adapters/microsoft.js.map +0 -0
- package/dist/src/browser/adapters/x.d.ts +0 -0
- package/dist/src/browser/adapters/x.d.ts.map +0 -0
- package/dist/src/browser/adapters/x.js +0 -0
- package/dist/src/browser/adapters/x.js.map +0 -0
- package/dist/src/browser/batch.d.ts +0 -0
- package/dist/src/browser/batch.d.ts.map +0 -0
- package/dist/src/browser/batch.js +0 -0
- package/dist/src/browser/batch.js.map +0 -0
- package/dist/src/browser/browser.d.ts +4 -0
- package/dist/src/browser/browser.d.ts.map +1 -1
- package/dist/src/browser/browser.js +55 -7
- package/dist/src/browser/browser.js.map +1 -1
- package/dist/src/browser/cdp.d.ts +4 -1
- package/dist/src/browser/cdp.d.ts.map +1 -1
- package/dist/src/browser/cdp.js +45 -16
- package/dist/src/browser/cdp.js.map +1 -1
- package/dist/src/browser/console-log.d.ts +0 -0
- package/dist/src/browser/console-log.d.ts.map +0 -0
- package/dist/src/browser/console-log.js +0 -0
- package/dist/src/browser/console-log.js.map +0 -0
- package/dist/src/browser/dashboard/api-types.d.ts +0 -0
- package/dist/src/browser/dashboard/api-types.d.ts.map +0 -0
- package/dist/src/browser/dashboard/api-types.js +0 -0
- package/dist/src/browser/dashboard/api-types.js.map +0 -0
- package/dist/src/browser/dashboard/server.d.ts +0 -0
- package/dist/src/browser/dashboard/server.d.ts.map +0 -0
- package/dist/src/browser/dashboard/server.js +0 -0
- package/dist/src/browser/dashboard/server.js.map +0 -0
- package/dist/src/browser/dialog.d.ts +0 -0
- package/dist/src/browser/dialog.d.ts.map +0 -0
- package/dist/src/browser/dialog.js +0 -0
- package/dist/src/browser/dialog.js.map +0 -0
- package/dist/src/browser/emulation.d.ts +0 -0
- package/dist/src/browser/emulation.d.ts.map +0 -0
- package/dist/src/browser/emulation.js +0 -0
- package/dist/src/browser/emulation.js.map +0 -0
- package/dist/src/browser/find.d.ts +0 -0
- package/dist/src/browser/find.d.ts.map +0 -0
- package/dist/src/browser/find.js +0 -0
- package/dist/src/browser/find.js.map +0 -0
- package/dist/src/browser/har.d.ts +0 -0
- package/dist/src/browser/har.d.ts.map +0 -0
- package/dist/src/browser/har.js +0 -0
- package/dist/src/browser/har.js.map +0 -0
- package/dist/src/browser/index.d.ts +0 -0
- package/dist/src/browser/index.d.ts.map +0 -0
- package/dist/src/browser/index.js +0 -0
- package/dist/src/browser/index.js.map +0 -0
- package/dist/src/browser/network.d.ts +0 -0
- package/dist/src/browser/network.d.ts.map +0 -0
- package/dist/src/browser/network.js +0 -0
- package/dist/src/browser/network.js.map +0 -0
- package/dist/src/browser/pdf.d.ts +0 -0
- package/dist/src/browser/pdf.d.ts.map +0 -0
- package/dist/src/browser/pdf.js +0 -0
- package/dist/src/browser/pdf.js.map +0 -0
- package/dist/src/browser/profiler.d.ts +0 -0
- package/dist/src/browser/profiler.d.ts.map +0 -0
- package/dist/src/browser/profiler.js +0 -0
- package/dist/src/browser/profiler.js.map +0 -0
- package/dist/src/browser/record.d.ts +0 -0
- package/dist/src/browser/record.d.ts.map +0 -0
- package/dist/src/browser/record.js +0 -0
- package/dist/src/browser/record.js.map +0 -0
- package/dist/src/browser/ref-cache.d.ts +6 -1
- package/dist/src/browser/ref-cache.d.ts.map +1 -1
- package/dist/src/browser/ref-cache.js +21 -3
- package/dist/src/browser/ref-cache.js.map +1 -1
- package/dist/src/browser/screenshot.d.ts +0 -0
- package/dist/src/browser/screenshot.d.ts.map +0 -0
- package/dist/src/browser/screenshot.js +0 -0
- package/dist/src/browser/screenshot.js.map +0 -0
- package/dist/src/browser/session.d.ts +0 -0
- package/dist/src/browser/session.d.ts.map +0 -0
- package/dist/src/browser/session.js +0 -0
- package/dist/src/browser/session.js.map +0 -0
- package/dist/src/browser/snapshot.d.ts +11 -0
- package/dist/src/browser/snapshot.d.ts.map +1 -1
- package/dist/src/browser/snapshot.js +11 -0
- package/dist/src/browser/snapshot.js.map +1 -1
- package/dist/src/browser/storage.d.ts +0 -0
- package/dist/src/browser/storage.d.ts.map +0 -0
- package/dist/src/browser/storage.js +0 -0
- package/dist/src/browser/storage.js.map +0 -0
- package/dist/src/browser/tabs.d.ts +5 -1
- package/dist/src/browser/tabs.d.ts.map +1 -1
- package/dist/src/browser/tabs.js +4 -3
- package/dist/src/browser/tabs.js.map +1 -1
- package/dist/src/browser/trace.d.ts +0 -0
- package/dist/src/browser/trace.d.ts.map +0 -0
- package/dist/src/browser/trace.js +0 -0
- package/dist/src/browser/trace.js.map +0 -0
- package/dist/src/browser/types.d.ts +4 -0
- package/dist/src/browser/types.d.ts.map +1 -1
- package/dist/src/browser/types.js +0 -0
- package/dist/src/browser/types.js.map +1 -1
- package/dist/src/browser/vitals.d.ts +0 -0
- package/dist/src/browser/vitals.d.ts.map +0 -0
- package/dist/src/browser/vitals.js +0 -0
- package/dist/src/browser/vitals.js.map +0 -0
- package/dist/src/browser/wait.d.ts +0 -0
- package/dist/src/browser/wait.d.ts.map +0 -0
- package/dist/src/browser/wait.js +0 -0
- package/dist/src/browser/wait.js.map +0 -0
- package/dist/src/cli/action.d.ts +0 -0
- package/dist/src/cli/action.d.ts.map +0 -0
- package/dist/src/cli/action.js +0 -0
- package/dist/src/cli/action.js.map +0 -0
- package/dist/src/cli/commands.d.ts +21 -0
- package/dist/src/cli/commands.d.ts.map +1 -1
- package/dist/src/cli/commands.js +123 -7
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/output.d.ts +0 -0
- package/dist/src/cli/output.d.ts.map +0 -0
- package/dist/src/cli/output.js +0 -0
- package/dist/src/cli/output.js.map +0 -0
- package/dist/src/cli/platform.d.ts +0 -0
- package/dist/src/cli/platform.d.ts.map +0 -0
- package/dist/src/cli/platform.js +0 -0
- package/dist/src/cli/platform.js.map +0 -0
- package/dist/src/cli/types.d.ts +0 -0
- package/dist/src/cli/types.d.ts.map +0 -0
- package/dist/src/cli/types.js +0 -0
- package/dist/src/cli/types.js.map +0 -0
- package/dist/src/cli.d.ts +0 -0
- package/dist/src/cli.d.ts.map +0 -0
- package/dist/src/cli.js +0 -0
- package/dist/src/cli.js.map +0 -0
- package/dist/src/index.d.ts +0 -0
- package/dist/src/index.d.ts.map +0 -0
- package/dist/src/index.js +0 -0
- package/dist/src/index.js.map +0 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -5
- package/src/__tests__/adapters.test.ts +125 -0
- package/src/__tests__/box-model.test.ts +39 -0
- package/src/__tests__/cdp-client.test.ts +375 -0
- package/src/__tests__/close-browser.test.ts +141 -0
- package/src/__tests__/console-log.test.ts +250 -0
- package/src/__tests__/find.test.ts +354 -0
- package/src/__tests__/frame-command.test.ts +98 -0
- package/src/__tests__/ref-cache.test.ts +47 -2
- package/src/__tests__/session-state.test.ts +251 -0
- package/src/__tests__/snapshot.test.ts +331 -0
- package/src/__tests__/storage-eval.test.ts +171 -0
- package/src/__tests__/tabs.test.ts +183 -0
- package/src/browser/browser.ts +59 -7
- package/src/browser/cdp.ts +52 -15
- package/src/browser/ref-cache.ts +29 -6
- package/src/browser/snapshot.ts +11 -0
- package/src/browser/tabs.ts +12 -4
- package/src/browser/types.ts +4 -0
- package/src/cli/commands.ts +119 -7
package/dist/src/browser/tabs.js
CHANGED
|
@@ -30,12 +30,13 @@ export async function switchToFrame(client, sessionId, frameSelector) {
|
|
|
30
30
|
const { frameTree } = await client.send('Page.getFrameTree', {}, sessionId);
|
|
31
31
|
const match = frameTree.childFrames?.find((cf) => cf.frame.url === frameSrc || cf.frame.id === frameSelector);
|
|
32
32
|
if (!match)
|
|
33
|
-
return frameSrc;
|
|
33
|
+
return { url: frameSrc, sessionId: null };
|
|
34
34
|
const targets = await client.send('Target.getTargets', {});
|
|
35
35
|
const oopif = targets.targetInfos.find((t) => t.type === 'iframe' && t.url === match.frame.url);
|
|
36
36
|
if (oopif) {
|
|
37
|
-
await client.send('Target.attachToTarget', { targetId: oopif.targetId, flatten: true });
|
|
37
|
+
const attached = await client.send('Target.attachToTarget', { targetId: oopif.targetId, flatten: true });
|
|
38
|
+
return { url: frameSrc, sessionId: attached.sessionId };
|
|
38
39
|
}
|
|
39
|
-
return frameSrc;
|
|
40
|
+
return { url: frameSrc, sessionId: null };
|
|
40
41
|
}
|
|
41
42
|
//# sourceMappingURL=tabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../src/browser/tabs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,GAAG,GAAG,aAAa;IAC5D,OAAO,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAiB,EAAE,UAAkB,EAAE,QAAgB;IACpF,MAAM,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAiB,EAAE,YAAoB,EAAE,QAAgB;IACzF,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAwB,uBAAuB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9G,OAAO,MAAM,CAAC,SAAS,CAAC;AAC1B,CAAC;
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../src/browser/tabs.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -9,6 +9,10 @@ export interface BrowserConfig {
|
|
|
9
9
|
executablePath?: string;
|
|
10
10
|
userDataDir?: string;
|
|
11
11
|
args?: string[];
|
|
12
|
+
/** Milliseconds to wait for the launched Chrome to open its CDP port
|
|
13
|
+
* before giving up. Default 10000 — raise this for environments where
|
|
14
|
+
* process spawn is consistently slower (e.g. constrained CI runners). */
|
|
15
|
+
launchTimeoutMs?: number;
|
|
12
16
|
}
|
|
13
17
|
export interface SessionState {
|
|
14
18
|
targetId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/browser/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;sEAGkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/browser/types.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/browser/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/browser/types.ts"],"names":[],"mappings":"AAgIA,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACvC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO;IACvE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ;IAC1E,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM;IAC1E,cAAc,EAAE,WAAW,EAAE,WAAW;CACzC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,iBAAiB;IACjB,8DAA8D;IAC9D,oDAAoD;IACpD,eAAe;IACf,gEAAgE;IAChE,iBAAiB;IACjB,wBAAwB;IACxB,2BAA2B;IAC3B,mBAAmB;IACnB,eAAe;IACf,yBAAyB;IACzB,gCAAgC;IAChC,mBAAmB;IACnB,4DAA4D;IAC5D,kEAAkE;IAClE,+DAA+D;IAC/D,mEAAmE;IACnE,6DAA6D;CAC9D,CAAC"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/src/browser/wait.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/src/cli/action.d.ts
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/src/cli/action.js
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -18,8 +18,29 @@ import type { Command } from './types.js';
|
|
|
18
18
|
* only its own known --flags are consumed from the front; everything after
|
|
19
19
|
* them is taken verbatim as one argument, untouched by tokenization.
|
|
20
20
|
*
|
|
21
|
+
/**
|
|
22
|
+
* `get box`'s output shape: browser.getElementBox() returns the element's
|
|
23
|
+
* CENTER point under x/y (correct for internal click-target callers), but
|
|
24
|
+
* `get box` is a bounding-box accessor where x/y conventionally means the
|
|
25
|
+
* top-left origin — a caller computing its own center as `box.x + width/2`
|
|
26
|
+
* would otherwise double-offset away from the element (issue #15). Expose
|
|
27
|
+
* both conventions, explicitly labeled, so neither is ambiguous.
|
|
28
|
+
*
|
|
21
29
|
* Exported for direct unit testing — not part of the CLI's public API.
|
|
22
30
|
*/
|
|
31
|
+
export declare function deriveBoxOutput(center: {
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
width: number;
|
|
35
|
+
height: number;
|
|
36
|
+
} | null): {
|
|
37
|
+
x: number;
|
|
38
|
+
y: number;
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
centerX: number;
|
|
42
|
+
centerY: number;
|
|
43
|
+
} | null;
|
|
23
44
|
export declare function parseBatchCommandLine(cmdStr: string): {
|
|
24
45
|
subName: string;
|
|
25
46
|
subArgs: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;AAwgFzE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACrE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUlG;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CA6B5H;AAycD,QAAA,MAAM,aAAa,EAAE,OAmJpB,CAAC;eAEa,aAAa"}
|
package/dist/src/cli/commands.js
CHANGED
|
@@ -12,9 +12,55 @@ let _sessionId = '';
|
|
|
12
12
|
let _targetId = '';
|
|
13
13
|
let _port = DEFAULT_PORT;
|
|
14
14
|
let _refs = new Map();
|
|
15
|
+
// Saved parent sessionId when inside an iframe — restored by `frame main`.
|
|
16
|
+
let _parentSessionId = '';
|
|
15
17
|
async function getBrowser() {
|
|
16
18
|
return import('../index.js');
|
|
17
19
|
}
|
|
20
|
+
// Best-effort cleanup on Ctrl-C / kill so a launched Chrome doesn't linger as
|
|
21
|
+
// an orphan process when a command is interrupted mid-flight (e.g. during a
|
|
22
|
+
// long-running wait/eval that CdpClient.send()'s own timeout hasn't tripped
|
|
23
|
+
// yet).
|
|
24
|
+
//
|
|
25
|
+
// This module is imported for EVERY `monomind` CLI invocation (commands/
|
|
26
|
+
// index.ts statically imports browse.ts, which imports this file) — not just
|
|
27
|
+
// browse commands — so the handler is only *registered* once a browser
|
|
28
|
+
// session is actually launched here (see ensureSignalCleanupHandlers(),
|
|
29
|
+
// called from the `open` action below), not at module load. Registering
|
|
30
|
+
// unconditionally at import time would call process.exit() on Ctrl-C for
|
|
31
|
+
// every unrelated monomind command (e.g. a long-running `org run` daemon),
|
|
32
|
+
// pre-empting whatever other SIGINT/SIGTERM handling that process needs.
|
|
33
|
+
const SIGNAL_EXIT_CODES = { SIGINT: 130, SIGTERM: 143 };
|
|
34
|
+
let _signalHandlersRegistered = false;
|
|
35
|
+
function ensureSignalCleanupHandlers() {
|
|
36
|
+
if (_signalHandlersRegistered)
|
|
37
|
+
return;
|
|
38
|
+
_signalHandlersRegistered = true;
|
|
39
|
+
for (const sig of ['SIGINT', 'SIGTERM']) {
|
|
40
|
+
process.on(sig, () => {
|
|
41
|
+
void (async () => {
|
|
42
|
+
try {
|
|
43
|
+
const browser = await getBrowser();
|
|
44
|
+
if (_client) {
|
|
45
|
+
await browser.closeBrowser(_client, _port);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const pid = browser.getLaunchedPid(_port);
|
|
49
|
+
if (pid !== undefined) {
|
|
50
|
+
try {
|
|
51
|
+
process.kill(pid, 'SIGKILL');
|
|
52
|
+
}
|
|
53
|
+
catch { /* already exited */ }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// best-effort — never block process exit on cleanup failure
|
|
59
|
+
}
|
|
60
|
+
})().finally(() => process.exit(SIGNAL_EXIT_CODES[sig]));
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
18
64
|
// Each CLI invocation is a fresh process, so this module's `_port` variable
|
|
19
65
|
// is always freshly initialized to DEFAULT_PORT — a `--port 9333` passed to
|
|
20
66
|
// an earlier `open` command has no effect on this process's own default.
|
|
@@ -57,6 +103,7 @@ async function ensureConnected(port, targetId) {
|
|
|
57
103
|
_client = conn.client;
|
|
58
104
|
_sessionId = conn.sessionId;
|
|
59
105
|
_targetId = conn.target.id;
|
|
106
|
+
_parentSessionId = '';
|
|
60
107
|
_refs = new Map();
|
|
61
108
|
await hydrateRefsFromCache(browser, _targetId, conn.target.url);
|
|
62
109
|
}
|
|
@@ -145,6 +192,7 @@ async function switchToHeaded(url, port) {
|
|
|
145
192
|
_client.close();
|
|
146
193
|
_client = null;
|
|
147
194
|
_sessionId = '';
|
|
195
|
+
_parentSessionId = '';
|
|
148
196
|
_targetId = '';
|
|
149
197
|
}
|
|
150
198
|
// Launch headed on a neighbouring port to avoid collision
|
|
@@ -190,6 +238,7 @@ async function switchToHeaded(url, port) {
|
|
|
190
238
|
_client.close();
|
|
191
239
|
_client = null;
|
|
192
240
|
_sessionId = '';
|
|
241
|
+
_parentSessionId = '';
|
|
193
242
|
_targetId = '';
|
|
194
243
|
// Relaunch headless and restore session
|
|
195
244
|
_port = await browser.launchBrowser({ port, headless: true });
|
|
@@ -272,13 +321,40 @@ const openCommand = {
|
|
|
272
321
|
prevClient.close();
|
|
273
322
|
_client = null;
|
|
274
323
|
_sessionId = '';
|
|
324
|
+
_parentSessionId = '';
|
|
275
325
|
_targetId = '';
|
|
276
326
|
_refs = new Map();
|
|
277
327
|
}
|
|
278
328
|
_port = await browser.launchBrowser({ port, headless: !forceHeaded });
|
|
279
329
|
// Persist the active port so subsequent CLI invocations (each a fresh
|
|
280
|
-
// process) default to attaching here instead of hardcoded 9222.
|
|
281
|
-
|
|
330
|
+
// process) default to attaching here instead of hardcoded 9222. Also
|
|
331
|
+
// persist the launched PID/userDataDir so a later process's closeBrowser
|
|
332
|
+
// can still kill this Chrome even though launchedPids (browser.ts) is
|
|
333
|
+
// per-process and empty there.
|
|
334
|
+
//
|
|
335
|
+
// launchBrowser() can either LAUNCH a fresh Chrome or ATTACH to one
|
|
336
|
+
// already listening on the requested port (see its own "attach if
|
|
337
|
+
// already Chrome" comment) — it returns only a port number, with no
|
|
338
|
+
// signal telling this caller which happened. getLaunchedPid(_port) is
|
|
339
|
+
// undefined on the attach path (this process never spawned anything).
|
|
340
|
+
// Bug fixed here: unconditionally saving {pid: undefined, ...} on
|
|
341
|
+
// attach used to CLOBBER a real PID a previous `open` had already
|
|
342
|
+
// persisted for this exact port, destroying the only way a later
|
|
343
|
+
// process's closeBrowser() PID-kill fallback could ever find it.
|
|
344
|
+
const freshPid = browser.getLaunchedPid(_port);
|
|
345
|
+
const freshUserDataDir = browser.getLaunchedUserDataDir(_port);
|
|
346
|
+
if (freshPid !== undefined) {
|
|
347
|
+
await browser.saveActivePort(_port, { pid: freshPid, userDataDir: freshUserDataDir });
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
// Attach path: preserve whatever PID/userDataDir was already on file
|
|
351
|
+
// for this port (most likely from the process that originally
|
|
352
|
+
// launched it) instead of overwriting with undefined.
|
|
353
|
+
const existing = await browser.loadActivePortInfo();
|
|
354
|
+
const preserved = existing && existing.port === _port ? existing : undefined;
|
|
355
|
+
await browser.saveActivePort(_port, { pid: preserved?.pid, userDataDir: preserved?.userDataDir });
|
|
356
|
+
}
|
|
357
|
+
ensureSignalCleanupHandlers();
|
|
282
358
|
const conn = await browser.connectToTarget(_port);
|
|
283
359
|
_client = conn.client;
|
|
284
360
|
_sessionId = conn.sessionId;
|
|
@@ -774,7 +850,8 @@ const getCommand = {
|
|
|
774
850
|
const ref = _refs.get(refKey);
|
|
775
851
|
if (!ref)
|
|
776
852
|
throw new Error(`Ref @${refKey} not found`);
|
|
777
|
-
|
|
853
|
+
const center = await browser.getElementBox(client, sessionId, ref);
|
|
854
|
+
value = deriveBoxOutput(center);
|
|
778
855
|
break;
|
|
779
856
|
}
|
|
780
857
|
case 'styles': {
|
|
@@ -1311,6 +1388,7 @@ const closeCommand = {
|
|
|
1311
1388
|
client.close();
|
|
1312
1389
|
_client = null;
|
|
1313
1390
|
_sessionId = '';
|
|
1391
|
+
_parentSessionId = '';
|
|
1314
1392
|
_targetId = '';
|
|
1315
1393
|
_refs = new Map();
|
|
1316
1394
|
// Session is gone — forget the persisted port and stale refs so later
|
|
@@ -1648,8 +1726,11 @@ const tapCommand = {
|
|
|
1648
1726
|
const box = await browser.getElementBox(client, sessionId, ref);
|
|
1649
1727
|
if (!box)
|
|
1650
1728
|
throw new Error(`Cannot get bounds for @${key}`);
|
|
1651
|
-
|
|
1652
|
-
|
|
1729
|
+
// box.x/box.y from getElementBox() ARE already the center point (see
|
|
1730
|
+
// its own doc comment) — adding width/2 here double-offset the tap
|
|
1731
|
+
// target away from the element (issue #15).
|
|
1732
|
+
x = Math.round(box.x);
|
|
1733
|
+
y = Math.round(box.y);
|
|
1653
1734
|
}
|
|
1654
1735
|
else {
|
|
1655
1736
|
const posJson = await browser.evaluateJs(client, sessionId, `(function(){var el=document.querySelector(${JSON.stringify(arg)});if(!el)return null;var r=el.getBoundingClientRect();return JSON.stringify({x:r.left+r.width/2,y:r.top+r.height/2});})()`);
|
|
@@ -1965,11 +2046,24 @@ const frameCommand = {
|
|
|
1965
2046
|
if (!target)
|
|
1966
2047
|
throw new Error('Usage: monomind browse frame <selector>|main');
|
|
1967
2048
|
if (target === 'main') {
|
|
2049
|
+
if (_parentSessionId) {
|
|
2050
|
+
// Detach from the OOPIF session (best-effort — it may already be gone)
|
|
2051
|
+
await client.send('Target.detachFromTarget', { sessionId: _sessionId }).catch(() => { });
|
|
2052
|
+
_sessionId = _parentSessionId;
|
|
2053
|
+
_parentSessionId = '';
|
|
2054
|
+
}
|
|
1968
2055
|
output.printSuccess('Switched to main frame');
|
|
1969
2056
|
}
|
|
1970
2057
|
else {
|
|
1971
|
-
const
|
|
1972
|
-
|
|
2058
|
+
const frameResult = await browser.switchToFrame(client, sessionId, target);
|
|
2059
|
+
if (frameResult.sessionId) {
|
|
2060
|
+
// Save the parent session so `frame main` can restore it
|
|
2061
|
+
_parentSessionId = _sessionId;
|
|
2062
|
+
_sessionId = frameResult.sessionId;
|
|
2063
|
+
// Enable CDP domains on the iframe's session so subsequent commands work
|
|
2064
|
+
await browser.enableSessionDomains(client, _sessionId);
|
|
2065
|
+
}
|
|
2066
|
+
output.printSuccess(`Switched to frame: ${frameResult.url ?? target}`);
|
|
1973
2067
|
}
|
|
1974
2068
|
return { success: true };
|
|
1975
2069
|
},
|
|
@@ -2030,6 +2124,7 @@ const tabCommand = {
|
|
|
2030
2124
|
client.close();
|
|
2031
2125
|
_client = null;
|
|
2032
2126
|
_sessionId = '';
|
|
2127
|
+
_parentSessionId = '';
|
|
2033
2128
|
_targetId = '';
|
|
2034
2129
|
_refs = new Map();
|
|
2035
2130
|
}
|
|
@@ -2603,8 +2698,28 @@ function tokenizeBatchCommand(input) {
|
|
|
2603
2698
|
* only its own known --flags are consumed from the front; everything after
|
|
2604
2699
|
* them is taken verbatim as one argument, untouched by tokenization.
|
|
2605
2700
|
*
|
|
2701
|
+
/**
|
|
2702
|
+
* `get box`'s output shape: browser.getElementBox() returns the element's
|
|
2703
|
+
* CENTER point under x/y (correct for internal click-target callers), but
|
|
2704
|
+
* `get box` is a bounding-box accessor where x/y conventionally means the
|
|
2705
|
+
* top-left origin — a caller computing its own center as `box.x + width/2`
|
|
2706
|
+
* would otherwise double-offset away from the element (issue #15). Expose
|
|
2707
|
+
* both conventions, explicitly labeled, so neither is ambiguous.
|
|
2708
|
+
*
|
|
2606
2709
|
* Exported for direct unit testing — not part of the CLI's public API.
|
|
2607
2710
|
*/
|
|
2711
|
+
export function deriveBoxOutput(center) {
|
|
2712
|
+
if (!center)
|
|
2713
|
+
return null;
|
|
2714
|
+
return {
|
|
2715
|
+
x: center.x - center.width / 2,
|
|
2716
|
+
y: center.y - center.height / 2,
|
|
2717
|
+
width: center.width,
|
|
2718
|
+
height: center.height,
|
|
2719
|
+
centerX: center.x,
|
|
2720
|
+
centerY: center.y,
|
|
2721
|
+
};
|
|
2722
|
+
}
|
|
2608
2723
|
export function parseBatchCommandLine(cmdStr) {
|
|
2609
2724
|
const trimmed = cmdStr.trim();
|
|
2610
2725
|
const evalMatch = trimmed.match(/^eval\b\s*/);
|
|
@@ -2821,6 +2936,7 @@ const connectCommand = {
|
|
|
2821
2936
|
prevClient.close();
|
|
2822
2937
|
_client = null;
|
|
2823
2938
|
_sessionId = '';
|
|
2939
|
+
_parentSessionId = '';
|
|
2824
2940
|
_targetId = '';
|
|
2825
2941
|
_refs = new Map();
|
|
2826
2942
|
}
|