supersurf-mcp 3.0.2 → 3.1.0
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/experimental/fingerprinting/index.d.ts +57 -0
- package/dist/experimental/fingerprinting/index.d.ts.map +1 -0
- package/dist/experimental/fingerprinting/index.js +150 -0
- package/dist/experimental/fingerprinting/index.js.map +1 -0
- package/dist/experimental/fingerprinting/page-scripts.d.ts +7 -0
- package/dist/experimental/fingerprinting/page-scripts.d.ts.map +1 -0
- package/dist/experimental/fingerprinting/page-scripts.js +67 -0
- package/dist/experimental/fingerprinting/page-scripts.js.map +1 -0
- package/dist/experimental/fingerprinting/store.d.ts +8 -0
- package/dist/experimental/fingerprinting/store.d.ts.map +1 -0
- package/dist/experimental/fingerprinting/store.js +78 -0
- package/dist/experimental/fingerprinting/store.js.map +1 -0
- package/dist/experimental/fingerprinting/types.d.ts +32 -0
- package/dist/experimental/fingerprinting/types.d.ts.map +1 -0
- package/dist/experimental/fingerprinting/types.js +3 -0
- package/dist/experimental/fingerprinting/types.js.map +1 -0
- package/dist/experimental/index.js +1 -1
- package/dist/experimental/index.js.map +1 -1
- package/dist/recorder/action-recorder.d.ts +25 -0
- package/dist/recorder/action-recorder.d.ts.map +1 -0
- package/dist/recorder/action-recorder.js +48 -0
- package/dist/recorder/action-recorder.js.map +1 -0
- package/dist/shared/config/defaults.d.ts.map +1 -1
- package/dist/shared/config/defaults.js +3 -1
- package/dist/shared/config/defaults.js.map +1 -1
- package/dist/shared/config/loaders.d.ts.map +1 -1
- package/dist/shared/config/loaders.js +1 -4
- package/dist/shared/config/loaders.js.map +1 -1
- package/dist/shared/config/service.d.ts.map +1 -1
- package/dist/shared/config/service.js +2 -0
- package/dist/shared/config/service.js.map +1 -1
- package/dist/shared/config/types.d.ts +2 -0
- package/dist/shared/config/types.d.ts.map +1 -1
- package/dist/tools/interaction/registry.d.ts.map +1 -1
- package/dist/tools/interaction/registry.js +11 -1
- package/dist/tools/interaction/registry.js.map +1 -1
- package/dist/tools/lib/frames.d.ts +13 -8
- package/dist/tools/lib/frames.d.ts.map +1 -1
- package/dist/tools/lib/frames.js +164 -80
- package/dist/tools/lib/frames.js.map +1 -1
- package/dist/tools/lib/types.d.ts +21 -0
- package/dist/tools/lib/types.d.ts.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +29 -1
- package/dist/tools.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loaders.js","sourceRoot":"","sources":["../../config/loaders.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wCA0BC;
|
|
1
|
+
{"version":3,"file":"loaders.js","sourceRoot":"","sources":["../../config/loaders.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../config/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAInE,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,aAAa,CAAC;IACnB,GAAG,EAAE,aAAa,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,KAAK,QAAQ,GAAG,MAAM,CAAC;AAEvB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAA0C;gBAE7C,MAAM,EAAE,YAAY;IAMhC,GAAG,IAAI,MAAM;IAIb,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY;IAItC,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,IAAI;IA4BZ,OAAO,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../config/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAInE,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,aAAa,CAAC;IACnB,GAAG,EAAE,aAAa,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,KAAK,QAAQ,GAAG,MAAM,CAAC;AAEvB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAA0C;gBAE7C,MAAM,EAAE,YAAY;IAMhC,GAAG,IAAI,MAAM;IAIb,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY;IAItC,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,IAAI;IA4BZ,OAAO,CAAC,KAAK;CAoFd"}
|
|
@@ -60,6 +60,7 @@ class ConfigService {
|
|
|
60
60
|
smart_waiting: pick('experiments.smart_waiting', inp.cli.experiments?.smart_waiting, inp.env.experiments?.smart_waiting, inp.file.experiments?.smart_waiting, D.experiments.smart_waiting, isBool, warn),
|
|
61
61
|
storage_inspection: pick('experiments.storage_inspection', inp.cli.experiments?.storage_inspection, inp.env.experiments?.storage_inspection, inp.file.experiments?.storage_inspection, D.experiments.storage_inspection, isBool, warn),
|
|
62
62
|
mouse_humanization: pick('experiments.mouse_humanization', inp.cli.experiments?.mouse_humanization, inp.env.experiments?.mouse_humanization, inp.file.experiments?.mouse_humanization, D.experiments.mouse_humanization, isBool, warn),
|
|
63
|
+
fingerprinting: pick('experiments.fingerprinting', inp.cli.experiments?.fingerprinting, inp.env.experiments?.fingerprinting, inp.file.experiments?.fingerprinting, D.experiments.fingerprinting, isBool, warn),
|
|
63
64
|
},
|
|
64
65
|
security: {
|
|
65
66
|
secure_eval: pick('security.secure_eval', inp.cli.security?.secure_eval, inp.env.security?.secure_eval, inp.file.security?.secure_eval, D.security.secure_eval, isBool, warn),
|
|
@@ -76,6 +77,7 @@ class ConfigService {
|
|
|
76
77
|
logging: {
|
|
77
78
|
debug: pick('logging.debug', inp.cli.logging?.debug, inp.env.logging?.debug, inp.file.logging?.debug, D.logging.debug, isDebugMode, warn),
|
|
78
79
|
usage_metrics: pick('logging.usage_metrics', inp.cli.logging?.usage_metrics, inp.env.logging?.usage_metrics, inp.file.logging?.usage_metrics, D.logging.usage_metrics, isBool, warn),
|
|
80
|
+
action_recording: pick('logging.action_recording', inp.cli.logging?.action_recording, inp.env.logging?.action_recording, inp.file.logging?.action_recording, D.logging.action_recording, isBool, warn),
|
|
79
81
|
},
|
|
80
82
|
profiles: {
|
|
81
83
|
startup_opts: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../config/service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../config/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ export interface Config {
|
|
|
5
5
|
smart_waiting: boolean;
|
|
6
6
|
storage_inspection: boolean;
|
|
7
7
|
mouse_humanization: boolean;
|
|
8
|
+
fingerprinting: boolean;
|
|
8
9
|
};
|
|
9
10
|
security: {
|
|
10
11
|
secure_eval: boolean;
|
|
@@ -21,6 +22,7 @@ export interface Config {
|
|
|
21
22
|
logging: {
|
|
22
23
|
debug: DebugMode;
|
|
23
24
|
usage_metrics: boolean;
|
|
25
|
+
action_recording: boolean;
|
|
24
26
|
};
|
|
25
27
|
profiles: {
|
|
26
28
|
startup_opts: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE;QACX,YAAY,EAAE,OAAO,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC;QACvB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,kBAAkB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE;QACX,YAAY,EAAE,OAAO,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC;QACvB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,kBAAkB,EAAE,OAAO,CAAC;QAC5B,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,QAAQ,EAAE;QACR,WAAW,EAAE,OAAO,CAAC;QACrB,gBAAgB,EAAE;YAChB,OAAO,EAAE,OAAO,CAAC;YACjB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;YACnC,MAAM,EAAE,MAAM,EAAE,CAAC;SAClB,CAAC;KACH,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,SAAS,CAAC;QACjB,aAAa,EAAE,OAAO,CAAC;QACvB,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,QAAQ,EAAE;QACR,YAAY,EAAE;YACZ,WAAW,EAAE,OAAO,CAAC;SACtB,CAAC;KACH,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE;QACT,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;KACpE,CAAC;IACF,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;KAC5D,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7C,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAK3D;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlF;AAED,wBAAgB,oBAAoB,IAAI,SAAS,MAAM,EAAE,CAExD;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -4,6 +4,7 @@ exports.registerAction = registerAction;
|
|
|
4
4
|
exports.executeAction = executeAction;
|
|
5
5
|
exports.getRegisteredActions = getRegisteredActions;
|
|
6
6
|
exports._clearRegistryForTest = _clearRegistryForTest;
|
|
7
|
+
const action_recorder_1 = require("../../recorder/action-recorder");
|
|
7
8
|
const registry = new Map();
|
|
8
9
|
function registerAction(handler) {
|
|
9
10
|
if (registry.has(handler.name)) {
|
|
@@ -15,7 +16,16 @@ async function executeAction(ctx, action) {
|
|
|
15
16
|
const handler = registry.get(action.type);
|
|
16
17
|
if (!handler)
|
|
17
18
|
throw new Error(`Unknown action type: ${action.type}`);
|
|
18
|
-
|
|
19
|
+
const startedAt = Date.now();
|
|
20
|
+
try {
|
|
21
|
+
const result = await handler.run(ctx, action);
|
|
22
|
+
(0, action_recorder_1.recordAction)(ctx, action, startedAt, result, null);
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
(0, action_recorder_1.recordAction)(ctx, action, startedAt, null, err);
|
|
27
|
+
throw err;
|
|
28
|
+
}
|
|
19
29
|
}
|
|
20
30
|
function getRegisteredActions() {
|
|
21
31
|
return [...registry.keys()];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/interaction/registry.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/interaction/registry.ts"],"names":[],"mappings":";;AAOA,wCAKC;AAED,sCAYC;AAED,oDAEC;AAGD,sDAEC;AAhCD,oEAA8D;AAE9D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;AAElD,SAAgB,cAAc,CAAC,OAAsB;IACnD,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,GAAgB,EAAE,MAAW;IAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAA,8BAAY,EAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAA,8BAAY,EAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,uEAAuE;AACvE,SAAgB,qBAAqB;IACnC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import type { ToolContext } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Create an isolated world in every child frame and return their execution
|
|
4
|
+
* context ids. Used by heal/score passes that must evaluate in each frame
|
|
5
|
+
* regardless of whether a selector matches there. Skips frames whose isolated
|
|
6
|
+
* world can't be created.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getChildFrameContexts(ctx: ToolContext): Promise<Array<{
|
|
9
|
+
frameId: string;
|
|
10
|
+
contextId: number;
|
|
11
|
+
}>>;
|
|
2
12
|
/**
|
|
3
13
|
* DFS-walk the frame tree and evaluate `selectorExpr` in each child frame's
|
|
4
14
|
* isolated world. Returns the first frame where the expression yields a
|
|
@@ -32,14 +42,9 @@ export declare function evalInFrameOrTop(ctx: ToolContext, expression: string, c
|
|
|
32
42
|
* Resolve top-frame viewport coordinates for an element, whether it lives in
|
|
33
43
|
* the top frame or a child frame. Preserves `ctx.getElementCenter`'s
|
|
34
44
|
* "Did you mean?" hints on top-frame happy path; only falls back to iframe
|
|
35
|
-
* resolution when the top-frame lookup actually fails.
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* coordinates for nodes inside iframes (verified in
|
|
39
|
-
* docs/research/2026-04-19-dom-getboxmodel-iframe-coords.md). This function
|
|
40
|
-
* walks up the frame tree and accumulates each ancestor iframe's top-left
|
|
41
|
-
* offset to produce top-frame viewport coordinates — same approach Playwright
|
|
42
|
-
* and Puppeteer use.
|
|
45
|
+
* resolution when the top-frame lookup actually fails. When even the iframe
|
|
46
|
+
* selector walk misses, a fingerprint heal across child frames is attempted
|
|
47
|
+
* before the original error is re-thrown.
|
|
43
48
|
*/
|
|
44
49
|
export declare function getCenterInFrame(ctx: ToolContext, selector: string): Promise<{
|
|
45
50
|
x: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../../src/tools/lib/frames.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../../src/tools/lib/frames.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAc3C;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAwBxD;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAqC1E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,CAWxF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,GAAG,CAAC,CAgBd;AAsGD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAwC7D"}
|
package/dist/tools/lib/frames.js
CHANGED
|
@@ -1,9 +1,58 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getChildFrameContexts = getChildFrameContexts;
|
|
3
4
|
exports.findElementInFrames = findElementInFrames;
|
|
4
5
|
exports.resolveInFrames = resolveInFrames;
|
|
5
6
|
exports.evalInFrameOrTop = evalInFrameOrTop;
|
|
6
7
|
exports.getCenterInFrame = getCenterInFrame;
|
|
8
|
+
/** DFS-collect every child frame's id from a `Page.getFrameTree` root (top frame excluded). */
|
|
9
|
+
function collectChildFrameIds(root) {
|
|
10
|
+
const frameIds = [];
|
|
11
|
+
const walk = (node, isRoot) => {
|
|
12
|
+
if (!node?.frame?.id)
|
|
13
|
+
return;
|
|
14
|
+
if (!isRoot)
|
|
15
|
+
frameIds.push(node.frame.id);
|
|
16
|
+
for (const child of node.childFrames || [])
|
|
17
|
+
walk(child, false);
|
|
18
|
+
};
|
|
19
|
+
walk(root, true);
|
|
20
|
+
return frameIds;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create an isolated world in every child frame and return their execution
|
|
24
|
+
* context ids. Used by heal/score passes that must evaluate in each frame
|
|
25
|
+
* regardless of whether a selector matches there. Skips frames whose isolated
|
|
26
|
+
* world can't be created.
|
|
27
|
+
*/
|
|
28
|
+
async function getChildFrameContexts(ctx) {
|
|
29
|
+
let tree;
|
|
30
|
+
try {
|
|
31
|
+
tree = await ctx.cdp('Page.getFrameTree', {});
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
const root = tree?.frameTree;
|
|
37
|
+
if (!root)
|
|
38
|
+
return [];
|
|
39
|
+
const out = [];
|
|
40
|
+
for (const frameId of collectChildFrameIds(root)) {
|
|
41
|
+
try {
|
|
42
|
+
const world = await ctx.cdp('Page.createIsolatedWorld', {
|
|
43
|
+
frameId,
|
|
44
|
+
worldName: 'supersurf_iframe',
|
|
45
|
+
grantUniveralAccess: false,
|
|
46
|
+
});
|
|
47
|
+
if (world?.executionContextId != null)
|
|
48
|
+
out.push({ frameId, contextId: world.executionContextId });
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
7
56
|
/**
|
|
8
57
|
* DFS-walk the frame tree and evaluate `selectorExpr` in each child frame's
|
|
9
58
|
* isolated world. Returns the first frame where the expression yields a
|
|
@@ -24,18 +73,7 @@ async function findElementInFrames(ctx, selectorExpr) {
|
|
|
24
73
|
const root = tree?.frameTree;
|
|
25
74
|
if (!root)
|
|
26
75
|
return null;
|
|
27
|
-
const
|
|
28
|
-
const walk = (node, isRoot) => {
|
|
29
|
-
if (!node?.frame?.id)
|
|
30
|
-
return;
|
|
31
|
-
if (!isRoot)
|
|
32
|
-
frameIds.push(node.frame.id);
|
|
33
|
-
const children = node.childFrames || [];
|
|
34
|
-
for (const child of children)
|
|
35
|
-
walk(child, false);
|
|
36
|
-
};
|
|
37
|
-
walk(root, true);
|
|
38
|
-
for (const frameId of frameIds) {
|
|
76
|
+
for (const frameId of collectChildFrameIds(root)) {
|
|
39
77
|
let contextId;
|
|
40
78
|
try {
|
|
41
79
|
const world = await ctx.cdp('Page.createIsolatedWorld', {
|
|
@@ -106,17 +144,109 @@ async function evalInFrameOrTop(ctx, expression, contextId) {
|
|
|
106
144
|
return result.result?.value;
|
|
107
145
|
}
|
|
108
146
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* resolution when the top-frame lookup actually fails.
|
|
147
|
+
* Walk up the frame tree from `frameId`, accumulating each ancestor iframe's
|
|
148
|
+
* top-left offset, to translate iframe-local coordinates into top-frame
|
|
149
|
+
* viewport coordinates.
|
|
113
150
|
*
|
|
114
151
|
* `DOM.getBoxModel` and `getBoundingClientRect` return **iframe-local**
|
|
115
152
|
* coordinates for nodes inside iframes (verified in
|
|
116
|
-
* docs/research/2026-04-19-dom-getboxmodel-iframe-coords.md)
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
|
|
153
|
+
* docs/research/2026-04-19-dom-getboxmodel-iframe-coords.md) — same approach
|
|
154
|
+
* Playwright and Puppeteer use. Returns null if any ancestor iframe's owner
|
|
155
|
+
* node can't be resolved.
|
|
156
|
+
*/
|
|
157
|
+
async function accumulateFrameOffset(ctx, frameId, contextId) {
|
|
158
|
+
const tree = await ctx.cdp('Page.getFrameTree', {});
|
|
159
|
+
const parentMap = new Map();
|
|
160
|
+
const walkTree = (node, parentId) => {
|
|
161
|
+
const fid = node?.frame?.id;
|
|
162
|
+
if (!fid)
|
|
163
|
+
return;
|
|
164
|
+
if (parentId)
|
|
165
|
+
parentMap.set(fid, parentId);
|
|
166
|
+
for (const child of node.childFrames || [])
|
|
167
|
+
walkTree(child, fid);
|
|
168
|
+
};
|
|
169
|
+
walkTree(tree.frameTree, null);
|
|
170
|
+
const contextCache = new Map();
|
|
171
|
+
contextCache.set(frameId, contextId);
|
|
172
|
+
let offsetX = 0, offsetY = 0;
|
|
173
|
+
let current = frameId;
|
|
174
|
+
while (parentMap.has(current)) {
|
|
175
|
+
const parent = parentMap.get(current);
|
|
176
|
+
// Parent's execution context: undefined (default/top-frame) if parent is root,
|
|
177
|
+
// otherwise an isolated world (create and cache).
|
|
178
|
+
let parentCtxId;
|
|
179
|
+
if (parentMap.has(parent)) {
|
|
180
|
+
if (!contextCache.has(parent)) {
|
|
181
|
+
const w = await ctx.cdp('Page.createIsolatedWorld', {
|
|
182
|
+
frameId: parent,
|
|
183
|
+
worldName: 'supersurf_iframe',
|
|
184
|
+
grantUniveralAccess: false,
|
|
185
|
+
});
|
|
186
|
+
contextCache.set(parent, w.executionContextId);
|
|
187
|
+
}
|
|
188
|
+
parentCtxId = contextCache.get(parent);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
parentCtxId = undefined; // top-frame default context
|
|
192
|
+
}
|
|
193
|
+
const owner = await ctx.cdp('DOM.getFrameOwner', { frameId: current });
|
|
194
|
+
const resolved = await ctx.cdp('DOM.resolveNode', {
|
|
195
|
+
backendNodeId: owner.backendNodeId,
|
|
196
|
+
executionContextId: parentCtxId,
|
|
197
|
+
});
|
|
198
|
+
const iframeObjId = resolved.object?.objectId;
|
|
199
|
+
if (!iframeObjId)
|
|
200
|
+
return null;
|
|
201
|
+
const iframeRect = await ctx.cdp('Runtime.callFunctionOn', {
|
|
202
|
+
objectId: iframeObjId,
|
|
203
|
+
functionDeclaration: 'function() { const r = this.getBoundingClientRect(); return { left: r.left, top: r.top }; }',
|
|
204
|
+
returnByValue: true,
|
|
205
|
+
});
|
|
206
|
+
const or = iframeRect.result?.value;
|
|
207
|
+
if (!or)
|
|
208
|
+
return null;
|
|
209
|
+
offsetX += or.left;
|
|
210
|
+
offsetY += or.top;
|
|
211
|
+
current = parent;
|
|
212
|
+
}
|
|
213
|
+
return { offsetX, offsetY };
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Last-ditch heal when a selector matches no frame: score the stored
|
|
217
|
+
* fingerprint against each child frame's DOM (via the experiment hook) and
|
|
218
|
+
* return the highest-scoring gate-passing hit, translated to top-frame
|
|
219
|
+
* coordinates. Returns null when the experiment is off, no hook is wired, or no
|
|
220
|
+
* frame yields a gate-passing hit.
|
|
221
|
+
*/
|
|
222
|
+
async function healInFrames(ctx, selector) {
|
|
223
|
+
if (!ctx.healFingerprintInContext)
|
|
224
|
+
return null;
|
|
225
|
+
let best = null;
|
|
226
|
+
for (const { frameId, contextId } of await getChildFrameContexts(ctx)) {
|
|
227
|
+
const hit = await ctx.healFingerprintInContext(contextId, selector);
|
|
228
|
+
if (hit && (!best || hit.score > best.score)) {
|
|
229
|
+
best = { frameId, contextId, cx: hit.cx, cy: hit.cy, score: hit.score };
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (!best)
|
|
233
|
+
return null;
|
|
234
|
+
const offset = await accumulateFrameOffset(ctx, best.frameId, best.contextId);
|
|
235
|
+
if (!offset)
|
|
236
|
+
return null;
|
|
237
|
+
return {
|
|
238
|
+
x: Math.round(best.cx + offset.offsetX),
|
|
239
|
+
y: Math.round(best.cy + offset.offsetY),
|
|
240
|
+
contextId: best.contextId,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Resolve top-frame viewport coordinates for an element, whether it lives in
|
|
245
|
+
* the top frame or a child frame. Preserves `ctx.getElementCenter`'s
|
|
246
|
+
* "Did you mean?" hints on top-frame happy path; only falls back to iframe
|
|
247
|
+
* resolution when the top-frame lookup actually fails. When even the iframe
|
|
248
|
+
* selector walk misses, a fingerprint heal across child frames is attempted
|
|
249
|
+
* before the original error is re-thrown.
|
|
120
250
|
*/
|
|
121
251
|
async function getCenterInFrame(ctx, selector) {
|
|
122
252
|
try {
|
|
@@ -126,8 +256,13 @@ async function getCenterInFrame(ctx, selector) {
|
|
|
126
256
|
catch (topFrameErr) {
|
|
127
257
|
const expr = ctx.getSelectorExpression(selector);
|
|
128
258
|
const match = await findElementInFrames(ctx, expr);
|
|
129
|
-
if (!match)
|
|
259
|
+
if (!match) {
|
|
260
|
+
// Selector matched no frame. Try a fingerprint heal across child frames.
|
|
261
|
+
const healed = await healInFrames(ctx, selector);
|
|
262
|
+
if (healed)
|
|
263
|
+
return healed;
|
|
130
264
|
throw topFrameErr;
|
|
265
|
+
}
|
|
131
266
|
// Read the element's iframe-local rect in its frame context.
|
|
132
267
|
const rectEval = await ctx.cdp('Runtime.evaluate', {
|
|
133
268
|
expression: `
|
|
@@ -144,65 +279,14 @@ async function getCenterInFrame(ctx, selector) {
|
|
|
144
279
|
const rect = rectEval.result?.value;
|
|
145
280
|
if (!rect)
|
|
146
281
|
throw topFrameErr;
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
parentMap.set(fid, parentId);
|
|
156
|
-
for (const child of node.childFrames || [])
|
|
157
|
-
walkTree(child, fid);
|
|
158
|
-
};
|
|
159
|
-
walkTree(tree.frameTree, null);
|
|
160
|
-
// Walk up from target frame, accumulating iframe offsets.
|
|
161
|
-
const contextCache = new Map();
|
|
162
|
-
contextCache.set(match.frameId, match.contextId);
|
|
163
|
-
let offsetX = 0, offsetY = 0;
|
|
164
|
-
let current = match.frameId;
|
|
165
|
-
while (parentMap.has(current)) {
|
|
166
|
-
const parent = parentMap.get(current);
|
|
167
|
-
// Parent's execution context: undefined (default/top-frame) if parent is root,
|
|
168
|
-
// otherwise an isolated world (create and cache).
|
|
169
|
-
let parentCtxId;
|
|
170
|
-
if (parentMap.has(parent)) {
|
|
171
|
-
if (!contextCache.has(parent)) {
|
|
172
|
-
const w = await ctx.cdp('Page.createIsolatedWorld', {
|
|
173
|
-
frameId: parent,
|
|
174
|
-
worldName: 'supersurf_iframe',
|
|
175
|
-
grantUniveralAccess: false,
|
|
176
|
-
});
|
|
177
|
-
contextCache.set(parent, w.executionContextId);
|
|
178
|
-
}
|
|
179
|
-
parentCtxId = contextCache.get(parent);
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
parentCtxId = undefined; // top-frame default context
|
|
183
|
-
}
|
|
184
|
-
const owner = await ctx.cdp('DOM.getFrameOwner', { frameId: current });
|
|
185
|
-
const resolved = await ctx.cdp('DOM.resolveNode', {
|
|
186
|
-
backendNodeId: owner.backendNodeId,
|
|
187
|
-
executionContextId: parentCtxId,
|
|
188
|
-
});
|
|
189
|
-
const iframeObjId = resolved.object?.objectId;
|
|
190
|
-
if (!iframeObjId)
|
|
191
|
-
throw topFrameErr;
|
|
192
|
-
const iframeRect = await ctx.cdp('Runtime.callFunctionOn', {
|
|
193
|
-
objectId: iframeObjId,
|
|
194
|
-
functionDeclaration: 'function() { const r = this.getBoundingClientRect(); return { left: r.left, top: r.top }; }',
|
|
195
|
-
returnByValue: true,
|
|
196
|
-
});
|
|
197
|
-
const or = iframeRect.result?.value;
|
|
198
|
-
if (!or)
|
|
199
|
-
throw topFrameErr;
|
|
200
|
-
offsetX += or.left;
|
|
201
|
-
offsetY += or.top;
|
|
202
|
-
current = parent;
|
|
203
|
-
}
|
|
204
|
-
const x = Math.round(rect.left + offsetX + rect.width / 2);
|
|
205
|
-
const y = Math.round(rect.top + offsetY + rect.height / 2);
|
|
282
|
+
const offset = await accumulateFrameOffset(ctx, match.frameId, match.contextId);
|
|
283
|
+
if (!offset)
|
|
284
|
+
throw topFrameErr;
|
|
285
|
+
const x = Math.round(rect.left + offset.offsetX + rect.width / 2);
|
|
286
|
+
const y = Math.round(rect.top + offset.offsetY + rect.height / 2);
|
|
287
|
+
// Iframe-nested elements bypass the top-frame capture wrapper (ctx.getElementCenter),
|
|
288
|
+
// so fingerprint capture is fired here, bound to the child frame's execution context.
|
|
289
|
+
ctx.captureFingerprintInContext?.(match.contextId, selector);
|
|
206
290
|
return { x, y, contextId: match.contextId };
|
|
207
291
|
}
|
|
208
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frames.js","sourceRoot":"","sources":["../../../src/tools/lib/frames.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"frames.js","sourceRoot":"","sources":["../../../src/tools/lib/frames.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,8 @@ export interface ToolContext {
|
|
|
33
33
|
connectionManager: any;
|
|
34
34
|
/** Resolved ConfigService (CLI + env + file + defaults). Optional for legacy callers. */
|
|
35
35
|
config?: ConfigService;
|
|
36
|
+
/** Usage-metrics logger, when enabled. Used by the action recorder. */
|
|
37
|
+
metricsLogger?: import('../../usage-metrics-logger').UsageMetricsLogger | null;
|
|
36
38
|
/** Send a Chrome DevTools Protocol command through the extension. */
|
|
37
39
|
cdp(method: string, params?: any): Promise<any>;
|
|
38
40
|
/** Evaluate a JS expression in the page context (via CDP Runtime.evaluate). */
|
|
@@ -44,6 +46,25 @@ export interface ToolContext {
|
|
|
44
46
|
x: number;
|
|
45
47
|
y: number;
|
|
46
48
|
}>;
|
|
49
|
+
/**
|
|
50
|
+
* Fingerprint an element that was resolved inside a child frame (iframe), bound to that
|
|
51
|
+
* frame's execution context. The top-frame capture path (`getElementCenter` →
|
|
52
|
+
* `resolveWithHealing`) can't see iframe elements, so the frame-walk fallback fires this.
|
|
53
|
+
* Fire-and-forget; gated by the fingerprinting experiment. Optional — wired by BrowserBridge.
|
|
54
|
+
*/
|
|
55
|
+
captureFingerprintInContext?(contextId: number, selector: string): void;
|
|
56
|
+
/**
|
|
57
|
+
* Heal a selector miss inside a child frame (iframe) by scoring a stored fingerprint
|
|
58
|
+
* against that frame's DOM, bound to the frame's execution context. Returns the
|
|
59
|
+
* gate-passing hit's **iframe-local** center + score (the caller translates to top-frame
|
|
60
|
+
* coords), or null when no record exists / the gate fails. Gated by the fingerprinting
|
|
61
|
+
* experiment. Optional — wired by BrowserBridge.
|
|
62
|
+
*/
|
|
63
|
+
healFingerprintInContext?(contextId: number, selector: string): Promise<{
|
|
64
|
+
cx: number;
|
|
65
|
+
cy: number;
|
|
66
|
+
score: number;
|
|
67
|
+
} | null>;
|
|
47
68
|
/** Convert a selector string (including `:has-text()`) to a JS querySelector expression. */
|
|
48
69
|
getSelectorExpression(selector: string): string;
|
|
49
70
|
/** Search the page for elements matching partial text when a selector fails. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/lib/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,GAAG,EAAE,mBAAmB,CAAC;IACzB,gEAAgE;IAChE,iBAAiB,EAAE,GAAG,CAAC;IACvB,yFAAyF;IACzF,MAAM,CAAC,EAAE,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/lib/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,GAAG,EAAE,mBAAmB,CAAC;IACzB,gEAAgE;IAChE,iBAAiB,EAAE,GAAG,CAAC;IACvB,yFAAyF;IACzF,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,4BAA4B,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAE/E,qEAAqE;IACrE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,+EAA+E;IAC/E,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/D,2BAA2B;IAC3B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,yHAAyH;IACzH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE;;;;;OAKG;IACH,2BAA2B,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxE;;;;;;OAMG;IACH,wBAAwB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC1H,4FAA4F;IAC5F,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAChD,gFAAgF;IAChF,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3D,wEAAwE;IACxE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,GAAG,CAAC;IAC/E,8EAA8E;IAC9E,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,GAAG,CAAC;CAC/D"}
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAgB5D;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,aAAa,CAAmC;gBAE5C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI;IAKlD,UAAU,CACd,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,GAAG,EACf,iBAAiB,CAAC,EAAE,GAAG,EACvB,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,GACxC,OAAO,CAAC,IAAI,CAAC;IAOhB,YAAY,IAAI,IAAI;IAIpB,gEAAgE;IAC1D,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAIxC,mDAAmD;IACnD,OAAO,CAAC,YAAY;IAiEpB;;;;OAIG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO,GACpC,OAAO,CAAC,GAAG,CAAC;CA6BhB"}
|
package/dist/tools.js
CHANGED
|
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
exports.BrowserBridge = void 0;
|
|
14
14
|
const logger_1 = require("./logger");
|
|
15
15
|
const index_1 = require("./experimental/index");
|
|
16
|
+
const index_2 = require("./experimental/fingerprinting/index");
|
|
16
17
|
const schemas_1 = require("./tools/schemas");
|
|
17
18
|
const cdp_1 = require("./tools/lib/cdp");
|
|
18
19
|
const element_resolver_1 = require("./tools/lib/element-resolver");
|
|
@@ -57,10 +58,37 @@ class BrowserBridge {
|
|
|
57
58
|
ext,
|
|
58
59
|
connectionManager: this.connectionManager,
|
|
59
60
|
config: this.config?.configService,
|
|
61
|
+
metricsLogger: this.metricsLogger,
|
|
60
62
|
cdp: (method, params) => (0, cdp_1.cdp)(ext, method, params),
|
|
61
63
|
eval: evalFnBound,
|
|
62
64
|
sleep: (ms) => new Promise(resolve => setTimeout(resolve, ms)),
|
|
63
|
-
getElementCenter: (selector) => (0,
|
|
65
|
+
getElementCenter: (selector) => (0, index_2.resolveWithHealing)(evalFnBound, selector, () => this.connectionManager?.getAttachedTab()?.url, (ev) => this.metricsLogger?.write({
|
|
66
|
+
session_id: this.connectionManager?.clientId ?? 'unknown',
|
|
67
|
+
tool: 'fingerprint',
|
|
68
|
+
params: ev,
|
|
69
|
+
result: 'ok',
|
|
70
|
+
duration_ms: 0,
|
|
71
|
+
})),
|
|
72
|
+
captureFingerprintInContext: (contextId, selector) => void (0, index_2.captureInContext)((expr) => (0, cdp_1.cdp)(ext, 'Runtime.evaluate', { expression: expr, contextId, returnByValue: true })
|
|
73
|
+
.then((r) => r.result?.value), this.connectionManager?.getAttachedTab()?.url, selector),
|
|
74
|
+
healFingerprintInContext: (contextId, selector) => (0, index_2.healInContext)((expr) => (0, cdp_1.cdp)(ext, 'Runtime.evaluate', { expression: expr, contextId, returnByValue: true })
|
|
75
|
+
.then((r) => r.result?.value), this.connectionManager?.getAttachedTab()?.url, selector).then((hit) => {
|
|
76
|
+
if (!hit)
|
|
77
|
+
return null;
|
|
78
|
+
const url = this.connectionManager?.getAttachedTab()?.url;
|
|
79
|
+
this.metricsLogger?.write({
|
|
80
|
+
session_id: this.connectionManager?.clientId ?? 'unknown',
|
|
81
|
+
tool: 'fingerprint',
|
|
82
|
+
params: {
|
|
83
|
+
event: 'fingerprint', outcome: 'healed',
|
|
84
|
+
selector, domain: (0, index_2.domainOf)(url), route: (0, index_2.routeOf)(url),
|
|
85
|
+
score: hit.score, margin: hit.margin, hadRecord: true,
|
|
86
|
+
},
|
|
87
|
+
result: 'ok',
|
|
88
|
+
duration_ms: 0,
|
|
89
|
+
});
|
|
90
|
+
return { cx: hit.cx, cy: hit.cy, score: hit.score };
|
|
91
|
+
}),
|
|
64
92
|
getSelectorExpression: element_resolver_1.getSelectorExpression,
|
|
65
93
|
findAlternativeSelectors: (selector) => (0, element_resolver_1.findAlternativeSelectors)(evalFnBound, selector),
|
|
66
94
|
formatResult: (name, result, options) => (0, result_formatter_1.formatResult)(name, result, options, this.connectionManager),
|