@skrillex1224/playwright-toolkit 2.1.163 → 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.cjs CHANGED
@@ -1460,6 +1460,19 @@ var createTrafficState = () => ({
1460
1460
  directDownloadBytes: 0
1461
1461
  });
1462
1462
  var ensureRoute = (route) => route === "proxy" ? "proxy" : "direct";
1463
+ var formatBytes = (bytes = 0) => {
1464
+ const value = toSafeNumber(bytes);
1465
+ if (value <= 0) return "0B";
1466
+ const units = ["B", "KB", "MB", "GB", "TB"];
1467
+ let size = value;
1468
+ let unit = 0;
1469
+ while (size >= 1024 && unit < units.length - 1) {
1470
+ size /= 1024;
1471
+ unit += 1;
1472
+ }
1473
+ const precision = size >= 100 || unit === 0 ? 0 : 2;
1474
+ return `${size.toFixed(precision)}${units[unit]}`;
1475
+ };
1463
1476
  var addRequests = (state, route, count = 1) => {
1464
1477
  const c = toSafeNumber(count);
1465
1478
  if (c <= 0) return;
@@ -1495,7 +1508,8 @@ var addDownloadBytes = (state, route, bytes = 0) => {
1495
1508
  };
1496
1509
  var createTrafficMeter = ({
1497
1510
  enableProxy = false,
1498
- byPassRules = []
1511
+ byPassRules = [],
1512
+ debugMode = false
1499
1513
  } = {}) => {
1500
1514
  const state = createTrafficState();
1501
1515
  const requestMap = /* @__PURE__ */ new Map();
@@ -1507,31 +1521,53 @@ var createTrafficMeter = ({
1507
1521
  byPassRules
1508
1522
  }).route;
1509
1523
  };
1524
+ const debugLog = (message) => {
1525
+ if (!debugMode) return;
1526
+ logger6.info(`[\u9010\u8BF7\u6C42\u8C03\u8BD5] ${message}`);
1527
+ };
1510
1528
  const recordRequest = (params = {}) => {
1511
1529
  const requestId = String(params.requestId || "");
1512
1530
  const request = params.request && typeof params.request === "object" ? params.request : {};
1513
- const route = resolveRoute(request.url || "");
1531
+ const url = String(request.url || "");
1532
+ const route = resolveRoute(url);
1533
+ const resourceType = String(params.type || request.type || "other").trim().toLowerCase() || "other";
1514
1534
  addRequests(state, route, 1);
1515
1535
  const uploadBytes = estimateRequestBytes(request);
1516
1536
  addUploadBytes(state, route, uploadBytes);
1517
1537
  if (requestId) {
1518
1538
  requestMap.set(requestId, {
1519
- route
1539
+ route,
1540
+ resourceType,
1541
+ url,
1542
+ uploadBytes
1520
1543
  });
1521
1544
  }
1545
+ debugLog(
1546
+ `request id=${requestId || "-"} route=${route} type=${resourceType} upload=${formatBytes(uploadBytes)} (${uploadBytes}) method=${String(request.method || "GET")} url=${url || "-"}`
1547
+ );
1522
1548
  };
1523
1549
  const recordLoadingFinished = (params = {}) => {
1524
1550
  const requestId = String(params.requestId || "");
1525
1551
  const requestState = requestId ? requestMap.get(requestId) : null;
1526
1552
  const route = requestState?.route || "direct";
1553
+ const resourceType = requestState?.resourceType || "other";
1527
1554
  const downloadBytes = toSafeNumber(params.encodedDataLength);
1528
1555
  addDownloadBytes(state, route, downloadBytes);
1556
+ const uploadBytes = toSafeNumber(requestState?.uploadBytes);
1557
+ const totalBytes = uploadBytes + downloadBytes;
1558
+ debugLog(
1559
+ `finish id=${requestId || "-"} route=${route} type=${resourceType} download=${formatBytes(downloadBytes)} (${downloadBytes}) total=${formatBytes(totalBytes)} (${totalBytes}) url=${requestState?.url || "-"}`
1560
+ );
1529
1561
  if (requestId) {
1530
1562
  requestMap.delete(requestId);
1531
1563
  }
1532
1564
  };
1533
1565
  const recordRequestFailed = (params = {}) => {
1534
1566
  const requestId = String(params.requestId || "");
1567
+ const requestState = requestId ? requestMap.get(requestId) : null;
1568
+ debugLog(
1569
+ `failed id=${requestId || "-"} route=${requestState?.route || "direct"} type=${requestState?.resourceType || "other"} reason=${String(params.errorText || "").trim() || "unknown"} canceled=${Boolean(params.canceled)} url=${requestState?.url || "-"}`
1570
+ );
1535
1571
  if (requestId) {
1536
1572
  requestMap.delete(requestId);
1537
1573
  }
@@ -1540,30 +1576,39 @@ var createTrafficMeter = ({
1540
1576
  const requestId = String(params.requestId || "");
1541
1577
  if (!requestId) return;
1542
1578
  const route = resolveRoute(params.url || "");
1543
- wsRouteMap.set(requestId, route);
1579
+ wsRouteMap.set(requestId, { route, url: String(params.url || "") });
1544
1580
  };
1545
1581
  const clearWebSocketRoute = (params = {}) => {
1546
1582
  const requestId = String(params.requestId || "");
1547
1583
  if (!requestId) return;
1548
1584
  wsRouteMap.delete(requestId);
1549
1585
  };
1550
- const getWebSocketRoute = (requestId = "") => {
1551
- if (!requestId) return "direct";
1552
- return wsRouteMap.get(requestId) || "direct";
1586
+ const getWebSocketMeta = (requestId = "") => {
1587
+ if (!requestId) return { route: "direct", url: "" };
1588
+ const meta = wsRouteMap.get(requestId);
1589
+ if (!meta || typeof meta !== "object") {
1590
+ return { route: "direct", url: "" };
1591
+ }
1592
+ return {
1593
+ route: ensureRoute(meta.route),
1594
+ url: String(meta.url || "")
1595
+ };
1553
1596
  };
1554
1597
  const recordWebSocketFrameSent = (params = {}) => {
1555
1598
  const requestId = String(params.requestId || "");
1556
- const route = getWebSocketRoute(requestId);
1599
+ const { route, url } = getWebSocketMeta(requestId);
1557
1600
  const payload = params.response && typeof params.response === "object" ? params.response.payloadData : "";
1558
1601
  const bytes = byteLength(payload || "");
1559
1602
  addUploadBytes(state, route, bytes);
1603
+ debugLog(`ws-send id=${requestId || "-"} route=${route} bytes=${formatBytes(bytes)} (${bytes}) url=${url || "-"}`);
1560
1604
  };
1561
1605
  const recordWebSocketFrameReceived = (params = {}) => {
1562
1606
  const requestId = String(params.requestId || "");
1563
- const route = getWebSocketRoute(requestId);
1607
+ const { route, url } = getWebSocketMeta(requestId);
1564
1608
  const payload = params.response && typeof params.response === "object" ? params.response.payloadData : "";
1565
1609
  const bytes = byteLength(payload || "");
1566
1610
  addDownloadBytes(state, route, bytes);
1611
+ debugLog(`ws-recv id=${requestId || "-"} route=${route} bytes=${formatBytes(bytes)} (${bytes}) url=${url || "-"}`);
1567
1612
  };
1568
1613
  const attachPage = async (page) => {
1569
1614
  if (!page || typeof page.context !== "function") return;
@@ -1657,6 +1702,7 @@ var Launch = {
1657
1702
  proxyConfiguration = {},
1658
1703
  log: logOptions = null,
1659
1704
  runInHeadfulMode = false,
1705
+ debugMode = false,
1660
1706
  isRunningOnApify = false,
1661
1707
  launcher = null,
1662
1708
  preNavigationHooks = [],
@@ -1666,7 +1712,8 @@ var Launch = {
1666
1712
  const byPassRules = buildByPassDomainRules(byPassDomains);
1667
1713
  const trafficMeter2 = createTrafficMeter({
1668
1714
  enableProxy: Boolean(launchProxy),
1669
- byPassRules
1715
+ byPassRules,
1716
+ debugMode: Boolean(debugMode)
1670
1717
  });
1671
1718
  setTrafficMeter(trafficMeter2);
1672
1719
  const launchOptions = {
@@ -1684,14 +1731,19 @@ var Launch = {
1684
1731
  logger7.info(
1685
1732
  `[\u4EE3\u7406\u5DF2\u542F\u7528] \u4EE3\u7406\u670D\u52A1=${launchProxy.server} \u76F4\u8FDE\u57DF\u540D=${(byPassDomains || []).join(",")}`
1686
1733
  );
1734
+ 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`);
1687
1735
  } else if (enableByPassLogger && enableProxy && !launchProxy) {
1688
1736
  logger7.info(
1689
1737
  `[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=true \u4F46 proxy_url \u4E3A\u7A7A`
1690
1738
  );
1739
+ 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`);
1691
1740
  } else if (enableByPassLogger && !enableProxy && proxyUrl) {
1692
1741
  logger7.info(
1693
1742
  `[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=false \u4E14 proxy_url \u5DF2\u914D\u7F6E`
1694
1743
  );
1744
+ 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`);
1745
+ } else if (enableByPassLogger) {
1746
+ 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`);
1695
1747
  }
1696
1748
  const onPageCreated = (page) => {
1697
1749
  const recommendedGotoOptions = {