@skrillex1224/playwright-toolkit 2.1.139 → 2.1.142
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 +77 -77
- package/dist/index.cjs.map +3 -3
- package/dist/index.js +77 -77
- package/dist/index.js.map +3 -3
- package/index.d.ts +0 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -296,18 +296,18 @@ var fallbackLog = {
|
|
|
296
296
|
error: (...args) => console.error(...args),
|
|
297
297
|
debug: (...args) => console.debug ? console.debug(...args) : console.log(...args)
|
|
298
298
|
};
|
|
299
|
-
var resolveLogMethod = (
|
|
300
|
-
if (
|
|
301
|
-
return
|
|
299
|
+
var resolveLogMethod = (logger13, name) => {
|
|
300
|
+
if (logger13 && typeof logger13[name] === "function") {
|
|
301
|
+
return logger13[name].bind(logger13);
|
|
302
302
|
}
|
|
303
|
-
if (name === "warning" &&
|
|
304
|
-
return
|
|
303
|
+
if (name === "warning" && logger13 && typeof logger13.warn === "function") {
|
|
304
|
+
return logger13.warn.bind(logger13);
|
|
305
305
|
}
|
|
306
306
|
return fallbackLog[name];
|
|
307
307
|
};
|
|
308
308
|
var defaultLogger = null;
|
|
309
|
-
var setDefaultLogger = (
|
|
310
|
-
defaultLogger =
|
|
309
|
+
var setDefaultLogger = (logger13) => {
|
|
310
|
+
defaultLogger = logger13;
|
|
311
311
|
};
|
|
312
312
|
var resolveLogger = (explicitLogger) => {
|
|
313
313
|
if (explicitLogger && typeof explicitLogger.info === "function") {
|
|
@@ -334,8 +334,8 @@ var colorize = (text, color) => {
|
|
|
334
334
|
var createBaseLogger = (prefix = "", explicitLogger) => {
|
|
335
335
|
const name = prefix ? String(prefix) : "";
|
|
336
336
|
const dispatch = (methodName, icon, message, color) => {
|
|
337
|
-
const
|
|
338
|
-
const logFn = resolveLogMethod(
|
|
337
|
+
const logger13 = resolveLogger(explicitLogger);
|
|
338
|
+
const logFn = resolveLogMethod(logger13, methodName);
|
|
339
339
|
const timestamp = colorize(`[${formatTimestamp()}]`, ANSI.gray);
|
|
340
340
|
const line = formatLine(name, icon, message);
|
|
341
341
|
const coloredLine = colorize(line, color);
|
|
@@ -1260,6 +1260,7 @@ var Humanize = {
|
|
|
1260
1260
|
};
|
|
1261
1261
|
|
|
1262
1262
|
// src/launch.js
|
|
1263
|
+
var logger6 = createInternalLogger("Launch");
|
|
1263
1264
|
var normalizeByPassDomains = (domains) => {
|
|
1264
1265
|
if (!Array.isArray(domains)) return [];
|
|
1265
1266
|
return domains.map((item) => String(item || "").trim()).filter(Boolean);
|
|
@@ -1308,17 +1309,16 @@ var Launch = {
|
|
|
1308
1309
|
launchOptions.proxy = launchProxy;
|
|
1309
1310
|
}
|
|
1310
1311
|
const enableByPassLogger = Boolean(logOptions && logOptions.enable);
|
|
1311
|
-
const customLogger = logOptions && typeof logOptions.customLogger === "function" ? logOptions.customLogger : console.log;
|
|
1312
1312
|
if (enableByPassLogger && launchProxy) {
|
|
1313
|
-
|
|
1313
|
+
logger6.info(
|
|
1314
1314
|
`[\u4EE3\u7406\u5DF2\u542F\u7528] \u4EE3\u7406\u670D\u52A1=${launchProxy.server} \u76F4\u8FDE\u57DF\u540D=${(byPassDomains || []).join(",")}`
|
|
1315
1315
|
);
|
|
1316
1316
|
} else if (enableByPassLogger && enableProxy && !launchProxy) {
|
|
1317
|
-
|
|
1317
|
+
logger6.info(
|
|
1318
1318
|
`[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=true \u4F46 proxy_url \u4E3A\u7A7A`
|
|
1319
1319
|
);
|
|
1320
1320
|
} else if (enableByPassLogger && !enableProxy && proxyUrl) {
|
|
1321
|
-
|
|
1321
|
+
logger6.info(
|
|
1322
1322
|
`[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=false \u4E14 proxy_url \u5DF2\u914D\u7F6E`
|
|
1323
1323
|
);
|
|
1324
1324
|
}
|
|
@@ -1337,7 +1337,7 @@ var Launch = {
|
|
|
1337
1337
|
return;
|
|
1338
1338
|
}
|
|
1339
1339
|
if (!domainSet.has(hostname)) return;
|
|
1340
|
-
|
|
1340
|
+
logger6.info(`[\u76F4\u8FDE\u547D\u4E2D] \u57DF\u540D=${hostname} \u8D44\u6E90\u7C7B\u578B=${req.resourceType()} \u65B9\u6CD5=${req.method()} \u5730\u5740=${requestUrl}`);
|
|
1341
1341
|
};
|
|
1342
1342
|
page.on("request", requestHandler);
|
|
1343
1343
|
return () => page.off("request", requestHandler);
|
|
@@ -1356,7 +1356,7 @@ var Launch = {
|
|
|
1356
1356
|
// src/live-view.js
|
|
1357
1357
|
var import_express = __toESM(require("express"), 1);
|
|
1358
1358
|
var import_apify = require("apify");
|
|
1359
|
-
var
|
|
1359
|
+
var logger7 = createInternalLogger("LiveView");
|
|
1360
1360
|
async function startLiveViewServer(liveViewKey) {
|
|
1361
1361
|
const app = (0, import_express.default)();
|
|
1362
1362
|
app.get("/", async (req, res) => {
|
|
@@ -1381,13 +1381,13 @@ async function startLiveViewServer(liveViewKey) {
|
|
|
1381
1381
|
</html>
|
|
1382
1382
|
`);
|
|
1383
1383
|
} catch (error) {
|
|
1384
|
-
|
|
1384
|
+
logger7.fail("Live View Server", error);
|
|
1385
1385
|
res.status(500).send(`\u65E0\u6CD5\u52A0\u8F7D\u5C4F\u5E55\u622A\u56FE: ${error.message}`);
|
|
1386
1386
|
}
|
|
1387
1387
|
});
|
|
1388
1388
|
const port = process.env.APIFY_CONTAINER_PORT || 4321;
|
|
1389
1389
|
app.listen(port, () => {
|
|
1390
|
-
|
|
1390
|
+
logger7.success("startLiveViewServer", `\u76D1\u542C\u7AEF\u53E3 ${port}`);
|
|
1391
1391
|
});
|
|
1392
1392
|
}
|
|
1393
1393
|
async function takeLiveScreenshot(liveViewKey, page, logMessage) {
|
|
@@ -1395,10 +1395,10 @@ async function takeLiveScreenshot(liveViewKey, page, logMessage) {
|
|
|
1395
1395
|
const buffer = await page.screenshot({ type: "png" });
|
|
1396
1396
|
await import_apify.Actor.setValue(liveViewKey, buffer, { contentType: "image/png" });
|
|
1397
1397
|
if (logMessage) {
|
|
1398
|
-
|
|
1398
|
+
logger7.info(`(\u622A\u56FE): ${logMessage}`);
|
|
1399
1399
|
}
|
|
1400
1400
|
} catch (e) {
|
|
1401
|
-
|
|
1401
|
+
logger7.warn(`\u65E0\u6CD5\u6355\u83B7 Live View \u5C4F\u5E55\u622A\u56FE: ${e.message}`);
|
|
1402
1402
|
}
|
|
1403
1403
|
}
|
|
1404
1404
|
var useLiveView = (liveViewKey = PresetOfLiveViewKey) => {
|
|
@@ -1417,7 +1417,7 @@ var LiveView = {
|
|
|
1417
1417
|
|
|
1418
1418
|
// src/captcha-monitor.js
|
|
1419
1419
|
var import_uuid = require("uuid");
|
|
1420
|
-
var
|
|
1420
|
+
var logger8 = createInternalLogger("Captcha");
|
|
1421
1421
|
function useCaptchaMonitor(page, options) {
|
|
1422
1422
|
const { domSelector, urlPattern, onDetected } = options;
|
|
1423
1423
|
if (!domSelector && !urlPattern) {
|
|
@@ -1489,7 +1489,7 @@ function useCaptchaMonitor(page, options) {
|
|
|
1489
1489
|
};
|
|
1490
1490
|
})();
|
|
1491
1491
|
}, { selector: domSelector, callbackName: exposedFunctionName, cleanerName });
|
|
1492
|
-
|
|
1492
|
+
logger8.success("useCaptchaMonitor", `DOM \u76D1\u63A7\u5DF2\u542F\u7528: ${domSelector}`);
|
|
1493
1493
|
cleanupFns.push(async () => {
|
|
1494
1494
|
try {
|
|
1495
1495
|
await page.evaluate((name) => {
|
|
@@ -1512,14 +1512,14 @@ function useCaptchaMonitor(page, options) {
|
|
|
1512
1512
|
}
|
|
1513
1513
|
};
|
|
1514
1514
|
page.on("framenavigated", frameHandler);
|
|
1515
|
-
|
|
1515
|
+
logger8.success("useCaptchaMonitor", `URL \u76D1\u63A7\u5DF2\u542F\u7528: ${urlPattern}`);
|
|
1516
1516
|
cleanupFns.push(async () => {
|
|
1517
1517
|
page.off("framenavigated", frameHandler);
|
|
1518
1518
|
});
|
|
1519
1519
|
}
|
|
1520
1520
|
return {
|
|
1521
1521
|
stop: async () => {
|
|
1522
|
-
|
|
1522
|
+
logger8.info("useCaptchaMonitor", "\u6B63\u5728\u505C\u6B62\u76D1\u63A7...");
|
|
1523
1523
|
for (const fn of cleanupFns) {
|
|
1524
1524
|
await fn();
|
|
1525
1525
|
}
|
|
@@ -1534,7 +1534,7 @@ var Captcha = {
|
|
|
1534
1534
|
// src/sse.js
|
|
1535
1535
|
var import_https = __toESM(require("https"), 1);
|
|
1536
1536
|
var import_url = require("url");
|
|
1537
|
-
var
|
|
1537
|
+
var logger9 = createInternalLogger("Sse");
|
|
1538
1538
|
var Sse = {
|
|
1539
1539
|
/**
|
|
1540
1540
|
* 解析 SSE 流文本
|
|
@@ -1553,11 +1553,11 @@ var Sse = {
|
|
|
1553
1553
|
events.push(JSON.parse(jsonContent));
|
|
1554
1554
|
}
|
|
1555
1555
|
} catch (e) {
|
|
1556
|
-
|
|
1556
|
+
logger9.debug("parseSseStream", `JSON \u89E3\u6790\u5931\u8D25: ${e.message}, line: ${line.substring(0, 100)}...`);
|
|
1557
1557
|
}
|
|
1558
1558
|
}
|
|
1559
1559
|
}
|
|
1560
|
-
|
|
1560
|
+
logger9.success("parseSseStream", `\u89E3\u6790\u5B8C\u6210, events \u6570\u91CF: ${events.length}`);
|
|
1561
1561
|
return events;
|
|
1562
1562
|
},
|
|
1563
1563
|
/**
|
|
@@ -1607,7 +1607,7 @@ var Sse = {
|
|
|
1607
1607
|
if (!autoUnroute) return;
|
|
1608
1608
|
if (unrouteRequested) return;
|
|
1609
1609
|
unrouteRequested = true;
|
|
1610
|
-
|
|
1610
|
+
logger9.info("[MITM] autoUnroute: \u53D6\u6D88\u540E\u7EED\u62E6\u622A");
|
|
1611
1611
|
page.unroute(urlPattern, routeHandler).catch(() => {
|
|
1612
1612
|
});
|
|
1613
1613
|
};
|
|
@@ -1627,19 +1627,19 @@ var Sse = {
|
|
|
1627
1627
|
};
|
|
1628
1628
|
const routeHandler = async (route) => {
|
|
1629
1629
|
if (firstMatchOnly && hasMatchedOnce) {
|
|
1630
|
-
|
|
1630
|
+
logger9.info(`[MITM] firstMatchOnly: \u653E\u884C\u540E\u7EED\u8BF7\u6C42: ${route.request().url()}`);
|
|
1631
1631
|
route.continue().catch(() => {
|
|
1632
1632
|
});
|
|
1633
1633
|
return;
|
|
1634
1634
|
}
|
|
1635
1635
|
if (firstMatchOnly && !hasMatchedOnce) {
|
|
1636
1636
|
hasMatchedOnce = true;
|
|
1637
|
-
|
|
1637
|
+
logger9.info("[MITM] firstMatchOnly: \u547D\u4E2D\u9996\u4E2A\u8BF7\u6C42\uFF0C\u53D6\u6D88\u540E\u7EED\u62E6\u622A");
|
|
1638
1638
|
page.unroute(urlPattern, routeHandler).catch(() => {
|
|
1639
1639
|
});
|
|
1640
1640
|
}
|
|
1641
1641
|
const request = route.request();
|
|
1642
|
-
|
|
1642
|
+
logger9.info(`[MITM] \u5DF2\u62E6\u622A\u8BF7\u6C42: ${request.url()}`);
|
|
1643
1643
|
try {
|
|
1644
1644
|
const headers = await request.allHeaders();
|
|
1645
1645
|
const postData = request.postData();
|
|
@@ -1664,7 +1664,7 @@ var Sse = {
|
|
|
1664
1664
|
clearTimeout(initialTimer);
|
|
1665
1665
|
initialTimer = null;
|
|
1666
1666
|
}
|
|
1667
|
-
|
|
1667
|
+
logger9.debug("[Intercept] \u5DF2\u63A5\u6536\u521D\u59CB\u6570\u636E");
|
|
1668
1668
|
}
|
|
1669
1669
|
chunks.push(chunk);
|
|
1670
1670
|
const textChunk = chunk.toString("utf-8");
|
|
@@ -1673,18 +1673,18 @@ var Sse = {
|
|
|
1673
1673
|
try {
|
|
1674
1674
|
onData(textChunk, safeResolve, accumulatedText);
|
|
1675
1675
|
} catch (e) {
|
|
1676
|
-
|
|
1676
|
+
logger9.fail(`onData \u9519\u8BEF`, e);
|
|
1677
1677
|
}
|
|
1678
1678
|
}
|
|
1679
1679
|
});
|
|
1680
1680
|
res.on("end", () => {
|
|
1681
|
-
|
|
1681
|
+
logger9.info("[MITM] \u4E0A\u6E38\u54CD\u5E94\u7ED3\u675F");
|
|
1682
1682
|
clearAllTimers();
|
|
1683
1683
|
if (onEnd) {
|
|
1684
1684
|
try {
|
|
1685
1685
|
onEnd(accumulatedText, safeResolve);
|
|
1686
1686
|
} catch (e) {
|
|
1687
|
-
|
|
1687
|
+
logger9.fail(`onEnd \u9519\u8BEF`, e);
|
|
1688
1688
|
}
|
|
1689
1689
|
} else if (!onData) {
|
|
1690
1690
|
safeResolve(accumulatedText);
|
|
@@ -1767,7 +1767,7 @@ var Sse = {
|
|
|
1767
1767
|
var import_got_scraping = require("got-scraping");
|
|
1768
1768
|
var import_http = require("http");
|
|
1769
1769
|
var import_https2 = require("https");
|
|
1770
|
-
var
|
|
1770
|
+
var logger10 = createInternalLogger("Interception");
|
|
1771
1771
|
var SHARED_HTTP_AGENT = new import_http.Agent({
|
|
1772
1772
|
keepAlive: true,
|
|
1773
1773
|
keepAliveMsecs: 15e3,
|
|
@@ -1975,9 +1975,9 @@ var Interception = {
|
|
|
1975
1975
|
const directRules = [];
|
|
1976
1976
|
if (hasDirectDomains) directRules.push(`\u76F4\u8FDE\u57DF\u540D: [${normalizedDirectDomains.length} \u4E2A]`);
|
|
1977
1977
|
if (hasDirectExtensions) directRules.push(`\u76F4\u8FDE\u6269\u5C55\u540D: [${normalizedDirectExtensions.join(", ")}]`);
|
|
1978
|
-
|
|
1978
|
+
logger10.start("setup", directRules.length > 0 ? `${directRules.join(" | ")} | \u5C4F\u853D: [${enabledCategories.join(", ")}]` : `\u4EC5\u8D44\u6E90\u5C4F\u853D\u6A21\u5F0F | \u5C4F\u853D: [${enabledCategories.join(", ")}]`);
|
|
1979
1979
|
if (!hasInterceptionRules) {
|
|
1980
|
-
|
|
1980
|
+
logger10.info("\u65E0\u547D\u4E2D\u89C4\u5219\uFF0C\u8DF3\u8FC7 page.route \u6CE8\u518C");
|
|
1981
1981
|
return;
|
|
1982
1982
|
}
|
|
1983
1983
|
const directRouteHandler = async (route) => {
|
|
@@ -2021,7 +2021,7 @@ var Interception = {
|
|
|
2021
2021
|
delete resHeaders["transfer-encoding"];
|
|
2022
2022
|
delete resHeaders["connection"];
|
|
2023
2023
|
delete resHeaders["keep-alive"];
|
|
2024
|
-
isSilent ?
|
|
2024
|
+
isSilent ? logger10.debug(`\u76F4\u8FDE\u6210\u529F: ${urlPath}`) : logger10.info(`\u76F4\u8FDE\u6210\u529F: ${urlPath}`);
|
|
2025
2025
|
await safeFulfill(route, {
|
|
2026
2026
|
status: response.statusCode,
|
|
2027
2027
|
headers: resHeaders,
|
|
@@ -2032,7 +2032,7 @@ var Interception = {
|
|
|
2032
2032
|
const isTimeout = err?.code === "ETIMEDOUT" || message.toLowerCase().includes("timeout");
|
|
2033
2033
|
const action = fallbackToProxy ? "\u56DE\u9000\u4EE3\u7406" : "\u5DF2\u653E\u5F03";
|
|
2034
2034
|
const reason = isTimeout ? `\u8D85\u65F6(${DirectConfig.directTimeout}s)` : `\u5F02\u5E38: ${message}`;
|
|
2035
|
-
|
|
2035
|
+
logger10.warn(`\u76F4\u8FDE${reason}\uFF0C${action}`);
|
|
2036
2036
|
if (fallbackToProxy) {
|
|
2037
2037
|
await safeContinue(route);
|
|
2038
2038
|
} else {
|
|
@@ -2106,7 +2106,7 @@ function escapeRegex(value) {
|
|
|
2106
2106
|
|
|
2107
2107
|
// src/mutation.js
|
|
2108
2108
|
var import_uuid2 = require("uuid");
|
|
2109
|
-
var
|
|
2109
|
+
var logger11 = createInternalLogger("Mutation");
|
|
2110
2110
|
var MUTATION_MONITOR_MODE = Object.freeze({
|
|
2111
2111
|
Added: "added",
|
|
2112
2112
|
Changed: "changed",
|
|
@@ -2139,14 +2139,14 @@ var Mutation = {
|
|
|
2139
2139
|
const stableTime = options.stableTime ?? 5 * 1e3;
|
|
2140
2140
|
const timeout = options.timeout ?? 120 * 1e3;
|
|
2141
2141
|
const onMutation = options.onMutation;
|
|
2142
|
-
|
|
2142
|
+
logger11.start("waitForStable", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, \u7A33\u5B9A\u65F6\u95F4=${stableTime}ms`);
|
|
2143
2143
|
if (initialTimeout > 0) {
|
|
2144
2144
|
const selectorQuery = selectorList.join(",");
|
|
2145
2145
|
try {
|
|
2146
2146
|
await page.waitForSelector(selectorQuery, { timeout: initialTimeout });
|
|
2147
|
-
|
|
2147
|
+
logger11.info(`waitForStable \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
|
|
2148
2148
|
} catch (e) {
|
|
2149
|
-
|
|
2149
|
+
logger11.warning(`waitForStable \u521D\u59CB\u7B49\u5F85\u8D85\u65F6 (${initialTimeout}ms): ${selectorQuery}`);
|
|
2150
2150
|
throw e;
|
|
2151
2151
|
}
|
|
2152
2152
|
}
|
|
@@ -2162,7 +2162,7 @@ var Mutation = {
|
|
|
2162
2162
|
return "__CONTINUE__";
|
|
2163
2163
|
}
|
|
2164
2164
|
});
|
|
2165
|
-
|
|
2165
|
+
logger11.info("waitForStable \u5DF2\u542F\u7528 onMutation \u56DE\u8C03");
|
|
2166
2166
|
} catch (e) {
|
|
2167
2167
|
}
|
|
2168
2168
|
}
|
|
@@ -2277,9 +2277,9 @@ var Mutation = {
|
|
|
2277
2277
|
{ selectorList, stableTime, timeout, callbackName, hasCallback: !!onMutation }
|
|
2278
2278
|
);
|
|
2279
2279
|
if (result.mutationCount === 0 && result.stableTime === 0) {
|
|
2280
|
-
|
|
2280
|
+
logger11.warning("waitForStable \u672A\u627E\u5230\u53EF\u76D1\u63A7\u7684\u5143\u7D20");
|
|
2281
2281
|
}
|
|
2282
|
-
|
|
2282
|
+
logger11.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316${result.wasPaused ? ", \u66FE\u6682\u505C\u8BA1\u65F6" : ""}`);
|
|
2283
2283
|
return result;
|
|
2284
2284
|
},
|
|
2285
2285
|
/**
|
|
@@ -2299,7 +2299,7 @@ var Mutation = {
|
|
|
2299
2299
|
const onMutation = options.onMutation;
|
|
2300
2300
|
const rawMode = String(options.mode || MUTATION_MONITOR_MODE.Added).toLowerCase();
|
|
2301
2301
|
const mode = [MUTATION_MONITOR_MODE.Added, MUTATION_MONITOR_MODE.Changed, MUTATION_MONITOR_MODE.All].includes(rawMode) ? rawMode : MUTATION_MONITOR_MODE.Added;
|
|
2302
|
-
|
|
2302
|
+
logger11.start("useMonitor", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, mode=${mode}`);
|
|
2303
2303
|
const monitorKey = generateKey("pk_mon");
|
|
2304
2304
|
const callbackName = generateKey("pk_mon_cb");
|
|
2305
2305
|
const cleanerName = generateKey("pk_mon_clean");
|
|
@@ -2442,7 +2442,7 @@ var Mutation = {
|
|
|
2442
2442
|
return total;
|
|
2443
2443
|
};
|
|
2444
2444
|
}, { selectorList, monitorKey, callbackName, cleanerName, hasCallback: !!onMutation, mode });
|
|
2445
|
-
|
|
2445
|
+
logger11.success("useMonitor", "\u76D1\u63A7\u5668\u5DF2\u542F\u52A8");
|
|
2446
2446
|
return {
|
|
2447
2447
|
stop: async () => {
|
|
2448
2448
|
let totalMutations = 0;
|
|
@@ -2455,7 +2455,7 @@ var Mutation = {
|
|
|
2455
2455
|
}, cleanerName);
|
|
2456
2456
|
} catch (e) {
|
|
2457
2457
|
}
|
|
2458
|
-
|
|
2458
|
+
logger11.success("useMonitor.stop", `\u76D1\u63A7\u5DF2\u505C\u6B62, \u5171 ${totalMutations} \u6B21\u53D8\u5316`);
|
|
2459
2459
|
return { totalMutations };
|
|
2460
2460
|
}
|
|
2461
2461
|
};
|
|
@@ -3276,7 +3276,7 @@ var createTemplateLogger = (baseLogger = createBaseLogger()) => {
|
|
|
3276
3276
|
};
|
|
3277
3277
|
var getDefaultBaseLogger = () => createBaseLogger("");
|
|
3278
3278
|
var Logger = {
|
|
3279
|
-
setLogger: (
|
|
3279
|
+
setLogger: (logger13) => setDefaultLogger(logger13),
|
|
3280
3280
|
info: (message) => getDefaultBaseLogger().info(message),
|
|
3281
3281
|
success: (message) => getDefaultBaseLogger().success(message),
|
|
3282
3282
|
warning: (message) => getDefaultBaseLogger().warning(message),
|
|
@@ -3284,15 +3284,15 @@ var Logger = {
|
|
|
3284
3284
|
error: (message) => getDefaultBaseLogger().error(message),
|
|
3285
3285
|
debug: (message) => getDefaultBaseLogger().debug(message),
|
|
3286
3286
|
start: (message) => getDefaultBaseLogger().start(message),
|
|
3287
|
-
useTemplate: (
|
|
3288
|
-
if (
|
|
3287
|
+
useTemplate: (logger13) => {
|
|
3288
|
+
if (logger13) return createTemplateLogger(createBaseLogger("", logger13));
|
|
3289
3289
|
return createTemplateLogger();
|
|
3290
3290
|
}
|
|
3291
3291
|
};
|
|
3292
3292
|
|
|
3293
3293
|
// src/share.js
|
|
3294
3294
|
var import_delay3 = __toESM(require("delay"), 1);
|
|
3295
|
-
var
|
|
3295
|
+
var logger12 = createInternalLogger("Share");
|
|
3296
3296
|
var DEFAULT_TIMEOUT_MS = 50 * 1e3;
|
|
3297
3297
|
var DEFAULT_PAYLOAD_SNAPSHOT_MAX_LEN = 500;
|
|
3298
3298
|
var DEFAULT_POLL_INTERVAL_MS = 120;
|
|
@@ -3412,7 +3412,7 @@ var createDomShareMonitor = async (page, options = {}) => {
|
|
|
3412
3412
|
const onMatch = typeof options.onMatch === "function" ? options.onMatch : null;
|
|
3413
3413
|
const onTelemetry = typeof options.onTelemetry === "function" ? options.onTelemetry : null;
|
|
3414
3414
|
let matched = false;
|
|
3415
|
-
|
|
3415
|
+
logger12.info(`DOM \u76D1\u542C\u51C6\u5907\u6302\u8F7D: selectors=${toJsonInline(selectors, 120)}, mode=${mode}`);
|
|
3416
3416
|
const monitor = await Mutation.useMonitor(page, selectors, {
|
|
3417
3417
|
mode,
|
|
3418
3418
|
onMutation: (context = {}) => {
|
|
@@ -3430,12 +3430,12 @@ ${text}`;
|
|
|
3430
3430
|
});
|
|
3431
3431
|
}
|
|
3432
3432
|
if (mutationCount <= 5 || mutationCount % 50 === 0) {
|
|
3433
|
-
|
|
3433
|
+
logger12.info(`DOM \u53D8\u5316\u5DF2\u6355\u83B7: mutationCount=${mutationCount}, mutationNodes=${mutationNodes.length}`);
|
|
3434
3434
|
}
|
|
3435
3435
|
const [candidate] = Utils.parseLinks(rawDom, { prefix }) || [];
|
|
3436
3436
|
if (!candidate) return;
|
|
3437
3437
|
matched = true;
|
|
3438
|
-
|
|
3438
|
+
logger12.success("captureLink.domHit", `DOM \u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: mutationCount=${mutationCount}, link=${candidate}`);
|
|
3439
3439
|
if (onMatch) {
|
|
3440
3440
|
onMatch({
|
|
3441
3441
|
link: candidate,
|
|
@@ -3451,7 +3451,7 @@ ${text}`;
|
|
|
3451
3451
|
return {
|
|
3452
3452
|
stop: async () => {
|
|
3453
3453
|
const result = await monitor.stop();
|
|
3454
|
-
|
|
3454
|
+
logger12.info(`DOM \u76D1\u542C\u5DF2\u505C\u6B62: totalMutations=${result?.totalMutations || 0}`);
|
|
3455
3455
|
return result;
|
|
3456
3456
|
}
|
|
3457
3457
|
};
|
|
@@ -3491,8 +3491,8 @@ var Share = {
|
|
|
3491
3491
|
if (share.mode === "response" && apiMatchers.length === 0) {
|
|
3492
3492
|
throw new Error("Share.captureLink requires share.xurl[0] api matcher when mode=response");
|
|
3493
3493
|
}
|
|
3494
|
-
|
|
3495
|
-
|
|
3494
|
+
logger12.start("captureLink", `mode=${share.mode}, timeoutMs=${timeoutMs}, prefix=${share.prefix}`);
|
|
3495
|
+
logger12.info(`captureLink \u914D\u7F6E: xurl=${toJsonInline(share.xurl)}, domMode=${domMode}, domSelectors=${toJsonInline(domSelectors, 120)}`);
|
|
3496
3496
|
const stats = {
|
|
3497
3497
|
actionTimedOut: false,
|
|
3498
3498
|
domMutationCount: 0,
|
|
@@ -3517,7 +3517,7 @@ var Share = {
|
|
|
3517
3517
|
link: validated,
|
|
3518
3518
|
payloadText: String(payloadText || "")
|
|
3519
3519
|
};
|
|
3520
|
-
|
|
3520
|
+
logger12.info(`\u5019\u9009\u94FE\u63A5\u5DF2\u786E\u8BA4: source=${source}, link=${validated}`);
|
|
3521
3521
|
return true;
|
|
3522
3522
|
};
|
|
3523
3523
|
const resolveResponseCandidate = (responseText) => {
|
|
@@ -3552,7 +3552,7 @@ var Share = {
|
|
|
3552
3552
|
try {
|
|
3553
3553
|
await monitor.stop();
|
|
3554
3554
|
} catch (error) {
|
|
3555
|
-
|
|
3555
|
+
logger12.warning(`\u505C\u6B62 DOM \u76D1\u542C\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`);
|
|
3556
3556
|
}
|
|
3557
3557
|
};
|
|
3558
3558
|
const onResponse = async (response) => {
|
|
@@ -3565,29 +3565,29 @@ var Share = {
|
|
|
3565
3565
|
stats.responseSampleUrls.push(url);
|
|
3566
3566
|
}
|
|
3567
3567
|
if (stats.responseObserved <= 5) {
|
|
3568
|
-
|
|
3568
|
+
logger12.info(`\u63A5\u53E3\u54CD\u5E94\u91C7\u6837(${stats.responseObserved}): ${url}`);
|
|
3569
3569
|
}
|
|
3570
3570
|
if (!apiMatchers.some((matcher) => url.includes(matcher))) return;
|
|
3571
3571
|
stats.responseMatched += 1;
|
|
3572
3572
|
stats.lastMatchedUrl = url;
|
|
3573
|
-
|
|
3573
|
+
logger12.info(`\u63A5\u53E3\u547D\u4E2D\u5339\u914D(${stats.responseMatched}): ${url}`);
|
|
3574
3574
|
const text = await response.text();
|
|
3575
3575
|
const hit = resolveResponseCandidate(text);
|
|
3576
3576
|
if (!hit?.link) {
|
|
3577
3577
|
if (stats.responseMatched <= 3) {
|
|
3578
|
-
|
|
3578
|
+
logger12.info(`\u63A5\u53E3\u89E3\u6790\u5B8C\u6210\u4F46\u672A\u63D0\u53D6\u5230\u5206\u4EAB\u94FE\u63A5: payloadSize=${text.length}`);
|
|
3579
3579
|
}
|
|
3580
3580
|
return;
|
|
3581
3581
|
}
|
|
3582
3582
|
stats.responseResolved += 1;
|
|
3583
|
-
|
|
3583
|
+
logger12.success("captureLink.responseHit", `\u63A5\u53E3\u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: url=${url}, link=${hit.link}`);
|
|
3584
3584
|
setCandidate("response", hit.link, hit.payloadText);
|
|
3585
3585
|
} catch (error) {
|
|
3586
|
-
|
|
3586
|
+
logger12.warning(`\u63A5\u53E3\u54CD\u5E94\u5904\u7406\u5F02\u5E38: ${error instanceof Error ? error.message : String(error)}`);
|
|
3587
3587
|
}
|
|
3588
3588
|
};
|
|
3589
3589
|
if (share.mode === "dom") {
|
|
3590
|
-
|
|
3590
|
+
logger12.info("\u5F53\u524D\u4E3A DOM \u6A21\u5F0F\uFF0C\u4EC5\u542F\u7528 DOM \u76D1\u542C");
|
|
3591
3591
|
domMonitor = await createDomShareMonitor(page, {
|
|
3592
3592
|
prefix: share.prefix,
|
|
3593
3593
|
selectors: domSelectors,
|
|
@@ -3602,14 +3602,14 @@ var Share = {
|
|
|
3602
3602
|
});
|
|
3603
3603
|
}
|
|
3604
3604
|
if (share.mode === "response") {
|
|
3605
|
-
|
|
3605
|
+
logger12.info(`\u5F53\u524D\u4E3A\u63A5\u53E3\u6A21\u5F0F\uFF0C\u6302\u8F7D response \u76D1\u542C: apiMatchers=${toJsonInline(apiMatchers, 160)}`);
|
|
3606
3606
|
page.on("response", onResponse);
|
|
3607
3607
|
}
|
|
3608
3608
|
const deadline = Date.now() + timeoutMs;
|
|
3609
3609
|
const getRemainingMs = () => Math.max(0, deadline - Date.now());
|
|
3610
3610
|
try {
|
|
3611
3611
|
const actionTimeout = getRemainingMs();
|
|
3612
|
-
|
|
3612
|
+
logger12.start("captureLink.performActions", `\u6267\u884C\u52A8\u4F5C\u9884\u7B97=${actionTimeout}ms`);
|
|
3613
3613
|
if (actionTimeout > 0) {
|
|
3614
3614
|
let timer = null;
|
|
3615
3615
|
let actionError = null;
|
|
@@ -3623,21 +3623,21 @@ var Share = {
|
|
|
3623
3623
|
const actionResult = await Promise.race([actionPromise, timeoutPromise]);
|
|
3624
3624
|
if (timer) clearTimeout(timer);
|
|
3625
3625
|
if (actionResult === "__ACTION_ERROR__") {
|
|
3626
|
-
|
|
3626
|
+
logger12.fail("captureLink.performActions", actionError);
|
|
3627
3627
|
throw actionError;
|
|
3628
3628
|
}
|
|
3629
3629
|
if (actionResult === "__ACTION_TIMEOUT__") {
|
|
3630
3630
|
stats.actionTimedOut = true;
|
|
3631
|
-
|
|
3631
|
+
logger12.warning(`performActions \u5DF2\u8D85\u65F6 (${actionTimeout}ms)\uFF0C\u52A8\u4F5C\u53EF\u80FD\u4ECD\u5728\u5F02\u6B65\u6267\u884C`);
|
|
3632
3632
|
} else {
|
|
3633
|
-
|
|
3633
|
+
logger12.success("captureLink.performActions", "\u6267\u884C\u52A8\u4F5C\u5B8C\u6210");
|
|
3634
3634
|
}
|
|
3635
3635
|
}
|
|
3636
3636
|
let nextProgressLogTs = Date.now() + 3e3;
|
|
3637
3637
|
while (true) {
|
|
3638
3638
|
const selected = share.mode === "dom" ? candidates.dom : candidates.response;
|
|
3639
3639
|
if (selected?.link) {
|
|
3640
|
-
|
|
3640
|
+
logger12.success("captureLink", `\u6355\u83B7\u6210\u529F: source=${share.mode}, link=${selected.link}`);
|
|
3641
3641
|
return {
|
|
3642
3642
|
link: selected.link,
|
|
3643
3643
|
payloadText: selected.payloadText,
|
|
@@ -3649,7 +3649,7 @@ var Share = {
|
|
|
3649
3649
|
if (remaining <= 0) break;
|
|
3650
3650
|
const now = Date.now();
|
|
3651
3651
|
if (now >= nextProgressLogTs) {
|
|
3652
|
-
|
|
3652
|
+
logger12.info(
|
|
3653
3653
|
`captureLink \u7B49\u5F85\u4E2D: remaining=${remaining}ms, domMutationCount=${stats.domMutationCount}, responseMatched=${stats.responseMatched}`
|
|
3654
3654
|
);
|
|
3655
3655
|
nextProgressLogTs = now + 5e3;
|
|
@@ -3657,11 +3657,11 @@ var Share = {
|
|
|
3657
3657
|
await (0, import_delay3.default)(Math.max(0, Math.min(DEFAULT_POLL_INTERVAL_MS, remaining)));
|
|
3658
3658
|
}
|
|
3659
3659
|
if (share.mode === "response" && stats.responseMatched === 0) {
|
|
3660
|
-
|
|
3660
|
+
logger12.warning(
|
|
3661
3661
|
`\u63A5\u53E3\u76D1\u542C\u672A\u547D\u4E2D: apiMatchers=${toJsonInline(apiMatchers, 220)}, \u54CD\u5E94\u6837\u672CURLs=${toJsonInline(stats.responseSampleUrls, 420)}`
|
|
3662
3662
|
);
|
|
3663
3663
|
}
|
|
3664
|
-
|
|
3664
|
+
logger12.warning(
|
|
3665
3665
|
`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"}`
|
|
3666
3666
|
);
|
|
3667
3667
|
return {
|
|
@@ -3673,7 +3673,7 @@ var Share = {
|
|
|
3673
3673
|
} finally {
|
|
3674
3674
|
if (share.mode === "response") {
|
|
3675
3675
|
page.off("response", onResponse);
|
|
3676
|
-
|
|
3676
|
+
logger12.info("response \u76D1\u542C\u5DF2\u5378\u8F7D");
|
|
3677
3677
|
}
|
|
3678
3678
|
await stopDomMonitor();
|
|
3679
3679
|
}
|