@enricai/barnacle 1.6.11 → 1.6.13
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 +113 -9
- package/dist/api/schemas/submissions.d.ts +14 -0
- package/dist/api/schemas/submissions.d.ts.map +1 -1
- package/dist/api/schemas/submissions.js +1 -0
- package/dist/api/schemas/submissions.js.map +1 -1
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -0
- package/dist/config.js.map +1 -1
- package/dist/lib/telemetry/beacon-capture.d.ts +45 -2
- package/dist/lib/telemetry/beacon-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/beacon-capture.js +36 -0
- package/dist/lib/telemetry/beacon-capture.js.map +1 -1
- package/dist/lib/telemetry/reconciliation-record.d.ts +50 -2
- package/dist/lib/telemetry/reconciliation-record.d.ts.map +1 -1
- package/dist/lib/telemetry/reconciliation-record.js +60 -7
- package/dist/lib/telemetry/reconciliation-record.js.map +1 -1
- package/dist/lib/telemetry/reconciliation-source.d.ts +7 -1
- package/dist/lib/telemetry/reconciliation-source.d.ts.map +1 -1
- package/dist/lib/telemetry/reconciliation-source.js +21 -5
- package/dist/lib/telemetry/reconciliation-source.js.map +1 -1
- package/dist/lib/telemetry/run-telemetry.d.ts +67 -0
- package/dist/lib/telemetry/run-telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry/run-telemetry.js +55 -0
- package/dist/lib/telemetry/run-telemetry.js.map +1 -0
- package/dist/lib/telemetry/submission-capture.d.ts +11 -4
- package/dist/lib/telemetry/submission-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/submission-capture.js +1 -0
- package/dist/lib/telemetry/submission-capture.js.map +1 -1
- package/dist/lib/telemetry/submission-reader.d.ts +11 -3
- package/dist/lib/telemetry/submission-reader.d.ts.map +1 -1
- package/dist/lib/telemetry/submission-reader.js +32 -8
- package/dist/lib/telemetry/submission-reader.js.map +1 -1
- package/dist/lib/tracking-click.d.ts.map +1 -1
- package/dist/lib/tracking-click.js +19 -0
- package/dist/lib/tracking-click.js.map +1 -1
- package/dist/plugins/loader.d.ts +20 -0
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +94 -17
- package/dist/plugins/loader.js.map +1 -1
- package/dist/scraper/deep-locator-actuate.d.ts +94 -0
- package/dist/scraper/deep-locator-actuate.d.ts.map +1 -0
- package/dist/scraper/deep-locator-actuate.js +216 -0
- package/dist/scraper/deep-locator-actuate.js.map +1 -0
- package/dist/scraper/deep-locator-candidates.d.ts +105 -18
- package/dist/scraper/deep-locator-candidates.d.ts.map +1 -1
- package/dist/scraper/deep-locator-candidates.js +238 -46
- package/dist/scraper/deep-locator-candidates.js.map +1 -1
- package/dist/scraper/deep-locator-click.d.ts +71 -0
- package/dist/scraper/deep-locator-click.d.ts.map +1 -0
- package/dist/scraper/deep-locator-click.js +71 -0
- package/dist/scraper/deep-locator-click.js.map +1 -0
- package/dist/scraper/deep-locator-fake.d.ts +344 -14
- package/dist/scraper/deep-locator-fake.d.ts.map +1 -1
- package/dist/scraper/deep-locator-fake.js +509 -7
- package/dist/scraper/deep-locator-fake.js.map +1 -1
- package/dist/scraper/deep-locator-scan.d.ts +220 -0
- package/dist/scraper/deep-locator-scan.d.ts.map +1 -0
- package/dist/scraper/deep-locator-scan.js +386 -0
- package/dist/scraper/deep-locator-scan.js.map +1 -0
- package/dist/scraper/fake-timer-advance.d.ts +47 -0
- package/dist/scraper/fake-timer-advance.d.ts.map +1 -0
- package/dist/scraper/fake-timer-advance.js +44 -0
- package/dist/scraper/fake-timer-advance.js.map +1 -0
- package/dist/scraper/flow-runner.d.ts +36 -1
- package/dist/scraper/flow-runner.d.ts.map +1 -1
- package/dist/scraper/flow-runner.js +354 -56
- package/dist/scraper/flow-runner.js.map +1 -1
- package/dist/scraper/frame-target.d.ts +28 -0
- package/dist/scraper/frame-target.d.ts.map +1 -1
- package/dist/scraper/frame-target.js +30 -0
- package/dist/scraper/frame-target.js.map +1 -1
- package/dist/scraper/session-browserbase.d.ts +13 -0
- package/dist/scraper/session-browserbase.d.ts.map +1 -1
- package/dist/scraper/session-browserbase.js +29 -0
- package/dist/scraper/session-browserbase.js.map +1 -1
- package/dist/scraper/session-ip.d.ts +69 -0
- package/dist/scraper/session-ip.d.ts.map +1 -0
- package/dist/scraper/session-ip.js +88 -0
- package/dist/scraper/session-ip.js.map +1 -0
- package/dist/scraper/session-shared.d.ts +9 -0
- package/dist/scraper/session-shared.d.ts.map +1 -1
- package/dist/scraper/session-shared.js.map +1 -1
- package/dist/scraper/submit-control.d.ts +14 -2
- package/dist/scraper/submit-control.d.ts.map +1 -1
- package/dist/scraper/submit-control.js +33 -2
- package/dist/scraper/submit-control.js.map +1 -1
- package/dist/scripts/recon-browser.d.ts.map +1 -1
- package/dist/scripts/recon-browser.js +32 -0
- package/dist/scripts/recon-browser.js.map +1 -1
- package/dist/site-plugin.d.ts +20 -0
- package/dist/site-plugin.d.ts.map +1 -1
- package/dist/testing/integration-runner.d.ts.map +1 -1
- package/dist/testing/integration-runner.js +6 -7
- package/dist/testing/integration-runner.js.map +1 -1
- package/package.json +1 -1
|
@@ -64,6 +64,34 @@ export declare function mainFrameTarget(page: Page, opts?: {
|
|
|
64
64
|
declaredFrameSelector?: string | null;
|
|
65
65
|
evaluateTimeoutMs?: number;
|
|
66
66
|
}): FrameTarget;
|
|
67
|
+
/**
|
|
68
|
+
* Single non-polling presence probe for a frame that may have already
|
|
69
|
+
* attached — the seam callers should use instead of hand-rolling
|
|
70
|
+
* `resolveFrameTarget(page, frameSelector, { timeoutMs: 0 })` for an
|
|
71
|
+
* "is it already there?" check (`deep-locator-actuate.ts`,
|
|
72
|
+
* `deep-locator-candidates.ts`, `flow-runner.ts`'s
|
|
73
|
+
* `reresolveFrameTargetIfLost`). That zero-budget pattern sets
|
|
74
|
+
* `tryResolveChildFrame`'s deadline to `Date.now() + 0`, so every probe
|
|
75
|
+
* clamps to `Math.min(evaluateTimeoutMs, remainingBudgetMs()) === 0` — a
|
|
76
|
+
* `setTimeout(reject, 0)` macrotask that always wins the race against a
|
|
77
|
+
* genuinely awaited CDP round-trip, so the probe can never observe an
|
|
78
|
+
* already-attached frame outside of a same-tick-resolving test fake. This
|
|
79
|
+
* probe's deadline instead starts `probeFloorMs` (config-backed via
|
|
80
|
+
* `config.scraper.framePresenceProbeFloorMs`) in the future, giving each
|
|
81
|
+
* `withWatchdog` call a real budget a CDP round-trip can land within.
|
|
82
|
+
*
|
|
83
|
+
* Still never polls: exactly one top-level iframe-src probe, plus — per
|
|
84
|
+
* `tryResolveChildFrame`'s existing `index > 0 && remainingBudgetMs() <= 0`
|
|
85
|
+
* bound — at most one further candidate probe, so a single call costs at
|
|
86
|
+
* most ~2x `probeFloorMs` regardless of how many `page.frames()` candidates
|
|
87
|
+
* exist. Returns `null` (never a main-frame fallback) when nothing attaches
|
|
88
|
+
* within the floor, so a caller can tell "not present yet" apart from a
|
|
89
|
+
* resolved target and keep its own fallback behavior.
|
|
90
|
+
*/
|
|
91
|
+
export declare function probeAttachedFrameTarget(page: Page, frameSelector: string, opts?: {
|
|
92
|
+
evaluateTimeoutMs?: number;
|
|
93
|
+
probeFloorMs?: number;
|
|
94
|
+
}): Promise<FrameTarget | null>;
|
|
67
95
|
/**
|
|
68
96
|
* Resolves the `FrameTarget` for `frameSelector` against `page`, polling for
|
|
69
97
|
* up to `timeoutMs` (at `pollMs` intervals) before falling back to the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame-target.d.ts","sourceRoot":"","sources":["../../src/scraper/frame-target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAQrD,kHAAkH;AAClH,KAAK,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,uFAAuF;IACvF,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,uIAAuI;IACvI,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,wGAAwG;IACxG,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,GAAG,OAAO,EACjC,wBAAwB,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EACjE,GAAG,CAAC,EAAE,GAAG,GACR,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,wFAAwF;IACxF,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,6EAA6E;IAC7E,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB,gMAAgM;IAChM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,IAAI,GAAE;IAAE,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/E,WAAW,CAmBb;AAwJD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,EAC7B,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7E,OAAO,CAAC,WAAW,CAAC,CAqBtB;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,GACpB,MAAM,CAOR;AAKD,+FAA+F;AAC/F,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7E,OAAO,CAAC,IAAI,CAAC,CAyBf"}
|
|
1
|
+
{"version":3,"file":"frame-target.d.ts","sourceRoot":"","sources":["../../src/scraper/frame-target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAQrD,kHAAkH;AAClH,KAAK,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,uFAAuF;IACvF,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,uIAAuI;IACvI,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,wGAAwG;IACxG,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,GAAG,OAAO,EACjC,wBAAwB,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EACjE,GAAG,CAAC,EAAE,GAAG,GACR,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,wFAAwF;IACxF,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,6EAA6E;IAC7E,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB,gMAAgM;IAChM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,IAAI,GAAE;IAAE,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/E,WAAW,CAmBb;AAwJD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,EACrB,IAAI,GAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/D,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAI7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,EAC7B,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7E,OAAO,CAAC,WAAW,CAAC,CAqBtB;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,GACpB,MAAM,CAOR;AAKD,+FAA+F;AAC/F,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7E,OAAO,CAAC,IAAI,CAAC,CAyBf"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.mainFrameTarget = mainFrameTarget;
|
|
16
|
+
exports.probeAttachedFrameTarget = probeAttachedFrameTarget;
|
|
16
17
|
exports.resolveFrameTarget = resolveFrameTarget;
|
|
17
18
|
exports.buildHopSelector = buildHopSelector;
|
|
18
19
|
exports.sleep = sleep;
|
|
@@ -176,6 +177,35 @@ async function tryResolveChildFrame(page, frameSelector, evaluateTimeoutMs, dead
|
|
|
176
177
|
}
|
|
177
178
|
return null;
|
|
178
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Single non-polling presence probe for a frame that may have already
|
|
182
|
+
* attached — the seam callers should use instead of hand-rolling
|
|
183
|
+
* `resolveFrameTarget(page, frameSelector, { timeoutMs: 0 })` for an
|
|
184
|
+
* "is it already there?" check (`deep-locator-actuate.ts`,
|
|
185
|
+
* `deep-locator-candidates.ts`, `flow-runner.ts`'s
|
|
186
|
+
* `reresolveFrameTargetIfLost`). That zero-budget pattern sets
|
|
187
|
+
* `tryResolveChildFrame`'s deadline to `Date.now() + 0`, so every probe
|
|
188
|
+
* clamps to `Math.min(evaluateTimeoutMs, remainingBudgetMs()) === 0` — a
|
|
189
|
+
* `setTimeout(reject, 0)` macrotask that always wins the race against a
|
|
190
|
+
* genuinely awaited CDP round-trip, so the probe can never observe an
|
|
191
|
+
* already-attached frame outside of a same-tick-resolving test fake. This
|
|
192
|
+
* probe's deadline instead starts `probeFloorMs` (config-backed via
|
|
193
|
+
* `config.scraper.framePresenceProbeFloorMs`) in the future, giving each
|
|
194
|
+
* `withWatchdog` call a real budget a CDP round-trip can land within.
|
|
195
|
+
*
|
|
196
|
+
* Still never polls: exactly one top-level iframe-src probe, plus — per
|
|
197
|
+
* `tryResolveChildFrame`'s existing `index > 0 && remainingBudgetMs() <= 0`
|
|
198
|
+
* bound — at most one further candidate probe, so a single call costs at
|
|
199
|
+
* most ~2x `probeFloorMs` regardless of how many `page.frames()` candidates
|
|
200
|
+
* exist. Returns `null` (never a main-frame fallback) when nothing attaches
|
|
201
|
+
* within the floor, so a caller can tell "not present yet" apart from a
|
|
202
|
+
* resolved target and keep its own fallback behavior.
|
|
203
|
+
*/
|
|
204
|
+
async function probeAttachedFrameTarget(page, frameSelector, opts = {}) {
|
|
205
|
+
const evaluateTimeoutMs = opts.evaluateTimeoutMs ?? config_1.config.scraper.frameEvaluateTimeoutMs;
|
|
206
|
+
const probeFloorMs = opts.probeFloorMs ?? config_1.config.scraper.framePresenceProbeFloorMs;
|
|
207
|
+
return tryResolveChildFrame(page, frameSelector, evaluateTimeoutMs, Date.now() + probeFloorMs);
|
|
208
|
+
}
|
|
179
209
|
/**
|
|
180
210
|
* Resolves the `FrameTarget` for `frameSelector` against `page`, polling for
|
|
181
211
|
* up to `timeoutMs` (at `pollMs` intervals) before falling back to the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame-target.js","sourceRoot":"","sources":["../../src/scraper/frame-target.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG
|
|
1
|
+
{"version":3,"file":"frame-target.js","sourceRoot":"","sources":["../../src/scraper/frame-target.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,19 @@ export declare function makeFilteredStagehandLogger(pinoLogger: Logger): {
|
|
|
47
47
|
reportSuppressed: () => void;
|
|
48
48
|
getSuppressedCount: () => number;
|
|
49
49
|
};
|
|
50
|
+
/**
|
|
51
|
+
* Wraps a session's outbound-IP resolver so it fires the echo navigation at
|
|
52
|
+
* most once per session and memoizes the result — two concurrent callers
|
|
53
|
+
* (e.g. dispatch and tracking-click) share one in-flight resolution instead
|
|
54
|
+
* of each triggering their own tab load. Gated on `enabled` so a disabled
|
|
55
|
+
* capture flag short-circuits before ever invoking `resolve`, and `resolve`
|
|
56
|
+
* failures are swallowed to `null` so a caller can never observe a rejection
|
|
57
|
+
* from this accessor, matching the never-throw contract `resolveSessionOutboundIp`
|
|
58
|
+
* already holds for the underlying navigation.
|
|
59
|
+
*/
|
|
60
|
+
export declare function makeOutboundIpAccessor(resolve: () => Promise<string | null>, opts: {
|
|
61
|
+
enabled: boolean;
|
|
62
|
+
}): () => Promise<string | null>;
|
|
50
63
|
/**
|
|
51
64
|
* Spins up one Browserbase cloud session with the configured Stagehand LLM.
|
|
52
65
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-browserbase.d.ts","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-browserbase.d.ts","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAG3B,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAI9C;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG;IAC/D,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,kBAAkB,EAAE,MAAM,MAAM,CAAC;CAClC,CA6BA;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EACrC,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACzB,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,+BAA+B,CACnD,IAAI,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,iBAAiB,GAAG,gCAAgC,CAAC,GACvF,OAAO,CAAC,cAAc,CAAC,CAiIzB"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.makeFilteredStagehandLogger = makeFilteredStagehandLogger;
|
|
4
|
+
exports.makeOutboundIpAccessor = makeOutboundIpAccessor;
|
|
4
5
|
exports.createBrowserbaseBrowserSession = createBrowserbaseBrowserSession;
|
|
5
6
|
const stagehand_1 = require("@browserbasehq/stagehand");
|
|
6
7
|
const config_1 = require("../config");
|
|
7
8
|
const bedrock_1 = require("../lib/bedrock");
|
|
8
9
|
const errors_1 = require("../lib/errors");
|
|
9
10
|
const logging_1 = require("../lib/logging");
|
|
11
|
+
const session_ip_1 = require("../scraper/session-ip");
|
|
10
12
|
const session_shared_1 = require("../scraper/session-shared");
|
|
11
13
|
const throttle_1 = require("../scraper/throttle");
|
|
12
14
|
const logger = (0, logging_1.getLogger)({ name: "scraper/session-browserbase" });
|
|
@@ -68,6 +70,27 @@ function makeFilteredStagehandLogger(pinoLogger) {
|
|
|
68
70
|
const getSuppressedCount = () => suppressedCount;
|
|
69
71
|
return { callback, reportSuppressed, getSuppressedCount };
|
|
70
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Wraps a session's outbound-IP resolver so it fires the echo navigation at
|
|
75
|
+
* most once per session and memoizes the result — two concurrent callers
|
|
76
|
+
* (e.g. dispatch and tracking-click) share one in-flight resolution instead
|
|
77
|
+
* of each triggering their own tab load. Gated on `enabled` so a disabled
|
|
78
|
+
* capture flag short-circuits before ever invoking `resolve`, and `resolve`
|
|
79
|
+
* failures are swallowed to `null` so a caller can never observe a rejection
|
|
80
|
+
* from this accessor, matching the never-throw contract `resolveSessionOutboundIp`
|
|
81
|
+
* already holds for the underlying navigation.
|
|
82
|
+
*/
|
|
83
|
+
function makeOutboundIpAccessor(resolve, opts) {
|
|
84
|
+
let inFlight;
|
|
85
|
+
return () => {
|
|
86
|
+
if (!opts.enabled)
|
|
87
|
+
return Promise.resolve(null);
|
|
88
|
+
if (!inFlight) {
|
|
89
|
+
inFlight = resolve().catch(() => null);
|
|
90
|
+
}
|
|
91
|
+
return inFlight;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
71
94
|
/**
|
|
72
95
|
* Spins up one Browserbase cloud session with the configured Stagehand LLM.
|
|
73
96
|
*
|
|
@@ -203,6 +226,11 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
203
226
|
const sessionId = stagehand.browserbaseSessionID ?? "unknown";
|
|
204
227
|
logger.info(`created browserbase session ${sessionId} viewport=${viewport.width}x${viewport.height} proxies=${useResidentialProxy} advancedStealth=${advancedStealth}`);
|
|
205
228
|
const limiter = (0, throttle_1.createSessionLimiter)();
|
|
229
|
+
const getOutboundIp = makeOutboundIpAccessor(() => (0, session_ip_1.resolveSessionOutboundIp)(() => stagehand.context.newPage(), {
|
|
230
|
+
echoUrl: config_1.config.scraper.sessionIpEchoUrl,
|
|
231
|
+
timeoutMs: config_1.config.scraper.sessionIpTimeoutMs,
|
|
232
|
+
logger,
|
|
233
|
+
}), { enabled: config_1.config.scraper.captureSessionIp });
|
|
206
234
|
const close = async () => {
|
|
207
235
|
try {
|
|
208
236
|
await stagehand.close();
|
|
@@ -220,6 +248,7 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
220
248
|
provider: "browserbase",
|
|
221
249
|
close,
|
|
222
250
|
getSuppressedAisdkElementIdErrorCount,
|
|
251
|
+
getOutboundIp,
|
|
223
252
|
};
|
|
224
253
|
}
|
|
225
254
|
//# sourceMappingURL=session-browserbase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-browserbase.js","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-browserbase.js","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves a browser session's outbound IP by opening a throwaway top-level
|
|
3
|
+
* tab and navigating it to an IP-echo endpoint. Neither the Browserbase SDK
|
|
4
|
+
* nor Stagehand exposes a session's actual outbound IP anywhere else (session
|
|
5
|
+
* create/get, logs, and recording endpoints all omit it) — having the session
|
|
6
|
+
* itself hit an echo endpoint is the only way to learn it.
|
|
7
|
+
*
|
|
8
|
+
* Typed against a minimal page factory rather than `Stagehand`/`V3Context` so
|
|
9
|
+
* it can be unit-tested with fakes, no CDP connection or network required.
|
|
10
|
+
* Provider wiring (constructing the real factory from a live session) and
|
|
11
|
+
* config plumbing for `echoUrl`/`timeoutMs` are out of scope here.
|
|
12
|
+
*/
|
|
13
|
+
import type { Logger } from "../types/logging";
|
|
14
|
+
/**
|
|
15
|
+
* Minimal page surface this module needs — a structural subset of
|
|
16
|
+
* Stagehand's `Page` (`goto`, `evaluate`, `close`) so a real `Page` instance
|
|
17
|
+
* satisfies this type without casting, while tests can supply a fake with no
|
|
18
|
+
* Stagehand dependency at all.
|
|
19
|
+
*/
|
|
20
|
+
export interface EchoPage {
|
|
21
|
+
goto(url: string, options?: {
|
|
22
|
+
waitUntil?: string;
|
|
23
|
+
timeoutMs?: number;
|
|
24
|
+
}): Promise<unknown>;
|
|
25
|
+
evaluate<R>(pageFunctionOrExpression: string): Promise<R>;
|
|
26
|
+
close(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Opens a new top-level tab and returns it. Production callers pass
|
|
30
|
+
* `() => stagehand.context.newPage()`; the resolver never constructs a
|
|
31
|
+
* Stagehand/CDP object itself.
|
|
32
|
+
*/
|
|
33
|
+
export type EchoPageFactory = () => Promise<EchoPage>;
|
|
34
|
+
/** Tuning knobs for {@link resolveSessionOutboundIp}. */
|
|
35
|
+
export interface SessionOutboundIpOptions {
|
|
36
|
+
/**
|
|
37
|
+
* IP-echo endpoint the tab navigates to. Caller-supplied (not defaulted
|
|
38
|
+
* here) so an operator can point at a self-hosted echo endpoint instead of
|
|
39
|
+
* a third-party one.
|
|
40
|
+
*/
|
|
41
|
+
echoUrl: string;
|
|
42
|
+
/**
|
|
43
|
+
* Bound on the whole open+navigate+read sequence, enforced via
|
|
44
|
+
* `withWatchdog`. A tab that never settles yields `null` instead of
|
|
45
|
+
* blocking the caller forever.
|
|
46
|
+
*/
|
|
47
|
+
timeoutMs: number;
|
|
48
|
+
/** Optional logger for failure diagnostics; omitted call sites stay silent. */
|
|
49
|
+
logger?: Logger;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Opens a throwaway top-level tab via `newPage`, navigates it to
|
|
53
|
+
* `opts.echoUrl`, and reads back whatever IP the echo endpoint reports as
|
|
54
|
+
* this session's outbound address. Never throws — every failure path
|
|
55
|
+
* (timeout, non-IP body, a thrown error from the page) resolves to `null`,
|
|
56
|
+
* matching the swallow-all telemetry contract `captureSubmissionEnvelope`
|
|
57
|
+
* holds elsewhere, since this value must never break a submission run.
|
|
58
|
+
*
|
|
59
|
+
* The tab is always closed, on every path, including the timeout path,
|
|
60
|
+
* since `page` is captured as soon as `newPage()` resolves and closed in a
|
|
61
|
+
* `finally` regardless of how the navigate/read step settles.
|
|
62
|
+
*
|
|
63
|
+
* Caveat: Browserbase does not document whether its managed residential
|
|
64
|
+
* proxy pool is sticky per session, so callers should pair a resolved value
|
|
65
|
+
* with a capture timestamp rather than assume it's stable for the run's
|
|
66
|
+
* duration.
|
|
67
|
+
*/
|
|
68
|
+
export declare function resolveSessionOutboundIp(newPage: EchoPageFactory, opts: SessionOutboundIpOptions): Promise<string | null>;
|
|
69
|
+
//# sourceMappingURL=session-ip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-ip.d.ts","sourceRoot":"","sources":["../../src/scraper/session-ip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,QAAQ,CAAC,CAAC,EAAE,wBAAwB,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEtD,yDAAyD;AACzD,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBxB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves a browser session's outbound IP by opening a throwaway top-level
|
|
4
|
+
* tab and navigating it to an IP-echo endpoint. Neither the Browserbase SDK
|
|
5
|
+
* nor Stagehand exposes a session's actual outbound IP anywhere else (session
|
|
6
|
+
* create/get, logs, and recording endpoints all omit it) — having the session
|
|
7
|
+
* itself hit an echo endpoint is the only way to learn it.
|
|
8
|
+
*
|
|
9
|
+
* Typed against a minimal page factory rather than `Stagehand`/`V3Context` so
|
|
10
|
+
* it can be unit-tested with fakes, no CDP connection or network required.
|
|
11
|
+
* Provider wiring (constructing the real factory from a live session) and
|
|
12
|
+
* config plumbing for `echoUrl`/`timeoutMs` are out of scope here.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.resolveSessionOutboundIp = resolveSessionOutboundIp;
|
|
16
|
+
const node_net_1 = require("node:net");
|
|
17
|
+
const errors_1 = require("../lib/errors");
|
|
18
|
+
const watchdog_1 = require("../scraper/watchdog");
|
|
19
|
+
const BODY_TEXT_EXPR = 'document.body ? document.body.innerText : ""';
|
|
20
|
+
const WATCHDOG_LABEL = "session-outbound-ip:echo";
|
|
21
|
+
/**
|
|
22
|
+
* Extracts a validated IP from an echo endpoint's response body. Accepts
|
|
23
|
+
* both `{"ip":"..."}` JSON (ipify's JSON mode) and a bare-text body (a
|
|
24
|
+
* self-hosted plain-text echo) so the resolver isn't tied to one provider's
|
|
25
|
+
* response shape. Returns `null` for anything that isn't a valid IPv4/IPv6
|
|
26
|
+
* shape — most notably a captive-portal HTML page — rather than persisting
|
|
27
|
+
* garbage as telemetry.
|
|
28
|
+
*/
|
|
29
|
+
function extractIpFromBody(body) {
|
|
30
|
+
const trimmed = body.trim();
|
|
31
|
+
const candidate = (() => {
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(trimmed);
|
|
34
|
+
if (parsed !== null &&
|
|
35
|
+
typeof parsed === "object" &&
|
|
36
|
+
"ip" in parsed &&
|
|
37
|
+
typeof parsed.ip === "string") {
|
|
38
|
+
return parsed.ip.trim();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// not JSON — fall through to bare-text handling below
|
|
43
|
+
}
|
|
44
|
+
return trimmed;
|
|
45
|
+
})();
|
|
46
|
+
return (0, node_net_1.isIP)(candidate) !== 0 ? candidate : null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Opens a throwaway top-level tab via `newPage`, navigates it to
|
|
50
|
+
* `opts.echoUrl`, and reads back whatever IP the echo endpoint reports as
|
|
51
|
+
* this session's outbound address. Never throws — every failure path
|
|
52
|
+
* (timeout, non-IP body, a thrown error from the page) resolves to `null`,
|
|
53
|
+
* matching the swallow-all telemetry contract `captureSubmissionEnvelope`
|
|
54
|
+
* holds elsewhere, since this value must never break a submission run.
|
|
55
|
+
*
|
|
56
|
+
* The tab is always closed, on every path, including the timeout path,
|
|
57
|
+
* since `page` is captured as soon as `newPage()` resolves and closed in a
|
|
58
|
+
* `finally` regardless of how the navigate/read step settles.
|
|
59
|
+
*
|
|
60
|
+
* Caveat: Browserbase does not document whether its managed residential
|
|
61
|
+
* proxy pool is sticky per session, so callers should pair a resolved value
|
|
62
|
+
* with a capture timestamp rather than assume it's stable for the run's
|
|
63
|
+
* duration.
|
|
64
|
+
*/
|
|
65
|
+
async function resolveSessionOutboundIp(newPage, opts) {
|
|
66
|
+
const { echoUrl, timeoutMs, logger } = opts;
|
|
67
|
+
let page;
|
|
68
|
+
try {
|
|
69
|
+
return await (0, watchdog_1.withWatchdog)(async () => {
|
|
70
|
+
page = await newPage();
|
|
71
|
+
await page.goto(echoUrl, { waitUntil: "domcontentloaded", timeoutMs });
|
|
72
|
+
const body = await page.evaluate(BODY_TEXT_EXPR);
|
|
73
|
+
return extractIpFromBody(body);
|
|
74
|
+
}, { timeoutMs, label: WATCHDOG_LABEL });
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
logger?.warn(`session outbound ip resolution failed: ${(0, errors_1.toErrorMessage)(err)}`);
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
if (page) {
|
|
82
|
+
await page.close().catch((closeErr) => {
|
|
83
|
+
logger?.warn(`session outbound ip echo tab close failed: ${(0, errors_1.toErrorMessage)(closeErr)}`);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=session-ip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-ip.js","sourceRoot":"","sources":["../../src/scraper/session-ip.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,uCAAgC;AAEhC,yCAA8C;AAC9C,iDAAkD;AAwClD,MAAM,cAAc,GAAG,8CAA8C,CAAC;AACtE,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAElD;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5C,IACE,MAAM,KAAK,IAAI;gBACf,OAAO,MAAM,KAAK,QAAQ;gBAC1B,IAAI,IAAI,MAAM;gBACd,OAAQ,MAA0B,CAAC,EAAE,KAAK,QAAQ,EAClD,CAAC;gBACD,OAAQ,MAAyB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAC9C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,IAAA,eAAI,EAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,mCACV,OAAwB,EACxB,IAA8B;IAE9B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,IAAI,IAA0B,CAAC;IAE/B,IAAI,CAAC;QACH,OAAO,MAAM,IAAA,uBAAY,EACvB,KAAK,IAAI,EAAE;YACT,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,CAAC;YACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAS,cAAc,CAAC,CAAC;YACzD,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,EACD,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CACrC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,IAAI,CAAC,0CAA0C,IAAA,uBAAc,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,QAAiB,EAAE,EAAE;gBAC7C,MAAM,EAAE,IAAI,CAAC,8CAA8C,IAAA,uBAAc,EAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACzF,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -37,6 +37,15 @@ export interface BrowserSession {
|
|
|
37
37
|
* this upstream error (currently Browserbase); absent on Steel.
|
|
38
38
|
*/
|
|
39
39
|
getSuppressedAisdkElementIdErrorCount?: () => number;
|
|
40
|
+
/**
|
|
41
|
+
* Lazily resolves and memoizes this session's outbound IP, so any caller
|
|
42
|
+
* (dispatch, tracking-click) can learn it once per session without
|
|
43
|
+
* repeating the echo navigation. Only present on providers where the
|
|
44
|
+
* proxied outbound IP is worth capturing (currently Browserbase); absent
|
|
45
|
+
* on Steel. Resolves to `null` when capture is disabled or resolution
|
|
46
|
+
* fails — never rejects.
|
|
47
|
+
*/
|
|
48
|
+
getOutboundIp?: () => Promise<string | null>;
|
|
40
49
|
}
|
|
41
50
|
/**
|
|
42
51
|
* Returns a fetch wrapper that aborts after `timeoutMs` milliseconds.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-shared.d.ts","sourceRoot":"","sources":["../../src/scraper/session-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAIzC,8BAA8B;AAC9B,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,OAAO,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8BAA8B,CAAC,EAAE,8BAA8B,CAAC;CACjE;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;OAIG;IACH,qCAAqC,CAAC,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"session-shared.d.ts","sourceRoot":"","sources":["../../src/scraper/session-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAIzC,8BAA8B;AAC9B,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,OAAO,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8BAA8B,CAAC,EAAE,8BAA8B,CAAC;CACjE;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;OAIG;IACH,qCAAqC,CAAC,EAAE,MAAM,MAAM,CAAC;IACrD;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,KAAK,CAYlE;AAaD,wBAAgB,kBAAkB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAEtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-shared.js","sourceRoot":"","sources":["../../src/scraper/session-shared.ts"],"names":[],"mappings":";;;;AAGA,yCAA0C;
|
|
1
|
+
{"version":3,"file":"session-shared.js","sourceRoot":"","sources":["../../src/scraper/session-shared.ts"],"names":[],"mappings":";;;;AAGA,yCAA0C;AAqD1C;;;;GAIG;AACH,4BAAmC,SAAiB;IAClD,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9D,kFAAkF;QAClF,gDAAgD;QAChD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CACtD,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,YAAY,WAAW,CAClD,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,SAAS,GAAG;IAChB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;CACrB,CAAC;AAEX;IACE,OAAO,IAAA,mBAAU,EAAC,SAAS,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -15,7 +15,11 @@
|
|
|
15
15
|
* highest first. Ties within a tier keep document order. Elements that
|
|
16
16
|
* match no positive tier — including anything caught by
|
|
17
17
|
* {@link NEGATIVE_TEXT_EXPR} — are excluded entirely rather than ranked
|
|
18
|
-
* last, so the caller never has to guess where the "safe" cutoff is.
|
|
18
|
+
* last, so the caller never has to guess where the "safe" cutoff is. Same
|
|
19
|
+
* treatment for a node that fails {@link IS_VISIBLE_EXPR}: a hidden
|
|
20
|
+
* per-step submit button in a wizard (0x0 layout box, `display:none`) is
|
|
21
|
+
* dropped before ranking so it can never outrank the rendered one and win
|
|
22
|
+
* a click that would silently no-op.
|
|
19
23
|
*
|
|
20
24
|
* Each returned candidate carries `deepIndex`, the candidate's position in
|
|
21
25
|
* this same deterministic deep-traversal order. {@link buildClickByDeepIndexExpr}
|
|
@@ -39,7 +43,13 @@ export declare function buildRankSubmitCandidatesExpr(root?: string): string;
|
|
|
39
43
|
* mousedown/mouseup/click, matching `deep-query.ts`'s controlled-state click
|
|
40
44
|
* convention). Returns `{ clicked: false }` without throwing if the index is
|
|
41
45
|
* out of range for the current DOM (e.g. the page changed between the
|
|
42
|
-
* locate and click calls)
|
|
46
|
+
* locate and click calls), and `{ clicked: false, reason: "not-actionable" }`
|
|
47
|
+
* without dispatching any event if the element at that index fails
|
|
48
|
+
* {@link IS_VISIBLE_EXPR} — a node with no layout box makes a real click
|
|
49
|
+
* throw a CDP `-32000 Node does not have a layout object` error, so this
|
|
50
|
+
* check reports the same outcome as data instead. `buildRankSubmitCandidatesExpr`
|
|
51
|
+
* already filters unrendered candidates out of its ranking, so this only
|
|
52
|
+
* fires when the DOM changed between the rank and click calls.
|
|
43
53
|
*
|
|
44
54
|
* `root` overrides the traversal root expression (default `"document"`)
|
|
45
55
|
* and must match the `root` passed to the {@link buildRankSubmitCandidatesExpr}
|
|
@@ -60,5 +70,7 @@ export interface SubmitCandidate {
|
|
|
60
70
|
/** Result of {@link buildClickByDeepIndexExpr}'s `page.evaluate` call. */
|
|
61
71
|
export interface ClickByDeepIndexResult {
|
|
62
72
|
clicked: boolean;
|
|
73
|
+
/** Present only when `clicked` is `false` and the element existed but had no layout box — distinguishes an unrendered element from a stale (out-of-range) index. */
|
|
74
|
+
reason?: "not-actionable";
|
|
63
75
|
}
|
|
64
76
|
//# sourceMappingURL=submit-control.d.ts.map
|
|
@@ -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;AA2FH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,SAAa,GAAG,MAAM,CAwBvE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,SAAa,GAAG,MAAM,CActF;AAED,2HAA2H;AAC3H,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5C,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"}
|
|
@@ -33,6 +33,23 @@ const ACCESSIBLE_NAME_EXPR = `((el) => {
|
|
|
33
33
|
const norm = (s) => (s || "").replace(/\\s+/g, " ").trim().toLowerCase();
|
|
34
34
|
return norm(el.getAttribute("aria-label") || el.textContent || "");
|
|
35
35
|
})`;
|
|
36
|
+
/**
|
|
37
|
+
* Visibility check: a node with a 0x0 layout box, or a computed
|
|
38
|
+
* `display:none`/`visibility:hidden`, can never be the target of a real
|
|
39
|
+
* click. Duplicated from `deep-locator-scan.ts`'s private `IS_VISIBLE_EXPR`
|
|
40
|
+
* rather than imported — both are browser-context expression strings
|
|
41
|
+
* composed by string interpolation, matching the convention this module
|
|
42
|
+
* already follows for {@link DEEP_ELEMENTS_EXPR}. Applied both when ranking
|
|
43
|
+
* (so an unrendered node never outranks a rendered one) and when clicking
|
|
44
|
+
* (so a node that became hidden between the rank and click calls is
|
|
45
|
+
* reported as not-actionable instead of dispatching a no-op click).
|
|
46
|
+
*/
|
|
47
|
+
const IS_VISIBLE_EXPR = `((el) => {
|
|
48
|
+
const rect = el.getBoundingClientRect();
|
|
49
|
+
if (rect.width === 0 && rect.height === 0) return false;
|
|
50
|
+
const style = getComputedStyle(el);
|
|
51
|
+
return style.display !== "none" && style.visibility !== "hidden";
|
|
52
|
+
})`;
|
|
36
53
|
/**
|
|
37
54
|
* Recursive open-shadow-root walker, identical in shape to `deep-query.ts`'s
|
|
38
55
|
* private `DEEP_ELEMENTS_EXPR` (duplicated rather than imported because both
|
|
@@ -86,7 +103,11 @@ const RANK_TIERS_EXPR = `((el, name) => {
|
|
|
86
103
|
* highest first. Ties within a tier keep document order. Elements that
|
|
87
104
|
* match no positive tier — including anything caught by
|
|
88
105
|
* {@link NEGATIVE_TEXT_EXPR} — are excluded entirely rather than ranked
|
|
89
|
-
* last, so the caller never has to guess where the "safe" cutoff is.
|
|
106
|
+
* last, so the caller never has to guess where the "safe" cutoff is. Same
|
|
107
|
+
* treatment for a node that fails {@link IS_VISIBLE_EXPR}: a hidden
|
|
108
|
+
* per-step submit button in a wizard (0x0 layout box, `display:none`) is
|
|
109
|
+
* dropped before ranking so it can never outrank the rendered one and win
|
|
110
|
+
* a click that would silently no-op.
|
|
90
111
|
*
|
|
91
112
|
* Each returned candidate carries `deepIndex`, the candidate's position in
|
|
92
113
|
* this same deterministic deep-traversal order. {@link buildClickByDeepIndexExpr}
|
|
@@ -106,6 +127,7 @@ function buildRankSubmitCandidatesExpr(root = "document") {
|
|
|
106
127
|
return `(() => {
|
|
107
128
|
const accessibleName = ${ACCESSIBLE_NAME_EXPR};
|
|
108
129
|
const rankTier = ${RANK_TIERS_EXPR};
|
|
130
|
+
const isVisible = ${IS_VISIBLE_EXPR};
|
|
109
131
|
const deepElements = ${DEEP_ELEMENTS_EXPR};
|
|
110
132
|
const all = deepElements(${root});
|
|
111
133
|
const ranked = [];
|
|
@@ -114,6 +136,7 @@ function buildRankSubmitCandidatesExpr(root = "document") {
|
|
|
114
136
|
const name = accessibleName(el);
|
|
115
137
|
const tier = rankTier(el, name);
|
|
116
138
|
if (tier === 0) continue;
|
|
139
|
+
if (!isVisible(el)) continue;
|
|
117
140
|
ranked.push({
|
|
118
141
|
deepIndex: i,
|
|
119
142
|
tier,
|
|
@@ -132,7 +155,13 @@ function buildRankSubmitCandidatesExpr(root = "document") {
|
|
|
132
155
|
* mousedown/mouseup/click, matching `deep-query.ts`'s controlled-state click
|
|
133
156
|
* convention). Returns `{ clicked: false }` without throwing if the index is
|
|
134
157
|
* out of range for the current DOM (e.g. the page changed between the
|
|
135
|
-
* locate and click calls)
|
|
158
|
+
* locate and click calls), and `{ clicked: false, reason: "not-actionable" }`
|
|
159
|
+
* without dispatching any event if the element at that index fails
|
|
160
|
+
* {@link IS_VISIBLE_EXPR} — a node with no layout box makes a real click
|
|
161
|
+
* throw a CDP `-32000 Node does not have a layout object` error, so this
|
|
162
|
+
* check reports the same outcome as data instead. `buildRankSubmitCandidatesExpr`
|
|
163
|
+
* already filters unrendered candidates out of its ranking, so this only
|
|
164
|
+
* fires when the DOM changed between the rank and click calls.
|
|
136
165
|
*
|
|
137
166
|
* `root` overrides the traversal root expression (default `"document"`)
|
|
138
167
|
* and must match the `root` passed to the {@link buildRankSubmitCandidatesExpr}
|
|
@@ -141,10 +170,12 @@ function buildRankSubmitCandidatesExpr(root = "document") {
|
|
|
141
170
|
*/
|
|
142
171
|
function buildClickByDeepIndexExpr(deepIndex, root = "document") {
|
|
143
172
|
return `(() => {
|
|
173
|
+
const isVisible = ${IS_VISIBLE_EXPR};
|
|
144
174
|
const deepElements = ${DEEP_ELEMENTS_EXPR};
|
|
145
175
|
const all = deepElements(${root});
|
|
146
176
|
const el = all[${JSON.stringify(deepIndex)}];
|
|
147
177
|
if (!el) return { clicked: false };
|
|
178
|
+
if (!isVisible(el)) return { clicked: false, reason: "not-actionable" };
|
|
148
179
|
if (typeof el.focus === "function") { try { el.focus(); } catch (e) {} }
|
|
149
180
|
el.dispatchEvent(new Event("mousedown", { bubbles: true }));
|
|
150
181
|
el.dispatchEvent(new Event("mouseup", { bubbles: true }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-control.js","sourceRoot":"","sources":["../../src/scraper/submit-control.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;AAEH;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAG;;;GAGxB,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG;;;GAG1B,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG;;;;;;;;;;;GAWxB,CAAC;AAEJ;;;;;;;;;;;;;;GAcG;AACH,MAAM,eAAe,GAAG;uBACD,kBAAkB;;;;;;;;;;;GAWtC,CAAC;AAEJ
|
|
1
|
+
{"version":3,"file":"submit-control.js","sourceRoot":"","sources":["../../src/scraper/submit-control.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;AAEH;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAG;;;GAGxB,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG;;;GAG1B,CAAC;AAEJ;;;;;;;;;;GAUG;AACH,MAAM,eAAe,GAAG;;;;;GAKrB,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG;;;;;;;;;;;GAWxB,CAAC;AAEJ;;;;;;;;;;;;;;GAcG;AACH,MAAM,eAAe,GAAG;uBACD,kBAAkB;;;;;;;;;;;GAWtC,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,uCAA8C,IAAI,GAAG,UAAU;IAC7D,OAAO;6BACoB,oBAAoB;uBAC1B,eAAe;wBACd,eAAe;2BACZ,kBAAkB;+BACd,IAAI;;;;;;;;;;;;;;;;;OAiB5B,CAAC;AACR,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,mCAA0C,SAAiB,EAAE,IAAI,GAAG,UAAU;IAC5E,OAAO;wBACe,eAAe;2BACZ,kBAAkB;+BACd,IAAI;qBACd,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;;;;;;OAQvC,CAAC;AACR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recon-browser.d.ts","sourceRoot":"","sources":["../../src/scripts/recon-browser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"recon-browser.d.ts","sourceRoot":"","sources":["../../src/scripts/recon-browser.ts"],"names":[],"mappings":"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"}
|