@enricai/barnacle 1.6.9 → 1.6.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -3
- package/dist/api/routes/submissions.d.ts +21 -0
- package/dist/api/routes/submissions.d.ts.map +1 -0
- package/dist/api/routes/submissions.js +48 -0
- package/dist/api/routes/submissions.js.map +1 -0
- package/dist/api/schemas/submissions.d.ts +110 -0
- package/dist/api/schemas/submissions.d.ts.map +1 -0
- package/dist/api/schemas/submissions.js +77 -0
- package/dist/api/schemas/submissions.js.map +1 -0
- package/dist/config.d.ts +34 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/lib/telemetry/beacon-capture.d.ts +37 -0
- package/dist/lib/telemetry/beacon-capture.d.ts.map +1 -0
- package/dist/lib/telemetry/beacon-capture.js +47 -0
- package/dist/lib/telemetry/beacon-capture.js.map +1 -0
- package/dist/lib/telemetry/reconciliation-record.d.ts +105 -0
- package/dist/lib/telemetry/reconciliation-record.d.ts.map +1 -0
- package/dist/lib/telemetry/reconciliation-record.js +76 -0
- package/dist/lib/telemetry/reconciliation-record.js.map +1 -0
- package/dist/lib/telemetry/reconciliation-source.d.ts +33 -0
- package/dist/lib/telemetry/reconciliation-source.d.ts.map +1 -0
- package/dist/lib/telemetry/reconciliation-source.js +91 -0
- package/dist/lib/telemetry/reconciliation-source.js.map +1 -0
- package/dist/lib/telemetry/s3-sink.d.ts.map +1 -1
- package/dist/lib/telemetry/s3-sink.js +1 -2
- package/dist/lib/telemetry/s3-sink.js.map +1 -1
- package/dist/lib/telemetry/submission-capture.d.ts +30 -9
- package/dist/lib/telemetry/submission-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/submission-capture.js +32 -21
- package/dist/lib/telemetry/submission-capture.js.map +1 -1
- package/dist/lib/telemetry/submission-query.d.ts +32 -0
- package/dist/lib/telemetry/submission-query.d.ts.map +1 -0
- package/dist/lib/telemetry/submission-query.js +49 -0
- package/dist/lib/telemetry/submission-query.js.map +1 -0
- package/dist/lib/telemetry/submission-reader.d.ts +52 -0
- package/dist/lib/telemetry/submission-reader.d.ts.map +1 -0
- package/dist/lib/telemetry/submission-reader.js +111 -0
- package/dist/lib/telemetry/submission-reader.js.map +1 -0
- package/dist/lib/telemetry/submissions-s3-objects.d.ts +23 -0
- package/dist/lib/telemetry/submissions-s3-objects.d.ts.map +1 -0
- package/dist/lib/telemetry/submissions-s3-objects.js +132 -0
- package/dist/lib/telemetry/submissions-s3-objects.js.map +1 -0
- package/dist/lib/telemetry/submissions-s3-reader.d.ts +25 -0
- package/dist/lib/telemetry/submissions-s3-reader.d.ts.map +1 -0
- package/dist/lib/telemetry/submissions-s3-reader.js +63 -0
- package/dist/lib/telemetry/submissions-s3-reader.js.map +1 -0
- package/dist/lib/tracking-click.d.ts +13 -2
- package/dist/lib/tracking-click.d.ts.map +1 -1
- package/dist/lib/tracking-click.js +42 -4
- package/dist/lib/tracking-click.js.map +1 -1
- package/dist/plugins/loader.d.ts +17 -3
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +59 -6
- package/dist/plugins/loader.js.map +1 -1
- package/dist/scraper/cookie-jar.d.ts +10 -4
- package/dist/scraper/cookie-jar.d.ts.map +1 -1
- package/dist/scraper/cookie-jar.js +10 -5
- package/dist/scraper/cookie-jar.js.map +1 -1
- package/dist/scraper/deep-locator-candidates.d.ts +84 -0
- package/dist/scraper/deep-locator-candidates.d.ts.map +1 -0
- package/dist/scraper/deep-locator-candidates.js +206 -0
- package/dist/scraper/deep-locator-candidates.js.map +1 -0
- package/dist/scraper/deep-locator-fake.d.ts +116 -0
- package/dist/scraper/deep-locator-fake.d.ts.map +1 -0
- package/dist/scraper/deep-locator-fake.js +128 -0
- package/dist/scraper/deep-locator-fake.js.map +1 -0
- package/dist/scraper/flow-runner.d.ts +28 -1
- package/dist/scraper/flow-runner.d.ts.map +1 -1
- package/dist/scraper/flow-runner.js +204 -14
- package/dist/scraper/flow-runner.js.map +1 -1
- package/dist/scraper/frame-target.d.ts +60 -14
- package/dist/scraper/frame-target.d.ts.map +1 -1
- package/dist/scraper/frame-target.js +126 -38
- package/dist/scraper/frame-target.js.map +1 -1
- package/dist/scraper/stagehand-guard.d.ts +14 -0
- package/dist/scraper/stagehand-guard.d.ts.map +1 -1
- package/dist/scraper/stagehand-guard.js +28 -8
- package/dist/scraper/stagehand-guard.js.map +1 -1
- package/dist/scraper/watchdog.d.ts +38 -0
- package/dist/scraper/watchdog.d.ts.map +1 -0
- package/dist/scraper/watchdog.js +54 -0
- package/dist/scraper/watchdog.js.map +1 -0
- package/dist/scripts/recon-browser.d.ts.map +1 -1
- package/dist/scripts/recon-browser.js +14 -3
- package/dist/scripts/recon-browser.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/site-plugin.d.ts +12 -0
- package/dist/site-plugin.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/plugins/loader.d.ts
CHANGED
|
@@ -17,9 +17,23 @@ export declare const SITE_PLUGINS: SitePlugin<unknown, unknown>[];
|
|
|
17
17
|
* browser path. Records metrics on each branch so ops dashboards can alert on
|
|
18
18
|
* rising fallback rates. Emits a `submission-envelope` telemetry record on
|
|
19
19
|
* both success and failure — the durable source-of-truth for "what did we
|
|
20
|
-
* submit for jobId X and did it succeed."
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* submit for jobId X and did it succeed." Calls the plugin's own
|
|
21
|
+
* `extractJoinKeys` (if declared) once and stamps the opaque result onto both
|
|
22
|
+
* the submission envelope and the tracking click so a run's submit and
|
|
23
|
+
* beacon-fire records can be joined, without core knowing what the keys mean.
|
|
24
|
+
* A plugin that declares `extractJoinKeys` is asserting it manages its own
|
|
25
|
+
* post-submit attribution navigation, so core's automatic `TrackingUrl` fire
|
|
26
|
+
* is skipped for it — firing both would open two independent sessions
|
|
27
|
+
* against the same tracking URL, which can orphan the plugin's own
|
|
28
|
+
* click-to-session association with its attribution vendor. Either way — no
|
|
29
|
+
* usable `TrackingUrl`, or a plugin that manages its own nav — the skipped
|
|
30
|
+
* case still records a `beaconStatus: "skipped"` record instead of firing
|
|
31
|
+
* the tracking click, so "no beacon was ever applicable" is distinguishable
|
|
32
|
+
* from "a beacon was attempted and never recorded an outcome"; the record's
|
|
33
|
+
* `trackingUrl` field is preserved (not nulled) when a real URL was present
|
|
34
|
+
* but delegated, so the two skip reasons stay distinguishable from each
|
|
35
|
+
* other too. Maps scraper errors to the API error hierarchy so callers
|
|
36
|
+
* receive typed, client-readable errors instead of raw scraper internals.
|
|
23
37
|
*/
|
|
24
38
|
export declare function dispatch<TResult>(plugin: SitePlugin<unknown, unknown>, payload: unknown, context: SitePluginContext, options?: {
|
|
25
39
|
forceFallback?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAejE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAejE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAmC1C,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EAEjB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAW9C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,gCAAuB,CAAC;AAyIjD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EACpC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CA+FpC;AA+BD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,CAAC,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,CAAC,EAC/E,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GACtC,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
package/dist/plugins/loader.js
CHANGED
|
@@ -15,6 +15,7 @@ const dd_metrics_1 = require("../lib/dd-metrics");
|
|
|
15
15
|
const dispatch_metrics_1 = require("../lib/dispatch-metrics");
|
|
16
16
|
const errors_2 = require("../lib/errors");
|
|
17
17
|
const logging_1 = require("../lib/logging");
|
|
18
|
+
const beacon_capture_1 = require("../lib/telemetry/beacon-capture");
|
|
18
19
|
const submission_capture_1 = require("../lib/telemetry/submission-capture");
|
|
19
20
|
const tracking_click_1 = require("../lib/tracking-click");
|
|
20
21
|
const discover_1 = require("../plugins/discover");
|
|
@@ -130,6 +131,20 @@ async function emitEnvelopeSafely(input) {
|
|
|
130
131
|
logger.warn(`submission envelope emit failed: ${(0, errors_2.toErrorMessage)(err)}`);
|
|
131
132
|
}
|
|
132
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Best-effort wrapper around `captureBeaconEvent`, matching `emitEnvelopeSafely`'s
|
|
136
|
+
* defense: `captureBeaconEvent` already swallows its own write errors, but a
|
|
137
|
+
* test double or unexpected synchronous throw must still never propagate into
|
|
138
|
+
* dispatch's success path.
|
|
139
|
+
*/
|
|
140
|
+
async function emitBeaconSafely(input) {
|
|
141
|
+
try {
|
|
142
|
+
await (0, beacon_capture_1.captureBeaconEvent)(input);
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
logger.warn(`beacon event emit failed: ${(0, errors_2.toErrorMessage)(err)}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
133
148
|
/**
|
|
134
149
|
* Runs a single plugin submission end-to-end. Tries the direct-HTTP hot path
|
|
135
150
|
* first when the plugin supplies `executeHttp`; on `HttpSchemaError`,
|
|
@@ -137,15 +152,31 @@ async function emitEnvelopeSafely(input) {
|
|
|
137
152
|
* browser path. Records metrics on each branch so ops dashboards can alert on
|
|
138
153
|
* rising fallback rates. Emits a `submission-envelope` telemetry record on
|
|
139
154
|
* both success and failure — the durable source-of-truth for "what did we
|
|
140
|
-
* submit for jobId X and did it succeed."
|
|
141
|
-
*
|
|
142
|
-
*
|
|
155
|
+
* submit for jobId X and did it succeed." Calls the plugin's own
|
|
156
|
+
* `extractJoinKeys` (if declared) once and stamps the opaque result onto both
|
|
157
|
+
* the submission envelope and the tracking click so a run's submit and
|
|
158
|
+
* beacon-fire records can be joined, without core knowing what the keys mean.
|
|
159
|
+
* A plugin that declares `extractJoinKeys` is asserting it manages its own
|
|
160
|
+
* post-submit attribution navigation, so core's automatic `TrackingUrl` fire
|
|
161
|
+
* is skipped for it — firing both would open two independent sessions
|
|
162
|
+
* against the same tracking URL, which can orphan the plugin's own
|
|
163
|
+
* click-to-session association with its attribution vendor. Either way — no
|
|
164
|
+
* usable `TrackingUrl`, or a plugin that manages its own nav — the skipped
|
|
165
|
+
* case still records a `beaconStatus: "skipped"` record instead of firing
|
|
166
|
+
* the tracking click, so "no beacon was ever applicable" is distinguishable
|
|
167
|
+
* from "a beacon was attempted and never recorded an outcome"; the record's
|
|
168
|
+
* `trackingUrl` field is preserved (not nulled) when a real URL was present
|
|
169
|
+
* but delegated, so the two skip reasons stay distinguishable from each
|
|
170
|
+
* other too. Maps scraper errors to the API error hierarchy so callers
|
|
171
|
+
* receive typed, client-readable errors instead of raw scraper internals.
|
|
143
172
|
*/
|
|
144
173
|
async function dispatch(plugin, payload, context, options = {}) {
|
|
145
174
|
const startedAt = Date.now();
|
|
146
175
|
const hasHttpPath = !!plugin.executeHttp && !options.forceFallback;
|
|
147
176
|
const pathTag = hasHttpPath ? "http" : "browser";
|
|
148
177
|
const ddTags = { site: plugin.meta.siteId, path: pathTag };
|
|
178
|
+
const joinKeys = plugin.extractJoinKeys?.(payload) ?? null;
|
|
179
|
+
const managesOwnTracking = !!plugin.extractJoinKeys;
|
|
149
180
|
(0, dd_metrics_1.recordDdAttempt)(ddTags);
|
|
150
181
|
try {
|
|
151
182
|
const result = await runPluginPipeline(plugin, payload, context, options);
|
|
@@ -165,15 +196,36 @@ async function dispatch(plugin, payload, context, options = {}) {
|
|
|
165
196
|
await emitEnvelopeSafely({
|
|
166
197
|
siteId: plugin.meta.siteId,
|
|
167
198
|
requestId: context.requestId,
|
|
199
|
+
joinKeys,
|
|
168
200
|
inboundPayload: payload,
|
|
169
201
|
status: "submitted",
|
|
170
202
|
auditPayload: result.auditPayload ?? result.data,
|
|
171
203
|
errorMessage: null,
|
|
172
204
|
durationMs,
|
|
173
205
|
});
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
206
|
+
const rawTrackingUrl = payload?.TrackingUrl;
|
|
207
|
+
const trackingUrl = typeof rawTrackingUrl === "string" && rawTrackingUrl.length > 0 ? rawTrackingUrl : null;
|
|
208
|
+
if (!managesOwnTracking && trackingUrl) {
|
|
209
|
+
(0, tracking_click_1.fireTrackingClick)(trackingUrl, plugin.meta.siteId, {
|
|
210
|
+
requestId: context.requestId,
|
|
211
|
+
joinKeys,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
await emitBeaconSafely({
|
|
216
|
+
requestId: context.requestId,
|
|
217
|
+
siteId: plugin.meta.siteId,
|
|
218
|
+
joinKeys,
|
|
219
|
+
beaconStatus: "skipped",
|
|
220
|
+
// Preserved (not nulled) when the plugin manages its own tracking
|
|
221
|
+
// nav and a URL was present, so the sink can distinguish "no URL
|
|
222
|
+
// was ever applicable" (trackingUrl: null) from "a URL was present
|
|
223
|
+
// but a different, plugin-owned navigation used it instead"
|
|
224
|
+
// (trackingUrl: <the URL>) — both cases hit this branch, but only
|
|
225
|
+
// the latter had a real URL to report.
|
|
226
|
+
trackingUrl,
|
|
227
|
+
durationMs: 0,
|
|
228
|
+
});
|
|
177
229
|
}
|
|
178
230
|
return result;
|
|
179
231
|
}
|
|
@@ -187,6 +239,7 @@ async function dispatch(plugin, payload, context, options = {}) {
|
|
|
187
239
|
await emitEnvelopeSafely({
|
|
188
240
|
siteId: plugin.meta.siteId,
|
|
189
241
|
requestId: context.requestId,
|
|
242
|
+
joinKeys,
|
|
190
243
|
inboundPayload: payload,
|
|
191
244
|
status: "error",
|
|
192
245
|
auditPayload: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":";;;;;;;;AACA,mEAAkD;AAGlD,+BAA2B;AAE3B,yCAQsB;AACtB,qDAAyD;AACzD,2DAAgF;AAEhF,iDAQ0B;AAC1B,6DAA0D;AAC1D,yCAA8C;AAC9C,2CAAwD;AACxD,mEAAoE;AACpE,2EAA+E;AAC/E,yDAAyD;AACzD,iDAA0D;AAC1D,6CAU0B;AAC1B,+CAK2B;AAC3B,yCAAgD;AAOhD,+DAAuF;AAGvF,MAAM,MAAM,GAAG,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,MAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAExE;;;;;GAKG;AACU,QAAA,YAAY,GAAG,+BAAoB,CAAC;AAEjD;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,GAAY;IAC9B,IAAI,GAAG,YAAY,qBAAY;QAAE,OAAO,IAAI,gCAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjF,IAAI,GAAG,YAAY,0BAAiB;QAAE,OAAO,IAAI,6BAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnF,IAAI,GAAG,YAAY,2BAAkB;QAAE,OAAO,IAAI,8BAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrF,IAAI,GAAG,YAAY,2BAAkB;QAAE,OAAO,IAAI,uBAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9E,IAAI,GAAG,YAAY,qBAAY;QAAE,OAAO,IAAI,2BAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,iBAAiB,CAC9B,MAAoC,EACpC,OAAgB,EAChB,OAA0B,EAC1B,OAAoC;IAEpC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAA,kCAAwB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAA,6BAAgB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,CAAC,MAAM,IAAA,qBAAc,EAC1B,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EACtD,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EACjE,MAAM,CAAC,IAAI,CAAC,aAAa,EACzB;YACE,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe;YAC5C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI;gBAChD,8BAA8B,EAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B;aAC3E,CAAC;SACH,CACF,CAA8B,CAAC;IAClC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,kCAAiB,EAC9C,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAC1C,OAAO,CACR,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,IAAA,8BAAoB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,IAAA,oCAAmB,EACrC,GAAG;QACH,mFAAmF;QACnF,GAAG,EAAE,CAAC,MAAM,CAAC,WAAY,CAAC,OAAO,EAAE,OAAO,CAAuC,CAClF,CAAC;QACF,IAAA,8BAAoB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,IAAA,8BAAoB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,OAAO,EAAE,CAAC;QACjB,IACE,OAAO,YAAY,wBAAe;YAClC,OAAO,YAAY,8BAAqB;YACxC,OAAO,YAAY,wBAAe,EAClC,CAAC;YACD,MAAM,CAAC,IAAI,CACT,uBAAuB,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,8BAA8B,CAC1H,CAAC;YACF,IAAA,kCAAwB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAA,6BAAgB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO,CAAC,MAAM,IAAA,qBAAc,EAC1B,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EACtD,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EACjE,MAAM,CAAC,IAAI,CAAC,aAAa,EACzB;gBACE,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe;gBAC5C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI;oBAChD,8BAA8B,EAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B;iBAC3E,CAAC;aACH,CACF,CAA8B,CAAC;QAClC,CAAC;QACD,IAAI,OAAO,YAAY,2BAAkB,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CACT,6BAA6B,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,OAAO,qBAAqB,CACzF,CAAC;YACF,IAAA,kCAAwB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAA,8BAAiB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,OAAO,YAAY,2BAAkB,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CACT,2BAA2B,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,OAAO,qBAAqB,CACvF,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,kBAAkB,CAC/B,KAAsD;IAEtD,IAAI,CAAC;QACH,MAAM,IAAA,8CAAyB,EAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,oCAAoC,IAAA,uBAAc,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB,CAAC,KAA+C;IAC7E,IAAI,CAAC;QACH,MAAM,IAAA,mCAAkB,EAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAA,uBAAc,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACI,KAAK,mBACV,MAAoC,EACpC,OAAgB,EAChB,OAA0B,EAC1B,OAAO,GAAgC,EAAE;IAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IACnE,MAAM,OAAO,GAAuB,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAC3D,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC;IAEpD,IAAA,4BAAe,EAAC,MAAM,CAAC,CAAC;IAExB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAU,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACnF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE1C,6EAA6E;QAC7E,4EAA4E;QAC5E,2EAA2E;QAC3E,uCAAuC;QACvC,IAAK,MAAM,CAAC,IAA4B,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAChE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC5D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAA,4BAAe,EAAC,MAAM,CAAC,CAAC;QACxB,IAAA,6BAAgB,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QAEzB,MAAM,kBAAkB,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ;YACR,cAAc,EAAE,OAAO;YACvB,MAAM,EAAE,WAAW;YACnB,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI;YAChD,YAAY,EAAE,IAAI;YAClB,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,cAAc,GAAI,OAAmC,EAAE,WAAW,CAAC;QACzE,MAAM,WAAW,GACf,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1F,IAAI,CAAC,kBAAkB,IAAI,WAAW,EAAE,CAAC;YACvC,IAAA,kCAAiB,EAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;gBACjD,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,gBAAgB,CAAC;gBACrB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;gBAC1B,QAAQ;gBACR,YAAY,EAAE,SAAS;gBACvB,kEAAkE;gBAClE,iEAAiE;gBACjE,mEAAmE;gBACnE,4DAA4D;gBAC5D,kEAAkE;gBAClE,uCAAuC;gBACvC,WAAW;gBACX,UAAU,EAAE,CAAC;aACd,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAC1C,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAwB,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAE9E,IAAA,4BAAe,EAAC,WAAW,CAAC,CAAC;QAC7B,IAAA,6BAAgB,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE3D,MAAM,kBAAkB,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ;YACR,cAAc,EAAE,OAAO;YACvB,MAAM,EAAE,OAAO;YACf,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,IAAA,uBAAc,EAAC,GAAG,CAAC;YACjC,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,EAAE,CAAC;YACV,MAAkD,CAAC,OAAO,GAAG,OAAO,CAAC;YACtE,MAAM,MAAM,CAAC;QACf,CAAC;QACA,GAA+C,CAAC,OAAO,GAAG,OAAO,CAAC;QACnE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,GAAG,YAAY,8BAAqB;QAAE,OAAO,eAAe,CAAC;IACjE,IAAI,GAAG,YAAY,2BAAkB;QAAE,OAAO,YAAY,CAAC;IAC3D,IAAI,GAAG,YAAY,2BAAkB;QAAE,OAAO,YAAY,CAAC;IAC3D,IAAI,GAAG,YAAY,wBAAe;QAAE,OAAO,cAAc,CAAC;IAC1D,IAAI,GAAG,YAAY,wBAAe;QAAE,OAAO,cAAc,CAAC;IAC1D,IAAI,GAAG,YAAY,qBAAY;QAAE,OAAO,SAAS,CAAC;IAClD,IAAI,GAAG,YAAY,0BAAiB;QAAE,OAAO,eAAe,CAAC;IAC7D,IAAI,GAAG,YAAY,qBAAY;QAAE,OAAO,iBAAiB,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,sBAAsB,GAAG,MAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,MAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,MAAC,CAAC,MAAM,EAAE;QACtB,QAAQ,EAAE,MAAC,CAAC,MAAM,EAAE;QACpB,OAAO,EAAE,MAAC,CAAC,KAAK,CAAC,MAAC,CAAC,OAAO,EAAE,CAAC;KAC9B,CAAC;IACF,OAAO,EAAE,wCAAqB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH,SAAS,4BAA4B,CAAC,YAAuB;IAC3D,IAAI,YAAY,YAAY,MAAC,CAAC,SAAS,EAAE,CAAC;QACxC,OAAO,sBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,MAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACI,KAAK,yBACV,GAA+E,EAC/E,GAAc,EACd,OAAuC;IAEvC,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAC1F,CAAC;IACF,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,GAAG,CAAC,QAAQ,CAAC,mBAAgB,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC;QAC/E,MAAM,OAAO,GACX,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;QAEnF,GAAG,CAAC,IAAI,CACN,SAAS,EACT;YACE,SAAS,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;YAC7B,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;gBAC5B,QAAQ,EAAE,EAAE,GAAG,EAAE,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;gBAC3E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjF;SACF,EACD,KAAK,EAAE,OAAO,EAAE,EAAE;YAChB,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,KAAK,SAAS,CAAC;YAC5E,MAAM,OAAO,GAAsB;gBACjC,OAAO;gBACP,MAAM,EAAE,IAAA,sBAAY,EAAC,OAAO,CAAC,GAA6B,CAAC;gBAC3D,MAAM,EAAE,GAAG;gBACX,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,gBAAgB,EAAE,IAAI,mCAAgB,EAAE;aACzC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAChF,OAAO,IAAA,0BAAe,EAAC;gBACrB,GAAI,MAAM,CAAC,IAAe;gBAC1B,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;aACnD,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,MAAM,SAAS,WAAW,CAAC,CAAC;IAC/D,CAAC;IAED,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,mBAAmB,CAC1B,GAA+E,EAC/E,GAAc,EACd,OAAuC;IAEvC,MAAM,YAAY,GAAG,IAAI,GAAG,EAQzB,CAAC;IAEJ,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAA+C,CAAC;YACvF,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;gBACrC,MAAM;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,IAAI,GAAG,EAAwC;aACxD,CAAC;YACF,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;YAC9D,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QAErC,MAAM,SAAS,GAAG,CAAC,MAAoC,EAAoC,EAAE,CAC3F,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CACxE,CAAC;QAEJ,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE/D,GAAG,CAAC,KAAK,CAAC;YACR,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,EAAE,KAAK,CAAC,IAAI;YACf,SAAS,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;YAC7B,MAAM,EAAE;gBACN,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3E,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClE;YACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACzB,MAAM,MAAM,GAAI,OAAO,CAAC,MAA8B,CAAC,MAAM,IAAI,EAAE,CAAC;gBACpE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,4BAAmB,CAC3B,mCAAmC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAC7F,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,4BAAmB,CAC3B,UAAU,MAAM,CAAC,IAAI,CAAC,MAAM,uBAAuB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAChF,CAAC;gBACJ,CAAC;gBAED,0EAA0E;gBAC1E,mEAAmE;gBACnE,kCAAkC;gBAClC,MAAM,IAAI,GACR,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnF,MAAM,OAAO,GACX,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;gBACnF,MAAM,OAAO,GAAsB;oBACjC,OAAO;oBACP,MAAM,EAAE,IAAA,sBAAY,EAAC,OAAO,CAAC,GAA6B,CAAC;oBAC3D,MAAM,EAAE,GAAG;oBACX,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,gBAAgB,EAAE,IAAI,mCAAgB,EAAE;iBACzC,CAAC;gBACF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAChC;oBACE,IAAI;oBACJ,MAAM,EAAE,OAAO,CAAC,MAAgC;oBAChD,GAAG,EAAE,OAAO,CAAC,GAAwB;iBACtC,EACD,OAAO,CACR,CAAC;gBACF,OAAO,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,0BAAe,EAAC,MAAgB,CAAC,CAAC;YAC/E,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CACT,GAAG,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,WAAW,CACxF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -9,11 +9,17 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { Page } from "@browserbasehq/stagehand";
|
|
11
11
|
import type { CookieJarSnapshot } from "../scripts/recon-shared";
|
|
12
|
+
/** Tuning knobs for {@link captureCookieJarSnapshot}. */
|
|
13
|
+
export interface CookieJarTimeoutOptions {
|
|
14
|
+
/** Milliseconds to wait for the CDP call before degrading to an error snapshot. */
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
}
|
|
12
17
|
/**
|
|
13
18
|
* Reads the browser's complete cookie jar and returns it as a labeled
|
|
14
|
-
* snapshot. Never throws — telemetry capture is best-effort, so a failed
|
|
15
|
-
*
|
|
16
|
-
* rather than
|
|
19
|
+
* snapshot. Never throws — telemetry capture is best-effort, so a failed or
|
|
20
|
+
* wedged CDP call (bounded by `timeoutOptions.timeoutMs`) yields a snapshot
|
|
21
|
+
* with an `error` field and an empty `cookies` array rather than blocking or
|
|
22
|
+
* aborting the recon run.
|
|
17
23
|
*/
|
|
18
|
-
export declare function captureCookieJarSnapshot(page: Page, label: string, phase: string, stepIndex: number): Promise<CookieJarSnapshot>;
|
|
24
|
+
export declare function captureCookieJarSnapshot(page: Page, label: string, phase: string, stepIndex: number, timeoutOptions?: CookieJarTimeoutOptions): Promise<CookieJarSnapshot>;
|
|
19
25
|
//# sourceMappingURL=cookie-jar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie-jar.d.ts","sourceRoot":"","sources":["../../src/scraper/cookie-jar.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"cookie-jar.d.ts","sourceRoot":"","sources":["../../src/scraper/cookie-jar.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAgB,MAAM,wBAAwB,CAAC;AAO9E,yDAAyD;AACzD,MAAM,WAAW,uBAAuB;IACtC,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,uBAA4B,GAC3C,OAAO,CAAC,iBAAiB,CAAC,CAyB5B"}
|
|
@@ -11,16 +11,21 @@
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.captureCookieJarSnapshot = captureCookieJarSnapshot;
|
|
13
13
|
const errors_1 = require("../lib/errors");
|
|
14
|
+
const watchdog_1 = require("../scraper/watchdog");
|
|
15
|
+
/** Default budget for the `Network.getAllCookies` CDP call, see {@link captureCookieJarSnapshot}. */
|
|
16
|
+
const DEFAULT_COOKIE_JAR_TIMEOUT_MS = 5_000;
|
|
14
17
|
/**
|
|
15
18
|
* Reads the browser's complete cookie jar and returns it as a labeled
|
|
16
|
-
* snapshot. Never throws — telemetry capture is best-effort, so a failed
|
|
17
|
-
*
|
|
18
|
-
* rather than
|
|
19
|
+
* snapshot. Never throws — telemetry capture is best-effort, so a failed or
|
|
20
|
+
* wedged CDP call (bounded by `timeoutOptions.timeoutMs`) yields a snapshot
|
|
21
|
+
* with an `error` field and an empty `cookies` array rather than blocking or
|
|
22
|
+
* aborting the recon run.
|
|
19
23
|
*/
|
|
20
|
-
async function captureCookieJarSnapshot(page, label, phase, stepIndex) {
|
|
24
|
+
async function captureCookieJarSnapshot(page, label, phase, stepIndex, timeoutOptions = {}) {
|
|
21
25
|
const timestamp = new Date().toISOString();
|
|
26
|
+
const timeoutMs = timeoutOptions.timeoutMs ?? DEFAULT_COOKIE_JAR_TIMEOUT_MS;
|
|
22
27
|
try {
|
|
23
|
-
const result = await page.sendCDP("Network.getAllCookies");
|
|
28
|
+
const result = await (0, watchdog_1.withWatchdog)(() => page.sendCDP("Network.getAllCookies"), { timeoutMs, label: "cookie-jar Network.getAllCookies" });
|
|
24
29
|
return {
|
|
25
30
|
label,
|
|
26
31
|
phase,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie-jar.js","sourceRoot":"","sources":["../../src/scraper/cookie-jar.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAIH,yCAA8C;
|
|
1
|
+
{"version":3,"file":"cookie-jar.js","sourceRoot":"","sources":["../../src/scraper/cookie-jar.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAIH,yCAA8C;AAC9C,iDAAkD;AAKlD,qGAAqG;AACrG,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAQ5C;;;;;;GAMG;AACI,KAAK,mCACV,IAAU,EACV,KAAa,EACb,KAAa,EACb,SAAiB,EACjB,cAAc,GAA4B,EAAE;IAE5C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,IAAI,6BAA6B,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAY,EAC/B,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAwB,uBAAuB,CAAC,EAClE,EAAE,SAAS,EAAE,KAAK,EAAE,kCAAkC,EAAE,CACzD,CAAC;QACF,OAAO;YACL,KAAK;YACL,KAAK;YACL,SAAS;YACT,SAAS;YACT,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,KAAK;YACL,KAAK;YACL,SAAS;YACT,SAAS;YACT,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,IAAA,uBAAc,EAAC,GAAG,CAAC;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-origin OOPIF candidate resolver: `observe()` returns zero candidates
|
|
3
|
+
* for a cross-origin OOPIF (measured against a live Talemetry wizard embed —
|
|
4
|
+
* see the frame-scoped iframe bug report), even though the frame is fully
|
|
5
|
+
* attached and reachable. `page.deepLocator()` is Stagehand's own
|
|
6
|
+
* hop-notation resolver and is measured to both locate and actuate elements
|
|
7
|
+
* inside that same OOPIF, so this module is the single seam every
|
|
8
|
+
* frame-scoped flow-runner call site uses instead of `observe()`/`act()`
|
|
9
|
+
* when the step is scoped to a child frame.
|
|
10
|
+
*/
|
|
11
|
+
import type { Page } from "@browserbasehq/stagehand";
|
|
12
|
+
/** Overrides for the watchdog timeouts this module applies to every `deepLocator()` await; tests pass small values so cases don't burn wall-clock. */
|
|
13
|
+
export interface DeepLocatorTimeoutOptions {
|
|
14
|
+
/** Per-call watchdog timeout for `count()`/`textContent()`/`click()`. Defaults to {@link DEFAULT_DEEP_LOCATOR_CALL_TIMEOUT_MS}. */
|
|
15
|
+
callTimeoutMs?: number;
|
|
16
|
+
/** Total budget for {@link resolveDeepLocatorCandidates}'s enumeration loop. Defaults to {@link DEFAULT_DEEP_LOCATOR_ENUMERATION_BUDGET_MS}. */
|
|
17
|
+
enumerationBudgetMs?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* One candidate element `page.deepLocator()` resolved inside a scoped frame.
|
|
21
|
+
* `selector` carries the `deeplocator=`-prefixed hop notation (NOT `xpath=`)
|
|
22
|
+
* so downstream code can synthesize a `resolvedAction` for logging/telemetry
|
|
23
|
+
* the same way `deep-submit-locator` and `structured-click` do, while
|
|
24
|
+
* `xpathBody()` (`flow-runner.ts`) correctly returns `null` for it — hop
|
|
25
|
+
* notation like `iframe#id >> * >> nth=0` is not XPath, and even a genuine
|
|
26
|
+
* XPath here could never be evaluated correctly by `document.evaluate`
|
|
27
|
+
* (which only ever queries the top-level `document`, not a cross-origin
|
|
28
|
+
* OOPIF's own document) — so the selector must not claim the `xpath=`
|
|
29
|
+
* contract it can't honor.
|
|
30
|
+
*/
|
|
31
|
+
export interface DeepLocatorCandidate {
|
|
32
|
+
/** Positional index into the `deepLocator(hopSelector)` result set — pass to {@link clickDeepLocatorCandidate} to act on this exact candidate. */
|
|
33
|
+
index: number;
|
|
34
|
+
/** `deeplocator=`-prefixed selector identifying this candidate for downstream `resolvedAction` synthesis; deliberately not `xpath=` (see {@link DeepLocatorCandidate} docs). */
|
|
35
|
+
selector: string;
|
|
36
|
+
/** Accessible text read via the delegate's `textContent()`. */
|
|
37
|
+
accessibleText: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Enumerates every element `page.deepLocator()` matches inside the frame
|
|
41
|
+
* scoped by `frameSelector`, ranked by relevance to `instruction` (highest
|
|
42
|
+
* first, ties preserving original delegate/DOM order). Composes the hop
|
|
43
|
+
* scope via `buildHopSelector` (owned by `frame-target.ts`) rather than
|
|
44
|
+
* string-concatenating `>>` itself, so hop notation stays defined in exactly
|
|
45
|
+
* one place. Never throws: a missing `page.deepLocator`, a
|
|
46
|
+
* `count()`/`nth()`/`textContent()` failure (detached frame, navigated-away
|
|
47
|
+
* element), or either call exceeding its watchdog budget (a wedged CDP
|
|
48
|
+
* round-trip against a racy OOPIF frame — see the deepLocator-direct-hangs
|
|
49
|
+
* bug report) degrades to `[]`/an empty `accessibleText` so a caller
|
|
50
|
+
* cascading through candidate sources can move on to the next technique
|
|
51
|
+
* instead of hanging the step forever.
|
|
52
|
+
*
|
|
53
|
+
* Ranking exists because a hop like `"*"` matches every element inside a
|
|
54
|
+
* wizard iframe (html, body, every div, ...) — DOM order alone almost always
|
|
55
|
+
* puts a structural container first, not the control the step instruction
|
|
56
|
+
* actually names. Pass `instruction` as `null`/`undefined` (or omit it) to
|
|
57
|
+
* skip ranking and get delegate order — e.g. for pre-cascade reachability
|
|
58
|
+
* probes that only care whether the frame has ANY candidates.
|
|
59
|
+
*
|
|
60
|
+
* `count()` and each per-candidate `textContent()` are individually bounded
|
|
61
|
+
* by `timeoutOptions.callTimeoutMs` via {@link withWatchdog}; the enumeration
|
|
62
|
+
* loop as a whole is additionally bounded by `timeoutOptions.enumerationBudgetMs`
|
|
63
|
+
* so a hop with dozens of slow-but-settling elements (e.g. 65 candidates
|
|
64
|
+
* matched against a live OOPIF) can't rack up an unbounded total cost even
|
|
65
|
+
* when no single call hangs — the loop aborts early and returns whatever
|
|
66
|
+
* candidates it already resolved.
|
|
67
|
+
*/
|
|
68
|
+
export declare function resolveDeepLocatorCandidates(page: Page, frameSelector: string | null | undefined, innerSelector: string, instruction?: string | null, timeoutOptions?: DeepLocatorTimeoutOptions): Promise<DeepLocatorCandidate[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Clicks the candidate at `index` inside the frame scoped by `frameSelector`,
|
|
71
|
+
* re-deriving the same hop selector `resolveDeepLocatorCandidates` used
|
|
72
|
+
* rather than trusting a caller-supplied `xpath=` string, so the two stay in
|
|
73
|
+
* lockstep even if a candidate's `selector` field is only ever used for
|
|
74
|
+
* display/logging. `DeepLocatorDelegate.click()` resolves `Promise<void>` on
|
|
75
|
+
* success and rejects on failure — it never reports success via a return
|
|
76
|
+
* value — so callers must infer the outcome from whether this call throws
|
|
77
|
+
* plus their own downstream DOM verification, not from a returned boolean.
|
|
78
|
+
* A `click()` that exceeds `timeoutOptions.callTimeoutMs` (a wedged CDP
|
|
79
|
+
* round-trip against a racy OOPIF frame) rejects with a `WatchdogTimeoutError`
|
|
80
|
+
* the same as any other failure, preserving the "rejects on failure" contract
|
|
81
|
+
* instead of hanging the caller forever.
|
|
82
|
+
*/
|
|
83
|
+
export declare function clickDeepLocatorCandidate(page: Page, frameSelector: string | null | undefined, innerSelector: string, index: number, timeoutOptions?: DeepLocatorTimeoutOptions): Promise<void>;
|
|
84
|
+
//# sourceMappingURL=deep-locator-candidates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-locator-candidates.d.ts","sourceRoot":"","sources":["../../src/scraper/deep-locator-candidates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AA2BrD,sJAAsJ;AACtJ,MAAM,WAAW,yBAAyB;IACxC,mIAAmI;IACnI,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gJAAgJ;IAChJ,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC,kJAAkJ;IAClJ,KAAK,EAAE,MAAM,CAAC;IACd,gLAAgL;IAChL,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,cAAc,EAAE,MAAM,CAAC;CACxB;AA6ED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,cAAc,GAAE,yBAA8B,GAC7C,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAoDjC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,cAAc,GAAE,yBAA8B,GAC7C,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Cross-origin OOPIF candidate resolver: `observe()` returns zero candidates
|
|
4
|
+
* for a cross-origin OOPIF (measured against a live Talemetry wizard embed —
|
|
5
|
+
* see the frame-scoped iframe bug report), even though the frame is fully
|
|
6
|
+
* attached and reachable. `page.deepLocator()` is Stagehand's own
|
|
7
|
+
* hop-notation resolver and is measured to both locate and actuate elements
|
|
8
|
+
* inside that same OOPIF, so this module is the single seam every
|
|
9
|
+
* frame-scoped flow-runner call site uses instead of `observe()`/`act()`
|
|
10
|
+
* when the step is scoped to a child frame.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.resolveDeepLocatorCandidates = resolveDeepLocatorCandidates;
|
|
14
|
+
exports.clickDeepLocatorCandidate = clickDeepLocatorCandidate;
|
|
15
|
+
const errors_1 = require("../lib/errors");
|
|
16
|
+
const logging_1 = require("../lib/logging");
|
|
17
|
+
const frame_target_1 = require("../scraper/frame-target");
|
|
18
|
+
const watchdog_1 = require("../scraper/watchdog");
|
|
19
|
+
const logger = (0, logging_1.getLogger)({ name: "scraper/deep-locator-candidates" });
|
|
20
|
+
/**
|
|
21
|
+
* Per-CDP-call watchdog default: bounds a single `count()`/`nth().textContent()`/
|
|
22
|
+
* `nth().click()` round-trip. Owned locally (not imported from
|
|
23
|
+
* `flow-runner.ts`'s `STEP_WATCHDOG_MS`) to avoid the import cycle —
|
|
24
|
+
* `flow-runner.ts` imports this module.
|
|
25
|
+
*/
|
|
26
|
+
const DEFAULT_DEEP_LOCATOR_CALL_TIMEOUT_MS = 10_000;
|
|
27
|
+
/**
|
|
28
|
+
* Total wall-clock budget for {@link resolveDeepLocatorCandidates}'s
|
|
29
|
+
* per-candidate `textContent()` enumeration loop. A hop like `"*"` can match
|
|
30
|
+
* dozens of elements (65 observed against a live OOPIF) — each individually
|
|
31
|
+
* fast but settling, not hanging — so a per-call timeout alone doesn't bound
|
|
32
|
+
* the loop's total cost. Roughly half of `flow-runner.ts`'s
|
|
33
|
+
* `STEP_WATCHDOG_MS` (120s), leaving headroom for the rest of the attempt.
|
|
34
|
+
*/
|
|
35
|
+
const DEFAULT_DEEP_LOCATOR_ENUMERATION_BUDGET_MS = 60_000;
|
|
36
|
+
/**
|
|
37
|
+
* Composes the display/telemetry selector for candidate `index` at
|
|
38
|
+
* `hopSelector`: a positional `nth` predicate over the hop scope, since
|
|
39
|
+
* `DeepLocatorDelegate` exposes no way to read back the concrete XPath a
|
|
40
|
+
* given index resolved to. Prefixed `deeplocator=` (not `xpath=`) so
|
|
41
|
+
* `flow-runner.ts`'s `xpathBody()` never mistakes hop notation for XPath and
|
|
42
|
+
* attempts to run it through `document.evaluate`.
|
|
43
|
+
*/
|
|
44
|
+
function candidateSelector(hopSelector, index) {
|
|
45
|
+
return `deeplocator=${hopSelector} >> nth=${index}`;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Words that flip a quoted phrase from "target this" to "do not target
|
|
49
|
+
* this" when they appear earlier in the instruction than the phrase itself.
|
|
50
|
+
* Matches the flow-authoring convention observed in acceptance instructions
|
|
51
|
+
* (e.g. "Do NOT click 'Upload a Resume/CV', 'Use LinkedIn Profile', ...").
|
|
52
|
+
*/
|
|
53
|
+
const NEGATION_MARKERS = /\b(?:do\s+not|don't|never|avoid)\b/gi;
|
|
54
|
+
/**
|
|
55
|
+
* Extracts every single-quoted phrase from `instruction`, tagging each as
|
|
56
|
+
* negated when a negation marker (`NEGATION_MARKERS`) precedes it within the
|
|
57
|
+
* same sentence — flow instructions keep each "Do NOT click 'X', 'Y', ..."
|
|
58
|
+
* clause as one sentence listing every negated phrase, so a sentence
|
|
59
|
+
* boundary (`.`/`;`) between the marker and the phrase ends the negation's
|
|
60
|
+
* reach. Mirrors the quoted-phrase extraction convention in
|
|
61
|
+
* `parseSelectStep`/`parseRadioStep` (`flow-runner.ts`) — same
|
|
62
|
+
* `/'([^']+)'/g` shape — but here we need ALL quoted phrases plus their
|
|
63
|
+
* polarity, not just one option/label pair.
|
|
64
|
+
*/
|
|
65
|
+
function extractTaggedPhrases(instruction) {
|
|
66
|
+
const negationStarts = [...instruction.matchAll(NEGATION_MARKERS)].map((m) => m.index);
|
|
67
|
+
const quoted = [...instruction.matchAll(/'([^']+)'/g)];
|
|
68
|
+
return quoted.map((m) => {
|
|
69
|
+
// biome-ignore lint/style/noNonNullAssertion: m.index is always defined for matchAll results
|
|
70
|
+
const phraseStart = m.index;
|
|
71
|
+
const nearestNegationBefore = negationStarts.filter((idx) => idx < phraseStart).at(-1);
|
|
72
|
+
const negated = nearestNegationBefore !== undefined &&
|
|
73
|
+
!/[.;]/.test(instruction.slice(nearestNegationBefore, phraseStart));
|
|
74
|
+
// biome-ignore lint/style/noNonNullAssertion: capture group 1 is required by the pattern, so it is present on every match
|
|
75
|
+
return { text: m[1].trim(), negated };
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/** Normalizes text for relevance comparison: lowercase, whitespace-collapsed. */
|
|
79
|
+
function normalize(text) {
|
|
80
|
+
return text.replace(/\s+/g, " ").trim().toLowerCase();
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Scores one candidate's relevance to `instruction`'s tagged phrases, higher
|
|
84
|
+
* is more relevant. Mirrors `submit-control.ts`'s tiered-ranking shape:
|
|
85
|
+
* negative signal is checked first and wins outright (a candidate matching
|
|
86
|
+
* ANY negated phrase is actively demoted below "no match" — a decoy sibling
|
|
87
|
+
* button is worse than an unrelated structural node), then positive
|
|
88
|
+
* exact/substring match tiers, falling through to 0 for empty or
|
|
89
|
+
* unrelated text so a structural container with no accessible text can
|
|
90
|
+
* never outrank a candidate whose text actually matches the instruction.
|
|
91
|
+
*/
|
|
92
|
+
function scoreCandidate(accessibleText, phrases) {
|
|
93
|
+
const normalizedText = normalize(accessibleText);
|
|
94
|
+
if (!normalizedText)
|
|
95
|
+
return 0;
|
|
96
|
+
const positives = phrases.filter((p) => !p.negated).map((p) => normalize(p.text));
|
|
97
|
+
const negatives = phrases.filter((p) => p.negated).map((p) => normalize(p.text));
|
|
98
|
+
if (negatives.some((n) => n === normalizedText || normalizedText.includes(n)))
|
|
99
|
+
return -1;
|
|
100
|
+
if (positives.some((p) => p === normalizedText))
|
|
101
|
+
return 3;
|
|
102
|
+
if (positives.some((p) => normalizedText.includes(p) || p.includes(normalizedText)))
|
|
103
|
+
return 2;
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Enumerates every element `page.deepLocator()` matches inside the frame
|
|
108
|
+
* scoped by `frameSelector`, ranked by relevance to `instruction` (highest
|
|
109
|
+
* first, ties preserving original delegate/DOM order). Composes the hop
|
|
110
|
+
* scope via `buildHopSelector` (owned by `frame-target.ts`) rather than
|
|
111
|
+
* string-concatenating `>>` itself, so hop notation stays defined in exactly
|
|
112
|
+
* one place. Never throws: a missing `page.deepLocator`, a
|
|
113
|
+
* `count()`/`nth()`/`textContent()` failure (detached frame, navigated-away
|
|
114
|
+
* element), or either call exceeding its watchdog budget (a wedged CDP
|
|
115
|
+
* round-trip against a racy OOPIF frame — see the deepLocator-direct-hangs
|
|
116
|
+
* bug report) degrades to `[]`/an empty `accessibleText` so a caller
|
|
117
|
+
* cascading through candidate sources can move on to the next technique
|
|
118
|
+
* instead of hanging the step forever.
|
|
119
|
+
*
|
|
120
|
+
* Ranking exists because a hop like `"*"` matches every element inside a
|
|
121
|
+
* wizard iframe (html, body, every div, ...) — DOM order alone almost always
|
|
122
|
+
* puts a structural container first, not the control the step instruction
|
|
123
|
+
* actually names. Pass `instruction` as `null`/`undefined` (or omit it) to
|
|
124
|
+
* skip ranking and get delegate order — e.g. for pre-cascade reachability
|
|
125
|
+
* probes that only care whether the frame has ANY candidates.
|
|
126
|
+
*
|
|
127
|
+
* `count()` and each per-candidate `textContent()` are individually bounded
|
|
128
|
+
* by `timeoutOptions.callTimeoutMs` via {@link withWatchdog}; the enumeration
|
|
129
|
+
* loop as a whole is additionally bounded by `timeoutOptions.enumerationBudgetMs`
|
|
130
|
+
* so a hop with dozens of slow-but-settling elements (e.g. 65 candidates
|
|
131
|
+
* matched against a live OOPIF) can't rack up an unbounded total cost even
|
|
132
|
+
* when no single call hangs — the loop aborts early and returns whatever
|
|
133
|
+
* candidates it already resolved.
|
|
134
|
+
*/
|
|
135
|
+
async function resolveDeepLocatorCandidates(page, frameSelector, innerSelector, instruction, timeoutOptions = {}) {
|
|
136
|
+
const callTimeoutMs = timeoutOptions.callTimeoutMs ?? DEFAULT_DEEP_LOCATOR_CALL_TIMEOUT_MS;
|
|
137
|
+
const enumerationBudgetMs = timeoutOptions.enumerationBudgetMs ?? DEFAULT_DEEP_LOCATOR_ENUMERATION_BUDGET_MS;
|
|
138
|
+
const hopSelector = (0, frame_target_1.buildHopSelector)(frameSelector, innerSelector);
|
|
139
|
+
const delegate = typeof page.deepLocator === "function" ? page.deepLocator(hopSelector) : null;
|
|
140
|
+
if (!delegate) {
|
|
141
|
+
logger.warn(`deepLocator() is unavailable on this page for ${hopSelector}`);
|
|
142
|
+
return [];
|
|
143
|
+
}
|
|
144
|
+
const count = await (0, watchdog_1.withWatchdog)(() => delegate.count(), {
|
|
145
|
+
timeoutMs: callTimeoutMs,
|
|
146
|
+
label: `deepLocator count() for ${hopSelector}`,
|
|
147
|
+
}).catch((err) => {
|
|
148
|
+
logger.warn(`deepLocator count() threw for ${hopSelector}: ${(0, errors_1.toErrorMessage)(err)}`);
|
|
149
|
+
return 0;
|
|
150
|
+
});
|
|
151
|
+
if (count === 0)
|
|
152
|
+
return [];
|
|
153
|
+
const candidates = [];
|
|
154
|
+
const enumerationDeadline = Date.now() + enumerationBudgetMs;
|
|
155
|
+
for (let index = 0; index < count; index++) {
|
|
156
|
+
if (Date.now() >= enumerationDeadline) {
|
|
157
|
+
logger.warn(`deepLocator enumeration for ${hopSelector} aborted after exceeding ${enumerationBudgetMs}ms budget at candidate ${index}/${count}`);
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
const accessibleText = await (0, watchdog_1.withWatchdog)(() => delegate.nth(index).textContent(), {
|
|
161
|
+
timeoutMs: callTimeoutMs,
|
|
162
|
+
label: `deepLocator textContent() for ${hopSelector} nth=${index}`,
|
|
163
|
+
}).catch(() => "");
|
|
164
|
+
candidates.push({
|
|
165
|
+
index,
|
|
166
|
+
selector: candidateSelector(hopSelector, index),
|
|
167
|
+
accessibleText: accessibleText.trim(),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
if (!instruction)
|
|
171
|
+
return candidates;
|
|
172
|
+
const phrases = extractTaggedPhrases(instruction);
|
|
173
|
+
if (phrases.length === 0)
|
|
174
|
+
return candidates;
|
|
175
|
+
return candidates
|
|
176
|
+
.map((candidate, originalOrder) => ({
|
|
177
|
+
candidate,
|
|
178
|
+
originalOrder,
|
|
179
|
+
score: scoreCandidate(candidate.accessibleText, phrases),
|
|
180
|
+
}))
|
|
181
|
+
.sort((a, b) => b.score - a.score || a.originalOrder - b.originalOrder)
|
|
182
|
+
.map(({ candidate }) => candidate);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Clicks the candidate at `index` inside the frame scoped by `frameSelector`,
|
|
186
|
+
* re-deriving the same hop selector `resolveDeepLocatorCandidates` used
|
|
187
|
+
* rather than trusting a caller-supplied `xpath=` string, so the two stay in
|
|
188
|
+
* lockstep even if a candidate's `selector` field is only ever used for
|
|
189
|
+
* display/logging. `DeepLocatorDelegate.click()` resolves `Promise<void>` on
|
|
190
|
+
* success and rejects on failure — it never reports success via a return
|
|
191
|
+
* value — so callers must infer the outcome from whether this call throws
|
|
192
|
+
* plus their own downstream DOM verification, not from a returned boolean.
|
|
193
|
+
* A `click()` that exceeds `timeoutOptions.callTimeoutMs` (a wedged CDP
|
|
194
|
+
* round-trip against a racy OOPIF frame) rejects with a `WatchdogTimeoutError`
|
|
195
|
+
* the same as any other failure, preserving the "rejects on failure" contract
|
|
196
|
+
* instead of hanging the caller forever.
|
|
197
|
+
*/
|
|
198
|
+
async function clickDeepLocatorCandidate(page, frameSelector, innerSelector, index, timeoutOptions = {}) {
|
|
199
|
+
const callTimeoutMs = timeoutOptions.callTimeoutMs ?? DEFAULT_DEEP_LOCATOR_CALL_TIMEOUT_MS;
|
|
200
|
+
const hopSelector = (0, frame_target_1.buildHopSelector)(frameSelector, innerSelector);
|
|
201
|
+
await (0, watchdog_1.withWatchdog)(() => page.deepLocator(hopSelector).nth(index).click(), {
|
|
202
|
+
timeoutMs: callTimeoutMs,
|
|
203
|
+
label: `deepLocator click() for ${hopSelector} nth=${index}`,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=deep-locator-candidates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-locator-candidates.js","sourceRoot":"","sources":["../../src/scraper/deep-locator-candidates.ts"],"names":[],"mappings":"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"}
|