@enricai/barnacle 1.12.78 → 1.12.79
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/plugins/config-plugin.d.ts.map +1 -1
- package/dist/plugins/config-plugin.js +2 -1
- package/dist/plugins/config-plugin.js.map +1 -1
- package/dist/scraper/actionable-visibility-expr.d.ts +12 -0
- package/dist/scraper/actionable-visibility-expr.d.ts.map +1 -0
- package/dist/scraper/actionable-visibility-expr.js +22 -0
- package/dist/scraper/actionable-visibility-expr.js.map +1 -0
- package/dist/scraper/browser-click-expr.d.ts +1 -1
- package/dist/scraper/browser-click-expr.d.ts.map +1 -1
- package/dist/scraper/browser-click-expr.js +2 -6
- package/dist/scraper/browser-click-expr.js.map +1 -1
- package/dist/scraper/deep-locator-candidates.d.ts.map +1 -1
- package/dist/scraper/deep-locator-candidates.js +35 -11
- package/dist/scraper/deep-locator-candidates.js.map +1 -1
- package/dist/scraper/deep-locator-scan.d.ts +12 -0
- package/dist/scraper/deep-locator-scan.d.ts.map +1 -1
- package/dist/scraper/deep-locator-scan.js +42 -13
- package/dist/scraper/deep-locator-scan.js.map +1 -1
- package/dist/scraper/errors.d.ts +10 -0
- package/dist/scraper/errors.d.ts.map +1 -1
- package/dist/scraper/errors.js +19 -1
- package/dist/scraper/errors.js.map +1 -1
- package/dist/scraper/flow-runner.d.ts +34 -0
- package/dist/scraper/flow-runner.d.ts.map +1 -1
- package/dist/scraper/flow-runner.js +196 -37
- package/dist/scraper/flow-runner.js.map +1 -1
- package/dist/scraper/pool.d.ts.map +1 -1
- package/dist/scraper/pool.js +8 -1
- package/dist/scraper/pool.js.map +1 -1
- package/dist/scraper/retry.d.ts +1 -1
- package/dist/scraper/retry.d.ts.map +1 -1
- package/dist/scraper/retry.js +5 -1
- package/dist/scraper/retry.js.map +1 -1
- package/dist/scraper/session-browserbase.d.ts.map +1 -1
- package/dist/scraper/session-browserbase.js +29 -17
- package/dist/scraper/session-browserbase.js.map +1 -1
- package/dist/scraper/session-shared.d.ts +5 -0
- package/dist/scraper/session-shared.d.ts.map +1 -1
- package/dist/scraper/session-shared.js.map +1 -1
- package/dist/scraper/session-teardown.d.ts +30 -1
- package/dist/scraper/session-teardown.d.ts.map +1 -1
- package/dist/scraper/session-teardown.js +48 -3
- package/dist/scraper/session-teardown.js.map +1 -1
- package/dist/scraper/submit-control.d.ts +2 -2
- package/dist/scraper/submit-control.d.ts.map +1 -1
- package/dist/scraper/submit-control.js +5 -21
- package/dist/scraper/submit-control.js.map +1 -1
- package/dist/scraper/target-resolution-diagnostic.d.ts.map +1 -1
- package/dist/scraper/target-resolution-diagnostic.js +6 -11
- package/dist/scraper/target-resolution-diagnostic.js.map +1 -1
- package/dist/scripts/recon-browser.d.ts +4 -1
- package/dist/scripts/recon-browser.d.ts.map +1 -1
- package/dist/scripts/recon-browser.js +25 -6
- package/dist/scripts/recon-browser.js.map +1 -1
- package/dist/scripts/recon-generate.d.ts +48 -0
- package/dist/scripts/recon-generate.d.ts.map +1 -1
- package/dist/scripts/recon-generate.js +115 -7
- package/dist/scripts/recon-generate.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/scraper/pool.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/scraper/pool.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAsBtE;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,IAAI,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7C,YAAY,GAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAM,EACzD,aAAa,SAAkB,EAC/B,WAAW,GAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAM,GACxD,OAAO,CAAC,CAAC,CAAC,CAgDZ;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAMlF;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjE"}
|
package/dist/scraper/pool.js
CHANGED
|
@@ -12,6 +12,7 @@ const logging_1 = require("../lib/logging");
|
|
|
12
12
|
const errors_1 = require("./errors");
|
|
13
13
|
const retry_1 = require("./retry");
|
|
14
14
|
const session_1 = require("./session");
|
|
15
|
+
const session_teardown_1 = require("./session-teardown");
|
|
15
16
|
const logger = (0, logging_1.getLogger)({ name: "scraper/pool" });
|
|
16
17
|
/**
|
|
17
18
|
* Per-task hard timeout default. A hung Stagehand operation (infinite network wait,
|
|
@@ -61,7 +62,13 @@ async function runWithSession(task, retryOptions = {}, taskTimeoutMs = TASK_TIME
|
|
|
61
62
|
const t = setTimeout(() => reject(new errors_1.SessionTimeoutError(`task exceeded ${taskTimeoutMs}ms`)), taskTimeoutMs);
|
|
62
63
|
t.unref();
|
|
63
64
|
});
|
|
64
|
-
|
|
65
|
+
try {
|
|
66
|
+
return await Promise.race([task(session), timeout]);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
// Must run before onSessionRestart: closeSession() nulls sessionRef.
|
|
70
|
+
throw (0, session_teardown_1.resolveSessionDeathError)(sessionRef.session ?? undefined, err);
|
|
71
|
+
}
|
|
65
72
|
}, {
|
|
66
73
|
...retryOptions,
|
|
67
74
|
onSessionRestart: async () => {
|
package/dist/scraper/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/scraper/pool.ts"],"names":[],"mappings":";;;;;;;;AAAA,sDAA6B;AAE7B,qCAAkC;AAClC,2CAA0C;AAC1C,6CAAuD;AACvD,2CAAsE;AACtE,+CAA8E;
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/scraper/pool.ts"],"names":[],"mappings":"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"}
|
package/dist/scraper/retry.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export interface RetryOptions {
|
|
|
16
16
|
* Wraps a scraper task with p-retry and a classification policy aligned
|
|
17
17
|
* with our ScraperError hierarchy:
|
|
18
18
|
*
|
|
19
|
-
* - CaptchaError + EmptyResultsError + StepVerificationError → AbortError, no retry.
|
|
19
|
+
* - CaptchaError + EmptyResultsError + StepVerificationError + SessionLifetimeExceededError → AbortError, no retry.
|
|
20
20
|
* - SessionTimeoutError + CdpTransportClosedError → invoke onSessionRestart before every retry, then retry up to maxAttempts.
|
|
21
21
|
* - SelectorFailureError + UnknownScraperError → retry up to maxAttempts.
|
|
22
22
|
* - Anything non-ScraperError → wrap in UnknownScraperError and retry.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/scraper/retry.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/scraper/retry.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,YAAY,EAKb,MAAM,kBAAkB,CAAC;AAI1B;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,mEAAmE;IACnE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CA4DZ;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAmB/D"}
|
package/dist/scraper/retry.js
CHANGED
|
@@ -44,7 +44,7 @@ const logger = (0, logging_1.getLogger)({ name: "scraper/retry" });
|
|
|
44
44
|
* Wraps a scraper task with p-retry and a classification policy aligned
|
|
45
45
|
* with our ScraperError hierarchy:
|
|
46
46
|
*
|
|
47
|
-
* - CaptchaError + EmptyResultsError + StepVerificationError → AbortError, no retry.
|
|
47
|
+
* - CaptchaError + EmptyResultsError + StepVerificationError + SessionLifetimeExceededError → AbortError, no retry.
|
|
48
48
|
* - SessionTimeoutError + CdpTransportClosedError → invoke onSessionRestart before every retry, then retry up to maxAttempts.
|
|
49
49
|
* - SelectorFailureError + UnknownScraperError → retry up to maxAttempts.
|
|
50
50
|
* - Anything non-ScraperError → wrap in UnknownScraperError and retry.
|
|
@@ -75,6 +75,10 @@ async function withScraperRetry(task, options = {}) {
|
|
|
75
75
|
logger.warn(`step verification failed deterministically — aborting retry: ${err.message}`);
|
|
76
76
|
throw new p_retry_1.AbortError(err.message);
|
|
77
77
|
}
|
|
78
|
+
if ((0, errors_2.isSessionLifetimeExceededError)(raw)) {
|
|
79
|
+
logger.error(`session reached its configured lifetime — aborting retry: ${err.message}`);
|
|
80
|
+
throw new p_retry_1.AbortError(err.message);
|
|
81
|
+
}
|
|
78
82
|
if ((err instanceof errors_2.SessionTimeoutError || err instanceof errors_2.CdpTransportClosedError) &&
|
|
79
83
|
options.onSessionRestart) {
|
|
80
84
|
await options.onSessionRestart();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/scraper/retry.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAA6C;AAE7C,yCAA8C;AAC9C,2CAA0C;AAC1C,
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/scraper/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-browserbase.d.ts","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"AASA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAG3B,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"session-browserbase.d.ts","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"AASA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAG3B,MAAM,0BAA0B,CAAC;AAOlC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAa9C;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,+BAA+B,CACnD,IAAI,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,iBAAiB,GAAG,gCAAgC,CAAC,GACvF,OAAO,CAAC,cAAc,CAAC,CA6NzB"}
|
|
@@ -195,7 +195,33 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
195
195
|
}
|
|
196
196
|
: baseFingerprint;
|
|
197
197
|
const { callback: filteredStagehandLoggerCallback, reportSuppressed: reportSuppressedAisdkErrors, getSuppressedCount: getSuppressedAisdkElementIdErrorCount, } = makeFilteredStagehandLogger(logger);
|
|
198
|
-
|
|
198
|
+
// Stagehand's own end-of-run teardown also closes the CDP transport, so
|
|
199
|
+
// the handler must not flag that expected case. `weInitiatedClose` is
|
|
200
|
+
// flipped at the top of `close()` below, before `stagehand.close()` runs;
|
|
201
|
+
// only a transport close observed while it's still false is an SDK-
|
|
202
|
+
// initiated teardown mid-operation, not a consequence of our own close.
|
|
203
|
+
let weInitiatedClose = false;
|
|
204
|
+
let cdpTransportClosedError;
|
|
205
|
+
const configuredTimeoutSeconds = customSessionParams.timeout ??
|
|
206
|
+
config_1.config.scraper.browserbaseSessionTimeoutSeconds;
|
|
207
|
+
let sessionTimeoutHit;
|
|
208
|
+
// Advanced by the flow runner's step loop via `recordStepCompleted` as
|
|
209
|
+
// each step finishes.
|
|
210
|
+
let completedStepCount = 0;
|
|
211
|
+
// Single classification shared by the log-line detector and the transport
|
|
212
|
+
// listener so the order in which those two signals arrive cannot matter.
|
|
213
|
+
const classifyLifetime = (0, session_teardown_1.createDeathClassifier)({
|
|
214
|
+
configuredTimeoutSeconds,
|
|
215
|
+
toleranceSeconds: TOLERANCE_SECONDS,
|
|
216
|
+
isOwnClose: () => weInitiatedClose,
|
|
217
|
+
getElapsedSeconds: () => (Date.now() - sessionStartedAt) / 1000,
|
|
218
|
+
getCompletedStepCount: () => completedStepCount,
|
|
219
|
+
});
|
|
220
|
+
const classifyDeath = () => {
|
|
221
|
+
sessionTimeoutHit = classifyLifetime() ?? sessionTimeoutHit;
|
|
222
|
+
return sessionTimeoutHit;
|
|
223
|
+
};
|
|
224
|
+
const { watchLogLine: watchForTeardown, deathSignal, deathAbortSignal, } = (0, session_teardown_1.createSessionTeardownDetector)({ classifyDeath });
|
|
199
225
|
const stagehandLoggerCallback = (line) => {
|
|
200
226
|
filteredStagehandLoggerCallback(line);
|
|
201
227
|
watchForTeardown(line);
|
|
@@ -262,19 +288,6 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
262
288
|
throw err;
|
|
263
289
|
}
|
|
264
290
|
const heartbeat = (0, cdp_heartbeat_1.startCdpTransportHeartbeat)(stagehand.context.conn, { logger });
|
|
265
|
-
// Stagehand's own end-of-run teardown also closes the CDP transport, so
|
|
266
|
-
// the handler must not flag that expected case. `weInitiatedClose` is
|
|
267
|
-
// flipped at the top of `close()` below, before `stagehand.close()` runs;
|
|
268
|
-
// only a transport close observed while it's still false is an SDK-
|
|
269
|
-
// initiated teardown mid-operation, not a consequence of our own close.
|
|
270
|
-
let weInitiatedClose = false;
|
|
271
|
-
let cdpTransportClosedError;
|
|
272
|
-
const configuredTimeoutSeconds = customSessionParams.timeout ??
|
|
273
|
-
config_1.config.scraper.browserbaseSessionTimeoutSeconds;
|
|
274
|
-
let sessionTimeoutHit;
|
|
275
|
-
// Advanced by the flow runner's step loop via `recordStepCompleted` as
|
|
276
|
-
// each step finishes.
|
|
277
|
-
let completedStepCount = 0;
|
|
278
291
|
stagehand.context.conn.onTransportClosed((why) => {
|
|
279
292
|
if (weInitiatedClose)
|
|
280
293
|
return;
|
|
@@ -286,9 +299,7 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
286
299
|
completedStepCount,
|
|
287
300
|
toleranceSeconds: TOLERANCE_SECONDS,
|
|
288
301
|
});
|
|
289
|
-
|
|
290
|
-
sessionTimeoutHit = { configuredTimeoutSeconds, elapsedSeconds };
|
|
291
|
-
}
|
|
302
|
+
classifyDeath();
|
|
292
303
|
logger.warn(classification.message);
|
|
293
304
|
});
|
|
294
305
|
const sessionId = stagehand.browserbaseSessionID ?? "unknown";
|
|
@@ -326,6 +337,7 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
326
337
|
getSuppressedAisdkElementIdErrorCount,
|
|
327
338
|
getOutboundIp,
|
|
328
339
|
deathSignal,
|
|
340
|
+
deathAbortSignal,
|
|
329
341
|
getCdpTransportClosedError,
|
|
330
342
|
getSessionTimeoutHit,
|
|
331
343
|
sessionProxy,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-browserbase.js","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":";;;;;AAAA,wDAA2F;AAE3F,qCAAkC;AAClC,2CAAmD;AACnD,yCAA8C;AAC9C,2CAA0C;AAC1C,2DAAqE;AACrE,6CAA2D;AAC3D,qDAAgE;AAChE,6DAKkC;AAClC,
|
|
1
|
+
{"version":3,"file":"session-browserbase.js","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,6 +56,11 @@ export interface BrowserSession {
|
|
|
56
56
|
* (currently Browserbase); absent on Steel.
|
|
57
57
|
*/
|
|
58
58
|
deathSignal?: Promise<never>;
|
|
59
|
+
/**
|
|
60
|
+
* Aborts with the same classified error `deathSignal` rejects with, for
|
|
61
|
+
* callers that need an AbortSignal rather than a promise to race.
|
|
62
|
+
*/
|
|
63
|
+
deathAbortSignal?: AbortSignal;
|
|
59
64
|
/**
|
|
60
65
|
* Returns the {@link CdpTransportClosedError} recorded if Stagehand tore
|
|
61
66
|
* the CDP transport down on its own, mid-operation — as opposed to the
|
|
@@ -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;AAGzC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,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;IAC7C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B;;;;;;;OAOG;IACH,0BAA0B,CAAC,EAAE,MAAM,uBAAuB,GAAG,SAAS,CAAC;IACvE;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,MACnB;QAAE,wBAAwB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAC5D,SAAS,CAAC;IACd;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;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
|
+
{"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;AAGzC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,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;IAC7C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B;;;;;;;OAOG;IACH,0BAA0B,CAAC,EAAE,MAAM,uBAAuB,GAAG,SAAS,CAAC;IACvE;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,MACnB;QAAE,wBAAwB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAC5D,SAAS,CAAC;IACd;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;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;AAwG1C;;;;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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { StagehandLogLine } from "./session-browserbase";
|
|
2
|
+
import type { BrowserSession } from "./session-shared";
|
|
2
3
|
/**
|
|
3
4
|
* Detects a Stagehand-initiated CDP transport teardown from its log stream
|
|
4
5
|
* and exposes that as a promise that rejects the instant it's observed. A
|
|
@@ -8,9 +9,15 @@ import type { StagehandLogLine } from "./session-browserbase";
|
|
|
8
9
|
* that still runs even while the loop is draining, so callers racing this
|
|
9
10
|
* signal see the death instead of a silent exit 0.
|
|
10
11
|
*/
|
|
11
|
-
export declare function createSessionTeardownDetector(
|
|
12
|
+
export declare function createSessionTeardownDetector(opts?: {
|
|
13
|
+
classifyDeath?: () => {
|
|
14
|
+
configuredTimeoutSeconds: number;
|
|
15
|
+
elapsedSeconds: number;
|
|
16
|
+
} | undefined;
|
|
17
|
+
}): {
|
|
12
18
|
watchLogLine: (line: StagehandLogLine) => void;
|
|
13
19
|
deathSignal: Promise<never>;
|
|
20
|
+
deathAbortSignal: AbortSignal;
|
|
14
21
|
};
|
|
15
22
|
/** Result of classifying a session teardown against its configured lifetime. */
|
|
16
23
|
export interface SessionTeardownClassification {
|
|
@@ -38,4 +45,26 @@ export declare function classifySessionTeardown(params: {
|
|
|
38
45
|
* would have settled it is already gone.
|
|
39
46
|
*/
|
|
40
47
|
export declare function raceAgainstTeardown<T>(stepPromise: Promise<T>, deathSignal: Promise<never>): Promise<T>;
|
|
48
|
+
/**
|
|
49
|
+
* Upgrades a caught error to `SessionLifetimeExceededError` when the session
|
|
50
|
+
* recorded a lifetime-expiry death, so every code path that observes the
|
|
51
|
+
* death fails fast regardless of which error it caught. Steel sessions have
|
|
52
|
+
* no `getSessionTimeoutHit`, so the error passes through unchanged.
|
|
53
|
+
*/
|
|
54
|
+
export declare function resolveSessionDeathError(session: Pick<BrowserSession, "getSessionTimeoutHit"> | undefined, err: unknown): unknown;
|
|
55
|
+
/**
|
|
56
|
+
* Builds the single lifetime classifier shared by the log-line detector and
|
|
57
|
+
* the transport-closed listener, so the order in which those signals arrive
|
|
58
|
+
* cannot change the outcome, and our own `close()` never classifies.
|
|
59
|
+
*/
|
|
60
|
+
export declare function createDeathClassifier(opts: {
|
|
61
|
+
configuredTimeoutSeconds: number;
|
|
62
|
+
toleranceSeconds: number;
|
|
63
|
+
isOwnClose: () => boolean;
|
|
64
|
+
getElapsedSeconds: () => number;
|
|
65
|
+
getCompletedStepCount: () => number;
|
|
66
|
+
}): () => {
|
|
67
|
+
configuredTimeoutSeconds: number;
|
|
68
|
+
elapsedSeconds: number;
|
|
69
|
+
} | undefined;
|
|
41
70
|
//# sourceMappingURL=session-teardown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-teardown.d.ts","sourceRoot":"","sources":["../../src/scraper/session-teardown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"session-teardown.d.ts","sourceRoot":"","sources":["../../src/scraper/session-teardown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAY/D;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,CAAC,EAAE;IACnD,aAAa,CAAC,EAAE,MAAM;QAAE,wBAAwB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAChG,GAAG;IACF,YAAY,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,gBAAgB,EAAE,WAAW,CAAC;CAC/B,CA2BA;AAUD,gFAAgF;AAChF,MAAM,WAAW,6BAA6B;IAC5C,gFAAgF;IAChF,YAAY,EAAE,OAAO,CAAC;IACtB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,wBAAwB,EAAE,MAAM,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,6BAA6B,CAYhC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EACvB,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAC,GAAG,SAAS,EACjE,GAAG,EAAE,OAAO,GACX,OAAO,CAMT;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,wBAAwB,EAAE,MAAM,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,MAAM,CAAC;CACrC,GAAG,MAAM;IAAE,wBAAwB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAgBjF"}
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createSessionTeardownDetector = createSessionTeardownDetector;
|
|
4
4
|
exports.classifySessionTeardown = classifySessionTeardown;
|
|
5
5
|
exports.raceAgainstTeardown = raceAgainstTeardown;
|
|
6
|
+
exports.resolveSessionDeathError = resolveSessionDeathError;
|
|
7
|
+
exports.createDeathClassifier = createDeathClassifier;
|
|
6
8
|
const errors_1 = require("./errors");
|
|
7
9
|
/**
|
|
8
10
|
* Substring Stagehand's own v3 transport logs at `level:0` (error) when it
|
|
@@ -22,7 +24,7 @@ const TEARDOWN_ERROR_LEVEL = 0;
|
|
|
22
24
|
* that still runs even while the loop is draining, so callers racing this
|
|
23
25
|
* signal see the death instead of a silent exit 0.
|
|
24
26
|
*/
|
|
25
|
-
function createSessionTeardownDetector() {
|
|
27
|
+
function createSessionTeardownDetector(opts) {
|
|
26
28
|
let signalDeath;
|
|
27
29
|
const deathSignal = new Promise((_resolve, reject) => {
|
|
28
30
|
signalDeath = (err) => reject(err);
|
|
@@ -30,6 +32,7 @@ function createSessionTeardownDetector() {
|
|
|
30
32
|
// deathSignal's executor runs synchronously above, so signalDeath is
|
|
31
33
|
// always assigned before watchLogLine can be called.
|
|
32
34
|
deathSignal.catch(() => undefined);
|
|
35
|
+
const abortController = new AbortController();
|
|
33
36
|
let fired = false;
|
|
34
37
|
const watchLogLine = (line) => {
|
|
35
38
|
if (fired)
|
|
@@ -39,9 +42,14 @@ function createSessionTeardownDetector() {
|
|
|
39
42
|
if (!line.message.includes(TEARDOWN_MESSAGE_SUBSTRING))
|
|
40
43
|
return;
|
|
41
44
|
fired = true;
|
|
42
|
-
|
|
45
|
+
const hit = opts?.classifyDeath?.();
|
|
46
|
+
const err = hit
|
|
47
|
+
? new errors_1.SessionLifetimeExceededError(`scraper session reached its configured lifetime (${hit.elapsedSeconds.toFixed(1)}s elapsed of ${hit.configuredTimeoutSeconds}s): ${line.message}`)
|
|
48
|
+
: new errors_1.CdpTransportClosedError(`stagehand-initiated teardown mid-flow: ${line.message}`);
|
|
49
|
+
signalDeath?.(err);
|
|
50
|
+
abortController.abort(err);
|
|
43
51
|
};
|
|
44
|
-
return { watchLogLine, deathSignal };
|
|
52
|
+
return { watchLogLine, deathSignal, deathAbortSignal: abortController.signal };
|
|
45
53
|
}
|
|
46
54
|
/**
|
|
47
55
|
* Browserbase overshoots its own configured session timeout by 1-14s in
|
|
@@ -73,4 +81,41 @@ function classifySessionTeardown(params) {
|
|
|
73
81
|
function raceAgainstTeardown(stepPromise, deathSignal) {
|
|
74
82
|
return Promise.race([stepPromise, deathSignal]);
|
|
75
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Upgrades a caught error to `SessionLifetimeExceededError` when the session
|
|
86
|
+
* recorded a lifetime-expiry death, so every code path that observes the
|
|
87
|
+
* death fails fast regardless of which error it caught. Steel sessions have
|
|
88
|
+
* no `getSessionTimeoutHit`, so the error passes through unchanged.
|
|
89
|
+
*/
|
|
90
|
+
function resolveSessionDeathError(session, err) {
|
|
91
|
+
const hit = session?.getSessionTimeoutHit?.();
|
|
92
|
+
if (!hit)
|
|
93
|
+
return err;
|
|
94
|
+
return new errors_1.SessionLifetimeExceededError(`scraper session reached its configured lifetime (${hit.elapsedSeconds.toFixed(1)}s elapsed of ${hit.configuredTimeoutSeconds}s)`);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Builds the single lifetime classifier shared by the log-line detector and
|
|
98
|
+
* the transport-closed listener, so the order in which those signals arrive
|
|
99
|
+
* cannot change the outcome, and our own `close()` never classifies.
|
|
100
|
+
*/
|
|
101
|
+
function createDeathClassifier(opts) {
|
|
102
|
+
let hit;
|
|
103
|
+
return () => {
|
|
104
|
+
if (opts.isOwnClose())
|
|
105
|
+
return undefined;
|
|
106
|
+
if (hit)
|
|
107
|
+
return hit;
|
|
108
|
+
const elapsedSeconds = opts.getElapsedSeconds();
|
|
109
|
+
const classification = classifySessionTeardown({
|
|
110
|
+
configuredTimeoutSeconds: opts.configuredTimeoutSeconds,
|
|
111
|
+
elapsedSeconds,
|
|
112
|
+
completedStepCount: opts.getCompletedStepCount(),
|
|
113
|
+
toleranceSeconds: opts.toleranceSeconds,
|
|
114
|
+
});
|
|
115
|
+
if (!classification.isTimeoutHit)
|
|
116
|
+
return undefined;
|
|
117
|
+
hit = { configuredTimeoutSeconds: opts.configuredTimeoutSeconds, elapsedSeconds };
|
|
118
|
+
return hit;
|
|
119
|
+
};
|
|
120
|
+
}
|
|
76
121
|
//# sourceMappingURL=session-teardown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-teardown.js","sourceRoot":"","sources":["../../src/scraper/session-teardown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-teardown.js","sourceRoot":"","sources":["../../src/scraper/session-teardown.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ export declare const SUBMIT_SHAPE_EXPR = "((el) => {\n if (!el || !el.tagName)
|
|
|
66
66
|
* match no positive tier — including anything caught by
|
|
67
67
|
* {@link NEGATIVE_TEXT_EXPR} — are excluded entirely rather than ranked
|
|
68
68
|
* last, so the caller never has to guess where the "safe" cutoff is. Same
|
|
69
|
-
* treatment for a node that fails {@link
|
|
69
|
+
* treatment for a node that fails {@link ACTIONABLE_VISIBILITY_EXPR}: a hidden
|
|
70
70
|
* per-step submit button in a wizard (0x0 layout box, `display:none`) is
|
|
71
71
|
* dropped before ranking so it can never outrank the rendered one and win
|
|
72
72
|
* a click that would silently no-op. Same treatment again for a node that
|
|
@@ -100,7 +100,7 @@ export declare function buildRankSubmitCandidatesExpr(root?: string): string;
|
|
|
100
100
|
* out of range for the current DOM (e.g. the page changed between the
|
|
101
101
|
* locate and click calls), and `{ clicked: false, reason: "not-actionable" }`
|
|
102
102
|
* without dispatching any event if the element at that index fails
|
|
103
|
-
* {@link
|
|
103
|
+
* {@link ACTIONABLE_VISIBILITY_EXPR} or {@link IS_DISABLED_EXPR} — a node with no
|
|
104
104
|
* layout box makes a real click throw a CDP `-32000 Node does not have a
|
|
105
105
|
* layout object` error, and a disabled node accepts a synthetic click as a
|
|
106
106
|
* silent no-op, so this check reports the same outcome as data instead.
|
|
@@ -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;AASH;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,sOAG5B,CAAC;AA0CJ;;;;;;;;;;;;;;;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"}
|
|
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
exports.SUBMIT_SHAPE_EXPR = exports.SUBMIT_SHAPE_FALLBACK_EXPR = exports.NEGATIVE_TEXT_EXPR = void 0;
|
|
14
14
|
exports.buildRankSubmitCandidatesExpr = buildRankSubmitCandidatesExpr;
|
|
15
15
|
exports.buildClickByDeepIndexExpr = buildClickByDeepIndexExpr;
|
|
16
|
+
const actionable_visibility_expr_1 = require("./actionable-visibility-expr");
|
|
16
17
|
const browser_click_expr_1 = require("./browser-click-expr");
|
|
17
18
|
/**
|
|
18
19
|
* Verbs that identify a control as NOT the submit action even when it is
|
|
@@ -43,23 +44,6 @@ const ACCESSIBLE_NAME_EXPR = `((el) => {
|
|
|
43
44
|
const fallback = tag === "input" ? el.value : el.textContent;
|
|
44
45
|
return norm(el.getAttribute("aria-label") || fallback || "");
|
|
45
46
|
})`;
|
|
46
|
-
/**
|
|
47
|
-
* Visibility check: a node with a 0x0 layout box, or a computed
|
|
48
|
-
* `display:none`/`visibility:hidden`, can never be the target of a real
|
|
49
|
-
* click. Duplicated from `deep-locator-scan.ts`'s private `IS_VISIBLE_EXPR`
|
|
50
|
-
* rather than imported — both are browser-context expression strings
|
|
51
|
-
* composed by string interpolation, matching the convention this module
|
|
52
|
-
* already follows for {@link DEEP_ELEMENTS_EXPR}. Applied both when ranking
|
|
53
|
-
* (so an unrendered node never outranks a rendered one) and when clicking
|
|
54
|
-
* (so a node that became hidden between the rank and click calls is
|
|
55
|
-
* reported as not-actionable instead of dispatching a no-op click).
|
|
56
|
-
*/
|
|
57
|
-
const IS_VISIBLE_EXPR = `((el) => {
|
|
58
|
-
const rect = el.getBoundingClientRect();
|
|
59
|
-
if (rect.width === 0 && rect.height === 0) return false;
|
|
60
|
-
const style = getComputedStyle(el);
|
|
61
|
-
return style.display !== "none" && style.visibility !== "hidden";
|
|
62
|
-
})`;
|
|
63
47
|
/**
|
|
64
48
|
* Disabled check: a candidate carrying the native `disabled` property or
|
|
65
49
|
* `aria-disabled="true"` — on itself or an ancestor within
|
|
@@ -207,7 +191,7 @@ const RANK_TIERS_EXPR = `((el, name) => {
|
|
|
207
191
|
* match no positive tier — including anything caught by
|
|
208
192
|
* {@link NEGATIVE_TEXT_EXPR} — are excluded entirely rather than ranked
|
|
209
193
|
* last, so the caller never has to guess where the "safe" cutoff is. Same
|
|
210
|
-
* treatment for a node that fails {@link
|
|
194
|
+
* treatment for a node that fails {@link ACTIONABLE_VISIBILITY_EXPR}: a hidden
|
|
211
195
|
* per-step submit button in a wizard (0x0 layout box, `display:none`) is
|
|
212
196
|
* dropped before ranking so it can never outrank the rendered one and win
|
|
213
197
|
* a click that would silently no-op. Same treatment again for a node that
|
|
@@ -233,7 +217,7 @@ function buildRankSubmitCandidatesExpr(root = "document") {
|
|
|
233
217
|
return `(() => {
|
|
234
218
|
const accessibleName = ${ACCESSIBLE_NAME_EXPR};
|
|
235
219
|
const rankTier = ${RANK_TIERS_EXPR};
|
|
236
|
-
const isVisible = ${
|
|
220
|
+
const isVisible = ${actionable_visibility_expr_1.ACTIONABLE_VISIBILITY_EXPR};
|
|
237
221
|
const isDisabled = ${IS_DISABLED_EXPR};
|
|
238
222
|
const deepElements = ${browser_click_expr_1.DEEP_ELEMENTS_EXPR};
|
|
239
223
|
const all = deepElements(${root});
|
|
@@ -267,7 +251,7 @@ function buildRankSubmitCandidatesExpr(root = "document") {
|
|
|
267
251
|
* out of range for the current DOM (e.g. the page changed between the
|
|
268
252
|
* locate and click calls), and `{ clicked: false, reason: "not-actionable" }`
|
|
269
253
|
* without dispatching any event if the element at that index fails
|
|
270
|
-
* {@link
|
|
254
|
+
* {@link ACTIONABLE_VISIBILITY_EXPR} or {@link IS_DISABLED_EXPR} — a node with no
|
|
271
255
|
* layout box makes a real click throw a CDP `-32000 Node does not have a
|
|
272
256
|
* layout object` error, and a disabled node accepts a synthetic click as a
|
|
273
257
|
* silent no-op, so this check reports the same outcome as data instead.
|
|
@@ -282,7 +266,7 @@ function buildRankSubmitCandidatesExpr(root = "document") {
|
|
|
282
266
|
*/
|
|
283
267
|
function buildClickByDeepIndexExpr(deepIndex, root = "document") {
|
|
284
268
|
return `(() => {
|
|
285
|
-
const isVisible = ${
|
|
269
|
+
const isVisible = ${actionable_visibility_expr_1.ACTIONABLE_VISIBILITY_EXPR};
|
|
286
270
|
const isDisabled = ${IS_DISABLED_EXPR};
|
|
287
271
|
const deepElements = ${browser_click_expr_1.DEEP_ELEMENTS_EXPR};
|
|
288
272
|
const all = deepElements(${root});
|
|
@@ -1 +1 @@
|
|
|
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
|
|
1
|
+
{"version":3,"file":"submit-control.js","sourceRoot":"","sources":["../../src/scraper/submit-control.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;AAEH,qFAAkF;AAClF,qEAIsC;AAEtC;;;;;;;;;GASG;AACU,QAAA,kBAAkB,GAAG;;;GAG/B,CAAC;AAEJ;;;;;;;;GAQG;AACH,MAAM,oBAAoB,GAAG;;;;;GAK1B,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,uDAA0B;yBACzB,gBAAgB;2BACd,uCAAkB;+BACd,IAAI;;;;;;;;;;;;;;;;;;OAkB5B,CAAC;AACR,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,mCAA0C,SAAiB,EAAE,IAAI,GAAG,UAAU;IAC5E,OAAO;wBACe,uDAA0B;yBACzB,gBAAgB;2BACd,uCAAkB;+BACd,IAAI;qBACd,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;MAGxC,IAAA,wCAAmB,EAAC,IAAI,CAAC;;OAExB,CAAC;AACR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target-resolution-diagnostic.d.ts","sourceRoot":"","sources":["../../src/scraper/target-resolution-diagnostic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"target-resolution-diagnostic.d.ts","sourceRoot":"","sources":["../../src/scraper/target-resolution-diagnostic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAoBlC,uIAAuI;AACvI,MAAM,WAAW,2BAA2B;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,oFAAoF;AACpF,MAAM,WAAW,kCAAkC;IACjD,0KAA0K;IAC1K,UAAU,EAAE,2BAA2B,EAAE,CAAC;IAC1C,4KAA4K;IAC5K,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAiED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,yCAAyC,CAC7D,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,IAAI,EAAE,IAAI,EACV,iBAAiB,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,GAC3C,OAAO,CAAC,kCAAkC,GAAG,IAAI,CAAC,CAyCpD"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.captureTargetResolutionDiagnosticSnapshot = captureTargetResolutionDiagnosticSnapshot;
|
|
16
16
|
const logging_1 = require("../lib/logging");
|
|
17
|
+
const actionable_visibility_expr_1 = require("./actionable-visibility-expr");
|
|
17
18
|
const submit_control_1 = require("./submit-control");
|
|
18
19
|
const logger = (0, logging_1.getLogger)({ name: "scraper/target-resolution-diagnostic" });
|
|
19
20
|
/** Cap on the number of ranked candidates kept in a snapshot. */
|
|
@@ -31,11 +32,10 @@ const MAX_SNAPSHOT_JSON_LENGTH = 20_000;
|
|
|
31
32
|
const MAX_EXCERPT_LENGTH = 2_000;
|
|
32
33
|
/**
|
|
33
34
|
* Re-walks the light DOM plus every open shadow root (same traversal shape
|
|
34
|
-
* as `submit-control.ts`'s private `DEEP_ELEMENTS_EXPR
|
|
35
|
-
* than imported
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* shared) to read the role/visible/disabled/excerpt fields the ranking
|
|
35
|
+
* as `submit-control.ts`'s private `DEEP_ELEMENTS_EXPR`, duplicated rather
|
|
36
|
+
* than imported; visibility comes from the shared
|
|
37
|
+
* {@link ACTIONABLE_VISIBILITY_EXPR} so an `aria-hidden` decoy is never
|
|
38
|
+
* reported visible) to read the role/visible/disabled/excerpt fields the ranking
|
|
39
39
|
* expression itself doesn't return, and to build a short accessible-name
|
|
40
40
|
* excerpt around the top-ranked candidate. Runs as a single `page.evaluate`
|
|
41
41
|
* round trip so the DOM observed here always matches the one
|
|
@@ -55,12 +55,7 @@ function buildCandidateDetailExpr(root, deepIndices) {
|
|
|
55
55
|
walk(rootEl);
|
|
56
56
|
return out;
|
|
57
57
|
})(${root});
|
|
58
|
-
const isVisible =
|
|
59
|
-
const rect = el.getBoundingClientRect();
|
|
60
|
-
if (rect.width === 0 && rect.height === 0) return false;
|
|
61
|
-
const style = getComputedStyle(el);
|
|
62
|
-
return style.display !== "none" && style.visibility !== "hidden";
|
|
63
|
-
};
|
|
58
|
+
const isVisible = ${actionable_visibility_expr_1.ACTIONABLE_VISIBILITY_EXPR};
|
|
64
59
|
const isDisabled = (el) => {
|
|
65
60
|
for (let depth = 0, node = el; depth < 8 && node; depth++) {
|
|
66
61
|
if (node.disabled === true) return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target-resolution-diagnostic.js","sourceRoot":"","sources":["../../src/scraper/target-resolution-diagnostic.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAIH,2CAA0C;
|
|
1
|
+
{"version":3,"file":"target-resolution-diagnostic.js","sourceRoot":"","sources":["../../src/scraper/target-resolution-diagnostic.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAIH,2CAA0C;AAC1C,qFAAkF;AAElF,6DAIkC;AAElC,MAAM,MAAM,GAAG,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,CAAC,CAAC;AAE3E,iEAAiE;AACjE,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAExC,mFAAmF;AACnF,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAoBjC;;;;;;;;;;GAUG;AACH,SAAS,wBAAwB,CAAC,IAAY,EAAE,WAA8B;IAC5E,OAAO;;;;;;;;;;;;SAYA,IAAI;wBACW,uDAA0B;;;;;;;;;;;;;;;;;;sBAkB5B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;;;;;;;;;;;;;oBAc7B,kBAAkB;;;OAG/B,CAAC;AACR,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACI,KAAK,oDACV,MAA+B,EAC/B,IAAU,EACV,iBAA4C;IAE5C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC;QACjC,MAAM,IAAI,GAAG,UAAU,CAAC;QACxB,MAAM,MAAM,GACV,iBAAiB;YACjB,CAAC,MAAM,SAAS,CAAC,QAAQ,CAEvB,IAAA,8CAA6B,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAIrC,wBAAwB,CACtB,IAAI,EACJ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAChC,CACF,CAAC;QACF,MAAM,UAAU,GAAkC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACvE,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;YACnC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,KAAK;YAC5C,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI;SAC9C,CAAC,CAAC,CAAC;QACJ,MAAM,QAAQ,GAAuC;YACnD,UAAU;YACV,oBAAoB,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;SAC7C,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,IAAI,wBAAwB;YAAE,OAAO,QAAQ,CAAC;QACnE,OAAO;YACL,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/E,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;SACpD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,4DAA4D,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -501,7 +501,10 @@ export declare function isReplanRegressingAcrossAuthBoundary(newSteps: readonly
|
|
|
501
501
|
* combination that no longer matches what this particular step does).
|
|
502
502
|
* Matches on word boundaries against normalized (lowercased, whitespace-
|
|
503
503
|
* collapsed) text, mirroring {@link SIGN_IN_PATTERNS}/{@link ACCOUNT_CREATION_PATTERNS},
|
|
504
|
-
* so a phrase like "commit the change" does not false-positive on "submit".
|
|
504
|
+
* so a phrase like "commit the change" does not false-positive on "submit".
|
|
505
|
+
* Negated guardrail clauses ("Do NOT click ... proceeds to checkout") are
|
|
506
|
+
* blanked first: a step that declares itself not a submit is never seeded as
|
|
507
|
+
* one. Pure.
|
|
505
508
|
*/
|
|
506
509
|
export declare function isSubmitShapedInstructionText(instruction: string): boolean;
|
|
507
510
|
/**
|