@skrillex1224/playwright-toolkit 2.1.162 → 2.1.164

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.js CHANGED
@@ -604,7 +604,7 @@ async function createApifyKit() {
604
604
  logger2.success(`[RetryStep] before \u94A9\u5B50\u5B8C\u6210`);
605
605
  } else if (retryMode === "refresh") {
606
606
  logger2.start(`[RetryStep] \u5237\u65B0\u9875\u9762 (\u7B2C ${attemptNumber} \u6B21\u91CD\u8BD5)`);
607
- await page.reload({ waitUntil: "domcontentloaded" });
607
+ await page.reload({ waitUntil: "commit" });
608
608
  logger2.success(`[RetryStep] \u9875\u9762\u5237\u65B0\u5B8C\u6210`);
609
609
  } else {
610
610
  logger2.start(`[RetryStep] \u7B49\u5F85 3 \u79D2 (\u7B2C ${attemptNumber} \u6B21\u91CD\u8BD5)`);
@@ -1433,6 +1433,19 @@ var createTrafficState = () => ({
1433
1433
  directDownloadBytes: 0
1434
1434
  });
1435
1435
  var ensureRoute = (route) => route === "proxy" ? "proxy" : "direct";
1436
+ var formatBytes = (bytes = 0) => {
1437
+ const value = toSafeNumber(bytes);
1438
+ if (value <= 0) return "0B";
1439
+ const units = ["B", "KB", "MB", "GB", "TB"];
1440
+ let size = value;
1441
+ let unit = 0;
1442
+ while (size >= 1024 && unit < units.length - 1) {
1443
+ size /= 1024;
1444
+ unit += 1;
1445
+ }
1446
+ const precision = size >= 100 || unit === 0 ? 0 : 2;
1447
+ return `${size.toFixed(precision)}${units[unit]}`;
1448
+ };
1436
1449
  var addRequests = (state, route, count = 1) => {
1437
1450
  const c = toSafeNumber(count);
1438
1451
  if (c <= 0) return;
@@ -1468,7 +1481,8 @@ var addDownloadBytes = (state, route, bytes = 0) => {
1468
1481
  };
1469
1482
  var createTrafficMeter = ({
1470
1483
  enableProxy = false,
1471
- byPassRules = []
1484
+ byPassRules = [],
1485
+ debugMode = false
1472
1486
  } = {}) => {
1473
1487
  const state = createTrafficState();
1474
1488
  const requestMap = /* @__PURE__ */ new Map();
@@ -1480,31 +1494,53 @@ var createTrafficMeter = ({
1480
1494
  byPassRules
1481
1495
  }).route;
1482
1496
  };
1497
+ const debugLog = (message) => {
1498
+ if (!debugMode) return;
1499
+ logger6.info(`[\u9010\u8BF7\u6C42\u8C03\u8BD5] ${message}`);
1500
+ };
1483
1501
  const recordRequest = (params = {}) => {
1484
1502
  const requestId = String(params.requestId || "");
1485
1503
  const request = params.request && typeof params.request === "object" ? params.request : {};
1486
- const route = resolveRoute(request.url || "");
1504
+ const url = String(request.url || "");
1505
+ const route = resolveRoute(url);
1506
+ const resourceType = String(params.type || request.type || "other").trim().toLowerCase() || "other";
1487
1507
  addRequests(state, route, 1);
1488
1508
  const uploadBytes = estimateRequestBytes(request);
1489
1509
  addUploadBytes(state, route, uploadBytes);
1490
1510
  if (requestId) {
1491
1511
  requestMap.set(requestId, {
1492
- route
1512
+ route,
1513
+ resourceType,
1514
+ url,
1515
+ uploadBytes
1493
1516
  });
1494
1517
  }
1518
+ debugLog(
1519
+ `request id=${requestId || "-"} route=${route} type=${resourceType} upload=${formatBytes(uploadBytes)} (${uploadBytes}) method=${String(request.method || "GET")} url=${url || "-"}`
1520
+ );
1495
1521
  };
1496
1522
  const recordLoadingFinished = (params = {}) => {
1497
1523
  const requestId = String(params.requestId || "");
1498
1524
  const requestState = requestId ? requestMap.get(requestId) : null;
1499
1525
  const route = requestState?.route || "direct";
1526
+ const resourceType = requestState?.resourceType || "other";
1500
1527
  const downloadBytes = toSafeNumber(params.encodedDataLength);
1501
1528
  addDownloadBytes(state, route, downloadBytes);
1529
+ const uploadBytes = toSafeNumber(requestState?.uploadBytes);
1530
+ const totalBytes = uploadBytes + downloadBytes;
1531
+ debugLog(
1532
+ `finish id=${requestId || "-"} route=${route} type=${resourceType} download=${formatBytes(downloadBytes)} (${downloadBytes}) total=${formatBytes(totalBytes)} (${totalBytes}) url=${requestState?.url || "-"}`
1533
+ );
1502
1534
  if (requestId) {
1503
1535
  requestMap.delete(requestId);
1504
1536
  }
1505
1537
  };
1506
1538
  const recordRequestFailed = (params = {}) => {
1507
1539
  const requestId = String(params.requestId || "");
1540
+ const requestState = requestId ? requestMap.get(requestId) : null;
1541
+ debugLog(
1542
+ `failed id=${requestId || "-"} route=${requestState?.route || "direct"} type=${requestState?.resourceType || "other"} reason=${String(params.errorText || "").trim() || "unknown"} canceled=${Boolean(params.canceled)} url=${requestState?.url || "-"}`
1543
+ );
1508
1544
  if (requestId) {
1509
1545
  requestMap.delete(requestId);
1510
1546
  }
@@ -1513,30 +1549,39 @@ var createTrafficMeter = ({
1513
1549
  const requestId = String(params.requestId || "");
1514
1550
  if (!requestId) return;
1515
1551
  const route = resolveRoute(params.url || "");
1516
- wsRouteMap.set(requestId, route);
1552
+ wsRouteMap.set(requestId, { route, url: String(params.url || "") });
1517
1553
  };
1518
1554
  const clearWebSocketRoute = (params = {}) => {
1519
1555
  const requestId = String(params.requestId || "");
1520
1556
  if (!requestId) return;
1521
1557
  wsRouteMap.delete(requestId);
1522
1558
  };
1523
- const getWebSocketRoute = (requestId = "") => {
1524
- if (!requestId) return "direct";
1525
- return wsRouteMap.get(requestId) || "direct";
1559
+ const getWebSocketMeta = (requestId = "") => {
1560
+ if (!requestId) return { route: "direct", url: "" };
1561
+ const meta = wsRouteMap.get(requestId);
1562
+ if (!meta || typeof meta !== "object") {
1563
+ return { route: "direct", url: "" };
1564
+ }
1565
+ return {
1566
+ route: ensureRoute(meta.route),
1567
+ url: String(meta.url || "")
1568
+ };
1526
1569
  };
1527
1570
  const recordWebSocketFrameSent = (params = {}) => {
1528
1571
  const requestId = String(params.requestId || "");
1529
- const route = getWebSocketRoute(requestId);
1572
+ const { route, url } = getWebSocketMeta(requestId);
1530
1573
  const payload = params.response && typeof params.response === "object" ? params.response.payloadData : "";
1531
1574
  const bytes = byteLength(payload || "");
1532
1575
  addUploadBytes(state, route, bytes);
1576
+ debugLog(`ws-send id=${requestId || "-"} route=${route} bytes=${formatBytes(bytes)} (${bytes}) url=${url || "-"}`);
1533
1577
  };
1534
1578
  const recordWebSocketFrameReceived = (params = {}) => {
1535
1579
  const requestId = String(params.requestId || "");
1536
- const route = getWebSocketRoute(requestId);
1580
+ const { route, url } = getWebSocketMeta(requestId);
1537
1581
  const payload = params.response && typeof params.response === "object" ? params.response.payloadData : "";
1538
1582
  const bytes = byteLength(payload || "");
1539
1583
  addDownloadBytes(state, route, bytes);
1584
+ debugLog(`ws-recv id=${requestId || "-"} route=${route} bytes=${formatBytes(bytes)} (${bytes}) url=${url || "-"}`);
1540
1585
  };
1541
1586
  const attachPage = async (page) => {
1542
1587
  if (!page || typeof page.context !== "function") return;
@@ -1630,6 +1675,7 @@ var Launch = {
1630
1675
  proxyConfiguration = {},
1631
1676
  log: logOptions = null,
1632
1677
  runInHeadfulMode = false,
1678
+ debugMode = false,
1633
1679
  isRunningOnApify = false,
1634
1680
  launcher = null,
1635
1681
  preNavigationHooks = [],
@@ -1639,7 +1685,8 @@ var Launch = {
1639
1685
  const byPassRules = buildByPassDomainRules(byPassDomains);
1640
1686
  const trafficMeter2 = createTrafficMeter({
1641
1687
  enableProxy: Boolean(launchProxy),
1642
- byPassRules
1688
+ byPassRules,
1689
+ debugMode: Boolean(debugMode)
1643
1690
  });
1644
1691
  setTrafficMeter(trafficMeter2);
1645
1692
  const launchOptions = {
@@ -1657,18 +1704,23 @@ var Launch = {
1657
1704
  logger7.info(
1658
1705
  `[\u4EE3\u7406\u5DF2\u542F\u7528] \u4EE3\u7406\u670D\u52A1=${launchProxy.server} \u76F4\u8FDE\u57DF\u540D=${(byPassDomains || []).join(",")}`
1659
1706
  );
1707
+ logger7.info(`[\u6D41\u91CF\u89C2\u6D4B] \u9010\u8BF7\u6C42\u8C03\u8BD5=${Boolean(debugMode) ? "\u5F00\u542F" : "\u5173\u95ED"}\uFF08\u6C47\u603B\u59CB\u7EC8\u5F00\u542F\uFF09`);
1660
1708
  } else if (enableByPassLogger && enableProxy && !launchProxy) {
1661
1709
  logger7.info(
1662
1710
  `[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=true \u4F46 proxy_url \u4E3A\u7A7A`
1663
1711
  );
1712
+ logger7.info(`[\u6D41\u91CF\u89C2\u6D4B] \u9010\u8BF7\u6C42\u8C03\u8BD5=${Boolean(debugMode) ? "\u5F00\u542F" : "\u5173\u95ED"}\uFF08\u6C47\u603B\u59CB\u7EC8\u5F00\u542F\uFF09`);
1664
1713
  } else if (enableByPassLogger && !enableProxy && proxyUrl) {
1665
1714
  logger7.info(
1666
1715
  `[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=false \u4E14 proxy_url \u5DF2\u914D\u7F6E`
1667
1716
  );
1717
+ logger7.info(`[\u6D41\u91CF\u89C2\u6D4B] \u9010\u8BF7\u6C42\u8C03\u8BD5=${Boolean(debugMode) ? "\u5F00\u542F" : "\u5173\u95ED"}\uFF08\u6C47\u603B\u59CB\u7EC8\u5F00\u542F\uFF09`);
1718
+ } else if (enableByPassLogger) {
1719
+ logger7.info(`[\u6D41\u91CF\u89C2\u6D4B] \u9010\u8BF7\u6C42\u8C03\u8BD5=${Boolean(debugMode) ? "\u5F00\u542F" : "\u5173\u95ED"}\uFF08\u6C47\u603B\u59CB\u7EC8\u5F00\u542F\uFF09`);
1668
1720
  }
1669
1721
  const onPageCreated = (page) => {
1670
1722
  const recommendedGotoOptions = {
1671
- waitUntil: "domcontentloaded"
1723
+ waitUntil: "commit"
1672
1724
  };
1673
1725
  if (page && typeof page.on === "function") {
1674
1726
  trafficMeter2.attachPage(page);