@opensteer/engine-abp 0.8.3 → 0.8.5
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/index.cjs +232 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +47 -13
- package/dist/index.d.ts +47 -13
- package/dist/index.js +232 -49
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1279,19 +1279,24 @@ function normalizePostLoadTrackerState(value) {
|
|
|
1279
1279
|
const installedAt = readFiniteNumber(value.installedAt);
|
|
1280
1280
|
const lastMutationAt = readFiniteNumber(value.lastMutationAt);
|
|
1281
1281
|
const lastNetworkActivityAt = readFiniteNumber(value.lastNetworkActivityAt);
|
|
1282
|
+
const lastTrackedNetworkActivityAt = readFiniteNumber(value.lastTrackedNetworkActivityAt);
|
|
1282
1283
|
const now = readFiniteNumber(value.now);
|
|
1283
1284
|
const readyState = typeof value.readyState === "string" ? value.readyState : void 0;
|
|
1284
|
-
if (installedAt === void 0 || lastMutationAt === void 0 || lastNetworkActivityAt === void 0 || now === void 0 || readyState === void 0) {
|
|
1285
|
+
if (installedAt === void 0 || lastMutationAt === void 0 || lastNetworkActivityAt === void 0 || lastTrackedNetworkActivityAt === void 0 || now === void 0 || readyState === void 0) {
|
|
1285
1286
|
return void 0;
|
|
1286
1287
|
}
|
|
1287
1288
|
return {
|
|
1288
1289
|
installedAt,
|
|
1289
1290
|
lastMutationAt,
|
|
1290
1291
|
lastNetworkActivityAt,
|
|
1292
|
+
lastTrackedNetworkActivityAt,
|
|
1291
1293
|
now,
|
|
1292
1294
|
pendingFetches: readNonNegativeNumber(value.pendingFetches),
|
|
1293
1295
|
pendingTimeouts: readNonNegativeNumber(value.pendingTimeouts),
|
|
1294
1296
|
pendingXhrs: readNonNegativeNumber(value.pendingXhrs),
|
|
1297
|
+
trackedPendingFetches: readNonNegativeNumber(value.trackedPendingFetches),
|
|
1298
|
+
trackedPendingXhrs: readNonNegativeNumber(value.trackedPendingXhrs),
|
|
1299
|
+
collecting: value.collecting === true,
|
|
1295
1300
|
readyState
|
|
1296
1301
|
};
|
|
1297
1302
|
}
|
|
@@ -1306,11 +1311,14 @@ function buildPostLoadTrackerInstallScript() {
|
|
|
1306
1311
|
installedAt: performance.now(),
|
|
1307
1312
|
lastMutationAt: performance.now(),
|
|
1308
1313
|
lastNetworkActivityAt: performance.now(),
|
|
1314
|
+
lastTrackedNetworkActivityAt: performance.now(),
|
|
1309
1315
|
pendingFetches: 0,
|
|
1310
1316
|
pendingTimeouts: 0,
|
|
1311
1317
|
pendingXhrs: 0,
|
|
1318
|
+
trackedPendingFetches: 0,
|
|
1319
|
+
trackedPendingXhrs: 0,
|
|
1320
|
+
collecting: true,
|
|
1312
1321
|
readyState: document.readyState,
|
|
1313
|
-
timeoutIds: new Set(),
|
|
1314
1322
|
};
|
|
1315
1323
|
globalObject.__opensteerActionBoundaryTrackerInstalled = true;
|
|
1316
1324
|
globalObject.__opensteerActionBoundaryTracker = tracker;
|
|
@@ -1323,6 +1331,18 @@ function buildPostLoadTrackerInstallScript() {
|
|
|
1323
1331
|
tracker.lastNetworkActivityAt = performance.now();
|
|
1324
1332
|
tracker.readyState = document.readyState;
|
|
1325
1333
|
};
|
|
1334
|
+
const markTrackedNetwork = () => {
|
|
1335
|
+
tracker.lastTrackedNetworkActivityAt = performance.now();
|
|
1336
|
+
markNetwork();
|
|
1337
|
+
};
|
|
1338
|
+
const resetTracking = () => {
|
|
1339
|
+
const now = performance.now();
|
|
1340
|
+
tracker.lastTrackedNetworkActivityAt = now;
|
|
1341
|
+
tracker.trackedPendingFetches = 0;
|
|
1342
|
+
tracker.trackedPendingXhrs = 0;
|
|
1343
|
+
tracker.collecting = true;
|
|
1344
|
+
tracker.readyState = document.readyState;
|
|
1345
|
+
};
|
|
1326
1346
|
|
|
1327
1347
|
const startObserver = () => {
|
|
1328
1348
|
const target = document.documentElement ?? document;
|
|
@@ -1348,45 +1368,26 @@ function buildPostLoadTrackerInstallScript() {
|
|
|
1348
1368
|
document.addEventListener("readystatechange", markMutation);
|
|
1349
1369
|
addEventListener("load", markMutation, { once: true });
|
|
1350
1370
|
|
|
1351
|
-
const nativeSetTimeout = globalObject.setTimeout.bind(globalObject);
|
|
1352
|
-
const nativeClearTimeout = globalObject.clearTimeout.bind(globalObject);
|
|
1353
|
-
globalObject.setTimeout = function(callback, delay, ...args) {
|
|
1354
|
-
tracker.pendingTimeouts += 1;
|
|
1355
|
-
markNetwork();
|
|
1356
|
-
let handle;
|
|
1357
|
-
const wrapped =
|
|
1358
|
-
typeof callback === "function"
|
|
1359
|
-
? (...callbackArgs) => {
|
|
1360
|
-
if (tracker.timeoutIds.delete(handle)) {
|
|
1361
|
-
tracker.pendingTimeouts = Math.max(0, tracker.pendingTimeouts - 1);
|
|
1362
|
-
}
|
|
1363
|
-
try {
|
|
1364
|
-
return callback(...callbackArgs);
|
|
1365
|
-
} finally {
|
|
1366
|
-
markMutation();
|
|
1367
|
-
}
|
|
1368
|
-
}
|
|
1369
|
-
: callback;
|
|
1370
|
-
handle = nativeSetTimeout(wrapped, delay, ...args);
|
|
1371
|
-
tracker.timeoutIds.add(handle);
|
|
1372
|
-
return handle;
|
|
1373
|
-
};
|
|
1374
|
-
globalObject.clearTimeout = function(handle) {
|
|
1375
|
-
if (tracker.timeoutIds.delete(handle)) {
|
|
1376
|
-
tracker.pendingTimeouts = Math.max(0, tracker.pendingTimeouts - 1);
|
|
1377
|
-
}
|
|
1378
|
-
return nativeClearTimeout(handle);
|
|
1379
|
-
};
|
|
1380
|
-
|
|
1381
1371
|
if (typeof globalObject.fetch === "function") {
|
|
1382
1372
|
const nativeFetch = globalObject.fetch.bind(globalObject);
|
|
1383
1373
|
globalObject.fetch = (...args) => {
|
|
1374
|
+
const tracked = tracker.collecting === true;
|
|
1384
1375
|
tracker.pendingFetches += 1;
|
|
1385
|
-
|
|
1376
|
+
if (tracked) {
|
|
1377
|
+
tracker.trackedPendingFetches += 1;
|
|
1378
|
+
markTrackedNetwork();
|
|
1379
|
+
} else {
|
|
1380
|
+
markNetwork();
|
|
1381
|
+
}
|
|
1386
1382
|
return nativeFetch(...args)
|
|
1387
1383
|
.finally(() => {
|
|
1388
1384
|
tracker.pendingFetches = Math.max(0, tracker.pendingFetches - 1);
|
|
1389
|
-
|
|
1385
|
+
if (tracked) {
|
|
1386
|
+
tracker.trackedPendingFetches = Math.max(0, tracker.trackedPendingFetches - 1);
|
|
1387
|
+
markTrackedNetwork();
|
|
1388
|
+
} else {
|
|
1389
|
+
markNetwork();
|
|
1390
|
+
}
|
|
1390
1391
|
});
|
|
1391
1392
|
};
|
|
1392
1393
|
}
|
|
@@ -1395,21 +1396,60 @@ function buildPostLoadTrackerInstallScript() {
|
|
|
1395
1396
|
const NativeXMLHttpRequest = globalObject.XMLHttpRequest;
|
|
1396
1397
|
const nativeSend = NativeXMLHttpRequest.prototype.send;
|
|
1397
1398
|
NativeXMLHttpRequest.prototype.send = function(...args) {
|
|
1399
|
+
const tracked = tracker.collecting === true;
|
|
1398
1400
|
tracker.pendingXhrs += 1;
|
|
1399
|
-
|
|
1401
|
+
if (tracked) {
|
|
1402
|
+
tracker.trackedPendingXhrs += 1;
|
|
1403
|
+
markTrackedNetwork();
|
|
1404
|
+
} else {
|
|
1405
|
+
markNetwork();
|
|
1406
|
+
}
|
|
1400
1407
|
const finalize = () => {
|
|
1401
1408
|
this.removeEventListener("loadend", finalize);
|
|
1402
1409
|
tracker.pendingXhrs = Math.max(0, tracker.pendingXhrs - 1);
|
|
1403
|
-
|
|
1410
|
+
if (tracked) {
|
|
1411
|
+
tracker.trackedPendingXhrs = Math.max(0, tracker.trackedPendingXhrs - 1);
|
|
1412
|
+
markTrackedNetwork();
|
|
1413
|
+
} else {
|
|
1414
|
+
markNetwork();
|
|
1415
|
+
}
|
|
1404
1416
|
};
|
|
1405
1417
|
this.addEventListener("loadend", finalize, { once: true });
|
|
1406
1418
|
return nativeSend.apply(this, args);
|
|
1407
1419
|
};
|
|
1408
1420
|
}
|
|
1409
1421
|
|
|
1422
|
+
tracker.beginObservation = () => {
|
|
1423
|
+
resetTracking();
|
|
1424
|
+
return true;
|
|
1425
|
+
};
|
|
1426
|
+
tracker.freezeObservation = () => {
|
|
1427
|
+
tracker.collecting = false;
|
|
1428
|
+
tracker.readyState = document.readyState;
|
|
1429
|
+
return true;
|
|
1430
|
+
};
|
|
1431
|
+
|
|
1410
1432
|
return true;
|
|
1411
1433
|
})()`;
|
|
1412
1434
|
}
|
|
1435
|
+
function buildPostLoadTrackerBeginExpression() {
|
|
1436
|
+
return `(() => {
|
|
1437
|
+
const tracker = globalThis.__opensteerActionBoundaryTracker;
|
|
1438
|
+
if (!tracker || typeof tracker.beginObservation !== "function") {
|
|
1439
|
+
return false;
|
|
1440
|
+
}
|
|
1441
|
+
return tracker.beginObservation();
|
|
1442
|
+
})()`;
|
|
1443
|
+
}
|
|
1444
|
+
function buildPostLoadTrackerFreezeExpression() {
|
|
1445
|
+
return `(() => {
|
|
1446
|
+
const tracker = globalThis.__opensteerActionBoundaryTracker;
|
|
1447
|
+
if (!tracker || typeof tracker.freezeObservation !== "function") {
|
|
1448
|
+
return false;
|
|
1449
|
+
}
|
|
1450
|
+
return tracker.freezeObservation();
|
|
1451
|
+
})()`;
|
|
1452
|
+
}
|
|
1413
1453
|
function buildPostLoadTrackerReadExpression() {
|
|
1414
1454
|
return `(() => {
|
|
1415
1455
|
const tracker = globalThis.__opensteerActionBoundaryTracker;
|
|
@@ -1421,14 +1461,31 @@ function buildPostLoadTrackerReadExpression() {
|
|
|
1421
1461
|
installedAt: Number(tracker.installedAt ?? 0),
|
|
1422
1462
|
lastMutationAt: Number(tracker.lastMutationAt ?? 0),
|
|
1423
1463
|
lastNetworkActivityAt: Number(tracker.lastNetworkActivityAt ?? 0),
|
|
1464
|
+
lastTrackedNetworkActivityAt: Number(tracker.lastTrackedNetworkActivityAt ?? 0),
|
|
1424
1465
|
now: Number(performance.now()),
|
|
1425
1466
|
pendingFetches: Number(tracker.pendingFetches ?? 0),
|
|
1426
1467
|
pendingTimeouts: Number(tracker.pendingTimeouts ?? 0),
|
|
1427
1468
|
pendingXhrs: Number(tracker.pendingXhrs ?? 0),
|
|
1469
|
+
trackedPendingFetches: Number(tracker.trackedPendingFetches ?? 0),
|
|
1470
|
+
trackedPendingXhrs: Number(tracker.trackedPendingXhrs ?? 0),
|
|
1471
|
+
collecting: tracker.collecting === true,
|
|
1428
1472
|
readyState: String(document.readyState),
|
|
1429
1473
|
};
|
|
1430
1474
|
})()`;
|
|
1431
1475
|
}
|
|
1476
|
+
function capturePostLoadTrackerSnapshot(tracker) {
|
|
1477
|
+
return {
|
|
1478
|
+
lastTrackedNetworkActivityAt: tracker.lastTrackedNetworkActivityAt,
|
|
1479
|
+
trackedPendingFetches: tracker.trackedPendingFetches,
|
|
1480
|
+
trackedPendingXhrs: tracker.trackedPendingXhrs
|
|
1481
|
+
};
|
|
1482
|
+
}
|
|
1483
|
+
function postLoadTrackerHasTrackedNetworkActivitySince(snapshot, tracker) {
|
|
1484
|
+
if (!tracker) {
|
|
1485
|
+
return false;
|
|
1486
|
+
}
|
|
1487
|
+
return tracker.trackedPendingFetches > snapshot.trackedPendingFetches || tracker.trackedPendingXhrs > snapshot.trackedPendingXhrs || tracker.lastTrackedNetworkActivityAt > snapshot.lastTrackedNetworkActivityAt;
|
|
1488
|
+
}
|
|
1432
1489
|
function postLoadTrackerIsSettled(tracker, quietWindowMs = DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS) {
|
|
1433
1490
|
if (!tracker) {
|
|
1434
1491
|
return false;
|
|
@@ -1436,13 +1493,13 @@ function postLoadTrackerIsSettled(tracker, quietWindowMs = DEFAULT_POST_LOAD_TRA
|
|
|
1436
1493
|
if (tracker.readyState !== "complete") {
|
|
1437
1494
|
return false;
|
|
1438
1495
|
}
|
|
1439
|
-
if (tracker.
|
|
1496
|
+
if (tracker.trackedPendingFetches > 0 || tracker.trackedPendingXhrs > 0) {
|
|
1440
1497
|
return false;
|
|
1441
1498
|
}
|
|
1442
1499
|
const lastActivityAt = Math.max(
|
|
1443
1500
|
tracker.installedAt,
|
|
1444
1501
|
tracker.lastMutationAt,
|
|
1445
|
-
tracker.
|
|
1502
|
+
tracker.lastTrackedNetworkActivityAt
|
|
1446
1503
|
);
|
|
1447
1504
|
return tracker.now - lastActivityAt >= quietWindowMs;
|
|
1448
1505
|
}
|
|
@@ -1464,7 +1521,7 @@ async function waitForActionBoundary(input) {
|
|
|
1464
1521
|
const pollIntervalMs = input.pollIntervalMs ?? DEFAULT_ACTION_BOUNDARY_POLL_INTERVAL_MS;
|
|
1465
1522
|
let trigger = "dom-action";
|
|
1466
1523
|
let crossDocument = false;
|
|
1467
|
-
let
|
|
1524
|
+
let sameDocumentAsyncActivity = false;
|
|
1468
1525
|
while (Date.now() < deadline) {
|
|
1469
1526
|
input.throwBackgroundError();
|
|
1470
1527
|
if (input.isPageClosed()) {
|
|
@@ -1486,16 +1543,21 @@ async function waitForActionBoundary(input) {
|
|
|
1486
1543
|
throw abortError(input.signal);
|
|
1487
1544
|
}
|
|
1488
1545
|
const currentDocumentRef = input.getCurrentMainFrameDocumentRef();
|
|
1546
|
+
const currentPageUrl = input.getCurrentPageUrl?.();
|
|
1489
1547
|
if (input.snapshot !== void 0 && currentDocumentRef !== void 0 && currentDocumentRef !== input.snapshot.documentRef) {
|
|
1490
1548
|
trigger = "navigation";
|
|
1491
1549
|
crossDocument = true;
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1550
|
+
}
|
|
1551
|
+
if (!crossDocument && !sameDocumentAsyncActivity && input.snapshot?.tracker !== void 0 && postLoadTrackerHasTrackedNetworkActivitySince(
|
|
1552
|
+
input.snapshot.tracker,
|
|
1553
|
+
await input.readTrackerState()
|
|
1554
|
+
)) {
|
|
1555
|
+
trigger = "navigation";
|
|
1556
|
+
sameDocumentAsyncActivity = true;
|
|
1557
|
+
}
|
|
1558
|
+
if (!crossDocument && input.snapshot?.url !== void 0 && currentPageUrl !== void 0 && currentPageUrl !== input.snapshot.url && input.isCurrentMainFrameBootstrapSettled !== void 0 && !input.isCurrentMainFrameBootstrapSettled()) {
|
|
1559
|
+
trigger = "navigation";
|
|
1560
|
+
crossDocument = true;
|
|
1499
1561
|
}
|
|
1500
1562
|
if (!crossDocument && crossDocumentDetectionDeadline !== void 0 && Date.now() >= crossDocumentDetectionDeadline) {
|
|
1501
1563
|
return {
|
|
@@ -1504,7 +1566,18 @@ async function waitForActionBoundary(input) {
|
|
|
1504
1566
|
bootstrapSettled: true
|
|
1505
1567
|
};
|
|
1506
1568
|
}
|
|
1507
|
-
if (
|
|
1569
|
+
if (sameDocumentAsyncActivity) {
|
|
1570
|
+
return {
|
|
1571
|
+
trigger,
|
|
1572
|
+
crossDocument,
|
|
1573
|
+
bootstrapSettled: true
|
|
1574
|
+
};
|
|
1575
|
+
}
|
|
1576
|
+
if (crossDocument && input.isCurrentMainFrameBootstrapSettled !== void 0 && !input.isCurrentMainFrameBootstrapSettled()) {
|
|
1577
|
+
await delay(Math.min(pollIntervalMs, Math.max(0, deadline - Date.now())));
|
|
1578
|
+
continue;
|
|
1579
|
+
}
|
|
1580
|
+
if (crossDocument) {
|
|
1508
1581
|
return {
|
|
1509
1582
|
trigger,
|
|
1510
1583
|
crossDocument,
|
|
@@ -2271,6 +2344,7 @@ function normalizeSelectChooserEventData(data) {
|
|
|
2271
2344
|
|
|
2272
2345
|
// src/action-settle.ts
|
|
2273
2346
|
var DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS = CROSS_DOCUMENT_INTERACTION_TIMEOUT_MS;
|
|
2347
|
+
var DEFAULT_ABP_POST_LOAD_CAPTURE_WINDOW_MS = 1e3;
|
|
2274
2348
|
function clampAbpActionSettleTimeout(timeoutMs) {
|
|
2275
2349
|
if (timeoutMs === void 0) {
|
|
2276
2350
|
return DEFAULT_ABP_ACTION_SETTLE_TIMEOUT_MS;
|
|
@@ -2282,6 +2356,8 @@ function abortError2(signal) {
|
|
|
2282
2356
|
}
|
|
2283
2357
|
function createAbpActionSettler(context) {
|
|
2284
2358
|
const installScript = buildPostLoadTrackerInstallScript();
|
|
2359
|
+
const beginExpression = buildPostLoadTrackerBeginExpression();
|
|
2360
|
+
const freezeExpression = buildPostLoadTrackerFreezeExpression();
|
|
2285
2361
|
const readExpression = buildPostLoadTrackerReadExpression();
|
|
2286
2362
|
async function installTracker(controller) {
|
|
2287
2363
|
if (!controller.settleTrackerRegistered) {
|
|
@@ -2311,6 +2387,67 @@ function createAbpActionSettler(context) {
|
|
|
2311
2387
|
throw error;
|
|
2312
2388
|
}
|
|
2313
2389
|
}
|
|
2390
|
+
async function beginTrackerObservation(controller) {
|
|
2391
|
+
await installTracker(controller);
|
|
2392
|
+
await controller.cdp.send("Runtime.evaluate", {
|
|
2393
|
+
expression: beginExpression,
|
|
2394
|
+
returnByValue: true,
|
|
2395
|
+
awaitPromise: true
|
|
2396
|
+
});
|
|
2397
|
+
}
|
|
2398
|
+
async function freezeTrackerObservation(controller) {
|
|
2399
|
+
await controller.cdp.send("Runtime.evaluate", {
|
|
2400
|
+
expression: freezeExpression,
|
|
2401
|
+
returnByValue: true,
|
|
2402
|
+
awaitPromise: true
|
|
2403
|
+
});
|
|
2404
|
+
}
|
|
2405
|
+
async function captureSnapshot(controller) {
|
|
2406
|
+
const documentRef = context.getMainFrameDocumentRef(controller);
|
|
2407
|
+
if (documentRef === void 0) {
|
|
2408
|
+
throw new Error(`page ${controller.pageRef} does not expose a main frame`);
|
|
2409
|
+
}
|
|
2410
|
+
await beginTrackerObservation(controller);
|
|
2411
|
+
const tracker = await readTrackerState(controller);
|
|
2412
|
+
return {
|
|
2413
|
+
pageRef: controller.pageRef,
|
|
2414
|
+
documentRef,
|
|
2415
|
+
...controller.mainFrameRef === void 0 ? {} : {
|
|
2416
|
+
url: controller.framesByCdpId.get(controller.mainFrameRef)?.currentDocument.url
|
|
2417
|
+
},
|
|
2418
|
+
...tracker === void 0 ? {} : { tracker: capturePostLoadTrackerSnapshot(tracker) }
|
|
2419
|
+
};
|
|
2420
|
+
}
|
|
2421
|
+
async function waitForPostLoadQuiet(input) {
|
|
2422
|
+
const { controller, timeoutMs, signal } = input;
|
|
2423
|
+
if (timeoutMs <= 0) {
|
|
2424
|
+
return;
|
|
2425
|
+
}
|
|
2426
|
+
const quietMs = input.quietMs ?? DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS;
|
|
2427
|
+
const captureWindowMs = Math.max(
|
|
2428
|
+
0,
|
|
2429
|
+
Math.min(input.captureWindowMs ?? DEFAULT_ABP_POST_LOAD_CAPTURE_WINDOW_MS, timeoutMs)
|
|
2430
|
+
);
|
|
2431
|
+
const deadline = Date.now() + timeoutMs;
|
|
2432
|
+
await installTracker(controller);
|
|
2433
|
+
if (captureWindowMs > 0) {
|
|
2434
|
+
await delayWithSignal(captureWindowMs, signal, deadline);
|
|
2435
|
+
}
|
|
2436
|
+
await freezeTrackerObservation(controller);
|
|
2437
|
+
while (Date.now() < deadline) {
|
|
2438
|
+
if (signal?.aborted) {
|
|
2439
|
+
throw abortError2(signal);
|
|
2440
|
+
}
|
|
2441
|
+
context.throwBackgroundError(controller);
|
|
2442
|
+
if (controller.lifecycleState === "closed") {
|
|
2443
|
+
return;
|
|
2444
|
+
}
|
|
2445
|
+
if (postLoadTrackerIsSettled(await readTrackerState(controller), quietMs)) {
|
|
2446
|
+
return;
|
|
2447
|
+
}
|
|
2448
|
+
await delayWithSignal(100, signal, deadline);
|
|
2449
|
+
}
|
|
2450
|
+
}
|
|
2314
2451
|
async function settle(options) {
|
|
2315
2452
|
const { controller, timeoutMs, signal, snapshot, policySettle } = options;
|
|
2316
2453
|
if (timeoutMs <= 0) {
|
|
@@ -2351,7 +2488,8 @@ function createAbpActionSettler(context) {
|
|
|
2351
2488
|
...signal === void 0 ? {} : { signal },
|
|
2352
2489
|
snapshot,
|
|
2353
2490
|
getCurrentMainFrameDocumentRef: () => context.getMainFrameDocumentRef(controller),
|
|
2354
|
-
|
|
2491
|
+
getCurrentPageUrl: () => controller.mainFrameRef === void 0 ? void 0 : controller.framesByCdpId.get(controller.mainFrameRef)?.currentDocument.url,
|
|
2492
|
+
isCurrentMainFrameBootstrapSettled: () => context.isCurrentMainFrameBootstrapSettled(controller),
|
|
2355
2493
|
readTrackerState: () => readTrackerState(controller),
|
|
2356
2494
|
throwBackgroundError: () => context.throwBackgroundError(controller),
|
|
2357
2495
|
isPageClosed: () => controller.lifecycleState === "closed"
|
|
@@ -2383,10 +2521,33 @@ function createAbpActionSettler(context) {
|
|
|
2383
2521
|
return boundary;
|
|
2384
2522
|
}
|
|
2385
2523
|
return {
|
|
2524
|
+
captureSnapshot,
|
|
2386
2525
|
installTracker,
|
|
2526
|
+
waitForPostLoadQuiet,
|
|
2387
2527
|
settle
|
|
2388
2528
|
};
|
|
2389
2529
|
}
|
|
2530
|
+
async function delayWithSignal(delayMs, signal, deadline) {
|
|
2531
|
+
const effectiveDelay = Math.max(0, Math.min(delayMs, Math.max(0, deadline - Date.now())));
|
|
2532
|
+
if (effectiveDelay <= 0) {
|
|
2533
|
+
return;
|
|
2534
|
+
}
|
|
2535
|
+
if (signal?.aborted) {
|
|
2536
|
+
throw abortError2(signal);
|
|
2537
|
+
}
|
|
2538
|
+
await new Promise((resolve, reject) => {
|
|
2539
|
+
const timer = setTimeout(() => {
|
|
2540
|
+
signal?.removeEventListener("abort", onAbort);
|
|
2541
|
+
resolve();
|
|
2542
|
+
}, effectiveDelay);
|
|
2543
|
+
const onAbort = () => {
|
|
2544
|
+
clearTimeout(timer);
|
|
2545
|
+
signal?.removeEventListener("abort", onAbort);
|
|
2546
|
+
reject(abortError2(signal));
|
|
2547
|
+
};
|
|
2548
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
2549
|
+
});
|
|
2550
|
+
}
|
|
2390
2551
|
|
|
2391
2552
|
// src/rest-client.ts
|
|
2392
2553
|
function isRecord3(value) {
|
|
@@ -4301,7 +4462,7 @@ var AbpBrowserCoreEngine = class _AbpBrowserCoreEngine {
|
|
|
4301
4462
|
setExecutionPaused: (controller, paused) => this.setControllerExecutionPaused(controller, paused),
|
|
4302
4463
|
flushDomUpdateTask: (controller) => this.flushDomUpdateTask(controller),
|
|
4303
4464
|
getMainFrameDocumentRef: (controller) => controller.mainFrameRef === void 0 ? void 0 : this.frames.get(controller.mainFrameRef)?.currentDocument.documentRef,
|
|
4304
|
-
|
|
4465
|
+
isCurrentMainFrameBootstrapSettled: () => true,
|
|
4305
4466
|
throwBackgroundError: (controller) => this.throwBackgroundError(controller),
|
|
4306
4467
|
isPageClosedError: isAbpPageClosedError
|
|
4307
4468
|
});
|
|
@@ -5064,6 +5225,9 @@ var AbpBrowserCoreEngine = class _AbpBrowserCoreEngine {
|
|
|
5064
5225
|
)
|
|
5065
5226
|
);
|
|
5066
5227
|
}
|
|
5228
|
+
async drainEvents(input) {
|
|
5229
|
+
return this.drainQueuedEvents(input.pageRef);
|
|
5230
|
+
}
|
|
5067
5231
|
async listFrames(input) {
|
|
5068
5232
|
const controller = this.requirePage(input.pageRef);
|
|
5069
5233
|
await this.flushDomUpdateTask(controller);
|
|
@@ -5115,6 +5279,11 @@ var AbpBrowserCoreEngine = class _AbpBrowserCoreEngine {
|
|
|
5115
5279
|
(contentDocumentIndex) => resolveCapturedContentDocumentRef(controller.framesByCdpId, captured, contentDocumentIndex)
|
|
5116
5280
|
);
|
|
5117
5281
|
}
|
|
5282
|
+
async getActionBoundarySnapshot(input) {
|
|
5283
|
+
const controller = this.requirePage(input.pageRef);
|
|
5284
|
+
await this.flushDomUpdateTask(controller);
|
|
5285
|
+
return this.actionSettler.captureSnapshot(controller);
|
|
5286
|
+
}
|
|
5118
5287
|
async waitForVisualStability(input) {
|
|
5119
5288
|
const controller = this.requirePage(input.pageRef);
|
|
5120
5289
|
await this.flushDomUpdateTask(controller);
|
|
@@ -5125,6 +5294,20 @@ var AbpBrowserCoreEngine = class _AbpBrowserCoreEngine {
|
|
|
5125
5294
|
});
|
|
5126
5295
|
await this.flushDomUpdateTask(controller);
|
|
5127
5296
|
}
|
|
5297
|
+
async waitForPostLoadQuiet(input) {
|
|
5298
|
+
const controller = this.requirePage(input.pageRef);
|
|
5299
|
+
await this.flushDomUpdateTask(controller);
|
|
5300
|
+
await this.actionSettler.waitForPostLoadQuiet({
|
|
5301
|
+
controller,
|
|
5302
|
+
timeoutMs: clampAbpActionSettleTimeout(input.timeoutMs),
|
|
5303
|
+
...input.quietMs === void 0 ? {} : { quietMs: input.quietMs },
|
|
5304
|
+
...input.captureWindowMs === void 0 ? {} : { captureWindowMs: input.captureWindowMs },
|
|
5305
|
+
...input.signal === void 0 ? {} : { signal: input.signal }
|
|
5306
|
+
});
|
|
5307
|
+
if (controller.lifecycleState !== "closed") {
|
|
5308
|
+
await this.flushDomUpdateTask(controller);
|
|
5309
|
+
}
|
|
5310
|
+
}
|
|
5128
5311
|
async readText(input) {
|
|
5129
5312
|
const document = this.requireDocument(input.documentRef);
|
|
5130
5313
|
const controller = this.requirePage(document.pageRef);
|