@skrillex1224/playwright-toolkit 2.1.154 → 2.1.156

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
@@ -171,6 +171,20 @@ var ActorInfo = {
171
171
  xurl: []
172
172
  }
173
173
  }),
174
+ lingguang: createActorInfo({
175
+ key: "lingguang",
176
+ name: "\u7075\u5149",
177
+ domain: "www.lingguang.com",
178
+ path: "/",
179
+ share: {
180
+ mode: "response",
181
+ prefix: "https://www.lingguang.com/share/",
182
+ xurl: [
183
+ "/chat/shareChat.json",
184
+ "result"
185
+ ]
186
+ }
187
+ }),
174
188
  doubao: createActorInfo({
175
189
  key: "doubao",
176
190
  name: "\u8C46\u5305",
@@ -321,18 +335,18 @@ var fallbackLog = {
321
335
  error: (...args) => console.error(...args),
322
336
  debug: (...args) => console.debug ? console.debug(...args) : console.log(...args)
323
337
  };
324
- var resolveLogMethod = (logger11, name) => {
325
- if (logger11 && typeof logger11[name] === "function") {
326
- return logger11[name].bind(logger11);
338
+ var resolveLogMethod = (logger12, name) => {
339
+ if (logger12 && typeof logger12[name] === "function") {
340
+ return logger12[name].bind(logger12);
327
341
  }
328
- if (name === "warning" && logger11 && typeof logger11.warn === "function") {
329
- return logger11.warn.bind(logger11);
342
+ if (name === "warning" && logger12 && typeof logger12.warn === "function") {
343
+ return logger12.warn.bind(logger12);
330
344
  }
331
345
  return fallbackLog[name];
332
346
  };
333
347
  var defaultLogger = null;
334
- var setDefaultLogger = (logger11) => {
335
- defaultLogger = logger11;
348
+ var setDefaultLogger = (logger12) => {
349
+ defaultLogger = logger12;
336
350
  };
337
351
  var resolveLogger = (explicitLogger) => {
338
352
  if (explicitLogger && typeof explicitLogger.info === "function") {
@@ -359,8 +373,8 @@ var colorize = (text, color) => {
359
373
  var createBaseLogger = (prefix = "", explicitLogger) => {
360
374
  const name = prefix ? String(prefix) : "";
361
375
  const dispatch = (methodName, icon, message, color) => {
362
- const logger11 = resolveLogger(explicitLogger);
363
- const logFn = resolveLogMethod(logger11, methodName);
376
+ const logger12 = resolveLogger(explicitLogger);
377
+ const logFn = resolveLogMethod(logger12, methodName);
364
378
  const timestamp = colorize(`[${formatTimestamp()}]`, ANSI.gray);
365
379
  const line = formatLine(name, icon, message);
366
380
  const coloredLine = colorize(line, color);
@@ -465,6 +479,20 @@ var CrawlerError = class _CrawlerError extends Error {
465
479
 
466
480
  // src/apify-kit.js
467
481
  var import_serialize_error2 = require("serialize-error");
482
+
483
+ // src/traffic-runtime.js
484
+ var trafficMeter = null;
485
+ var setTrafficMeter = (meter) => {
486
+ trafficMeter = meter || null;
487
+ };
488
+ var getTrafficSnapshot = () => {
489
+ if (!trafficMeter || typeof trafficMeter.snapshot !== "function") {
490
+ return null;
491
+ }
492
+ return trafficMeter.snapshot();
493
+ };
494
+
495
+ // src/apify-kit.js
468
496
  var logger = createInternalLogger("ApifyKit");
469
497
  async function createApifyKit() {
470
498
  let apify = null;
@@ -578,10 +606,12 @@ async function createApifyKit() {
578
606
  * @param {Object} data - 要推送的数据对象
579
607
  */
580
608
  async pushSuccess(data) {
609
+ const traffic = getTrafficSnapshot();
581
610
  await Actor2.pushData({
582
611
  // 固定为0
583
612
  code: Code.Success,
584
613
  status: Status.Success,
614
+ ...traffic ? { traffic } : {},
585
615
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
586
616
  data
587
617
  });
@@ -598,10 +628,12 @@ async function createApifyKit() {
598
628
  const isCrawlerError = CrawlerError.isCrawlerError(error);
599
629
  const code = isCrawlerError ? error.code : Code.UnknownError;
600
630
  const context = isCrawlerError ? error.context : {};
631
+ const traffic = getTrafficSnapshot();
601
632
  await Actor2.pushData({
602
633
  // 如果是 CrawlerError,使用其 code,否则使用默认 Failed code
603
634
  code,
604
635
  status: Status.Failed,
636
+ ...traffic ? { traffic } : {},
605
637
  error: (0, import_serialize_error2.serializeError)(error),
606
638
  meta,
607
639
  context,
@@ -1221,9 +1253,12 @@ var Humanize = {
1221
1253
  }
1222
1254
  };
1223
1255
 
1224
- // src/launch.js
1256
+ // src/proxy-bypass.js
1225
1257
  var import_picomatch = __toESM(require("picomatch"), 1);
1226
- var logger5 = createInternalLogger("Launch");
1258
+ var normalizeByPassDomains = (domains) => {
1259
+ if (!Array.isArray(domains)) return [];
1260
+ return domains.map((item) => String(item || "").trim()).filter(Boolean);
1261
+ };
1227
1262
  var buildByPassDomainRule = (rawPattern) => {
1228
1263
  const pattern = String(rawPattern || "").trim().toLowerCase();
1229
1264
  if (!pattern) return null;
@@ -1238,10 +1273,255 @@ var buildByPassDomainRule = (rawPattern) => {
1238
1273
  test: (hostname) => matcher(String(hostname || "").toLowerCase())
1239
1274
  };
1240
1275
  };
1241
- var normalizeByPassDomains = (domains) => {
1242
- if (!Array.isArray(domains)) return [];
1243
- return domains.map((item) => String(item || "").trim()).filter(Boolean);
1276
+ var buildByPassDomainRules = (domains = []) => {
1277
+ return normalizeByPassDomains(domains).map((domain) => buildByPassDomainRule(domain)).filter(Boolean);
1278
+ };
1279
+ var findMatchedByPassRule = (rules = [], requestUrl = "") => {
1280
+ let hostname = "";
1281
+ try {
1282
+ hostname = new URL(String(requestUrl || "")).hostname.toLowerCase();
1283
+ } catch {
1284
+ return null;
1285
+ }
1286
+ for (const rule of rules) {
1287
+ if (rule && typeof rule.test === "function" && rule.test(hostname)) {
1288
+ return {
1289
+ rule,
1290
+ hostname
1291
+ };
1292
+ }
1293
+ }
1294
+ return {
1295
+ rule: null,
1296
+ hostname
1297
+ };
1298
+ };
1299
+ var resolveRouteByProxy = ({
1300
+ requestUrl = "",
1301
+ enableProxy = false,
1302
+ byPassRules = []
1303
+ }) => {
1304
+ if (!enableProxy) {
1305
+ return { route: "direct", matchedRule: null, hostname: "" };
1306
+ }
1307
+ const matched = findMatchedByPassRule(byPassRules, requestUrl);
1308
+ if (!matched) {
1309
+ return { route: "proxy", matchedRule: null, hostname: "" };
1310
+ }
1311
+ if (matched.rule) {
1312
+ return { route: "direct", matchedRule: matched.rule, hostname: matched.hostname };
1313
+ }
1314
+ return { route: "proxy", matchedRule: null, hostname: matched.hostname };
1315
+ };
1316
+
1317
+ // src/traffic-meter.js
1318
+ var logger5 = createInternalLogger("TrafficMeter");
1319
+ var encoder = new TextEncoder();
1320
+ var toSafeNumber = (value) => {
1321
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) return 0;
1322
+ return Math.round(value);
1323
+ };
1324
+ var byteLength = (value) => {
1325
+ const text = String(value || "");
1326
+ if (!text) return 0;
1327
+ try {
1328
+ return encoder.encode(text).length;
1329
+ } catch {
1330
+ return text.length;
1331
+ }
1244
1332
  };
1333
+ var normalizeHeaderValue = (value) => {
1334
+ if (Array.isArray(value)) return value.join(",");
1335
+ if (value === null || value === void 0) return "";
1336
+ return String(value);
1337
+ };
1338
+ var estimateRequestBytes = (request = {}) => {
1339
+ const method = String(request.method || "GET");
1340
+ const url = String(request.url || "");
1341
+ let total = byteLength(`${method} ${url} HTTP/1.1\r
1342
+ `);
1343
+ const headers = request.headers && typeof request.headers === "object" ? request.headers : {};
1344
+ Object.entries(headers).forEach(([key, value]) => {
1345
+ total += byteLength(`${key}: ${normalizeHeaderValue(value)}\r
1346
+ `);
1347
+ });
1348
+ total += 2;
1349
+ if (typeof request.postData === "string" && request.postData) {
1350
+ total += byteLength(request.postData);
1351
+ }
1352
+ return total;
1353
+ };
1354
+ var createTrafficState = () => ({
1355
+ totalRequests: 0,
1356
+ proxyRequests: 0,
1357
+ directRequests: 0,
1358
+ totalUploadBytes: 0,
1359
+ proxyUploadBytes: 0,
1360
+ directUploadBytes: 0,
1361
+ totalDownloadBytes: 0,
1362
+ proxyDownloadBytes: 0,
1363
+ directDownloadBytes: 0
1364
+ });
1365
+ var ensureRoute = (route) => route === "proxy" ? "proxy" : "direct";
1366
+ var addRequests = (state, route, count = 1) => {
1367
+ const c = toSafeNumber(count);
1368
+ if (c <= 0) return;
1369
+ const normalizedRoute = ensureRoute(route);
1370
+ state.totalRequests += c;
1371
+ if (normalizedRoute === "proxy") {
1372
+ state.proxyRequests += c;
1373
+ return;
1374
+ }
1375
+ state.directRequests += c;
1376
+ };
1377
+ var addUploadBytes = (state, route, bytes = 0) => {
1378
+ const b = toSafeNumber(bytes);
1379
+ if (b <= 0) return;
1380
+ const normalizedRoute = ensureRoute(route);
1381
+ state.totalUploadBytes += b;
1382
+ if (normalizedRoute === "proxy") {
1383
+ state.proxyUploadBytes += b;
1384
+ return;
1385
+ }
1386
+ state.directUploadBytes += b;
1387
+ };
1388
+ var addDownloadBytes = (state, route, bytes = 0) => {
1389
+ const b = toSafeNumber(bytes);
1390
+ if (b <= 0) return;
1391
+ const normalizedRoute = ensureRoute(route);
1392
+ state.totalDownloadBytes += b;
1393
+ if (normalizedRoute === "proxy") {
1394
+ state.proxyDownloadBytes += b;
1395
+ return;
1396
+ }
1397
+ state.directDownloadBytes += b;
1398
+ };
1399
+ var createTrafficMeter = ({
1400
+ enableProxy = false,
1401
+ byPassRules = []
1402
+ } = {}) => {
1403
+ const state = createTrafficState();
1404
+ const requestMap = /* @__PURE__ */ new Map();
1405
+ const wsRouteMap = /* @__PURE__ */ new Map();
1406
+ const resolveRoute = (url = "") => {
1407
+ return resolveRouteByProxy({
1408
+ requestUrl: url,
1409
+ enableProxy,
1410
+ byPassRules
1411
+ }).route;
1412
+ };
1413
+ const recordRequest = (params = {}) => {
1414
+ const requestId = String(params.requestId || "");
1415
+ const request = params.request && typeof params.request === "object" ? params.request : {};
1416
+ const route = resolveRoute(request.url || "");
1417
+ addRequests(state, route, 1);
1418
+ const uploadBytes = estimateRequestBytes(request);
1419
+ addUploadBytes(state, route, uploadBytes);
1420
+ if (requestId) {
1421
+ requestMap.set(requestId, {
1422
+ route
1423
+ });
1424
+ }
1425
+ };
1426
+ const recordLoadingFinished = (params = {}) => {
1427
+ const requestId = String(params.requestId || "");
1428
+ const requestState = requestId ? requestMap.get(requestId) : null;
1429
+ const route = requestState?.route || "direct";
1430
+ const downloadBytes = toSafeNumber(params.encodedDataLength);
1431
+ addDownloadBytes(state, route, downloadBytes);
1432
+ if (requestId) {
1433
+ requestMap.delete(requestId);
1434
+ }
1435
+ };
1436
+ const recordRequestFailed = (params = {}) => {
1437
+ const requestId = String(params.requestId || "");
1438
+ if (requestId) {
1439
+ requestMap.delete(requestId);
1440
+ }
1441
+ };
1442
+ const bindWebSocketRoute = (params = {}) => {
1443
+ const requestId = String(params.requestId || "");
1444
+ if (!requestId) return;
1445
+ const route = resolveRoute(params.url || "");
1446
+ wsRouteMap.set(requestId, route);
1447
+ };
1448
+ const clearWebSocketRoute = (params = {}) => {
1449
+ const requestId = String(params.requestId || "");
1450
+ if (!requestId) return;
1451
+ wsRouteMap.delete(requestId);
1452
+ };
1453
+ const getWebSocketRoute = (requestId = "") => {
1454
+ if (!requestId) return "direct";
1455
+ return wsRouteMap.get(requestId) || "direct";
1456
+ };
1457
+ const recordWebSocketFrameSent = (params = {}) => {
1458
+ const requestId = String(params.requestId || "");
1459
+ const route = getWebSocketRoute(requestId);
1460
+ const payload = params.response && typeof params.response === "object" ? params.response.payloadData : "";
1461
+ const bytes = byteLength(payload || "");
1462
+ addUploadBytes(state, route, bytes);
1463
+ };
1464
+ const recordWebSocketFrameReceived = (params = {}) => {
1465
+ const requestId = String(params.requestId || "");
1466
+ const route = getWebSocketRoute(requestId);
1467
+ const payload = params.response && typeof params.response === "object" ? params.response.payloadData : "";
1468
+ const bytes = byteLength(payload || "");
1469
+ addDownloadBytes(state, route, bytes);
1470
+ };
1471
+ const attachPage = async (page) => {
1472
+ if (!page || typeof page.context !== "function") return;
1473
+ try {
1474
+ const context = page.context();
1475
+ if (!context || typeof context.newCDPSession !== "function") {
1476
+ return;
1477
+ }
1478
+ const session = await context.newCDPSession(page);
1479
+ await session.send("Network.enable");
1480
+ session.on("Network.requestWillBeSent", recordRequest);
1481
+ session.on("Network.loadingFinished", recordLoadingFinished);
1482
+ session.on("Network.loadingFailed", recordRequestFailed);
1483
+ session.on("Network.webSocketCreated", bindWebSocketRoute);
1484
+ session.on("Network.webSocketClosed", clearWebSocketRoute);
1485
+ session.on("Network.webSocketFrameSent", recordWebSocketFrameSent);
1486
+ session.on("Network.webSocketFrameReceived", recordWebSocketFrameReceived);
1487
+ } catch (error) {
1488
+ logger5.warn(`CDP \u76D1\u542C\u6CE8\u518C\u5931\u8D25: ${error?.message || error}`);
1489
+ }
1490
+ };
1491
+ const snapshot = () => {
1492
+ const totalBytes = state.totalUploadBytes + state.totalDownloadBytes;
1493
+ const proxyBytes = state.proxyUploadBytes + state.proxyDownloadBytes;
1494
+ const directBytes = state.directUploadBytes + state.directDownloadBytes;
1495
+ return {
1496
+ meter: "cdp",
1497
+ totalRequests: state.totalRequests,
1498
+ proxyRequests: state.proxyRequests,
1499
+ directRequests: state.directRequests,
1500
+ totalUploadBytes: state.totalUploadBytes,
1501
+ proxyUploadBytes: state.proxyUploadBytes,
1502
+ directUploadBytes: state.directUploadBytes,
1503
+ totalDownloadBytes: state.totalDownloadBytes,
1504
+ proxyDownloadBytes: state.proxyDownloadBytes,
1505
+ directDownloadBytes: state.directDownloadBytes,
1506
+ totalBytes,
1507
+ proxyBytes,
1508
+ directBytes
1509
+ };
1510
+ };
1511
+ const reset = () => {
1512
+ Object.assign(state, createTrafficState());
1513
+ requestMap.clear();
1514
+ wsRouteMap.clear();
1515
+ };
1516
+ return {
1517
+ attachPage,
1518
+ snapshot,
1519
+ reset
1520
+ };
1521
+ };
1522
+
1523
+ // src/launch.js
1524
+ var logger6 = createInternalLogger("Launch");
1245
1525
  var resolveProxyLaunchOptions = (proxyConfiguration = {}) => {
1246
1526
  const config = proxyConfiguration && typeof proxyConfiguration === "object" && !Array.isArray(proxyConfiguration) ? proxyConfiguration : {};
1247
1527
  const proxyUrl = String(config.proxy_url || "").trim();
@@ -1275,6 +1555,12 @@ var Launch = {
1275
1555
  log: logOptions = null
1276
1556
  } = normalizedOptions;
1277
1557
  const { launchProxy, byPassDomains, enableProxy, proxyUrl } = resolveProxyLaunchOptions(proxyConfiguration);
1558
+ const byPassRules = buildByPassDomainRules(byPassDomains);
1559
+ const trafficMeter2 = createTrafficMeter({
1560
+ enableProxy: Boolean(launchProxy),
1561
+ byPassRules
1562
+ });
1563
+ setTrafficMeter(trafficMeter2);
1278
1564
  const launchOptions = {
1279
1565
  args: [
1280
1566
  ...AntiCheat.getLaunchArgs(),
@@ -1287,15 +1573,15 @@ var Launch = {
1287
1573
  }
1288
1574
  const enableByPassLogger = Boolean(logOptions && logOptions.enable);
1289
1575
  if (enableByPassLogger && launchProxy) {
1290
- logger5.info(
1576
+ logger6.info(
1291
1577
  `[\u4EE3\u7406\u5DF2\u542F\u7528] \u4EE3\u7406\u670D\u52A1=${launchProxy.server} \u76F4\u8FDE\u57DF\u540D=${(byPassDomains || []).join(",")}`
1292
1578
  );
1293
1579
  } else if (enableByPassLogger && enableProxy && !launchProxy) {
1294
- logger5.info(
1580
+ logger6.info(
1295
1581
  `[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=true \u4F46 proxy_url \u4E3A\u7A7A`
1296
1582
  );
1297
1583
  } else if (enableByPassLogger && !enableProxy && proxyUrl) {
1298
- logger5.info(
1584
+ logger6.info(
1299
1585
  `[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=false \u4E14 proxy_url \u5DF2\u914D\u7F6E`
1300
1586
  );
1301
1587
  }
@@ -1303,21 +1589,17 @@ var Launch = {
1303
1589
  const recommendedGotoOptions = {
1304
1590
  waitUntil: "domcontentloaded"
1305
1591
  };
1592
+ if (page && typeof page.on === "function") {
1593
+ trafficMeter2.attachPage(page);
1594
+ }
1306
1595
  if (!enableByPassLogger || byPassDomains.length === 0 || !page || typeof page.on !== "function") {
1307
1596
  return recommendedGotoOptions;
1308
1597
  }
1309
- const byPassRules = byPassDomains.map((domain) => buildByPassDomainRule(domain)).filter(Boolean);
1310
1598
  const requestHandler = (req) => {
1311
1599
  const requestUrl = req.url();
1312
- let hostname = "";
1313
- try {
1314
- hostname = new URL(requestUrl).hostname.toLowerCase();
1315
- } catch {
1316
- return;
1317
- }
1318
- const matchedRule = byPassRules.find((rule) => rule.test(hostname));
1319
- if (!matchedRule) return;
1320
- logger5.info(`[\u76F4\u8FDE\u547D\u4E2D] \u89C4\u5219=${matchedRule.pattern} \u57DF\u540D=${hostname} \u8D44\u6E90\u7C7B\u578B=${req.resourceType()} \u65B9\u6CD5=${req.method()} \u5730\u5740=${requestUrl}`);
1600
+ const matched = findMatchedByPassRule(byPassRules, requestUrl);
1601
+ if (!matched || !matched.rule) return;
1602
+ logger6.info(`[\u76F4\u8FDE\u547D\u4E2D] \u89C4\u5219=${matched.rule.pattern} \u57DF\u540D=${matched.hostname} \u8D44\u6E90\u7C7B\u578B=${req.resourceType()} \u65B9\u6CD5=${req.method()} \u5730\u5740=${requestUrl}`);
1321
1603
  };
1322
1604
  page.on("request", requestHandler);
1323
1605
  return recommendedGotoOptions;
@@ -1336,7 +1618,7 @@ var Launch = {
1336
1618
  // src/live-view.js
1337
1619
  var import_express = __toESM(require("express"), 1);
1338
1620
  var import_apify = require("apify");
1339
- var logger6 = createInternalLogger("LiveView");
1621
+ var logger7 = createInternalLogger("LiveView");
1340
1622
  async function startLiveViewServer(liveViewKey) {
1341
1623
  const app = (0, import_express.default)();
1342
1624
  app.get("/", async (req, res) => {
@@ -1361,13 +1643,13 @@ async function startLiveViewServer(liveViewKey) {
1361
1643
  </html>
1362
1644
  `);
1363
1645
  } catch (error) {
1364
- logger6.fail("Live View Server", error);
1646
+ logger7.fail("Live View Server", error);
1365
1647
  res.status(500).send(`\u65E0\u6CD5\u52A0\u8F7D\u5C4F\u5E55\u622A\u56FE: ${error.message}`);
1366
1648
  }
1367
1649
  });
1368
1650
  const port = process.env.APIFY_CONTAINER_PORT || 4321;
1369
1651
  app.listen(port, () => {
1370
- logger6.success("startLiveViewServer", `\u76D1\u542C\u7AEF\u53E3 ${port}`);
1652
+ logger7.success("startLiveViewServer", `\u76D1\u542C\u7AEF\u53E3 ${port}`);
1371
1653
  });
1372
1654
  }
1373
1655
  async function takeLiveScreenshot(liveViewKey, page, logMessage) {
@@ -1375,10 +1657,10 @@ async function takeLiveScreenshot(liveViewKey, page, logMessage) {
1375
1657
  const buffer = await page.screenshot({ type: "png" });
1376
1658
  await import_apify.Actor.setValue(liveViewKey, buffer, { contentType: "image/png" });
1377
1659
  if (logMessage) {
1378
- logger6.info(`(\u622A\u56FE): ${logMessage}`);
1660
+ logger7.info(`(\u622A\u56FE): ${logMessage}`);
1379
1661
  }
1380
1662
  } catch (e) {
1381
- logger6.warn(`\u65E0\u6CD5\u6355\u83B7 Live View \u5C4F\u5E55\u622A\u56FE: ${e.message}`);
1663
+ logger7.warn(`\u65E0\u6CD5\u6355\u83B7 Live View \u5C4F\u5E55\u622A\u56FE: ${e.message}`);
1382
1664
  }
1383
1665
  }
1384
1666
  var useLiveView = (liveViewKey = PresetOfLiveViewKey) => {
@@ -1397,7 +1679,7 @@ var LiveView = {
1397
1679
 
1398
1680
  // src/captcha-monitor.js
1399
1681
  var import_uuid = require("uuid");
1400
- var logger7 = createInternalLogger("Captcha");
1682
+ var logger8 = createInternalLogger("Captcha");
1401
1683
  function useCaptchaMonitor(page, options) {
1402
1684
  const { domSelector, urlPattern, onDetected } = options;
1403
1685
  if (!domSelector && !urlPattern) {
@@ -1470,7 +1752,7 @@ function useCaptchaMonitor(page, options) {
1470
1752
  };
1471
1753
  })();
1472
1754
  }, { selector: domSelector, callbackName: exposedFunctionName, cleanerName });
1473
- logger7.success("useCaptchaMonitor", `DOM \u76D1\u63A7\u5DF2\u542F\u7528: ${domSelector}`);
1755
+ logger8.success("useCaptchaMonitor", `DOM \u76D1\u63A7\u5DF2\u542F\u7528: ${domSelector}`);
1474
1756
  cleanupFns.push(async () => {
1475
1757
  try {
1476
1758
  await page.evaluate((name) => {
@@ -1493,14 +1775,14 @@ function useCaptchaMonitor(page, options) {
1493
1775
  }
1494
1776
  };
1495
1777
  page.on("framenavigated", frameHandler);
1496
- logger7.success("useCaptchaMonitor", `URL \u76D1\u63A7\u5DF2\u542F\u7528: ${urlPattern}`);
1778
+ logger8.success("useCaptchaMonitor", `URL \u76D1\u63A7\u5DF2\u542F\u7528: ${urlPattern}`);
1497
1779
  cleanupFns.push(async () => {
1498
1780
  page.off("framenavigated", frameHandler);
1499
1781
  });
1500
1782
  }
1501
1783
  return {
1502
1784
  stop: async () => {
1503
- logger7.info("useCaptchaMonitor", "\u6B63\u5728\u505C\u6B62\u76D1\u63A7...");
1785
+ logger8.info("useCaptchaMonitor", "\u6B63\u5728\u505C\u6B62\u76D1\u63A7...");
1504
1786
  for (const fn of cleanupFns) {
1505
1787
  await fn();
1506
1788
  }
@@ -1515,7 +1797,7 @@ var Captcha = {
1515
1797
  // src/sse.js
1516
1798
  var import_https = __toESM(require("https"), 1);
1517
1799
  var import_url = require("url");
1518
- var logger8 = createInternalLogger("Sse");
1800
+ var logger9 = createInternalLogger("Sse");
1519
1801
  var Sse = {
1520
1802
  /**
1521
1803
  * 解析 SSE 流文本
@@ -1534,11 +1816,11 @@ var Sse = {
1534
1816
  events.push(JSON.parse(jsonContent));
1535
1817
  }
1536
1818
  } catch (e) {
1537
- logger8.debug("parseSseStream", `JSON \u89E3\u6790\u5931\u8D25: ${e.message}, line: ${line.substring(0, 100)}...`);
1819
+ logger9.debug("parseSseStream", `JSON \u89E3\u6790\u5931\u8D25: ${e.message}, line: ${line.substring(0, 100)}...`);
1538
1820
  }
1539
1821
  }
1540
1822
  }
1541
- logger8.success("parseSseStream", `\u89E3\u6790\u5B8C\u6210, events \u6570\u91CF: ${events.length}`);
1823
+ logger9.success("parseSseStream", `\u89E3\u6790\u5B8C\u6210, events \u6570\u91CF: ${events.length}`);
1542
1824
  return events;
1543
1825
  },
1544
1826
  /**
@@ -1588,7 +1870,7 @@ var Sse = {
1588
1870
  if (!autoUnroute) return;
1589
1871
  if (unrouteRequested) return;
1590
1872
  unrouteRequested = true;
1591
- logger8.info("[MITM] autoUnroute: \u53D6\u6D88\u540E\u7EED\u62E6\u622A");
1873
+ logger9.info("[MITM] autoUnroute: \u53D6\u6D88\u540E\u7EED\u62E6\u622A");
1592
1874
  page.unroute(urlPattern, routeHandler).catch(() => {
1593
1875
  });
1594
1876
  };
@@ -1608,19 +1890,19 @@ var Sse = {
1608
1890
  };
1609
1891
  const routeHandler = async (route) => {
1610
1892
  if (firstMatchOnly && hasMatchedOnce) {
1611
- logger8.info(`[MITM] firstMatchOnly: \u653E\u884C\u540E\u7EED\u8BF7\u6C42: ${route.request().url()}`);
1893
+ logger9.info(`[MITM] firstMatchOnly: \u653E\u884C\u540E\u7EED\u8BF7\u6C42: ${route.request().url()}`);
1612
1894
  route.continue().catch(() => {
1613
1895
  });
1614
1896
  return;
1615
1897
  }
1616
1898
  if (firstMatchOnly && !hasMatchedOnce) {
1617
1899
  hasMatchedOnce = true;
1618
- logger8.info("[MITM] firstMatchOnly: \u547D\u4E2D\u9996\u4E2A\u8BF7\u6C42\uFF0C\u53D6\u6D88\u540E\u7EED\u62E6\u622A");
1900
+ logger9.info("[MITM] firstMatchOnly: \u547D\u4E2D\u9996\u4E2A\u8BF7\u6C42\uFF0C\u53D6\u6D88\u540E\u7EED\u62E6\u622A");
1619
1901
  page.unroute(urlPattern, routeHandler).catch(() => {
1620
1902
  });
1621
1903
  }
1622
1904
  const request = route.request();
1623
- logger8.info(`[MITM] \u5DF2\u62E6\u622A\u8BF7\u6C42: ${request.url()}`);
1905
+ logger9.info(`[MITM] \u5DF2\u62E6\u622A\u8BF7\u6C42: ${request.url()}`);
1624
1906
  try {
1625
1907
  const headers = await request.allHeaders();
1626
1908
  const postData = request.postData();
@@ -1645,7 +1927,7 @@ var Sse = {
1645
1927
  clearTimeout(initialTimer);
1646
1928
  initialTimer = null;
1647
1929
  }
1648
- logger8.debug("[Intercept] \u5DF2\u63A5\u6536\u521D\u59CB\u6570\u636E");
1930
+ logger9.debug("[Intercept] \u5DF2\u63A5\u6536\u521D\u59CB\u6570\u636E");
1649
1931
  }
1650
1932
  chunks.push(chunk);
1651
1933
  const textChunk = chunk.toString("utf-8");
@@ -1654,18 +1936,18 @@ var Sse = {
1654
1936
  try {
1655
1937
  onData(textChunk, safeResolve, accumulatedText);
1656
1938
  } catch (e) {
1657
- logger8.fail(`onData \u9519\u8BEF`, e);
1939
+ logger9.fail(`onData \u9519\u8BEF`, e);
1658
1940
  }
1659
1941
  }
1660
1942
  });
1661
1943
  res.on("end", () => {
1662
- logger8.info("[MITM] \u4E0A\u6E38\u54CD\u5E94\u7ED3\u675F");
1944
+ logger9.info("[MITM] \u4E0A\u6E38\u54CD\u5E94\u7ED3\u675F");
1663
1945
  clearAllTimers();
1664
1946
  if (onEnd) {
1665
1947
  try {
1666
1948
  onEnd(accumulatedText, safeResolve);
1667
1949
  } catch (e) {
1668
- logger8.fail(`onEnd \u9519\u8BEF`, e);
1950
+ logger9.fail(`onEnd \u9519\u8BEF`, e);
1669
1951
  }
1670
1952
  } else if (!onData) {
1671
1953
  safeResolve(accumulatedText);
@@ -1746,7 +2028,7 @@ var Sse = {
1746
2028
 
1747
2029
  // src/mutation.js
1748
2030
  var import_uuid2 = require("uuid");
1749
- var logger9 = createInternalLogger("Mutation");
2031
+ var logger10 = createInternalLogger("Mutation");
1750
2032
  var MUTATION_MONITOR_MODE = Object.freeze({
1751
2033
  Added: "added",
1752
2034
  Changed: "changed",
@@ -1779,14 +2061,14 @@ var Mutation = {
1779
2061
  const stableTime = options.stableTime ?? 5 * 1e3;
1780
2062
  const timeout = options.timeout ?? 120 * 1e3;
1781
2063
  const onMutation = options.onMutation;
1782
- logger9.start("waitForStable", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, \u7A33\u5B9A\u65F6\u95F4=${stableTime}ms`);
2064
+ logger10.start("waitForStable", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, \u7A33\u5B9A\u65F6\u95F4=${stableTime}ms`);
1783
2065
  if (initialTimeout > 0) {
1784
2066
  const selectorQuery = selectorList.join(",");
1785
2067
  try {
1786
2068
  await page.waitForSelector(selectorQuery, { timeout: initialTimeout });
1787
- logger9.info(`waitForStable \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
2069
+ logger10.info(`waitForStable \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
1788
2070
  } catch (e) {
1789
- logger9.warning(`waitForStable \u521D\u59CB\u7B49\u5F85\u8D85\u65F6 (${initialTimeout}ms): ${selectorQuery}`);
2071
+ logger10.warning(`waitForStable \u521D\u59CB\u7B49\u5F85\u8D85\u65F6 (${initialTimeout}ms): ${selectorQuery}`);
1790
2072
  throw e;
1791
2073
  }
1792
2074
  }
@@ -1802,7 +2084,7 @@ var Mutation = {
1802
2084
  return "__CONTINUE__";
1803
2085
  }
1804
2086
  });
1805
- logger9.info("waitForStable \u5DF2\u542F\u7528 onMutation \u56DE\u8C03");
2087
+ logger10.info("waitForStable \u5DF2\u542F\u7528 onMutation \u56DE\u8C03");
1806
2088
  } catch (e) {
1807
2089
  }
1808
2090
  }
@@ -1917,9 +2199,9 @@ var Mutation = {
1917
2199
  { selectorList, stableTime, timeout, callbackName, hasCallback: !!onMutation }
1918
2200
  );
1919
2201
  if (result.mutationCount === 0 && result.stableTime === 0) {
1920
- logger9.warning("waitForStable \u672A\u627E\u5230\u53EF\u76D1\u63A7\u7684\u5143\u7D20");
2202
+ logger10.warning("waitForStable \u672A\u627E\u5230\u53EF\u76D1\u63A7\u7684\u5143\u7D20");
1921
2203
  }
1922
- logger9.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316${result.wasPaused ? ", \u66FE\u6682\u505C\u8BA1\u65F6" : ""}`);
2204
+ logger10.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316${result.wasPaused ? ", \u66FE\u6682\u505C\u8BA1\u65F6" : ""}`);
1923
2205
  return result;
1924
2206
  },
1925
2207
  /**
@@ -1939,7 +2221,7 @@ var Mutation = {
1939
2221
  const onMutation = options.onMutation;
1940
2222
  const rawMode = String(options.mode || MUTATION_MONITOR_MODE.Added).toLowerCase();
1941
2223
  const mode = [MUTATION_MONITOR_MODE.Added, MUTATION_MONITOR_MODE.Changed, MUTATION_MONITOR_MODE.All].includes(rawMode) ? rawMode : MUTATION_MONITOR_MODE.Added;
1942
- logger9.start("useMonitor", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, mode=${mode}`);
2224
+ logger10.start("useMonitor", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, mode=${mode}`);
1943
2225
  const monitorKey = generateKey("pk_mon");
1944
2226
  const callbackName = generateKey("pk_mon_cb");
1945
2227
  const cleanerName = generateKey("pk_mon_clean");
@@ -2082,7 +2364,7 @@ var Mutation = {
2082
2364
  return total;
2083
2365
  };
2084
2366
  }, { selectorList, monitorKey, callbackName, cleanerName, hasCallback: !!onMutation, mode });
2085
- logger9.success("useMonitor", "\u76D1\u63A7\u5668\u5DF2\u542F\u52A8");
2367
+ logger10.success("useMonitor", "\u76D1\u63A7\u5668\u5DF2\u542F\u52A8");
2086
2368
  return {
2087
2369
  stop: async () => {
2088
2370
  let totalMutations = 0;
@@ -2095,7 +2377,7 @@ var Mutation = {
2095
2377
  }, cleanerName);
2096
2378
  } catch (e) {
2097
2379
  }
2098
- logger9.success("useMonitor.stop", `\u76D1\u63A7\u5DF2\u505C\u6B62, \u5171 ${totalMutations} \u6B21\u53D8\u5316`);
2380
+ logger10.success("useMonitor.stop", `\u76D1\u63A7\u5DF2\u505C\u6B62, \u5171 ${totalMutations} \u6B21\u53D8\u5316`);
2099
2381
  return { totalMutations };
2100
2382
  }
2101
2383
  };
@@ -2964,7 +3246,7 @@ var createTemplateLogger = (baseLogger = createBaseLogger()) => {
2964
3246
  };
2965
3247
  var getDefaultBaseLogger = () => createBaseLogger("");
2966
3248
  var Logger = {
2967
- setLogger: (logger11) => setDefaultLogger(logger11),
3249
+ setLogger: (logger12) => setDefaultLogger(logger12),
2968
3250
  info: (message) => getDefaultBaseLogger().info(message),
2969
3251
  success: (message) => getDefaultBaseLogger().success(message),
2970
3252
  warning: (message) => getDefaultBaseLogger().warning(message),
@@ -2972,15 +3254,15 @@ var Logger = {
2972
3254
  error: (message) => getDefaultBaseLogger().error(message),
2973
3255
  debug: (message) => getDefaultBaseLogger().debug(message),
2974
3256
  start: (message) => getDefaultBaseLogger().start(message),
2975
- useTemplate: (logger11) => {
2976
- if (logger11) return createTemplateLogger(createBaseLogger("", logger11));
3257
+ useTemplate: (logger12) => {
3258
+ if (logger12) return createTemplateLogger(createBaseLogger("", logger12));
2977
3259
  return createTemplateLogger();
2978
3260
  }
2979
3261
  };
2980
3262
 
2981
3263
  // src/share.js
2982
3264
  var import_delay2 = __toESM(require("delay"), 1);
2983
- var logger10 = createInternalLogger("Share");
3265
+ var logger11 = createInternalLogger("Share");
2984
3266
  var DEFAULT_TIMEOUT_MS = 50 * 1e3;
2985
3267
  var DEFAULT_PAYLOAD_SNAPSHOT_MAX_LEN = 500;
2986
3268
  var DEFAULT_POLL_INTERVAL_MS = 120;
@@ -3100,7 +3382,7 @@ var createDomShareMonitor = async (page, options = {}) => {
3100
3382
  const onMatch = typeof options.onMatch === "function" ? options.onMatch : null;
3101
3383
  const onTelemetry = typeof options.onTelemetry === "function" ? options.onTelemetry : null;
3102
3384
  let matched = false;
3103
- logger10.info(`DOM \u76D1\u542C\u51C6\u5907\u6302\u8F7D: selectors=${toJsonInline(selectors, 120)}, mode=${mode}`);
3385
+ logger11.info(`DOM \u76D1\u542C\u51C6\u5907\u6302\u8F7D: selectors=${toJsonInline(selectors, 120)}, mode=${mode}`);
3104
3386
  const monitor = await Mutation.useMonitor(page, selectors, {
3105
3387
  mode,
3106
3388
  onMutation: (context = {}) => {
@@ -3118,12 +3400,12 @@ ${text}`;
3118
3400
  });
3119
3401
  }
3120
3402
  if (mutationCount <= 5 || mutationCount % 50 === 0) {
3121
- logger10.info(`DOM \u53D8\u5316\u5DF2\u6355\u83B7: mutationCount=${mutationCount}, mutationNodes=${mutationNodes.length}`);
3403
+ logger11.info(`DOM \u53D8\u5316\u5DF2\u6355\u83B7: mutationCount=${mutationCount}, mutationNodes=${mutationNodes.length}`);
3122
3404
  }
3123
3405
  const [candidate] = Utils.parseLinks(rawDom, { prefix }) || [];
3124
3406
  if (!candidate) return;
3125
3407
  matched = true;
3126
- logger10.success("captureLink.domHit", `DOM \u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: mutationCount=${mutationCount}, link=${candidate}`);
3408
+ logger11.success("captureLink.domHit", `DOM \u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: mutationCount=${mutationCount}, link=${candidate}`);
3127
3409
  if (onMatch) {
3128
3410
  onMatch({
3129
3411
  link: candidate,
@@ -3139,7 +3421,7 @@ ${text}`;
3139
3421
  return {
3140
3422
  stop: async () => {
3141
3423
  const result = await monitor.stop();
3142
- logger10.info(`DOM \u76D1\u542C\u5DF2\u505C\u6B62: totalMutations=${result?.totalMutations || 0}`);
3424
+ logger11.info(`DOM \u76D1\u542C\u5DF2\u505C\u6B62: totalMutations=${result?.totalMutations || 0}`);
3143
3425
  return result;
3144
3426
  }
3145
3427
  };
@@ -3179,8 +3461,8 @@ var Share = {
3179
3461
  if (share.mode === "response" && apiMatchers.length === 0) {
3180
3462
  throw new Error("Share.captureLink requires share.xurl[0] api matcher when mode=response");
3181
3463
  }
3182
- logger10.start("captureLink", `mode=${share.mode}, timeoutMs=${timeoutMs}, prefix=${share.prefix}`);
3183
- logger10.info(`captureLink \u914D\u7F6E: xurl=${toJsonInline(share.xurl)}, domMode=${domMode}, domSelectors=${toJsonInline(domSelectors, 120)}`);
3464
+ logger11.start("captureLink", `mode=${share.mode}, timeoutMs=${timeoutMs}, prefix=${share.prefix}`);
3465
+ logger11.info(`captureLink \u914D\u7F6E: xurl=${toJsonInline(share.xurl)}, domMode=${domMode}, domSelectors=${toJsonInline(domSelectors, 120)}`);
3184
3466
  const stats = {
3185
3467
  actionTimedOut: false,
3186
3468
  domMutationCount: 0,
@@ -3205,7 +3487,7 @@ var Share = {
3205
3487
  link: validated,
3206
3488
  payloadText: String(payloadText || "")
3207
3489
  };
3208
- logger10.info(`\u5019\u9009\u94FE\u63A5\u5DF2\u786E\u8BA4: source=${source}, link=${validated}`);
3490
+ logger11.info(`\u5019\u9009\u94FE\u63A5\u5DF2\u786E\u8BA4: source=${source}, link=${validated}`);
3209
3491
  return true;
3210
3492
  };
3211
3493
  const resolveResponseCandidate = (responseText) => {
@@ -3240,7 +3522,7 @@ var Share = {
3240
3522
  try {
3241
3523
  await monitor.stop();
3242
3524
  } catch (error) {
3243
- logger10.warning(`\u505C\u6B62 DOM \u76D1\u542C\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`);
3525
+ logger11.warning(`\u505C\u6B62 DOM \u76D1\u542C\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`);
3244
3526
  }
3245
3527
  };
3246
3528
  const onResponse = async (response) => {
@@ -3253,29 +3535,29 @@ var Share = {
3253
3535
  stats.responseSampleUrls.push(url);
3254
3536
  }
3255
3537
  if (stats.responseObserved <= 5) {
3256
- logger10.info(`\u63A5\u53E3\u54CD\u5E94\u91C7\u6837(${stats.responseObserved}): ${url}`);
3538
+ logger11.info(`\u63A5\u53E3\u54CD\u5E94\u91C7\u6837(${stats.responseObserved}): ${url}`);
3257
3539
  }
3258
3540
  if (!apiMatchers.some((matcher) => url.includes(matcher))) return;
3259
3541
  stats.responseMatched += 1;
3260
3542
  stats.lastMatchedUrl = url;
3261
- logger10.info(`\u63A5\u53E3\u547D\u4E2D\u5339\u914D(${stats.responseMatched}): ${url}`);
3543
+ logger11.info(`\u63A5\u53E3\u547D\u4E2D\u5339\u914D(${stats.responseMatched}): ${url}`);
3262
3544
  const text = await response.text();
3263
3545
  const hit = resolveResponseCandidate(text);
3264
3546
  if (!hit?.link) {
3265
3547
  if (stats.responseMatched <= 3) {
3266
- logger10.info(`\u63A5\u53E3\u89E3\u6790\u5B8C\u6210\u4F46\u672A\u63D0\u53D6\u5230\u5206\u4EAB\u94FE\u63A5: payloadSize=${text.length}`);
3548
+ logger11.info(`\u63A5\u53E3\u89E3\u6790\u5B8C\u6210\u4F46\u672A\u63D0\u53D6\u5230\u5206\u4EAB\u94FE\u63A5: payloadSize=${text.length}`);
3267
3549
  }
3268
3550
  return;
3269
3551
  }
3270
3552
  stats.responseResolved += 1;
3271
- logger10.success("captureLink.responseHit", `\u63A5\u53E3\u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: url=${url}, link=${hit.link}`);
3553
+ logger11.success("captureLink.responseHit", `\u63A5\u53E3\u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: url=${url}, link=${hit.link}`);
3272
3554
  setCandidate("response", hit.link, hit.payloadText);
3273
3555
  } catch (error) {
3274
- logger10.warning(`\u63A5\u53E3\u54CD\u5E94\u5904\u7406\u5F02\u5E38: ${error instanceof Error ? error.message : String(error)}`);
3556
+ logger11.warning(`\u63A5\u53E3\u54CD\u5E94\u5904\u7406\u5F02\u5E38: ${error instanceof Error ? error.message : String(error)}`);
3275
3557
  }
3276
3558
  };
3277
3559
  if (share.mode === "dom") {
3278
- logger10.info("\u5F53\u524D\u4E3A DOM \u6A21\u5F0F\uFF0C\u4EC5\u542F\u7528 DOM \u76D1\u542C");
3560
+ logger11.info("\u5F53\u524D\u4E3A DOM \u6A21\u5F0F\uFF0C\u4EC5\u542F\u7528 DOM \u76D1\u542C");
3279
3561
  domMonitor = await createDomShareMonitor(page, {
3280
3562
  prefix: share.prefix,
3281
3563
  selectors: domSelectors,
@@ -3290,14 +3572,14 @@ var Share = {
3290
3572
  });
3291
3573
  }
3292
3574
  if (share.mode === "response") {
3293
- logger10.info(`\u5F53\u524D\u4E3A\u63A5\u53E3\u6A21\u5F0F\uFF0C\u6302\u8F7D response \u76D1\u542C: apiMatchers=${toJsonInline(apiMatchers, 160)}`);
3575
+ logger11.info(`\u5F53\u524D\u4E3A\u63A5\u53E3\u6A21\u5F0F\uFF0C\u6302\u8F7D response \u76D1\u542C: apiMatchers=${toJsonInline(apiMatchers, 160)}`);
3294
3576
  page.on("response", onResponse);
3295
3577
  }
3296
3578
  const deadline = Date.now() + timeoutMs;
3297
3579
  const getRemainingMs = () => Math.max(0, deadline - Date.now());
3298
3580
  try {
3299
3581
  const actionTimeout = getRemainingMs();
3300
- logger10.start("captureLink.performActions", `\u6267\u884C\u52A8\u4F5C\u9884\u7B97=${actionTimeout}ms`);
3582
+ logger11.start("captureLink.performActions", `\u6267\u884C\u52A8\u4F5C\u9884\u7B97=${actionTimeout}ms`);
3301
3583
  if (actionTimeout > 0) {
3302
3584
  let timer = null;
3303
3585
  let actionError = null;
@@ -3311,21 +3593,21 @@ var Share = {
3311
3593
  const actionResult = await Promise.race([actionPromise, timeoutPromise]);
3312
3594
  if (timer) clearTimeout(timer);
3313
3595
  if (actionResult === "__ACTION_ERROR__") {
3314
- logger10.fail("captureLink.performActions", actionError);
3596
+ logger11.fail("captureLink.performActions", actionError);
3315
3597
  throw actionError;
3316
3598
  }
3317
3599
  if (actionResult === "__ACTION_TIMEOUT__") {
3318
3600
  stats.actionTimedOut = true;
3319
- logger10.warning(`performActions \u5DF2\u8D85\u65F6 (${actionTimeout}ms)\uFF0C\u52A8\u4F5C\u53EF\u80FD\u4ECD\u5728\u5F02\u6B65\u6267\u884C`);
3601
+ logger11.warning(`performActions \u5DF2\u8D85\u65F6 (${actionTimeout}ms)\uFF0C\u52A8\u4F5C\u53EF\u80FD\u4ECD\u5728\u5F02\u6B65\u6267\u884C`);
3320
3602
  } else {
3321
- logger10.success("captureLink.performActions", "\u6267\u884C\u52A8\u4F5C\u5B8C\u6210");
3603
+ logger11.success("captureLink.performActions", "\u6267\u884C\u52A8\u4F5C\u5B8C\u6210");
3322
3604
  }
3323
3605
  }
3324
3606
  let nextProgressLogTs = Date.now() + 3e3;
3325
3607
  while (true) {
3326
3608
  const selected = share.mode === "dom" ? candidates.dom : candidates.response;
3327
3609
  if (selected?.link) {
3328
- logger10.success("captureLink", `\u6355\u83B7\u6210\u529F: source=${share.mode}, link=${selected.link}`);
3610
+ logger11.success("captureLink", `\u6355\u83B7\u6210\u529F: source=${share.mode}, link=${selected.link}`);
3329
3611
  return {
3330
3612
  link: selected.link,
3331
3613
  payloadText: selected.payloadText,
@@ -3337,7 +3619,7 @@ var Share = {
3337
3619
  if (remaining <= 0) break;
3338
3620
  const now = Date.now();
3339
3621
  if (now >= nextProgressLogTs) {
3340
- logger10.info(
3622
+ logger11.info(
3341
3623
  `captureLink \u7B49\u5F85\u4E2D: remaining=${remaining}ms, domMutationCount=${stats.domMutationCount}, responseMatched=${stats.responseMatched}`
3342
3624
  );
3343
3625
  nextProgressLogTs = now + 5e3;
@@ -3345,11 +3627,11 @@ var Share = {
3345
3627
  await (0, import_delay2.default)(Math.max(0, Math.min(DEFAULT_POLL_INTERVAL_MS, remaining)));
3346
3628
  }
3347
3629
  if (share.mode === "response" && stats.responseMatched === 0) {
3348
- logger10.warning(
3630
+ logger11.warning(
3349
3631
  `\u63A5\u53E3\u76D1\u542C\u672A\u547D\u4E2D: apiMatchers=${toJsonInline(apiMatchers, 220)}, \u54CD\u5E94\u6837\u672CURLs=${toJsonInline(stats.responseSampleUrls, 420)}`
3350
3632
  );
3351
3633
  }
3352
- logger10.warning(
3634
+ logger11.warning(
3353
3635
  `captureLink \u8D85\u65F6\u672A\u62FF\u5230\u94FE\u63A5: mode=${share.mode}, actionTimedOut=${stats.actionTimedOut}, domMutationCount=${stats.domMutationCount}, responseObserved=${stats.responseObserved}, responseMatched=${stats.responseMatched}, lastMatchedUrl=${stats.lastMatchedUrl || "none"}`
3354
3636
  );
3355
3637
  return {
@@ -3361,7 +3643,7 @@ var Share = {
3361
3643
  } finally {
3362
3644
  if (share.mode === "response") {
3363
3645
  page.off("response", onResponse);
3364
- logger10.info("response \u76D1\u542C\u5DF2\u5378\u8F7D");
3646
+ logger11.info("response \u76D1\u542C\u5DF2\u5378\u8F7D");
3365
3647
  }
3366
3648
  await stopDomMonitor();
3367
3649
  }