@skrillex1224/playwright-toolkit 2.1.96 → 2.1.98
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 +51 -33
- package/dist/index.cjs.map +3 -3
- package/dist/index.js +51 -33
- package/dist/index.js.map +3 -3
- package/index.d.ts +3 -11
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1331,15 +1331,19 @@ var Sse = {
|
|
|
1331
1331
|
* @param {function(Error, function): void} [options.onTimeout] - (error, reject) => void
|
|
1332
1332
|
* @param {number} [options.initialTimeout=90000] - 初始数据接收超时 (ms),默认 90s
|
|
1333
1333
|
* @param {number} [options.timeout=180000] - 整体请求超时时间 (ms),默认 180s
|
|
1334
|
-
* @
|
|
1334
|
+
* @param {boolean} [options.autoUnroute=true] - resolve/reject 后是否自动取消拦截
|
|
1335
|
+
* @param {boolean} [options.firstMatchOnly=false] - 只拦截第一个命中的请求,后续请求全部放行
|
|
1336
|
+
* @returns {Promise<any>} - 返回 Promise,当流满足条件时 resolve
|
|
1335
1337
|
*/
|
|
1336
|
-
intercept(page, urlPattern, options = {}) {
|
|
1338
|
+
async intercept(page, urlPattern, options = {}) {
|
|
1337
1339
|
const {
|
|
1338
1340
|
onData,
|
|
1339
1341
|
onEnd,
|
|
1340
1342
|
onTimeout,
|
|
1341
1343
|
initialTimeout = 9e4,
|
|
1342
|
-
overallTimeout = 18e4
|
|
1344
|
+
overallTimeout = 18e4,
|
|
1345
|
+
autoUnroute = true,
|
|
1346
|
+
firstMatchOnly = false
|
|
1343
1347
|
} = options;
|
|
1344
1348
|
let initialTimer = null;
|
|
1345
1349
|
let overallTimer = null;
|
|
@@ -1350,15 +1354,42 @@ var Sse = {
|
|
|
1350
1354
|
initialTimer = null;
|
|
1351
1355
|
overallTimer = null;
|
|
1352
1356
|
};
|
|
1353
|
-
let routeHandler = null;
|
|
1354
|
-
let isCancelled = false;
|
|
1355
1357
|
const workPromise = new Promise((resolve, reject) => {
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
+
let finished = false;
|
|
1359
|
+
let unrouteRequested = false;
|
|
1360
|
+
let hasMatchedOnce = false;
|
|
1361
|
+
const safeUnroute = () => {
|
|
1362
|
+
if (!autoUnroute) return;
|
|
1363
|
+
if (unrouteRequested) return;
|
|
1364
|
+
unrouteRequested = true;
|
|
1365
|
+
page.unroute(urlPattern, routeHandler).catch(() => {
|
|
1366
|
+
});
|
|
1367
|
+
};
|
|
1368
|
+
const safeResolve = (value) => {
|
|
1369
|
+
if (finished) return;
|
|
1370
|
+
finished = true;
|
|
1371
|
+
clearAllTimers();
|
|
1372
|
+
safeUnroute();
|
|
1373
|
+
resolve(value);
|
|
1374
|
+
};
|
|
1375
|
+
const safeReject2 = (error) => {
|
|
1376
|
+
if (finished) return;
|
|
1377
|
+
finished = true;
|
|
1378
|
+
clearAllTimers();
|
|
1379
|
+
safeUnroute();
|
|
1380
|
+
reject(error);
|
|
1381
|
+
};
|
|
1382
|
+
const routeHandler = async (route) => {
|
|
1383
|
+
if (firstMatchOnly && hasMatchedOnce) {
|
|
1358
1384
|
route.continue().catch(() => {
|
|
1359
1385
|
});
|
|
1360
1386
|
return;
|
|
1361
1387
|
}
|
|
1388
|
+
if (firstMatchOnly && !hasMatchedOnce) {
|
|
1389
|
+
hasMatchedOnce = true;
|
|
1390
|
+
page.unroute(urlPattern, routeHandler).catch(() => {
|
|
1391
|
+
});
|
|
1392
|
+
}
|
|
1362
1393
|
const request = route.request();
|
|
1363
1394
|
logger8.info(`[MITM] \u5DF2\u62E6\u622A\u8BF7\u6C42: ${request.url()}`);
|
|
1364
1395
|
try {
|
|
@@ -1392,7 +1423,7 @@ var Sse = {
|
|
|
1392
1423
|
accumulatedText += textChunk;
|
|
1393
1424
|
if (onData) {
|
|
1394
1425
|
try {
|
|
1395
|
-
onData(textChunk,
|
|
1426
|
+
onData(textChunk, safeResolve, accumulatedText);
|
|
1396
1427
|
} catch (e) {
|
|
1397
1428
|
logger8.fail(`onData \u9519\u8BEF`, e);
|
|
1398
1429
|
}
|
|
@@ -1403,12 +1434,12 @@ var Sse = {
|
|
|
1403
1434
|
clearAllTimers();
|
|
1404
1435
|
if (onEnd) {
|
|
1405
1436
|
try {
|
|
1406
|
-
onEnd(accumulatedText,
|
|
1437
|
+
onEnd(accumulatedText, safeResolve);
|
|
1407
1438
|
} catch (e) {
|
|
1408
1439
|
logger8.fail(`onEnd \u9519\u8BEF`, e);
|
|
1409
1440
|
}
|
|
1410
1441
|
} else if (!onData) {
|
|
1411
|
-
|
|
1442
|
+
safeResolve(accumulatedText);
|
|
1412
1443
|
}
|
|
1413
1444
|
route.fulfill({
|
|
1414
1445
|
status: res.statusCode,
|
|
@@ -1422,7 +1453,7 @@ var Sse = {
|
|
|
1422
1453
|
clearAllTimers();
|
|
1423
1454
|
route.abort().catch(() => {
|
|
1424
1455
|
});
|
|
1425
|
-
|
|
1456
|
+
safeReject2(e);
|
|
1426
1457
|
});
|
|
1427
1458
|
if (postData) req.write(postData);
|
|
1428
1459
|
req.end();
|
|
@@ -1430,10 +1461,10 @@ var Sse = {
|
|
|
1430
1461
|
clearAllTimers();
|
|
1431
1462
|
route.continue().catch(() => {
|
|
1432
1463
|
});
|
|
1433
|
-
|
|
1464
|
+
safeReject2(e);
|
|
1434
1465
|
}
|
|
1435
1466
|
};
|
|
1436
|
-
page.route(urlPattern, routeHandler).catch(
|
|
1467
|
+
page.route(urlPattern, routeHandler).catch(safeReject2);
|
|
1437
1468
|
});
|
|
1438
1469
|
const timeoutPromise = new Promise((_, reject) => {
|
|
1439
1470
|
initialTimer = setTimeout(() => {
|
|
@@ -1446,12 +1477,12 @@ var Sse = {
|
|
|
1446
1477
|
clearAllTimers();
|
|
1447
1478
|
if (onTimeout) {
|
|
1448
1479
|
try {
|
|
1449
|
-
onTimeout(error,
|
|
1480
|
+
onTimeout(error, (err) => safeReject(err));
|
|
1450
1481
|
} catch (e) {
|
|
1451
|
-
|
|
1482
|
+
safeReject(e);
|
|
1452
1483
|
}
|
|
1453
1484
|
} else {
|
|
1454
|
-
|
|
1485
|
+
safeReject(error);
|
|
1455
1486
|
}
|
|
1456
1487
|
}
|
|
1457
1488
|
}, initialTimeout);
|
|
@@ -1464,12 +1495,12 @@ var Sse = {
|
|
|
1464
1495
|
clearAllTimers();
|
|
1465
1496
|
if (onTimeout) {
|
|
1466
1497
|
try {
|
|
1467
|
-
onTimeout(error,
|
|
1498
|
+
onTimeout(error, (err) => safeReject(err));
|
|
1468
1499
|
} catch (e) {
|
|
1469
|
-
|
|
1500
|
+
safeReject(e);
|
|
1470
1501
|
}
|
|
1471
1502
|
} else {
|
|
1472
|
-
|
|
1503
|
+
safeReject(error);
|
|
1473
1504
|
}
|
|
1474
1505
|
}, overallTimeout);
|
|
1475
1506
|
});
|
|
@@ -1480,20 +1511,7 @@ var Sse = {
|
|
|
1480
1511
|
const racePromise = Promise.race([workPromise, timeoutPromise]);
|
|
1481
1512
|
racePromise.catch(() => {
|
|
1482
1513
|
});
|
|
1483
|
-
|
|
1484
|
-
if (isCancelled) return;
|
|
1485
|
-
isCancelled = true;
|
|
1486
|
-
clearAllTimers();
|
|
1487
|
-
if (routeHandler) {
|
|
1488
|
-
try {
|
|
1489
|
-
await page.unroute(urlPattern, routeHandler);
|
|
1490
|
-
logger8.info("[MITM] \u5DF2\u53D6\u6D88 SSE \u6D41\u76D1\u542C");
|
|
1491
|
-
} catch (e) {
|
|
1492
|
-
logger8.debug("[MITM] \u53D6\u6D88\u76D1\u542C\u65F6\u51FA\u9519\uFF08\u53EF\u80FD\u5DF2\u53D6\u6D88\uFF09");
|
|
1493
|
-
}
|
|
1494
|
-
}
|
|
1495
|
-
};
|
|
1496
|
-
return [racePromise, cancel];
|
|
1514
|
+
return racePromise;
|
|
1497
1515
|
}
|
|
1498
1516
|
};
|
|
1499
1517
|
|