@enricai/barnacle 1.12.78 → 1.12.80
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/api/helpers/reply.d.ts.map +1 -1
- package/dist/api/helpers/reply.js +5 -2
- package/dist/api/helpers/reply.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/lib/llm/judge.d.ts.map +1 -1
- package/dist/lib/llm/judge.js +6 -1
- package/dist/lib/llm/judge.js.map +1 -1
- package/dist/lib/llm/judges/verify-step-advanced.d.ts +30 -0
- package/dist/lib/llm/judges/verify-step-advanced.d.ts.map +1 -0
- package/dist/lib/llm/judges/verify-step-advanced.js +62 -0
- package/dist/lib/llm/judges/verify-step-advanced.js.map +1 -0
- package/dist/lib/llm/judges/verify-submit.d.ts +7 -1
- package/dist/lib/llm/judges/verify-submit.d.ts.map +1 -1
- package/dist/lib/llm/judges/verify-submit.js +29 -8
- package/dist/lib/llm/judges/verify-submit.js.map +1 -1
- package/dist/lib/llm/schemas.d.ts +8 -0
- package/dist/lib/llm/schemas.d.ts.map +1 -1
- package/dist/lib/llm/schemas.js +21 -13
- package/dist/lib/llm/schemas.js.map +1 -1
- package/dist/lib/logging.d.ts +7 -0
- package/dist/lib/logging.d.ts.map +1 -1
- package/dist/lib/logging.js +19 -1
- package/dist/lib/logging.js.map +1 -1
- package/dist/lib/pii-redaction.d.ts +104 -0
- package/dist/lib/pii-redaction.d.ts.map +1 -0
- package/dist/lib/pii-redaction.js +397 -0
- package/dist/lib/pii-redaction.js.map +1 -0
- package/dist/lib/random.d.ts +3 -1
- package/dist/lib/random.d.ts.map +1 -1
- package/dist/lib/random.js +7 -2
- package/dist/lib/random.js.map +1 -1
- package/dist/lib/telemetry/beacon-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/beacon-capture.js +2 -0
- package/dist/lib/telemetry/beacon-capture.js.map +1 -1
- package/dist/lib/telemetry/call-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/call-capture.js +4 -1
- package/dist/lib/telemetry/call-capture.js.map +1 -1
- package/dist/lib/telemetry/submission-capture.d.ts +11 -1
- package/dist/lib/telemetry/submission-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/submission-capture.js +32 -3
- package/dist/lib/telemetry/submission-capture.js.map +1 -1
- package/dist/plugins/config-plugin.d.ts +8 -0
- package/dist/plugins/config-plugin.d.ts.map +1 -1
- package/dist/plugins/config-plugin.js +6 -1
- package/dist/plugins/config-plugin.js.map +1 -1
- package/dist/plugins/discover.d.ts.map +1 -1
- package/dist/plugins/discover.js +2 -0
- package/dist/plugins/discover.js.map +1 -1
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +23 -6
- package/dist/plugins/loader.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/active-page.d.ts +18 -0
- package/dist/scraper/active-page.d.ts.map +1 -0
- package/dist/scraper/active-page.js +53 -0
- package/dist/scraper/active-page.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/click-settle.d.ts +19 -0
- package/dist/scraper/click-settle.d.ts.map +1 -0
- package/dist/scraper/click-settle.js +65 -0
- package/dist/scraper/click-settle.js.map +1 -0
- package/dist/scraper/deep-locator-candidates.d.ts +20 -1
- package/dist/scraper/deep-locator-candidates.d.ts.map +1 -1
- package/dist/scraper/deep-locator-candidates.js +110 -22
- 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 +355 -6
- package/dist/scraper/flow-runner.d.ts.map +1 -1
- package/dist/scraper/flow-runner.js +2255 -350
- package/dist/scraper/flow-runner.js.map +1 -1
- package/dist/scraper/navigate.d.ts +3 -3
- package/dist/scraper/navigate.js +4 -4
- package/dist/scraper/navigate.js.map +1 -1
- package/dist/scraper/phantom-click.d.ts +34 -2
- package/dist/scraper/phantom-click.d.ts.map +1 -1
- package/dist/scraper/phantom-click.js +80 -6
- package/dist/scraper/phantom-click.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/quoted-spans.d.ts +35 -0
- package/dist/scraper/quoted-spans.d.ts.map +1 -0
- package/dist/scraper/quoted-spans.js +83 -0
- package/dist/scraper/quoted-spans.js.map +1 -0
- 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 +4 -2
- package/dist/scraper/session-browserbase.d.ts.map +1 -1
- package/dist/scraper/session-browserbase.js +63 -20
- 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-steel.d.ts.map +1 -1
- package/dist/scraper/session-steel.js +16 -2
- package/dist/scraper/session-steel.js.map +1 -1
- package/dist/scraper/session-teardown.d.ts +31 -1
- package/dist/scraper/session-teardown.d.ts.map +1 -1
- package/dist/scraper/session-teardown.js +60 -4
- package/dist/scraper/session-teardown.js.map +1 -1
- package/dist/scraper/spa-readiness.d.ts +13 -1
- package/dist/scraper/spa-readiness.d.ts.map +1 -1
- package/dist/scraper/spa-readiness.js +31 -1
- package/dist/scraper/spa-readiness.js.map +1 -1
- package/dist/scraper/stagehand-guard.d.ts +8 -3
- package/dist/scraper/stagehand-guard.d.ts.map +1 -1
- package/dist/scraper/stagehand-guard.js +181 -13
- package/dist/scraper/stagehand-guard.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/scraper/transient-provider-error.d.ts +19 -0
- package/dist/scraper/transient-provider-error.d.ts.map +1 -0
- package/dist/scraper/transient-provider-error.js +59 -0
- package/dist/scraper/transient-provider-error.js.map +1 -0
- package/dist/scraper/trusted-click.d.ts +122 -0
- package/dist/scraper/trusted-click.d.ts.map +1 -0
- package/dist/scraper/trusted-click.js +201 -0
- package/dist/scraper/trusted-click.js.map +1 -0
- package/dist/scraper/upload-affordance-expr.d.ts +33 -0
- package/dist/scraper/upload-affordance-expr.d.ts.map +1 -0
- package/dist/scraper/upload-affordance-expr.js +91 -0
- package/dist/scraper/upload-affordance-expr.js.map +1 -0
- package/dist/scripts/recon-browser.d.ts +30 -2
- package/dist/scripts/recon-browser.d.ts.map +1 -1
- package/dist/scripts/recon-browser.js +133 -27
- package/dist/scripts/recon-browser.js.map +1 -1
- package/dist/scripts/recon-capture-rebind.d.ts +11 -0
- package/dist/scripts/recon-capture-rebind.d.ts.map +1 -0
- package/dist/scripts/recon-capture-rebind.js +26 -0
- package/dist/scripts/recon-capture-rebind.js.map +1 -0
- package/dist/scripts/recon-generate.d.ts +159 -8
- package/dist/scripts/recon-generate.d.ts.map +1 -1
- package/dist/scripts/recon-generate.js +998 -182
- package/dist/scripts/recon-generate.js.map +1 -1
- package/dist/scripts/recon-shared.d.ts +7 -0
- package/dist/scripts/recon-shared.d.ts.map +1 -1
- package/dist/scripts/recon-shared.js +19 -0
- package/dist/scripts/recon-shared.js.map +1 -1
- package/dist/site-plugin.d.ts +8 -0
- package/dist/site-plugin.d.ts.map +1 -1
- package/dist/types/pii-redaction.d.ts +39 -0
- package/dist/types/pii-redaction.d.ts.map +1 -0
- package/dist/types/pii-redaction.js +3 -0
- package/dist/types/pii-redaction.js.map +1 -0
- package/package.json +14 -1
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.makeFilteredStagehandLogger = makeFilteredStagehandLogger;
|
|
4
7
|
exports.makeOutboundIpAccessor = makeOutboundIpAccessor;
|
|
5
8
|
exports.createBrowserbaseBrowserSession = createBrowserbaseBrowserSession;
|
|
9
|
+
const sdk_1 = __importDefault(require("@browserbasehq/sdk"));
|
|
6
10
|
const stagehand_1 = require("@browserbasehq/stagehand");
|
|
7
11
|
const config_1 = require("../config");
|
|
8
12
|
const bedrock_1 = require("../lib/bedrock");
|
|
@@ -102,6 +106,24 @@ function makeOutboundIpAccessor(resolve, opts) {
|
|
|
102
106
|
return inFlight;
|
|
103
107
|
};
|
|
104
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Releases the Browserbase session explicitly because `keepAlive: true` leaves
|
|
111
|
+
* teardown to us; failures are logged so they never mask the rest of close().
|
|
112
|
+
*/
|
|
113
|
+
async function releaseBrowserbaseSession(sessionId) {
|
|
114
|
+
if (sessionId === "unknown")
|
|
115
|
+
return;
|
|
116
|
+
try {
|
|
117
|
+
const client = new sdk_1.default({ apiKey: config_1.config.scraper.browserbaseApiKey });
|
|
118
|
+
await client.sessions.update(sessionId, {
|
|
119
|
+
projectId: config_1.config.scraper.browserbaseProjectId,
|
|
120
|
+
status: "REQUEST_RELEASE",
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
logger.warn(`browserbase release failed for session ${sessionId}: ${(0, errors_1.toErrorMessage)(err)}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
105
127
|
/**
|
|
106
128
|
* Spins up one Browserbase cloud session with the configured Stagehand LLM.
|
|
107
129
|
*
|
|
@@ -113,8 +135,10 @@ function makeOutboundIpAccessor(resolve, opts) {
|
|
|
113
135
|
* code path Stagehand validates first.
|
|
114
136
|
*
|
|
115
137
|
* Session lifecycle: Stagehand owns Browserbase session creation when
|
|
116
|
-
* `env: "BROWSERBASE"` is set
|
|
117
|
-
*
|
|
138
|
+
* `env: "BROWSERBASE"` is set, but because the session is created with
|
|
139
|
+
* `keepAlive: true`, `stagehand.close()` does NOT release it. `close()`
|
|
140
|
+
* therefore explicitly issues `sessions.update(..., REQUEST_RELEASE)` through
|
|
141
|
+
* the Browserbase SDK; a failed release is logged and never aborts teardown.
|
|
118
142
|
*
|
|
119
143
|
* Viewport rotation: forwarded via `fingerprint.screen.{min,max}{Width,Height}`
|
|
120
144
|
* pinned to the chosen viewport. The min/max bracket forces Browserbase's
|
|
@@ -195,7 +219,33 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
195
219
|
}
|
|
196
220
|
: baseFingerprint;
|
|
197
221
|
const { callback: filteredStagehandLoggerCallback, reportSuppressed: reportSuppressedAisdkErrors, getSuppressedCount: getSuppressedAisdkElementIdErrorCount, } = makeFilteredStagehandLogger(logger);
|
|
198
|
-
|
|
222
|
+
// Stagehand's own end-of-run teardown also closes the CDP transport, so
|
|
223
|
+
// the handler must not flag that expected case. `weInitiatedClose` is
|
|
224
|
+
// flipped at the top of `close()` below, before `stagehand.close()` runs;
|
|
225
|
+
// only a transport close observed while it's still false is an SDK-
|
|
226
|
+
// initiated teardown mid-operation, not a consequence of our own close.
|
|
227
|
+
let weInitiatedClose = false;
|
|
228
|
+
let cdpTransportClosedError;
|
|
229
|
+
const configuredTimeoutSeconds = customSessionParams.timeout ??
|
|
230
|
+
config_1.config.scraper.browserbaseSessionTimeoutSeconds;
|
|
231
|
+
let sessionTimeoutHit;
|
|
232
|
+
// Advanced by the flow runner's step loop via `recordStepCompleted` as
|
|
233
|
+
// each step finishes.
|
|
234
|
+
let completedStepCount = 0;
|
|
235
|
+
// Single classification shared by the log-line detector and the transport
|
|
236
|
+
// listener so the order in which those two signals arrive cannot matter.
|
|
237
|
+
const classifyLifetime = (0, session_teardown_1.createDeathClassifier)({
|
|
238
|
+
configuredTimeoutSeconds,
|
|
239
|
+
toleranceSeconds: TOLERANCE_SECONDS,
|
|
240
|
+
isOwnClose: () => weInitiatedClose,
|
|
241
|
+
getElapsedSeconds: () => (Date.now() - sessionStartedAt) / 1000,
|
|
242
|
+
getCompletedStepCount: () => completedStepCount,
|
|
243
|
+
});
|
|
244
|
+
const classifyDeath = () => {
|
|
245
|
+
sessionTimeoutHit = classifyLifetime() ?? sessionTimeoutHit;
|
|
246
|
+
return sessionTimeoutHit;
|
|
247
|
+
};
|
|
248
|
+
const { watchLogLine: watchForTeardown, signalTransportClosed, deathSignal, deathAbortSignal, } = (0, session_teardown_1.createSessionTeardownDetector)({ classifyDeath });
|
|
199
249
|
const stagehandLoggerCallback = (line) => {
|
|
200
250
|
filteredStagehandLoggerCallback(line);
|
|
201
251
|
watchForTeardown(line);
|
|
@@ -224,6 +274,8 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
224
274
|
...customSessionParams.browserSettings,
|
|
225
275
|
...(advancedStealth ? { advancedStealth: true, solveCaptchas: true } : {}),
|
|
226
276
|
fingerprint,
|
|
277
|
+
logSession: config_1.config.scraper.browserbaseSessionArtifacts,
|
|
278
|
+
recordSession: config_1.config.scraper.browserbaseSessionArtifacts,
|
|
227
279
|
},
|
|
228
280
|
},
|
|
229
281
|
model: config_1.config.scraper.useBedrock
|
|
@@ -235,7 +287,11 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
235
287
|
fetch: (0, session_shared_1.createTimeoutFetch)(config_1.config.scraper.anthropicTimeoutMs),
|
|
236
288
|
},
|
|
237
289
|
llmClient,
|
|
238
|
-
|
|
290
|
+
// Off: the cache keys on instruction text, and instructions can still
|
|
291
|
+
// carry request values the guard leaves literal (keys outside the
|
|
292
|
+
// plugin's tokenizeKeys, replayed observe actions), which a cache entry
|
|
293
|
+
// would persist on Browserbase's side.
|
|
294
|
+
serverCache: false,
|
|
239
295
|
selfHeal: false,
|
|
240
296
|
// Stagehand spawns an out-of-process crash supervisor whenever
|
|
241
297
|
// keepAlive isn't true, watching its own stdin lifeline pipe and
|
|
@@ -262,19 +318,6 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
262
318
|
throw err;
|
|
263
319
|
}
|
|
264
320
|
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
321
|
stagehand.context.conn.onTransportClosed((why) => {
|
|
279
322
|
if (weInitiatedClose)
|
|
280
323
|
return;
|
|
@@ -286,9 +329,7 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
286
329
|
completedStepCount,
|
|
287
330
|
toleranceSeconds: TOLERANCE_SECONDS,
|
|
288
331
|
});
|
|
289
|
-
|
|
290
|
-
sessionTimeoutHit = { configuredTimeoutSeconds, elapsedSeconds };
|
|
291
|
-
}
|
|
332
|
+
signalTransportClosed(why);
|
|
292
333
|
logger.warn(classification.message);
|
|
293
334
|
});
|
|
294
335
|
const sessionId = stagehand.browserbaseSessionID ?? "unknown";
|
|
@@ -308,6 +349,7 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
308
349
|
catch (err) {
|
|
309
350
|
logger.warn(`stagehand close failed for session ${sessionId}: ${(0, errors_1.toErrorMessage)(err)}`);
|
|
310
351
|
}
|
|
352
|
+
await releaseBrowserbaseSession(sessionId);
|
|
311
353
|
await limiter.stop({ dropWaitingJobs: true });
|
|
312
354
|
reportSuppressedAisdkErrors();
|
|
313
355
|
};
|
|
@@ -326,6 +368,7 @@ async function createBrowserbaseBrowserSession(opts) {
|
|
|
326
368
|
getSuppressedAisdkElementIdErrorCount,
|
|
327
369
|
getOutboundIp,
|
|
328
370
|
deathSignal,
|
|
371
|
+
deathAbortSignal,
|
|
329
372
|
getCdpTransportClosedError,
|
|
330
373
|
getSessionTimeoutHit,
|
|
331
374
|
sessionProxy,
|
|
@@ -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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"}
|
|
@@ -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-steel.d.ts","sourceRoot":"","sources":["../../src/scraper/session-steel.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-steel.d.ts","sourceRoot":"","sources":["../../src/scraper/session-steel.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAe9C;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAUjG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,cAAc,CAAC,CAkKzE"}
|
|
@@ -17,6 +17,8 @@ const session_shared_1 = require("./session-shared");
|
|
|
17
17
|
const session_teardown_1 = require("./session-teardown");
|
|
18
18
|
const throttle_1 = require("./throttle");
|
|
19
19
|
const logger = (0, logging_1.getLogger)({ name: "scraper/session-steel" });
|
|
20
|
+
/** Mirrors Browserbase: providers overshoot their configured lifetime, never undershoot. */
|
|
21
|
+
const STEEL_TIMEOUT_TOLERANCE_SECONDS = 15;
|
|
20
22
|
/** Formats a session proxy tuple as Steel's documented `proxyUrl`: `protocol://[user:pass@]host:port`. */
|
|
21
23
|
function formatSteelProxyUrl(proxy) {
|
|
22
24
|
const credentials = proxy.username && proxy.password ? `${proxy.username}:${proxy.password}@` : "";
|
|
@@ -97,7 +99,9 @@ async function createSteelBrowserSession() {
|
|
|
97
99
|
// failure leaves a live session burning minutes until Steel's own timeout.
|
|
98
100
|
let stagehand;
|
|
99
101
|
let deathSignal;
|
|
102
|
+
let deathAbortSignal;
|
|
100
103
|
let heartbeat;
|
|
104
|
+
let weInitiatedClose = false;
|
|
101
105
|
try {
|
|
102
106
|
// Steel's websocketUrl is `wss://connect.steel.dev?sessionId=…`. Stagehand's
|
|
103
107
|
// V3 CDP connector requires the apiKey as a query parameter too — without it
|
|
@@ -113,9 +117,19 @@ async function createSteelBrowserSession() {
|
|
|
113
117
|
? new stagehand_1.AISdkClient({ model: (0, bedrock_1.createBedrockModel)(config_1.config.bedrock) })
|
|
114
118
|
: undefined;
|
|
115
119
|
const forwardStagehandLogLine = makeStagehandLoggerForwarder(logger);
|
|
116
|
-
const
|
|
120
|
+
const steelStartedAt = Date.now();
|
|
121
|
+
const teardownDetector = (0, session_teardown_1.createSessionTeardownDetector)({
|
|
122
|
+
classifyDeath: (0, session_teardown_1.createDeathClassifier)({
|
|
123
|
+
configuredTimeoutSeconds: config_1.config.scraper.steelSessionTimeoutMs / 1000,
|
|
124
|
+
toleranceSeconds: STEEL_TIMEOUT_TOLERANCE_SECONDS,
|
|
125
|
+
isOwnClose: () => weInitiatedClose,
|
|
126
|
+
getElapsedSeconds: () => (Date.now() - steelStartedAt) / 1000,
|
|
127
|
+
getCompletedStepCount: () => 0,
|
|
128
|
+
}),
|
|
129
|
+
});
|
|
117
130
|
const watchForTeardown = teardownDetector.watchLogLine;
|
|
118
131
|
deathSignal = teardownDetector.deathSignal;
|
|
132
|
+
deathAbortSignal = teardownDetector.deathAbortSignal;
|
|
119
133
|
const stagehandLoggerCallback = (line) => {
|
|
120
134
|
forwardStagehandLogLine(line);
|
|
121
135
|
watchForTeardown(line);
|
|
@@ -171,7 +185,6 @@ async function createSteelBrowserSession() {
|
|
|
171
185
|
// flipped at the top of `close()` below, before `stagehand.close()` runs;
|
|
172
186
|
// only a transport close observed while it's still false is an SDK-
|
|
173
187
|
// initiated teardown mid-operation, not a consequence of our own close.
|
|
174
|
-
let weInitiatedClose = false;
|
|
175
188
|
let cdpTransportClosedError;
|
|
176
189
|
stagehand.context.conn.onTransportClosed((why) => {
|
|
177
190
|
if (weInitiatedClose)
|
|
@@ -204,6 +217,7 @@ async function createSteelBrowserSession() {
|
|
|
204
217
|
provider: "steel",
|
|
205
218
|
close,
|
|
206
219
|
deathSignal,
|
|
220
|
+
deathAbortSignal,
|
|
207
221
|
getCdpTransportClosedError,
|
|
208
222
|
sessionProxy,
|
|
209
223
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-steel.js","sourceRoot":"","sources":["../../src/scraper/session-steel.ts"],"names":[],"mappings":";;;;;;;AAAA,wDAA2F;AAC3F,0DAA8B;AAE9B,qCAAkC;AAClC,2CAAmD;AACnD,yCAA8C;AAC9C,2CAA0C;AAC1C,2DAA8F;AAC9F,6CAA2D;AAE3D,6DAIkC;AAClC,
|
|
1
|
+
{"version":3,"file":"session-steel.js","sourceRoot":"","sources":["../../src/scraper/session-steel.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,16 @@ 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;
|
|
19
|
+
signalTransportClosed: (why: string) => void;
|
|
13
20
|
deathSignal: Promise<never>;
|
|
21
|
+
deathAbortSignal: AbortSignal;
|
|
14
22
|
};
|
|
15
23
|
/** Result of classifying a session teardown against its configured lifetime. */
|
|
16
24
|
export interface SessionTeardownClassification {
|
|
@@ -38,4 +46,26 @@ export declare function classifySessionTeardown(params: {
|
|
|
38
46
|
* would have settled it is already gone.
|
|
39
47
|
*/
|
|
40
48
|
export declare function raceAgainstTeardown<T>(stepPromise: Promise<T>, deathSignal: Promise<never>): Promise<T>;
|
|
49
|
+
/**
|
|
50
|
+
* Upgrades a caught error to `SessionLifetimeExceededError` when the session
|
|
51
|
+
* recorded a lifetime-expiry death, so every code path that observes the
|
|
52
|
+
* death fails fast regardless of which error it caught. Steel sessions have
|
|
53
|
+
* no `getSessionTimeoutHit`, so the error passes through unchanged.
|
|
54
|
+
*/
|
|
55
|
+
export declare function resolveSessionDeathError(session: Pick<BrowserSession, "getSessionTimeoutHit"> | undefined, err: unknown): unknown;
|
|
56
|
+
/**
|
|
57
|
+
* Builds the single lifetime classifier shared by the log-line detector and
|
|
58
|
+
* the transport-closed listener, so the order in which those signals arrive
|
|
59
|
+
* cannot change the outcome, and our own `close()` never classifies.
|
|
60
|
+
*/
|
|
61
|
+
export declare function createDeathClassifier(opts: {
|
|
62
|
+
configuredTimeoutSeconds: number;
|
|
63
|
+
toleranceSeconds: number;
|
|
64
|
+
isOwnClose: () => boolean;
|
|
65
|
+
getElapsedSeconds: () => number;
|
|
66
|
+
getCompletedStepCount: () => number;
|
|
67
|
+
}): () => {
|
|
68
|
+
configuredTimeoutSeconds: number;
|
|
69
|
+
elapsedSeconds: number;
|
|
70
|
+
} | undefined;
|
|
41
71
|
//# 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,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,gBAAgB,EAAE,WAAW,CAAC;CAC/B,CAsCA;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,7 +32,19 @@ 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;
|
|
37
|
+
const fire = (detail, earlyMessage) => {
|
|
38
|
+
if (fired)
|
|
39
|
+
return;
|
|
40
|
+
fired = true;
|
|
41
|
+
const hit = opts?.classifyDeath?.();
|
|
42
|
+
const err = hit
|
|
43
|
+
? new errors_1.SessionLifetimeExceededError(`scraper session reached its configured lifetime (${hit.elapsedSeconds.toFixed(1)}s elapsed of ${hit.configuredTimeoutSeconds}s): ${detail}`)
|
|
44
|
+
: new errors_1.CdpTransportClosedError(earlyMessage);
|
|
45
|
+
signalDeath?.(err);
|
|
46
|
+
abortController.abort(err);
|
|
47
|
+
};
|
|
34
48
|
const watchLogLine = (line) => {
|
|
35
49
|
if (fired)
|
|
36
50
|
return;
|
|
@@ -38,10 +52,15 @@ function createSessionTeardownDetector() {
|
|
|
38
52
|
return;
|
|
39
53
|
if (!line.message.includes(TEARDOWN_MESSAGE_SUBSTRING))
|
|
40
54
|
return;
|
|
41
|
-
|
|
42
|
-
|
|
55
|
+
fire(line.message, `stagehand-initiated teardown mid-flow: ${line.message}`);
|
|
56
|
+
};
|
|
57
|
+
const signalTransportClosed = (why) => fire(why, `scraper session's CDP transport was closed by the SDK: ${why}`);
|
|
58
|
+
return {
|
|
59
|
+
watchLogLine,
|
|
60
|
+
signalTransportClosed,
|
|
61
|
+
deathSignal,
|
|
62
|
+
deathAbortSignal: abortController.signal,
|
|
43
63
|
};
|
|
44
|
-
return { watchLogLine, deathSignal };
|
|
45
64
|
}
|
|
46
65
|
/**
|
|
47
66
|
* Browserbase overshoots its own configured session timeout by 1-14s in
|
|
@@ -73,4 +92,41 @@ function classifySessionTeardown(params) {
|
|
|
73
92
|
function raceAgainstTeardown(stepPromise, deathSignal) {
|
|
74
93
|
return Promise.race([stepPromise, deathSignal]);
|
|
75
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Upgrades a caught error to `SessionLifetimeExceededError` when the session
|
|
97
|
+
* recorded a lifetime-expiry death, so every code path that observes the
|
|
98
|
+
* death fails fast regardless of which error it caught. Steel sessions have
|
|
99
|
+
* no `getSessionTimeoutHit`, so the error passes through unchanged.
|
|
100
|
+
*/
|
|
101
|
+
function resolveSessionDeathError(session, err) {
|
|
102
|
+
const hit = session?.getSessionTimeoutHit?.();
|
|
103
|
+
if (!hit)
|
|
104
|
+
return err;
|
|
105
|
+
return new errors_1.SessionLifetimeExceededError(`scraper session reached its configured lifetime (${hit.elapsedSeconds.toFixed(1)}s elapsed of ${hit.configuredTimeoutSeconds}s)`);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Builds the single lifetime classifier shared by the log-line detector and
|
|
109
|
+
* the transport-closed listener, so the order in which those signals arrive
|
|
110
|
+
* cannot change the outcome, and our own `close()` never classifies.
|
|
111
|
+
*/
|
|
112
|
+
function createDeathClassifier(opts) {
|
|
113
|
+
let hit;
|
|
114
|
+
return () => {
|
|
115
|
+
if (opts.isOwnClose())
|
|
116
|
+
return undefined;
|
|
117
|
+
if (hit)
|
|
118
|
+
return hit;
|
|
119
|
+
const elapsedSeconds = opts.getElapsedSeconds();
|
|
120
|
+
const classification = classifySessionTeardown({
|
|
121
|
+
configuredTimeoutSeconds: opts.configuredTimeoutSeconds,
|
|
122
|
+
elapsedSeconds,
|
|
123
|
+
completedStepCount: opts.getCompletedStepCount(),
|
|
124
|
+
toleranceSeconds: opts.toleranceSeconds,
|
|
125
|
+
});
|
|
126
|
+
if (!classification.isTimeoutHit)
|
|
127
|
+
return undefined;
|
|
128
|
+
hit = { configuredTimeoutSeconds: opts.configuredTimeoutSeconds, elapsedSeconds };
|
|
129
|
+
return hit;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
76
132
|
//# 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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"}
|
|
@@ -2,7 +2,7 @@ import type { Page } from "@browserbasehq/stagehand";
|
|
|
2
2
|
import type { Logger } from "../types/logging";
|
|
3
3
|
/**
|
|
4
4
|
* Block until a just-navigated SPA has actually hydrated, so the flow does not
|
|
5
|
-
* begin stepping against a shell page. `page.goto(..., "
|
|
5
|
+
* begin stepping against a shell page. `page.goto(..., "domcontentloaded")` on a
|
|
6
6
|
* bot-managed/CDN-fronted single-page app resolves during the challenge/redirect —
|
|
7
7
|
* before the client framework renders the real DOM — so the first steps would
|
|
8
8
|
* otherwise probe an empty page, find no candidates, and (being optional) skip
|
|
@@ -25,4 +25,16 @@ export declare function waitForSpaReady(page: Page, logger: Logger, opts?: {
|
|
|
25
25
|
pollMs?: number;
|
|
26
26
|
minBodyLength?: number;
|
|
27
27
|
}): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Re-gate SPA hydration after a mid-flow origin change, with one reload of recovery.
|
|
30
|
+
* `waitForSpaReady` proceeds silently on a shell page; a cross-origin hop that landed
|
|
31
|
+
* on an empty shell (e.g. a redirect from app.example.com to login.example.net whose
|
|
32
|
+
* client bundle never booted) would otherwise let every later step probe nothing.
|
|
33
|
+
* Reloads at most once and never throws.
|
|
34
|
+
*/
|
|
35
|
+
export declare function regateSpaAfterOriginChange(page: Page, logger: Logger, opts?: {
|
|
36
|
+
timeoutMs?: number;
|
|
37
|
+
pollMs?: number;
|
|
38
|
+
minBodyLength?: number;
|
|
39
|
+
}): Promise<void>;
|
|
28
40
|
//# sourceMappingURL=spa-readiness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spa-readiness.d.ts","sourceRoot":"","sources":["../../src/scraper/spa-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAO9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACzE,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
|
1
|
+
{"version":3,"file":"spa-readiness.d.ts","sourceRoot":"","sources":["../../src/scraper/spa-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAO9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACzE,OAAO,CAAC,IAAI,CAAC,CAkCf;AAKD;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACzE,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.waitForSpaReady = waitForSpaReady;
|
|
4
|
+
exports.regateSpaAfterOriginChange = regateSpaAfterOriginChange;
|
|
4
5
|
const watchdog_1 = require("./watchdog");
|
|
5
6
|
/** SPA-readiness gate defaults — match the recon CLI's post-navigation wait. */
|
|
6
7
|
const SPA_READINESS_TIMEOUT_MS = 15_000;
|
|
@@ -8,7 +9,7 @@ const SPA_READINESS_POLL_MS = 500;
|
|
|
8
9
|
const SPA_MIN_BODY_LENGTH = 5_000;
|
|
9
10
|
/**
|
|
10
11
|
* Block until a just-navigated SPA has actually hydrated, so the flow does not
|
|
11
|
-
* begin stepping against a shell page. `page.goto(..., "
|
|
12
|
+
* begin stepping against a shell page. `page.goto(..., "domcontentloaded")` on a
|
|
12
13
|
* bot-managed/CDN-fronted single-page app resolves during the challenge/redirect —
|
|
13
14
|
* before the client framework renders the real DOM — so the first steps would
|
|
14
15
|
* otherwise probe an empty page, find no candidates, and (being optional) skip
|
|
@@ -54,4 +55,33 @@ async function waitForSpaReady(page, logger, opts = {}) {
|
|
|
54
55
|
}
|
|
55
56
|
logger.warn(`spa readiness: body still ${bodyLength} chars after ${timeoutMs}ms — proceeding with possibly incomplete page`);
|
|
56
57
|
}
|
|
58
|
+
/** Below this body length after the readiness wait, the page is treated as an empty shell. */
|
|
59
|
+
const SPA_EMPTY_SHELL_BODY_LENGTH = 1_000;
|
|
60
|
+
/**
|
|
61
|
+
* Re-gate SPA hydration after a mid-flow origin change, with one reload of recovery.
|
|
62
|
+
* `waitForSpaReady` proceeds silently on a shell page; a cross-origin hop that landed
|
|
63
|
+
* on an empty shell (e.g. a redirect from app.example.com to login.example.net whose
|
|
64
|
+
* client bundle never booted) would otherwise let every later step probe nothing.
|
|
65
|
+
* Reloads at most once and never throws.
|
|
66
|
+
*/
|
|
67
|
+
async function regateSpaAfterOriginChange(page, logger, opts = {}) {
|
|
68
|
+
await waitForSpaReady(page, logger, opts);
|
|
69
|
+
const bodyLength = await readBodyLengthOnce(page, opts.pollMs ?? SPA_READINESS_POLL_MS);
|
|
70
|
+
if (bodyLength >= SPA_EMPTY_SHELL_BODY_LENGTH) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
logger.warn(`spa readiness: body ${bodyLength} chars < ${SPA_EMPTY_SHELL_BODY_LENGTH} after origin change — reloading once`);
|
|
74
|
+
try {
|
|
75
|
+
await page.reload({ waitUntil: "domcontentloaded" });
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
logger.warn(`spa readiness: reload failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
await waitForSpaReady(page, logger, opts);
|
|
82
|
+
}
|
|
83
|
+
async function readBodyLengthOnce(page, timeoutMs) {
|
|
84
|
+
const raw = await (0, watchdog_1.withWatchdog)(() => page.evaluate("document.body ? document.body.outerHTML.length : 0"), { timeoutMs, label: "flow-runner: spa origin re-gate body-length probe" }).catch(() => 0);
|
|
85
|
+
return typeof raw === "number" ? raw : 0;
|
|
86
|
+
}
|
|
57
87
|
//# sourceMappingURL=spa-readiness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spa-readiness.js","sourceRoot":"","sources":["../../src/scraper/spa-readiness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spa-readiness.js","sourceRoot":"","sources":["../../src/scraper/spa-readiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,8 @@ import { type FrameTarget } from "./frame-target";
|
|
|
48
48
|
* lands in `.barnacle/calls.ndjson` instead of the per-URL run partition.
|
|
49
49
|
*/
|
|
50
50
|
export type StagehandCaptureFn = (input: LlmCallInput) => Promise<void>;
|
|
51
|
+
/** Instructions that name a click; only these are worth an observe to find a click point. */
|
|
52
|
+
export declare const CLICK_INTENT_RE: RegExp;
|
|
51
53
|
/**
|
|
52
54
|
* Zod parallel of Stagehand's public `Action` shape (from
|
|
53
55
|
* `@browserbasehq/stagehand/.../public/methods.d.ts`):
|
|
@@ -116,8 +118,11 @@ export declare class StagehandSchemaError extends Error {
|
|
|
116
118
|
* receives the same `timeout` as before, but a call that ignores it and hangs
|
|
117
119
|
* now fails the attempt instead of blocking the step forever.
|
|
118
120
|
*
|
|
119
|
-
*
|
|
120
|
-
* `
|
|
121
|
+
* Click targets are centred and hit-tested before Stagehand acts (see
|
|
122
|
+
* `preCentreClickTarget`); a given `frameTarget` scopes that pass, and
|
|
123
|
+
* `preCentred` skips it when the caller already resolved and centred the
|
|
124
|
+
* target, so one click does not cost two observe calls. The
|
|
125
|
+
* trailing `frameTarget` param is not forwarded into
|
|
121
126
|
* `ActOptions` — `ActOptions` has no `selector` field, and its `page`
|
|
122
127
|
* override only accepts a full Playwright/Puppeteer/Patchright/understudy
|
|
123
128
|
* `Page`, not the `Frame` handle `FrameTarget.frame` exposes (the
|
|
@@ -128,7 +133,7 @@ export declare class StagehandSchemaError extends Error {
|
|
|
128
133
|
* that `Action` — the `observe(...)[0] -> act(target)` pattern already used
|
|
129
134
|
* throughout `flow-runner.ts`.
|
|
130
135
|
*/
|
|
131
|
-
export declare function guardedAct(stagehand: Stagehand, input: string | Action, options?: ActOptions, captureFn?: StagehandCaptureFn,
|
|
136
|
+
export declare function guardedAct(stagehand: Stagehand, input: string | Action, options?: ActOptions, captureFn?: StagehandCaptureFn, frameTarget?: FrameTarget, preCentred?: boolean): Promise<ActResult>;
|
|
132
137
|
/**
|
|
133
138
|
* Schema-guarded wrapper around Stagehand's `observe`. Parallels the
|
|
134
139
|
* Stagehand overloads: no args, options-only, instruction-only,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stagehand-guard.d.ts","sourceRoot":"","sources":["../../src/scraper/stagehand-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,SAAS,
|
|
1
|
+
{"version":3,"file":"stagehand-guard.d.ts","sourceRoot":"","sources":["../../src/scraper/stagehand-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,SAAS,EAEV,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAS3B,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAEL,KAAK,WAAW,EAGjB,MAAM,wBAAwB,CAAC;AAMhC;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAYxE,6FAA6F;AAC7F,eAAO,MAAM,eAAe,QAAe,CAAC;AAuB5C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa;;;;;iBAKxB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;iBAM5B,CAAC;AAEH;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAG,0BAA0B,CAAU;IACpD,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAE9B,YACE,SAAS,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,EACxC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EACpB,WAAW,EAAE,OAAO,EAOrB;CACF;AA2KD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,CAAC,EAAE,UAAU,EACpB,SAAS,CAAC,EAAE,kBAAkB,EAC9B,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,UAAQ,GACjB,OAAO,CAAC,SAAS,CAAC,CAkFpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,SAAS,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,kBAAkB,EAC9B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CA4FnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACzD,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,kBAAkB,EAC9B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CA4ErB"}
|