@enricai/barnacle 1.12.73 → 1.12.74
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/scraper/browser-click-expr.d.ts +68 -0
- package/dist/scraper/browser-click-expr.d.ts.map +1 -1
- package/dist/scraper/browser-click-expr.js +121 -1
- package/dist/scraper/browser-click-expr.js.map +1 -1
- package/dist/scraper/flow-runner.d.ts +1 -6
- package/dist/scraper/flow-runner.d.ts.map +1 -1
- package/dist/scraper/flow-runner.js +113 -44
- package/dist/scraper/flow-runner.js.map +1 -1
- package/dist/scraper/phantom-click.d.ts +8 -0
- package/dist/scraper/phantom-click.d.ts.map +1 -1
- package/dist/scraper/phantom-click.js +21 -1
- package/dist/scraper/phantom-click.js.map +1 -1
- package/dist/scraper/submit-control.d.ts.map +1 -1
- package/dist/scraper/submit-control.js +2 -19
- package/dist/scraper/submit-control.js.map +1 -1
- package/package.json +1 -1
|
@@ -40,6 +40,14 @@ export interface PhantomClickAttempt {
|
|
|
40
40
|
*/
|
|
41
41
|
isSubmitShapedStep?: boolean;
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Credits a navigation as real only when origin or pathname actually
|
|
45
|
+
* changed, so a same-page query-string mutation (e.g. a step counter) never
|
|
46
|
+
* counts as an advance. Shared by {@link classifyPhantomClick} and
|
|
47
|
+
* flow-runner's own urlChanged/retryUrlChanged checks so both agree on what
|
|
48
|
+
* counts as a genuine navigation.
|
|
49
|
+
*/
|
|
50
|
+
export declare function hasOriginOrPathChanged(preUrl: string, postUrl: string): boolean;
|
|
43
51
|
export type PhantomClickVerdict =
|
|
44
52
|
/** Stagehand reported success but pre/post shows no observable effect — a no-op click. */
|
|
45
53
|
"phantom"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phantom-click.d.ts","sourceRoot":"","sources":["../../src/scraper/phantom-click.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qFAAqF;AACrF,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,IAAI,EAAE,oBAAoB,CAAC;IAC3B;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,mBAAmB;AAC7B,0FAA0F;AACxF,SAAS;AACX,mEAAmE;GACjE,WAAW;AACb,kKAAkK;GAChK,YAAY,CAAC;AAEjB;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,mBAAmB,CAyBtF"}
|
|
1
|
+
{"version":3,"file":"phantom-click.d.ts","sourceRoot":"","sources":["../../src/scraper/phantom-click.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qFAAqF;AACrF,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,IAAI,EAAE,oBAAoB,CAAC;IAC3B;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAWD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/E;AAED,MAAM,MAAM,mBAAmB;AAC7B,0FAA0F;AACxF,SAAS;AACX,mEAAmE;GACjE,WAAW;AACb,kKAAkK;GAChK,YAAY,CAAC;AAEjB;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,mBAAmB,CAyBtF"}
|
|
@@ -8,7 +8,27 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.TRIVIAL_DOM_DELTA_BYTES = void 0;
|
|
11
|
+
exports.hasOriginOrPathChanged = hasOriginOrPathChanged;
|
|
11
12
|
exports.classifyPhantomClick = classifyPhantomClick;
|
|
13
|
+
function originAndPathOf(url) {
|
|
14
|
+
try {
|
|
15
|
+
const parsed = new URL(url);
|
|
16
|
+
return `${parsed.origin}${parsed.pathname}`;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return url;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Credits a navigation as real only when origin or pathname actually
|
|
24
|
+
* changed, so a same-page query-string mutation (e.g. a step counter) never
|
|
25
|
+
* counts as an advance. Shared by {@link classifyPhantomClick} and
|
|
26
|
+
* flow-runner's own urlChanged/retryUrlChanged checks so both agree on what
|
|
27
|
+
* counts as a genuine navigation.
|
|
28
|
+
*/
|
|
29
|
+
function hasOriginOrPathChanged(preUrl, postUrl) {
|
|
30
|
+
return originAndPathOf(preUrl) !== originAndPathOf(postUrl);
|
|
31
|
+
}
|
|
12
32
|
/**
|
|
13
33
|
* Bytes of body-HTML growth treated as noise rather than a real DOM effect.
|
|
14
34
|
* Reused from `describeAttemptEffectSignals`'s dom-grew-without-network
|
|
@@ -30,7 +50,7 @@ function classifyPhantomClick(attempt) {
|
|
|
30
50
|
return "unresolved";
|
|
31
51
|
const networkDelta = attempt.post.networkCount - attempt.pre.networkCount;
|
|
32
52
|
const bytesDelta = attempt.post.bodyHtmlLength - attempt.pre.bodyHtmlLength;
|
|
33
|
-
const urlChanged = attempt.
|
|
53
|
+
const urlChanged = hasOriginOrPathChanged(attempt.pre.url, attempt.post.url);
|
|
34
54
|
// The resolved element's OWN committed selection state changed across the
|
|
35
55
|
// click — a design-system option/toggle (Base Web `kind` flip, hashed-class
|
|
36
56
|
// swap, ARIA, native `checked`) registers here with no network, no URL, and a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phantom-click.js","sourceRoot":"","sources":["../../src/scraper/phantom-click.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG
|
|
1
|
+
{"version":3,"file":"phantom-click.js","sourceRoot":"","sources":["../../src/scraper/phantom-click.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;AAuCH,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,gCAAuC,MAAc,EAAE,OAAe;IACpE,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,eAAe,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AAUD;;;;;;GAMG;AACU,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;;;GAOG;AACH,8BAAqC,OAA4B;IAC/D,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC;IAE3D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5E,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,8EAA8E;IAC9E,uEAAuE;IACvE,+EAA+E;IAC/E,8EAA8E;IAC9E,8EAA8E;IAC9E,+EAA+E;IAC/E,2DAA2D;IAC3D,MAAM,mBAAmB,GAAG,CAAC,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,KAAK,IAAI,CAAC;IAChG,8EAA8E;IAC9E,4EAA4E;IAC5E,6CAA6C;IAC7C,MAAM,yBAAyB,GAC7B,CAAC,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,QAAA,uBAAuB,CAAC;IAEjF,MAAM,SAAS,GACb,YAAY,KAAK,CAAC,IAAI,UAAU,IAAI,mBAAmB,IAAI,yBAAyB,CAAC;IACvF,OAAO,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-control.d.ts","sourceRoot":"","sources":["../../src/scraper/submit-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"submit-control.d.ts","sourceRoot":"","sources":["../../src/scraper/submit-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,sOAG5B,CAAC;AA4DJ;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,0BAA0B,s4CAyBpC,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,iBAAiB,uoEAQ3B,CAAC;AA+CJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,SAAa,GAAG,MAAM,CA0BvE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,SAAa,GAAG,MAAM,CAYtF;AAED,2HAA2H;AAC3H,MAAM,MAAM,mBAAmB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAElD,qGAAqG;AACrG,MAAM,WAAW,eAAe;IAC9B,mIAAmI;IACnI,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,0EAA0E;AAC1E,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,oKAAoK;IACpK,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B"}
|
|
@@ -83,23 +83,6 @@ const IS_DISABLED_EXPR = `((el) => {
|
|
|
83
83
|
}
|
|
84
84
|
return false;
|
|
85
85
|
})`;
|
|
86
|
-
/**
|
|
87
|
-
* Recursive open-shadow-root walker, composed as a browser-context
|
|
88
|
-
* expression string via string interpolation rather than runtime code that
|
|
89
|
-
* could share a module import.
|
|
90
|
-
*/
|
|
91
|
-
const DEEP_ELEMENTS_EXPR = `((root) => {
|
|
92
|
-
const out = [];
|
|
93
|
-
const walk = (node) => {
|
|
94
|
-
const kids = node.querySelectorAll ? Array.from(node.querySelectorAll("*")) : [];
|
|
95
|
-
for (const el of kids) {
|
|
96
|
-
out.push(el);
|
|
97
|
-
if (el.shadowRoot) walk(el.shadowRoot);
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
walk(root);
|
|
101
|
-
return out;
|
|
102
|
-
})`;
|
|
103
86
|
/**
|
|
104
87
|
* Tag/role-agnostic tier-0.5 fallback: a generic-action-verb accessible name
|
|
105
88
|
* (create/continue/next/confirm/proceed — the labels a JS-handled action
|
|
@@ -252,7 +235,7 @@ function buildRankSubmitCandidatesExpr(root = "document") {
|
|
|
252
235
|
const rankTier = ${RANK_TIERS_EXPR};
|
|
253
236
|
const isVisible = ${IS_VISIBLE_EXPR};
|
|
254
237
|
const isDisabled = ${IS_DISABLED_EXPR};
|
|
255
|
-
const deepElements = ${DEEP_ELEMENTS_EXPR};
|
|
238
|
+
const deepElements = ${browser_click_expr_1.DEEP_ELEMENTS_EXPR};
|
|
256
239
|
const all = deepElements(${root});
|
|
257
240
|
const ranked = [];
|
|
258
241
|
for (let i = 0; i < all.length; i++) {
|
|
@@ -301,7 +284,7 @@ function buildClickByDeepIndexExpr(deepIndex, root = "document") {
|
|
|
301
284
|
return `(() => {
|
|
302
285
|
const isVisible = ${IS_VISIBLE_EXPR};
|
|
303
286
|
const isDisabled = ${IS_DISABLED_EXPR};
|
|
304
|
-
const deepElements = ${DEEP_ELEMENTS_EXPR};
|
|
287
|
+
const deepElements = ${browser_click_expr_1.DEEP_ELEMENTS_EXPR};
|
|
305
288
|
const all = deepElements(${root});
|
|
306
289
|
const el = all[${JSON.stringify(deepIndex)}];
|
|
307
290
|
if (!el) return { clicked: false };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-control.js","sourceRoot":"","sources":["../../src/scraper/submit-control.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;AAEH,
|
|
1
|
+
{"version":3,"file":"submit-control.js","sourceRoot":"","sources":["../../src/scraper/submit-control.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;AAEH,qEAIsC;AAEtC;;;;;;;;;GASG;AACU,QAAA,kBAAkB,GAAG;;;GAG/B,CAAC;AAEJ;;;;;;;;GAQG;AACH,MAAM,oBAAoB,GAAG;;;;;GAK1B,CAAC;AAEJ;;;;;;;;;;GAUG;AACH,MAAM,eAAe,GAAG;;;;;GAKrB,CAAC;AAEJ;;;;;;;;;;;;;;GAcG;AACH,MAAM,gBAAgB,GAAG;gCACO,iDAA4B;;;;;;GAMzD,CAAC;AAEJ;;;;;;;;;;;;;;;GAeG;AACU,QAAA,0BAA0B,GAAG;;;;;;;kCAOR,iDAA4B;;;;;;;;2BAQnC,oBAAoB;;;;;;;;;;GAU5C,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;GAoBG;AACU,QAAA,iBAAiB,GAAG;;uBAEV,QAAA,kBAAkB;2BACd,oBAAoB;;;6BAGlB,QAAA,0BAA0B;;GAEpD,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,eAAe,GAAG;uBACD,QAAA,kBAAkB;;;;;;;;;;6BAUZ,QAAA,0BAA0B;;;GAGpD,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,uCAA8C,IAAI,GAAG,UAAU;IAC7D,OAAO;6BACoB,oBAAoB;uBAC1B,eAAe;wBACd,eAAe;yBACd,gBAAgB;2BACd,uCAAkB;+BACd,IAAI;;;;;;;;;;;;;;;;;;OAkB5B,CAAC;AACR,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,mCAA0C,SAAiB,EAAE,IAAI,GAAG,UAAU;IAC5E,OAAO;wBACe,eAAe;yBACd,gBAAgB;2BACd,uCAAkB;+BACd,IAAI;qBACd,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;MAGxC,IAAA,wCAAmB,EAAC,IAAI,CAAC;;OAExB,CAAC;AACR,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enricai/barnacle",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.74",
|
|
4
4
|
"description": "Barnacle turns any website into an API. POST a structured payload to a typed endpoint and Barnacle drives a browser session through the target site, returning a structured result.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Enricai",
|