@skrillex1224/playwright-toolkit 2.1.27 → 2.1.28

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
@@ -1282,18 +1282,9 @@ var Captcha = {
1282
1282
  };
1283
1283
 
1284
1284
  // src/sse.js
1285
- var import_got_scraping = require("got-scraping");
1286
- var import_http = require("http");
1287
- var import_https = require("https");
1285
+ var import_https = __toESM(require("https"), 1);
1286
+ var import_url = require("url");
1288
1287
  var logger7 = createLogger("Sse");
1289
- var SHARED_HTTP_AGENT = new import_http.Agent({ keepAlive: false });
1290
- var SHARED_HTTPS_AGENT = new import_https.Agent({ keepAlive: false, rejectUnauthorized: false });
1291
- var SHARED_GOT_OPTIONS = {
1292
- http2: false,
1293
- retry: { limit: 0 },
1294
- throwHttpErrors: false,
1295
- decompress: false
1296
- };
1297
1288
  var Sse = {
1298
1289
  /**
1299
1290
  * 解析 SSE 流文本
@@ -1320,7 +1311,7 @@ var Sse = {
1320
1311
  return events;
1321
1312
  },
1322
1313
  /**
1323
- * 拦截网络请求并使用 got-scraping 转发,以解决流式数据捕获问题。
1314
+ * 拦截网络请求并使用 Node.js 原生 https 模块转发,以解决流式数据捕获问题。
1324
1315
  * @param {import('playwright').Page} page
1325
1316
  * @param {string|RegExp} urlPattern - 拦截的 URL 模式
1326
1317
  * @param {object} options
@@ -1328,7 +1319,7 @@ var Sse = {
1328
1319
  * @param {function(string, function): void} [options.onEnd] - (fullText, resolve) => void
1329
1320
  * @param {function(Error, function): void} [options.onTimeout] - (error, reject) => void
1330
1321
  * @param {number} [options.initialTimeout=90000] - 初始数据接收超时 (ms),默认 90s
1331
- * @param {number} [options.overallTimeout=180000] - 整体请求超时时间 (ms),默认 180s
1322
+ * @param {number} [options.timeout=180000] - 整体请求超时时间 (ms),默认 180s
1332
1323
  * @returns {Promise<any>} - 返回 Promise,当流满足条件时 resolve
1333
1324
  */
1334
1325
  async intercept(page, urlPattern, options = {}) {
@@ -1354,39 +1345,19 @@ var Sse = {
1354
1345
  logger7.info(`[MITM] \u5DF2\u62E6\u622A\u8BF7\u6C42: ${request.url()}`);
1355
1346
  try {
1356
1347
  const headers = await request.allHeaders();
1357
- delete headers["host"];
1348
+ const postData = request.postData();
1349
+ const urlObj = new import_url.URL(request.url());
1358
1350
  delete headers["accept-encoding"];
1359
1351
  delete headers["content-length"];
1360
- const currentAcceptLanguage = headers["accept-language"] || "";
1361
- AntiCheat.applyLocaleHeaders(headers, currentAcceptLanguage);
1362
- const resolvedAcceptLanguage = headers["accept-language"] || "";
1363
- const userAgent = headers["user-agent"] || "";
1364
- const method = request.method();
1365
- const postData = method !== "GET" && method !== "HEAD" ? request.postDataBuffer() : void 0;
1366
1352
  const reqOptions = {
1367
- ...SHARED_GOT_OPTIONS,
1368
- url: request.url(),
1369
- method,
1353
+ hostname: urlObj.hostname,
1354
+ port: 443,
1355
+ path: urlObj.pathname + urlObj.search,
1356
+ method: request.method(),
1370
1357
  headers,
1371
- headerGeneratorOptions: AntiCheat.getTlsFingerprintOptions(userAgent, resolvedAcceptLanguage),
1372
- agent: {
1373
- http: SHARED_HTTP_AGENT,
1374
- https: SHARED_HTTPS_AGENT
1375
- },
1376
- timeout: { request: overallTimeout }
1377
- };
1378
- if (postData) {
1379
- reqOptions.body = postData;
1380
- }
1381
- const stream = import_got_scraping.gotScraping.stream(reqOptions);
1382
- const handleStreamError = (error) => {
1383
- clearAllTimers();
1384
- stream.destroy();
1385
- route.abort().catch(() => {
1386
- });
1387
- reject(error);
1358
+ timeout: overallTimeout
1388
1359
  };
1389
- stream.on("response", (res) => {
1360
+ const req = import_https.default.request(reqOptions, (res) => {
1390
1361
  const chunks = [];
1391
1362
  let accumulatedText = "";
1392
1363
  res.on("data", (chunk) => {
@@ -1409,7 +1380,6 @@ var Sse = {
1409
1380
  }
1410
1381
  }
1411
1382
  });
1412
- res.on("error", handleStreamError);
1413
1383
  res.on("end", () => {
1414
1384
  logger7.info("[MITM] \u4E0A\u6E38\u54CD\u5E94\u7ED3\u675F");
1415
1385
  clearAllTimers();
@@ -1422,28 +1392,22 @@ var Sse = {
1422
1392
  } else if (!onData) {
1423
1393
  resolve(accumulatedText);
1424
1394
  }
1425
- const resHeaders = {};
1426
- for (const [key, value] of Object.entries(res.headers || {})) {
1427
- if (Array.isArray(value)) {
1428
- resHeaders[key] = value.join(", ");
1429
- } else if (value) {
1430
- resHeaders[key] = String(value);
1431
- }
1432
- }
1433
- delete resHeaders["content-encoding"];
1434
- delete resHeaders["content-length"];
1435
- delete resHeaders["transfer-encoding"];
1436
- delete resHeaders["connection"];
1437
- delete resHeaders["keep-alive"];
1438
1395
  route.fulfill({
1439
- status: res.statusCode || 200,
1440
- headers: resHeaders,
1396
+ status: res.statusCode,
1397
+ headers: res.headers,
1441
1398
  body: Buffer.concat(chunks)
1442
1399
  }).catch(() => {
1443
1400
  });
1444
1401
  });
1445
1402
  });
1446
- stream.on("error", handleStreamError);
1403
+ req.on("error", (e) => {
1404
+ clearAllTimers();
1405
+ route.abort().catch(() => {
1406
+ });
1407
+ reject(e);
1408
+ });
1409
+ if (postData) req.write(postData);
1410
+ req.end();
1447
1411
  } catch (e) {
1448
1412
  clearAllTimers();
1449
1413
  route.continue().catch(() => {
@@ -1502,12 +1466,12 @@ var Sse = {
1502
1466
  };
1503
1467
 
1504
1468
  // src/interception.js
1505
- var import_got_scraping2 = require("got-scraping");
1506
- var import_http2 = require("http");
1469
+ var import_got_scraping = require("got-scraping");
1470
+ var import_http = require("http");
1507
1471
  var import_https2 = require("https");
1508
1472
  var logger8 = createLogger("Interception");
1509
- var SHARED_HTTP_AGENT2 = new import_http2.Agent({ keepAlive: false });
1510
- var SHARED_HTTPS_AGENT2 = new import_https2.Agent({ keepAlive: false, rejectUnauthorized: false });
1473
+ var SHARED_HTTP_AGENT = new import_http.Agent({ keepAlive: false });
1474
+ var SHARED_HTTPS_AGENT = new import_https2.Agent({ keepAlive: false, rejectUnauthorized: false });
1511
1475
  var DirectConfig = {
1512
1476
  /** 直连请求超时时间(秒) */
1513
1477
  directTimeout: 12,
@@ -1560,7 +1524,7 @@ var DEFAULT_BLOCKING_CONFIG = {
1560
1524
  /** 额外自定义扩展名列表 */
1561
1525
  customExtensions: []
1562
1526
  };
1563
- var SHARED_GOT_OPTIONS2 = {
1527
+ var SHARED_GOT_OPTIONS = {
1564
1528
  http2: false,
1565
1529
  // 禁用 HTTP2 避免在拦截场景下的握手兼容性问题
1566
1530
  retry: { limit: 0 },
@@ -1669,8 +1633,8 @@ var Interception = {
1669
1633
  const userAgent = reqHeaders["user-agent"] || "";
1670
1634
  const method = request.method();
1671
1635
  const postData = method !== "GET" && method !== "HEAD" ? request.postDataBuffer() : void 0;
1672
- const response = await (0, import_got_scraping2.gotScraping)({
1673
- ...SHARED_GOT_OPTIONS2,
1636
+ const response = await (0, import_got_scraping.gotScraping)({
1637
+ ...SHARED_GOT_OPTIONS,
1674
1638
  // 应用通用配置
1675
1639
  url,
1676
1640
  method,
@@ -1682,8 +1646,8 @@ var Interception = {
1682
1646
  headerGeneratorOptions: AntiCheat.getTlsFingerprintOptions(userAgent, resolvedAcceptLanguage),
1683
1647
  // 使用共享的 Agent 单例(keepAlive: false,不会池化连接)
1684
1648
  agent: {
1685
- http: SHARED_HTTP_AGENT2,
1686
- https: SHARED_HTTPS_AGENT2
1649
+ http: SHARED_HTTP_AGENT,
1650
+ https: SHARED_HTTPS_AGENT
1687
1651
  },
1688
1652
  // 超时时间
1689
1653
  timeout: { request: DirectConfig.directTimeout * 1e3 }