@letsscrapedata/controller 0.0.65 → 0.0.66

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
@@ -1,3 +1,29 @@
1
+ // src/types/types.ts
2
+ var ControllerEvent = /* @__PURE__ */ ((ControllerEvent2) => {
3
+ ControllerEvent2["BROWSERCONTEXT_CLOSE"] = "close";
4
+ ControllerEvent2["BROWSERCONTEXT_PAGE"] = "page";
5
+ ControllerEvent2["BROWSERCONTEXT_TARGETCREATED"] = "targetcreated";
6
+ ControllerEvent2["BROWSER_DISCONNECTED"] = "disconnected";
7
+ ControllerEvent2["PAGE_CLOSE"] = "close";
8
+ ControllerEvent2["PAGE_POUP"] = "popup";
9
+ ControllerEvent2["PAGE_REQUEST"] = "request";
10
+ ControllerEvent2["PAGE_RESPONSE"] = "response";
11
+ return ControllerEvent2;
12
+ })(ControllerEvent || {});
13
+ var LsdPageEvent = /* @__PURE__ */ ((LsdPageEvent2) => {
14
+ LsdPageEvent2["PAGE_CLOSE"] = "pageClose";
15
+ LsdPageEvent2["PAGE_POPUP"] = "pagePopup";
16
+ return LsdPageEvent2;
17
+ })(LsdPageEvent || {});
18
+ var LsdBrowserContextEvent = /* @__PURE__ */ ((LsdBrowserContextEvent2) => {
19
+ LsdBrowserContextEvent2["PAGE_CLOSE"] = "pageClose";
20
+ return LsdBrowserContextEvent2;
21
+ })(LsdBrowserContextEvent || {});
22
+ var LsdBrowserEvent = /* @__PURE__ */ ((LsdBrowserEvent2) => {
23
+ LsdBrowserEvent2["BROWSER_CONTEXT_CLOSE"] = "browserContextClose";
24
+ return LsdBrowserEvent2;
25
+ })(LsdBrowserEvent || {});
26
+
1
27
  // src/utils/log.ts
2
28
  import { log, LogLevel } from "@letsscrapedata/utils";
3
29
  var pkgLog = log;
@@ -9,6 +35,9 @@ function setControllerLogFun(logFun) {
9
35
  return false;
10
36
  }
11
37
  }
38
+ async function logdbg(...args) {
39
+ await pkgLog(LogLevel.DBG, ...args);
40
+ }
12
41
  async function loginfo(...args) {
13
42
  await pkgLog(LogLevel.INF, ...args);
14
43
  }
@@ -372,7 +401,7 @@ var PlaywrightPage = class extends EventEmitter {
372
401
  const cookieItems = await this.#getCookies(page);
373
402
  const domainSet = new Set(cookieItems.map((c) => c.domain));
374
403
  if (domainSet.size !== 1) {
375
- logwarn(`Domains in clearCookies: ${Array.from(domainSet.values())}`);
404
+ logwarn(`##browser LsdPage domains in clearCookies: ${Array.from(domainSet.values())}`);
376
405
  }
377
406
  for (const domain of domainSet.values()) {
378
407
  await browserContext.clearCookies({ domain });
@@ -578,15 +607,15 @@ var PlaywrightPage = class extends EventEmitter {
578
607
  }
579
608
  const page = this.#page;
580
609
  const pageId = this.#pageId;
581
- page.on("close", async () => {
582
- loginfo(`##browser ${pageId} closed`);
610
+ page.on("close" /* PAGE_CLOSE */, async () => {
611
+ loginfo(`##browser page ${pageId} closed @LsdPage`);
583
612
  if (!page.pageInfo) {
584
- logerr(`Logic error in page.on("close")`);
613
+ logerr(`##browser LsdPage logic error in page.on("close")`);
585
614
  }
586
- this.emit("pageClose");
587
- this.#lsdBrowserContext.emit("pageClose", this);
615
+ this.emit("pageClose" /* PAGE_CLOSE */);
616
+ this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
588
617
  });
589
- page.on("popup", (p) => {
618
+ page.on("popup" /* PAGE_POUP */, (p) => {
590
619
  if (p) {
591
620
  let evtData = null;
592
621
  const pageInfo = p.pageInfo;
@@ -600,12 +629,12 @@ var PlaywrightPage = class extends EventEmitter {
600
629
  pageInfo.relatedId = page.pageInfo.taskId;
601
630
  }
602
631
  } else {
603
- logerr(`##browser ${pageId} has popup without page.pageInfo`);
632
+ logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
604
633
  }
605
- loginfo(`##browser ${pageId} has popup ${popupPageId}`);
606
- this.emit("pagePopup", evtData);
634
+ loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
635
+ this.emit("pagePopup" /* PAGE_POPUP */, evtData);
607
636
  } else {
608
- logerr(`##browser ${pageId} has popup page with null page`);
637
+ logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
609
638
  }
610
639
  });
611
640
  }
@@ -620,13 +649,14 @@ var PlaywrightPage = class extends EventEmitter {
620
649
  const currentTime = getCurrentUnixTime();
621
650
  const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
622
651
  this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
623
- this.#pageId = `page-${browserIdx}-${browserContextIdx}-${pageIdx}`;
652
+ this.#pageId = `PlaywrightPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
624
653
  this.#closeWhenFree = false;
625
654
  this.#resquestInterceptionOptions = [];
626
655
  this.#responseInterceptionOptions = [];
627
656
  this.#client = null;
628
657
  this.#responseCb = null;
629
658
  this.#isDebugTask = false;
659
+ loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
630
660
  this.#addPageOn();
631
661
  }
632
662
  async addPreloadScript(scriptOrFunc, arg) {
@@ -707,7 +737,7 @@ var PlaywrightPage = class extends EventEmitter {
707
737
  }
708
738
  async close() {
709
739
  if (this.#status === "closed") {
710
- logwarn(`Page ${this.#pageId} is already closed.`);
740
+ logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
711
741
  return true;
712
742
  } else if (this.#status === "busy") {
713
743
  throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
@@ -718,6 +748,7 @@ var PlaywrightPage = class extends EventEmitter {
718
748
  await this.#page.close();
719
749
  this.#page = null;
720
750
  this.#status = "closed";
751
+ loginfo(`##browser LsdPage ${this.#pageId} is closed`);
721
752
  return true;
722
753
  }
723
754
  closeWhenFree() {
@@ -802,10 +833,11 @@ var PlaywrightPage = class extends EventEmitter {
802
833
  return [];
803
834
  }
804
835
  async free() {
805
- if (this.#status === "free") {
806
- logwarn(`Page ${this.#pageId} is already free.`);
836
+ if (this.#status === "free" && this.pageInfo().openType !== "popup") {
837
+ logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
807
838
  }
808
839
  this.#status = "free";
840
+ logdbg(`##browser LsdPage ${this.#pageId} is freed`);
809
841
  await this.clearRequestInterceptions();
810
842
  await this.clearResponseInterceptions();
811
843
  return true;
@@ -1087,7 +1119,7 @@ var PlaywrightPage = class extends EventEmitter {
1087
1119
  }
1088
1120
  const actOptions = Array.isArray(options) ? options : [options];
1089
1121
  if (actOptions.length <= 0) {
1090
- logwarn("Invalid paras in setRequestInterception");
1122
+ logwarn("##browser LsdPage invalid paras in setRequestInterception");
1091
1123
  return false;
1092
1124
  }
1093
1125
  const firstRequestInterception = this.#resquestInterceptionOptions.length <= 0;
@@ -1110,9 +1142,9 @@ var PlaywrightPage = class extends EventEmitter {
1110
1142
  const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
1111
1143
  if (this.#isDebugTask) {
1112
1144
  if (matchedFlag) {
1113
- logwarn(`##dbg matched request ${request.method()} ${request.url()}`);
1145
+ loginfo(`##browser matched request ${request.method()} ${request.url()}`);
1114
1146
  } else {
1115
- loginfo(`##dbg unmatched request ${request.method()} ${request.url()}`);
1147
+ logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
1116
1148
  }
1117
1149
  }
1118
1150
  if (matchedFlag) {
@@ -1168,9 +1200,9 @@ var PlaywrightPage = class extends EventEmitter {
1168
1200
  }
1169
1201
  if (this.#isDebugTask) {
1170
1202
  if (matchedFlag) {
1171
- logwarn(`##dbg matched response ${request.method()} ${request.url()}`);
1203
+ loginfo(`##browser matched response ${request.method()} ${request.url()}`);
1172
1204
  } else {
1173
- loginfo(`##dbg unmatched response ${request.method()} ${request.url()}`);
1205
+ logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
1174
1206
  }
1175
1207
  }
1176
1208
  if (!matchedFlag) {
@@ -1208,7 +1240,7 @@ var PlaywrightPage = class extends EventEmitter {
1208
1240
  }
1209
1241
  const actOptions = Array.isArray(options) ? options : [options];
1210
1242
  if (actOptions.length <= 0) {
1211
- logwarn("Invalid paras in setResponseInterception");
1243
+ logwarn("##browser LsdPage invalid paras in setResponseInterception");
1212
1244
  return false;
1213
1245
  }
1214
1246
  const firstResponseInterception = this.#responseInterceptionOptions.length <= 0;
@@ -1221,7 +1253,7 @@ var PlaywrightPage = class extends EventEmitter {
1221
1253
  }
1222
1254
  if (firstResponseInterception && this.#responseInterceptionOptions.length > 0) {
1223
1255
  this.#responseCb = this.#responseListener.bind(this);
1224
- this.#page.on("response", this.#responseCb);
1256
+ this.#page.on("response" /* PAGE_RESPONSE */, this.#responseCb);
1225
1257
  }
1226
1258
  return true;
1227
1259
  }
@@ -1269,6 +1301,7 @@ var PlaywrightPage = class extends EventEmitter {
1269
1301
  throw new Error(`Page ${this.#pageId} is already busy!!!`);
1270
1302
  }
1271
1303
  this.#status = "busy";
1304
+ logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
1272
1305
  return true;
1273
1306
  }
1274
1307
  async waitForElement(selector, options = {}) {
@@ -1407,11 +1440,10 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
1407
1440
  for (const page of pages) {
1408
1441
  const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
1409
1442
  const lsdPage = new PlaywrightPage(this, page, pageInfo);
1443
+ this.#lsdPages.push(lsdPage);
1410
1444
  if (this.#maxViewportOfNewPage) {
1411
1445
  await lsdPage.maximizeViewport();
1412
1446
  }
1413
- this.#lsdPages.push(lsdPage);
1414
- loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
1415
1447
  }
1416
1448
  }
1417
1449
  constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, maxViewportOfNewPage = true) {
@@ -1441,8 +1473,9 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
1441
1473
  this.#lsdPages = [];
1442
1474
  this.#nextPageIdx = 1;
1443
1475
  this.#gettingPage = false;
1476
+ loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
1444
1477
  this.#initPages();
1445
- browserContext.on("page", async (page) => {
1478
+ browserContext.on("page" /* BROWSERCONTEXT_PAGE */, async (page) => {
1446
1479
  const pageInfo = page.pageInfo;
1447
1480
  if (pageInfo) {
1448
1481
  const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
@@ -1451,27 +1484,26 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
1451
1484
  const currentTime2 = getCurrentUnixTime2();
1452
1485
  const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
1453
1486
  const lsdPage = new PlaywrightPage(this, page, pageInfo2);
1487
+ this.#lsdPages.push(lsdPage);
1454
1488
  if (this.#maxViewportOfNewPage) {
1455
1489
  await lsdPage.maximizeViewport();
1456
1490
  }
1457
- this.#lsdPages.push(lsdPage);
1458
- loginfo(`##page ${lsdPage.id()} created`);
1459
1491
  }
1460
1492
  });
1461
- browserContext.on("close", (bc) => {
1493
+ browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
1462
1494
  if (browserContext !== bc) {
1463
1495
  logerr(`##browser different browserContext in browserContext.on("close")`);
1464
1496
  }
1465
- this.#lsdBrowser.emit("browserContextClose", this);
1497
+ this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
1466
1498
  });
1467
- this.on("pageClose", (lsdPage) => {
1499
+ this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
1468
1500
  if (!(lsdPage instanceof PlaywrightPage)) {
1469
- logerr(`Invalid data in LsdBrowserContext.on("pageClose)`);
1501
+ logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
1470
1502
  return;
1471
1503
  }
1472
1504
  const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
1473
1505
  if (idx < 0) {
1474
- logerr(`Invalid lsdPage in LsdBrowserContext.on("pageClose)`);
1506
+ logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
1475
1507
  return;
1476
1508
  }
1477
1509
  this.#lsdPages.splice(idx, 1);
@@ -1488,7 +1520,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
1488
1520
  if (this.#browserContext) {
1489
1521
  this.#status = "closed";
1490
1522
  this.#lastStatusUpdateTime = getCurrentUnixTime2();
1491
- loginfo(`browserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
1523
+ loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
1492
1524
  await this.#browserContext.close();
1493
1525
  }
1494
1526
  return true;
@@ -1503,12 +1535,12 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
1503
1535
  await sleep(200);
1504
1536
  }
1505
1537
  }
1506
- logwarn(`Cannot get the gettingLock.`);
1538
+ logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
1507
1539
  return false;
1508
1540
  }
1509
1541
  #freeGettingLock() {
1510
1542
  if (!this.#gettingPage) {
1511
- logwarn(`Getting lock is already free now.`);
1543
+ logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
1512
1544
  }
1513
1545
  this.#gettingPage = false;
1514
1546
  }
@@ -1517,7 +1549,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
1517
1549
  maxPageFreeSeconds = this.#maxPageFreeSeconds;
1518
1550
  }
1519
1551
  if (maxPageFreeSeconds <= 0) {
1520
- logwarn(`Please set valid maxPageFreeSeconds to close free pages`);
1552
+ logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
1521
1553
  return false;
1522
1554
  }
1523
1555
  const gotLock = await this.#tryToGetGettingLock();
@@ -1614,7 +1646,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
1614
1646
  }
1615
1647
  }
1616
1648
  id() {
1617
- return `browserContext-${this.#browserIdx}-${this.#browserContextIdx}`;
1649
+ return `PlaywrightContext-${this.#browserIdx}-${this.#browserContextIdx}`;
1618
1650
  }
1619
1651
  isFree() {
1620
1652
  return this.#status === "free";
@@ -1748,34 +1780,33 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends EventEmitter3 {
1748
1780
  this.#executablePath = executablePath;
1749
1781
  this.#nextBrowserContextIdx = 1;
1750
1782
  this.#closeFreePagesIntervalId = null;
1751
- loginfo(`##browser ${this.id()} ${this.#browserCreationMethod}ed by ${this.#browserControllerType}`);
1783
+ loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
1752
1784
  const browserContexts = browser.contexts();
1753
1785
  if (browserContexts.length > 0) {
1754
- logwarn(`There are ${browserContexts.length} new browserContexts when playwright launches new browser`);
1786
+ logwarn(`##browser LsdBrowser there are ${browserContexts.length} new browserContexts when playwright launches new browser`);
1755
1787
  }
1756
1788
  const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
1757
1789
  for (const browserContext of browserContexts) {
1758
1790
  const lsdBrowserContext = new PlaywrightBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
1759
1791
  this.#lsdBrowserContexts.push(lsdBrowserContext);
1760
- loginfo(`##browserContext ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
1761
1792
  }
1762
- browser.on("disconnected", () => {
1793
+ browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
1763
1794
  loginfo(`##browser ${this.id()} disconnected`);
1764
1795
  if (this.#lsdBrowserContexts.length > 0) {
1765
- logerr(`${this.id()} has browserContexts when disconnected`);
1796
+ logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
1766
1797
  }
1767
1798
  });
1768
- this.on("browserContextClose", (lsdBrowserContext) => {
1799
+ this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
1769
1800
  if (!(lsdBrowserContext instanceof PlaywrightBrowserContext)) {
1770
- logerr(`Invalid data in LsdBrowser.on("browserContextClose)`);
1801
+ logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
1771
1802
  return;
1772
1803
  }
1773
1804
  const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
1774
1805
  if (idx < 0) {
1775
- logerr(`Invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
1806
+ logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
1776
1807
  return;
1777
1808
  }
1778
- loginfo(`##browserContext ${lsdBrowserContext.id()} closed
1809
+ loginfo(`##browser ${lsdBrowserContext.id()} closed
1779
1810
  `);
1780
1811
  this.#lsdBrowserContexts.splice(idx, 1);
1781
1812
  if (this.#lsdBrowserContexts.length === 0) {
@@ -1796,7 +1827,7 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends EventEmitter3 {
1796
1827
  }
1797
1828
  async newBrowserContext(options) {
1798
1829
  if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
1799
- logwarn(`##browser ${this.id()} can not create more new browserContext`);
1830
+ logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
1800
1831
  return null;
1801
1832
  }
1802
1833
  const browserContextOptions = {};
@@ -1815,7 +1846,6 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends EventEmitter3 {
1815
1846
  const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
1816
1847
  const lsdBrowserContext = new PlaywrightBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
1817
1848
  this.#lsdBrowserContexts.push(lsdBrowserContext);
1818
- loginfo(`##browser ${lsdBrowserContext.id()} created`);
1819
1849
  return lsdBrowserContext;
1820
1850
  }
1821
1851
  async close() {
@@ -1826,6 +1856,7 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends EventEmitter3 {
1826
1856
  await lsdBrowserContext.close();
1827
1857
  }
1828
1858
  await this.#browser.close();
1859
+ loginfo(`##browser LsdBrowser ${this.id()} is closed`);
1829
1860
  return true;
1830
1861
  }
1831
1862
  browserContexts() {
@@ -1851,7 +1882,7 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends EventEmitter3 {
1851
1882
  return this.#executablePath;
1852
1883
  }
1853
1884
  id() {
1854
- return `browser-${this.#browserType}-${this.#browserIdx}`;
1885
+ return `PlaywrightBrowser-${this.#browserType}-${this.#browserIdx}`;
1855
1886
  }
1856
1887
  isConnected() {
1857
1888
  return this.#browser.isConnected();
@@ -2387,15 +2418,15 @@ var PuppeteerPage = class extends EventEmitter4 {
2387
2418
  }
2388
2419
  const page = this.#page;
2389
2420
  const pageId = this.#pageId;
2390
- page.on("close", async () => {
2391
- loginfo(`##browser ${pageId} closed`);
2421
+ page.on("close" /* PAGE_CLOSE */, async () => {
2422
+ loginfo(`##browser page ${pageId} closed @LsdPage`);
2392
2423
  if (!page.pageInfo) {
2393
- logerr(`Logic error in page.on("close")`);
2424
+ logerr(`##browser LsdPage logic error in page.on("close")`);
2394
2425
  }
2395
- this.emit("pageClose");
2396
- this.#lsdBrowserContext.emit("pageClose", this);
2426
+ this.emit("pageClose" /* PAGE_CLOSE */);
2427
+ this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
2397
2428
  });
2398
- page.on("popup", (p) => {
2429
+ page.on("popup" /* PAGE_POUP */, (p) => {
2399
2430
  if (p) {
2400
2431
  let evtData = null;
2401
2432
  const pageInfo = p.pageInfo;
@@ -2409,12 +2440,12 @@ var PuppeteerPage = class extends EventEmitter4 {
2409
2440
  pageInfo.relatedId = page.pageInfo.taskId;
2410
2441
  }
2411
2442
  } else {
2412
- logerr(`##browser ${pageId} has popup without page.pageInfo`);
2443
+ logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
2413
2444
  }
2414
- loginfo(`##browser ${pageId} has popup ${popupPageId}`);
2415
- this.emit("pagePopup", evtData);
2445
+ loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
2446
+ this.emit("pagePopup" /* PAGE_POPUP */, evtData);
2416
2447
  } else {
2417
- logerr(`##browser ${pageId} has popup page with null page`);
2448
+ logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
2418
2449
  }
2419
2450
  });
2420
2451
  }
@@ -2429,12 +2460,13 @@ var PuppeteerPage = class extends EventEmitter4 {
2429
2460
  const currentTime = getCurrentUnixTime4();
2430
2461
  const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
2431
2462
  this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
2432
- this.#pageId = `page-${browserIdx}-${browserContextIdx}-${pageIdx}`;
2463
+ this.#pageId = `PuppeteerPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
2433
2464
  this.#closeWhenFree = false;
2434
2465
  this.#requestInterceptionNum = 0;
2435
2466
  this.#responseInterceptionNum = 0;
2436
2467
  this.#client = null;
2437
2468
  this.#isDebugTask = false;
2469
+ loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
2438
2470
  this.#addPageOn();
2439
2471
  }
2440
2472
  async addPreloadScript(scriptOrFunc, arg) {
@@ -2512,7 +2544,7 @@ var PuppeteerPage = class extends EventEmitter4 {
2512
2544
  }
2513
2545
  async close() {
2514
2546
  if (this.#status === "closed") {
2515
- logwarn(`Page ${this.#pageId} is already closed.`);
2547
+ logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
2516
2548
  return true;
2517
2549
  } else if (this.#status === "busy") {
2518
2550
  throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
@@ -2523,6 +2555,7 @@ var PuppeteerPage = class extends EventEmitter4 {
2523
2555
  await this.#page.close();
2524
2556
  this.#page = null;
2525
2557
  this.#status = "closed";
2558
+ loginfo(`##browser LsdPage ${this.#pageId} is closed`);
2526
2559
  return true;
2527
2560
  }
2528
2561
  closeWhenFree() {
@@ -2607,10 +2640,11 @@ var PuppeteerPage = class extends EventEmitter4 {
2607
2640
  return [];
2608
2641
  }
2609
2642
  async free() {
2610
- if (this.#status === "free") {
2611
- logwarn(`Page ${this.#pageId} is already free.`);
2643
+ if (this.#status === "free" && this.pageInfo().openType !== "popup") {
2644
+ logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
2612
2645
  }
2613
2646
  this.#status = "free";
2647
+ logdbg(`##browser LsdPage ${this.#pageId} is freed`);
2614
2648
  await this.clearRequestInterceptions();
2615
2649
  await this.clearResponseInterceptions();
2616
2650
  return true;
@@ -2894,7 +2928,7 @@ var PuppeteerPage = class extends EventEmitter4 {
2894
2928
  }
2895
2929
  const actOptions = Array.isArray(options) ? options : [options];
2896
2930
  if (actOptions.length <= 0) {
2897
- logwarn("Invalid paras in setRequestInterception");
2931
+ logwarn("##browser LsdPage invalid paras in setRequestInterception");
2898
2932
  return false;
2899
2933
  }
2900
2934
  if (this.#requestInterceptionNum <= 0) {
@@ -2903,16 +2937,16 @@ var PuppeteerPage = class extends EventEmitter4 {
2903
2937
  } else {
2904
2938
  this.#requestInterceptionNum++;
2905
2939
  }
2906
- this.#page.on("request", async (request) => {
2940
+ this.#page.on("request" /* PAGE_REQUEST */, async (request) => {
2907
2941
  try {
2908
2942
  for (const option of actOptions) {
2909
2943
  const { requestMatch, action, fulfill } = option;
2910
2944
  const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
2911
2945
  if (this.#isDebugTask) {
2912
2946
  if (matchedFlag) {
2913
- logwarn(`##dbg matched request ${request.method()} ${request.url()}`);
2947
+ loginfo(`##browser matched request ${request.method()} ${request.url()}`);
2914
2948
  } else {
2915
- loginfo(`##dbg unmatched request ${request.method()} ${request.url()}`);
2949
+ logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
2916
2950
  }
2917
2951
  }
2918
2952
  if (matchedFlag) {
@@ -2949,11 +2983,11 @@ var PuppeteerPage = class extends EventEmitter4 {
2949
2983
  }
2950
2984
  const actOptions = Array.isArray(options) ? options : [options];
2951
2985
  if (actOptions.length <= 0) {
2952
- logwarn("Invalid paras in setResponseInterception");
2986
+ logwarn("##browser LsdPage invalid paras in setResponseInterception");
2953
2987
  return false;
2954
2988
  }
2955
2989
  this.#responseInterceptionNum++;
2956
- this.#page.on("response", async (response) => {
2990
+ this.#page.on("response" /* PAGE_RESPONSE */, async (response) => {
2957
2991
  try {
2958
2992
  if (!response.ok() || !this.#page) {
2959
2993
  return false;
@@ -2976,9 +3010,9 @@ var PuppeteerPage = class extends EventEmitter4 {
2976
3010
  }
2977
3011
  if (this.#isDebugTask) {
2978
3012
  if (matchedFlag) {
2979
- logwarn(`##dbg matched response ${request.method()} ${request.url()}`);
3013
+ loginfo(`##browser matched response ${request.method()} ${request.url()}`);
2980
3014
  } else {
2981
- loginfo(`##dbg unmatched response ${request.method()} ${request.url()}`);
3015
+ logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
2982
3016
  }
2983
3017
  }
2984
3018
  if (!matchedFlag) {
@@ -2997,6 +3031,7 @@ var PuppeteerPage = class extends EventEmitter4 {
2997
3031
  requestData,
2998
3032
  responseData
2999
3033
  });
3034
+ loginfo(`##browser cache matched response: ${requestUrl}`);
3000
3035
  }
3001
3036
  if (typeof handler === "function") {
3002
3037
  const pageData = { pageUrl, cookies: "" };
@@ -3062,6 +3097,7 @@ var PuppeteerPage = class extends EventEmitter4 {
3062
3097
  throw new Error(`Page ${this.#pageId} is already busy!!!`);
3063
3098
  }
3064
3099
  this.#status = "busy";
3100
+ logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
3065
3101
  return true;
3066
3102
  }
3067
3103
  async waitForElement(selector, options = {}) {
@@ -3172,14 +3208,13 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
3172
3208
  for (const page of pages) {
3173
3209
  const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
3174
3210
  const lsdPage = new PuppeteerPage(this, page, pageInfo);
3211
+ this.#lsdPages.push(lsdPage);
3175
3212
  if (this.#maxViewportOfNewPage) {
3176
3213
  await lsdPage.maximizeViewport();
3177
3214
  }
3178
3215
  if (this.#userAgent) {
3179
3216
  await lsdPage.setUserAgent(this.#userAgent);
3180
3217
  }
3181
- this.#lsdPages.push(lsdPage);
3182
- loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
3183
3218
  }
3184
3219
  }
3185
3220
  constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, userAgent = "", maxViewportOfNewPage = true) {
@@ -3208,8 +3243,9 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
3208
3243
  this.#lsdPages = [];
3209
3244
  this.#nextPageIdx = 1;
3210
3245
  this.#gettingPage = false;
3246
+ loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
3211
3247
  this.#initPages();
3212
- browserContext.on("targetcreated", async (p) => {
3248
+ browserContext.on("targetcreated" /* BROWSERCONTEXT_TARGETCREATED */, async (p) => {
3213
3249
  if (p.type() === "page") {
3214
3250
  const page = await p.page();
3215
3251
  if (!page) {
@@ -3223,30 +3259,36 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
3223
3259
  const currentTime2 = getCurrentUnixTime5();
3224
3260
  const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
3225
3261
  const lsdPage = new PuppeteerPage(this, page, pageInfo2);
3226
- if (this.#maxViewportOfNewPage) {
3227
- await lsdPage.maximizeViewport();
3228
- }
3262
+ this.#lsdPages.push(lsdPage);
3229
3263
  if (this.#userAgent) {
3230
3264
  await lsdPage.setUserAgent(this.#userAgent);
3231
3265
  }
3232
- this.#lsdPages.push(lsdPage);
3233
- loginfo(`##page ${lsdPage.id()} created`);
3266
+ if (this.#maxViewportOfNewPage) {
3267
+ await lsdPage.maximizeViewport();
3268
+ }
3234
3269
  }
3235
3270
  }
3236
3271
  });
3237
- this.on("pageClose", (lsdPage) => {
3272
+ browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
3273
+ logerr(`##browser LsdBrowserContext puppeteer BrowserContext receives close event`);
3274
+ if (browserContext !== bc) {
3275
+ logerr(`##browser LsdBrowserContext different browserContext in browserContext.on("close")`);
3276
+ }
3277
+ this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
3278
+ });
3279
+ this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
3238
3280
  if (!(lsdPage instanceof PuppeteerPage)) {
3239
- logerr(`Invalid data in LsdBrowserContext.on("pageClose)`);
3281
+ logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
3240
3282
  return;
3241
3283
  }
3242
3284
  const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
3243
3285
  if (idx < 0) {
3244
- logerr(`Invalid lsdPage in LsdBrowserContext.on("pageClose)`);
3286
+ logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
3245
3287
  return;
3246
3288
  }
3247
3289
  this.#lsdPages.splice(idx, 1);
3248
3290
  if (this.#lsdPages.length === 0) {
3249
- this.#lsdBrowser.emit("browserContextClose", this);
3291
+ this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
3250
3292
  }
3251
3293
  return;
3252
3294
  });
@@ -3261,7 +3303,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
3261
3303
  if (this.#browserContext) {
3262
3304
  this.#status = "closed";
3263
3305
  this.#lastStatusUpdateTime = getCurrentUnixTime5();
3264
- loginfo(`browserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
3306
+ loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
3265
3307
  if (this.#browserContextCreationMethod !== "launch") {
3266
3308
  await this.#browserContext.close();
3267
3309
  }
@@ -3278,12 +3320,12 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
3278
3320
  await sleep2(200);
3279
3321
  }
3280
3322
  }
3281
- logwarn(`Cannot get the gettingLock.`);
3323
+ logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
3282
3324
  return false;
3283
3325
  }
3284
3326
  #freeGettingLock() {
3285
3327
  if (!this.#gettingPage) {
3286
- logwarn(`Getting lock is already free now.`);
3328
+ logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
3287
3329
  }
3288
3330
  this.#gettingPage = false;
3289
3331
  }
@@ -3292,7 +3334,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
3292
3334
  maxPageFreeSeconds = this.#maxPageFreeSeconds;
3293
3335
  }
3294
3336
  if (maxPageFreeSeconds <= 0) {
3295
- logwarn(`Please set valid maxPageFreeSeconds to close free pages`);
3337
+ logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
3296
3338
  return false;
3297
3339
  }
3298
3340
  const gotLock = await this.#tryToGetGettingLock();
@@ -3391,7 +3433,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
3391
3433
  }
3392
3434
  }
3393
3435
  id() {
3394
- return `browserContext-${this.#browserIdx}-${this.#browserContextIdx}`;
3436
+ return `PuppeteerContext-${this.#browserIdx}-${this.#browserContextIdx}`;
3395
3437
  }
3396
3438
  isIncognito() {
3397
3439
  return this.#incognito;
@@ -3425,7 +3467,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
3425
3467
  }
3426
3468
  if (localStorageOrigins.length > 0) {
3427
3469
  await origPage.setRequestInterception(true);
3428
- origPage.on("request", (request) => {
3470
+ origPage.on("request" /* PAGE_REQUEST */, (request) => {
3429
3471
  request.respond({
3430
3472
  status: 200,
3431
3473
  // contentType: "text/html; charset=utf-8", // "text/plain",
@@ -3528,28 +3570,27 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends EventEmitter6 {
3528
3570
  this.#executablePath = executablePath;
3529
3571
  this.#nextBrowserContextIdx = 1;
3530
3572
  this.#closeFreePagesIntervalId = null;
3531
- loginfo(`##browser ${this.#browserType} ${this.id()} ${this.#browserCreationMethod}ed by ${this.#browserControllerType}`);
3573
+ loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
3532
3574
  const browserContexts = browser.browserContexts();
3533
3575
  const incognito = typeof options?.incognito === "boolean" ? options.incognito : false;
3534
3576
  for (const browserContext of browserContexts) {
3535
3577
  const lsdBrowserContext = new PuppeteerBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), this.#userAgent(), maxViewportOfNewPage);
3536
3578
  this.#lsdBrowserContexts.push(lsdBrowserContext);
3537
- loginfo(`##browser ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
3538
3579
  }
3539
- browser.on("disconnected", () => {
3580
+ browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
3540
3581
  loginfo(`##browser ${this.id()} disconnected`);
3541
3582
  if (this.#lsdBrowserContexts.length > 0) {
3542
- logerr(`${this.id()} has browserContexts when disconnected`);
3583
+ logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
3543
3584
  }
3544
3585
  });
3545
- this.on("browserContextClose", (lsdBrowserContext) => {
3586
+ this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
3546
3587
  if (!(lsdBrowserContext instanceof PuppeteerBrowserContext)) {
3547
- logerr(`Invalid data in LsdBrowser.on("browserContextClose)`);
3588
+ logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
3548
3589
  return;
3549
3590
  }
3550
3591
  const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
3551
3592
  if (idx < 0) {
3552
- logerr(`Invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
3593
+ logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
3553
3594
  return;
3554
3595
  }
3555
3596
  loginfo(`##browser ${lsdBrowserContext.id()} closed
@@ -3573,7 +3614,7 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends EventEmitter6 {
3573
3614
  }
3574
3615
  async newBrowserContext(options) {
3575
3616
  if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
3576
- logwarn(`##browser ${this.id()} can not create more new browserContext`);
3617
+ logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
3577
3618
  return null;
3578
3619
  }
3579
3620
  const browserContextOptions = {};
@@ -3586,7 +3627,6 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends EventEmitter6 {
3586
3627
  const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
3587
3628
  const lsdBrowserContext = new PuppeteerBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), userAgent, maxViewportOfNewPage);
3588
3629
  this.#lsdBrowserContexts.push(lsdBrowserContext);
3589
- loginfo(`##browser ${lsdBrowserContext.id()} created`);
3590
3630
  return lsdBrowserContext;
3591
3631
  }
3592
3632
  async close() {
@@ -3597,6 +3637,7 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends EventEmitter6 {
3597
3637
  await lsdBrowserContext.close();
3598
3638
  }
3599
3639
  await this.#browser.close();
3640
+ loginfo(`##browser LsdBrowser ${this.id()} is closed`);
3600
3641
  return true;
3601
3642
  }
3602
3643
  browserContexts() {
@@ -3622,7 +3663,7 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends EventEmitter6 {
3622
3663
  return this.#executablePath;
3623
3664
  }
3624
3665
  id() {
3625
- return `browser-${this.#browserIdx}`;
3666
+ return `PuppeteerBrowser-${this.#browserIdx}`;
3626
3667
  }
3627
3668
  isConnected() {
3628
3669
  return this.#browser.connected;
@@ -4367,7 +4408,7 @@ var PatchrightPage = class extends EventEmitter8 {
4367
4408
  const cookieItems = await this.#getCookies(page);
4368
4409
  const domainSet = new Set(cookieItems.map((c) => c.domain));
4369
4410
  if (domainSet.size !== 1) {
4370
- logwarn(`Domains in clearCookies: ${Array.from(domainSet.values())}`);
4411
+ logwarn(`##browser LsdPage domains in clearCookies: ${Array.from(domainSet.values())}`);
4371
4412
  }
4372
4413
  for (const domain of domainSet.values()) {
4373
4414
  await browserContext.clearCookies({ domain });
@@ -4573,15 +4614,15 @@ var PatchrightPage = class extends EventEmitter8 {
4573
4614
  }
4574
4615
  const page = this.#page;
4575
4616
  const pageId = this.#pageId;
4576
- page.on("close", async () => {
4577
- loginfo(`##browser ${pageId} closed`);
4617
+ page.on("close" /* PAGE_CLOSE */, async () => {
4618
+ loginfo(`##browser page ${pageId} closed @LsdPage`);
4578
4619
  if (!page.pageInfo) {
4579
- logerr(`Logic error in page.on("close")`);
4620
+ logerr(`##browser LsdPage logic error in page.on("close")`);
4580
4621
  }
4581
- this.emit("pageClose");
4582
- this.#lsdBrowserContext.emit("pageClose", this);
4622
+ this.emit("pageClose" /* PAGE_CLOSE */);
4623
+ this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
4583
4624
  });
4584
- page.on("popup", (p) => {
4625
+ page.on("popup" /* PAGE_POUP */, (p) => {
4585
4626
  if (p) {
4586
4627
  let evtData = null;
4587
4628
  const pageInfo = p.pageInfo;
@@ -4595,12 +4636,12 @@ var PatchrightPage = class extends EventEmitter8 {
4595
4636
  pageInfo.relatedId = page.pageInfo.taskId;
4596
4637
  }
4597
4638
  } else {
4598
- logerr(`##browser ${pageId} has popup without page.pageInfo`);
4639
+ logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
4599
4640
  }
4600
- loginfo(`##browser ${pageId} has popup ${popupPageId}`);
4601
- this.emit("pagePopup", evtData);
4641
+ loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
4642
+ this.emit("pagePopup" /* PAGE_POPUP */, evtData);
4602
4643
  } else {
4603
- logerr(`##browser ${pageId} has popup page with null page`);
4644
+ logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
4604
4645
  }
4605
4646
  });
4606
4647
  }
@@ -4615,13 +4656,14 @@ var PatchrightPage = class extends EventEmitter8 {
4615
4656
  const currentTime = getCurrentUnixTime7();
4616
4657
  const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
4617
4658
  this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
4618
- this.#pageId = `page-${browserIdx}-${browserContextIdx}-${pageIdx}`;
4659
+ this.#pageId = `PatchrightPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
4619
4660
  this.#closeWhenFree = false;
4620
4661
  this.#resquestInterceptionOptions = [];
4621
4662
  this.#responseInterceptionOptions = [];
4622
4663
  this.#client = null;
4623
4664
  this.#responseCb = null;
4624
4665
  this.#isDebugTask = false;
4666
+ loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
4625
4667
  this.#addPageOn();
4626
4668
  }
4627
4669
  async addPreloadScript(scriptOrFunc, arg) {
@@ -4702,7 +4744,7 @@ var PatchrightPage = class extends EventEmitter8 {
4702
4744
  }
4703
4745
  async close() {
4704
4746
  if (this.#status === "closed") {
4705
- logwarn(`Page ${this.#pageId} is already closed.`);
4747
+ logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
4706
4748
  return true;
4707
4749
  } else if (this.#status === "busy") {
4708
4750
  throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
@@ -4713,6 +4755,7 @@ var PatchrightPage = class extends EventEmitter8 {
4713
4755
  await this.#page.close();
4714
4756
  this.#page = null;
4715
4757
  this.#status = "closed";
4758
+ loginfo(`##browser LsdPage ${this.#pageId} is closed`);
4716
4759
  return true;
4717
4760
  }
4718
4761
  closeWhenFree() {
@@ -4796,10 +4839,11 @@ var PatchrightPage = class extends EventEmitter8 {
4796
4839
  return [];
4797
4840
  }
4798
4841
  async free() {
4799
- if (this.#status === "free") {
4800
- logwarn(`Page ${this.#pageId} is already free.`);
4842
+ if (this.#status === "free" && this.pageInfo().openType !== "popup") {
4843
+ logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
4801
4844
  }
4802
4845
  this.#status = "free";
4846
+ logdbg(`##browser LsdPage ${this.#pageId} is freed`);
4803
4847
  await this.clearRequestInterceptions();
4804
4848
  await this.clearResponseInterceptions();
4805
4849
  return true;
@@ -5081,7 +5125,7 @@ var PatchrightPage = class extends EventEmitter8 {
5081
5125
  }
5082
5126
  const actOptions = Array.isArray(options) ? options : [options];
5083
5127
  if (actOptions.length <= 0) {
5084
- logwarn("Invalid paras in setRequestInterception");
5128
+ logwarn("##browser LsdPage invalid paras in setRequestInterception");
5085
5129
  return false;
5086
5130
  }
5087
5131
  const firstRequestInterception = this.#resquestInterceptionOptions.length <= 0;
@@ -5104,9 +5148,9 @@ var PatchrightPage = class extends EventEmitter8 {
5104
5148
  const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
5105
5149
  if (this.#isDebugTask) {
5106
5150
  if (matchedFlag) {
5107
- logwarn(`##dbg matched request ${request.method()} ${request.url()}`);
5151
+ loginfo(`##browser matched request ${request.method()} ${request.url()}`);
5108
5152
  } else {
5109
- loginfo(`##dbg unmatched request ${request.method()} ${request.url()}`);
5153
+ logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
5110
5154
  }
5111
5155
  }
5112
5156
  if (matchedFlag) {
@@ -5162,9 +5206,9 @@ var PatchrightPage = class extends EventEmitter8 {
5162
5206
  }
5163
5207
  if (this.#isDebugTask) {
5164
5208
  if (matchedFlag) {
5165
- logwarn(`##dbg matched response ${request.method()} ${request.url()}`);
5209
+ loginfo(`##browser matched response ${request.method()} ${request.url()}`);
5166
5210
  } else {
5167
- loginfo(`##dbg unmatched response ${request.method()} ${request.url()}`);
5211
+ logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
5168
5212
  }
5169
5213
  }
5170
5214
  if (!matchedFlag) {
@@ -5202,7 +5246,7 @@ var PatchrightPage = class extends EventEmitter8 {
5202
5246
  }
5203
5247
  const actOptions = Array.isArray(options) ? options : [options];
5204
5248
  if (actOptions.length <= 0) {
5205
- logwarn("Invalid paras in setResponseInterception");
5249
+ logwarn("##browser LsdPage invalid paras in setResponseInterception");
5206
5250
  return false;
5207
5251
  }
5208
5252
  const firstResponseInterception = this.#responseInterceptionOptions.length <= 0;
@@ -5215,7 +5259,7 @@ var PatchrightPage = class extends EventEmitter8 {
5215
5259
  }
5216
5260
  if (firstResponseInterception && this.#responseInterceptionOptions.length > 0) {
5217
5261
  this.#responseCb = this.#responseListener.bind(this);
5218
- this.#page.on("response", this.#responseCb);
5262
+ this.#page.on("response" /* PAGE_RESPONSE */, this.#responseCb);
5219
5263
  }
5220
5264
  return true;
5221
5265
  }
@@ -5263,6 +5307,7 @@ var PatchrightPage = class extends EventEmitter8 {
5263
5307
  throw new Error(`Page ${this.#pageId} is already busy!!!`);
5264
5308
  }
5265
5309
  this.#status = "busy";
5310
+ logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
5266
5311
  return true;
5267
5312
  }
5268
5313
  async waitForElement(selector, options = {}) {
@@ -5401,11 +5446,10 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
5401
5446
  for (const page of pages) {
5402
5447
  const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
5403
5448
  const lsdPage = new PatchrightPage(this, page, pageInfo);
5449
+ this.#lsdPages.push(lsdPage);
5404
5450
  if (this.#maxViewportOfNewPage) {
5405
5451
  await lsdPage.maximizeViewport();
5406
5452
  }
5407
- this.#lsdPages.push(lsdPage);
5408
- loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
5409
5453
  }
5410
5454
  }
5411
5455
  constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, maxViewportOfNewPage = true) {
@@ -5435,8 +5479,9 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
5435
5479
  this.#lsdPages = [];
5436
5480
  this.#nextPageIdx = 1;
5437
5481
  this.#gettingPage = false;
5482
+ loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
5438
5483
  this.#initPages();
5439
- browserContext.on("page", async (page) => {
5484
+ browserContext.on("page" /* BROWSERCONTEXT_PAGE */, async (page) => {
5440
5485
  const pageInfo = page.pageInfo;
5441
5486
  if (pageInfo) {
5442
5487
  const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
@@ -5445,27 +5490,26 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
5445
5490
  const currentTime2 = getCurrentUnixTime8();
5446
5491
  const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
5447
5492
  const lsdPage = new PatchrightPage(this, page, pageInfo2);
5493
+ this.#lsdPages.push(lsdPage);
5448
5494
  if (this.#maxViewportOfNewPage) {
5449
5495
  await lsdPage.maximizeViewport();
5450
5496
  }
5451
- this.#lsdPages.push(lsdPage);
5452
- loginfo(`##page ${lsdPage.id()} created`);
5453
5497
  }
5454
5498
  });
5455
- browserContext.on("close", (bc) => {
5499
+ browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
5456
5500
  if (browserContext !== bc) {
5457
- logerr(`##browser different browserContext in browserContext.on("close")`);
5501
+ logerr(`##browser LsdBrowserContext different browserContext in browserContext.on("close")`);
5458
5502
  }
5459
- this.#lsdBrowser.emit("browserContextClose", this);
5503
+ this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
5460
5504
  });
5461
- this.on("pageClose", (lsdPage) => {
5505
+ this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
5462
5506
  if (!(lsdPage instanceof PatchrightPage)) {
5463
- logerr(`Invalid data in LsdBrowserContext.on("pageClose)`);
5507
+ logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
5464
5508
  return;
5465
5509
  }
5466
5510
  const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
5467
5511
  if (idx < 0) {
5468
- logerr(`Invalid lsdPage in LsdBrowserContext.on("pageClose)`);
5512
+ logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
5469
5513
  return;
5470
5514
  }
5471
5515
  this.#lsdPages.splice(idx, 1);
@@ -5482,7 +5526,7 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
5482
5526
  if (this.#browserContext) {
5483
5527
  this.#status = "closed";
5484
5528
  this.#lastStatusUpdateTime = getCurrentUnixTime8();
5485
- loginfo(`browserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
5529
+ loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
5486
5530
  await this.#browserContext.close();
5487
5531
  }
5488
5532
  return true;
@@ -5497,12 +5541,12 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
5497
5541
  await sleep3(200);
5498
5542
  }
5499
5543
  }
5500
- logwarn(`Cannot get the gettingLock.`);
5544
+ logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
5501
5545
  return false;
5502
5546
  }
5503
5547
  #freeGettingLock() {
5504
5548
  if (!this.#gettingPage) {
5505
- logwarn(`Getting lock is already free now.`);
5549
+ logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
5506
5550
  }
5507
5551
  this.#gettingPage = false;
5508
5552
  }
@@ -5511,7 +5555,7 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
5511
5555
  maxPageFreeSeconds = this.#maxPageFreeSeconds;
5512
5556
  }
5513
5557
  if (maxPageFreeSeconds <= 0) {
5514
- logwarn(`Please set valid maxPageFreeSeconds to close free pages`);
5558
+ logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
5515
5559
  return false;
5516
5560
  }
5517
5561
  const gotLock = await this.#tryToGetGettingLock();
@@ -5608,7 +5652,7 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
5608
5652
  }
5609
5653
  }
5610
5654
  id() {
5611
- return `browserContext-${this.#browserIdx}-${this.#browserContextIdx}`;
5655
+ return `PatchrightContext-${this.#browserIdx}-${this.#browserContextIdx}`;
5612
5656
  }
5613
5657
  isFree() {
5614
5658
  return this.#status === "free";
@@ -5742,34 +5786,33 @@ var PatchrightBrowser = class _PatchrightBrowser extends EventEmitter10 {
5742
5786
  this.#executablePath = executablePath;
5743
5787
  this.#nextBrowserContextIdx = 1;
5744
5788
  this.#closeFreePagesIntervalId = null;
5745
- loginfo(`##browser ${this.id()} ${this.#browserCreationMethod}ed by ${this.#browserControllerType}`);
5789
+ loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
5746
5790
  const browserContexts = browser.contexts();
5747
5791
  if (browserContexts.length > 0) {
5748
- logwarn(`There are ${browserContexts.length} new browserContexts when playwright launches new browser`);
5792
+ logwarn(`##browser LsdBrowser there are ${browserContexts.length} new browserContexts when playwright launches new browser`);
5749
5793
  }
5750
5794
  const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
5751
5795
  for (const browserContext of browserContexts) {
5752
5796
  const lsdBrowserContext = new PatchrightBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
5753
5797
  this.#lsdBrowserContexts.push(lsdBrowserContext);
5754
- loginfo(`##browserContext ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
5755
5798
  }
5756
- browser.on("disconnected", () => {
5799
+ browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
5757
5800
  loginfo(`##browser ${this.id()} disconnected`);
5758
5801
  if (this.#lsdBrowserContexts.length > 0) {
5759
- logerr(`${this.id()} has browserContexts when disconnected`);
5802
+ logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
5760
5803
  }
5761
5804
  });
5762
- this.on("browserContextClose", (lsdBrowserContext) => {
5805
+ this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
5763
5806
  if (!(lsdBrowserContext instanceof PatchrightBrowserContext)) {
5764
- logerr(`Invalid data in LsdBrowser.on("browserContextClose)`);
5807
+ logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
5765
5808
  return;
5766
5809
  }
5767
5810
  const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
5768
5811
  if (idx < 0) {
5769
- logerr(`Invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
5812
+ logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
5770
5813
  return;
5771
5814
  }
5772
- loginfo(`##browserContext ${lsdBrowserContext.id()} closed
5815
+ loginfo(`##browser ${lsdBrowserContext.id()} closed
5773
5816
  `);
5774
5817
  this.#lsdBrowserContexts.splice(idx, 1);
5775
5818
  if (this.#lsdBrowserContexts.length === 0) {
@@ -5790,7 +5833,7 @@ var PatchrightBrowser = class _PatchrightBrowser extends EventEmitter10 {
5790
5833
  }
5791
5834
  async newBrowserContext(options) {
5792
5835
  if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
5793
- logwarn(`##browser ${this.id()} can not create more new browserContext`);
5836
+ logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
5794
5837
  return null;
5795
5838
  }
5796
5839
  const browserContextOptions = {};
@@ -5809,7 +5852,6 @@ var PatchrightBrowser = class _PatchrightBrowser extends EventEmitter10 {
5809
5852
  const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
5810
5853
  const lsdBrowserContext = new PatchrightBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
5811
5854
  this.#lsdBrowserContexts.push(lsdBrowserContext);
5812
- loginfo(`##browser ${lsdBrowserContext.id()} created`);
5813
5855
  return lsdBrowserContext;
5814
5856
  }
5815
5857
  async close() {
@@ -5820,6 +5862,7 @@ var PatchrightBrowser = class _PatchrightBrowser extends EventEmitter10 {
5820
5862
  await lsdBrowserContext.close();
5821
5863
  }
5822
5864
  await this.#browser.close();
5865
+ loginfo(`##browser LsdBrowser ${this.id()} is closed`);
5823
5866
  return true;
5824
5867
  }
5825
5868
  browserContexts() {
@@ -5845,7 +5888,7 @@ var PatchrightBrowser = class _PatchrightBrowser extends EventEmitter10 {
5845
5888
  return this.#executablePath;
5846
5889
  }
5847
5890
  id() {
5848
- return `browser-${this.#browserType}-${this.#browserIdx}`;
5891
+ return `PatchrightBrowser-${this.#browserType}-${this.#browserIdx}`;
5849
5892
  }
5850
5893
  isConnected() {
5851
5894
  return this.#browser.isConnected();
@@ -6217,7 +6260,7 @@ var CamoufoxPage = class extends EventEmitter11 {
6217
6260
  const cookieItems = await this.#getCookies(page);
6218
6261
  const domainSet = new Set(cookieItems.map((c) => c.domain));
6219
6262
  if (domainSet.size !== 1) {
6220
- logwarn(`Domains in clearCookies: ${Array.from(domainSet.values())}`);
6263
+ logwarn(`##browser LsdPage domains in clearCookies: ${Array.from(domainSet.values())}`);
6221
6264
  }
6222
6265
  for (const domain of domainSet.values()) {
6223
6266
  await browserContext.clearCookies({ domain });
@@ -6423,15 +6466,15 @@ var CamoufoxPage = class extends EventEmitter11 {
6423
6466
  }
6424
6467
  const page = this.#page;
6425
6468
  const pageId = this.#pageId;
6426
- page.on("close", async () => {
6427
- loginfo(`##browser ${pageId} closed`);
6469
+ page.on("close" /* PAGE_CLOSE */, async () => {
6470
+ loginfo(`##browser page ${pageId} closed @LsdPage`);
6428
6471
  if (!page.pageInfo) {
6429
- logerr(`Logic error in page.on("close")`);
6472
+ logerr(`##browser LsdPage logic error in page.on("close")`);
6430
6473
  }
6431
- this.emit("pageClose");
6432
- this.#lsdBrowserContext.emit("pageClose", this);
6474
+ this.emit("pageClose" /* PAGE_CLOSE */);
6475
+ this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
6433
6476
  });
6434
- page.on("popup", (p) => {
6477
+ page.on("popup" /* PAGE_POUP */, (p) => {
6435
6478
  if (p) {
6436
6479
  let evtData = null;
6437
6480
  const pageInfo = p.pageInfo;
@@ -6445,12 +6488,12 @@ var CamoufoxPage = class extends EventEmitter11 {
6445
6488
  pageInfo.relatedId = page.pageInfo.taskId;
6446
6489
  }
6447
6490
  } else {
6448
- logerr(`##browser ${pageId} has popup without page.pageInfo`);
6491
+ logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
6449
6492
  }
6450
- loginfo(`##browser ${pageId} has popup ${popupPageId}`);
6451
- this.emit("pagePopup", evtData);
6493
+ loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
6494
+ this.emit("pagePopup" /* PAGE_POPUP */, evtData);
6452
6495
  } else {
6453
- logerr(`##browser ${pageId} has popup page with null page`);
6496
+ logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
6454
6497
  }
6455
6498
  });
6456
6499
  }
@@ -6465,13 +6508,14 @@ var CamoufoxPage = class extends EventEmitter11 {
6465
6508
  const currentTime = getCurrentUnixTime10();
6466
6509
  const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
6467
6510
  this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
6468
- this.#pageId = `page-${browserIdx}-${browserContextIdx}-${pageIdx}`;
6511
+ this.#pageId = `CamoufoxPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
6469
6512
  this.#closeWhenFree = false;
6470
6513
  this.#resquestInterceptionOptions = [];
6471
6514
  this.#responseInterceptionOptions = [];
6472
6515
  this.#client = null;
6473
6516
  this.#responseCb = null;
6474
6517
  this.#isDebugTask = false;
6518
+ loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
6475
6519
  this.#addPageOn();
6476
6520
  }
6477
6521
  async addPreloadScript() {
@@ -6539,7 +6583,7 @@ var CamoufoxPage = class extends EventEmitter11 {
6539
6583
  }
6540
6584
  async close() {
6541
6585
  if (this.#status === "closed") {
6542
- logwarn(`Page ${this.#pageId} is already closed.`);
6586
+ logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
6543
6587
  return true;
6544
6588
  } else if (this.#status === "busy") {
6545
6589
  throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
@@ -6550,6 +6594,7 @@ var CamoufoxPage = class extends EventEmitter11 {
6550
6594
  await this.#page.close();
6551
6595
  this.#page = null;
6552
6596
  this.#status = "closed";
6597
+ loginfo(`##browser LsdPage ${this.#pageId} is closed`);
6553
6598
  return true;
6554
6599
  }
6555
6600
  closeWhenFree() {
@@ -6634,10 +6679,11 @@ var CamoufoxPage = class extends EventEmitter11 {
6634
6679
  return [];
6635
6680
  }
6636
6681
  async free() {
6637
- if (this.#status === "free") {
6638
- logwarn(`Page ${this.#pageId} is already free.`);
6682
+ if (this.#status === "free" && this.pageInfo().openType !== "popup") {
6683
+ logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
6639
6684
  }
6640
6685
  this.#status = "free";
6686
+ logdbg(`##browser LsdPage ${this.#pageId} is freed`);
6641
6687
  await this.clearRequestInterceptions();
6642
6688
  await this.clearResponseInterceptions();
6643
6689
  return true;
@@ -6919,7 +6965,7 @@ var CamoufoxPage = class extends EventEmitter11 {
6919
6965
  }
6920
6966
  const actOptions = Array.isArray(options) ? options : [options];
6921
6967
  if (actOptions.length <= 0) {
6922
- logwarn("Invalid paras in setRequestInterception");
6968
+ logwarn("##browser LsdPage invalid paras in setRequestInterception");
6923
6969
  return false;
6924
6970
  }
6925
6971
  const firstRequestInterception = this.#resquestInterceptionOptions.length <= 0;
@@ -6942,9 +6988,9 @@ var CamoufoxPage = class extends EventEmitter11 {
6942
6988
  const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
6943
6989
  if (this.#isDebugTask) {
6944
6990
  if (matchedFlag) {
6945
- logwarn(`##dbg matched request ${request.method()} ${request.url()}`);
6991
+ loginfo(`##browser matched request ${request.method()} ${request.url()}`);
6946
6992
  } else {
6947
- loginfo(`##dbg unmatched request ${request.method()} ${request.url()}`);
6993
+ logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
6948
6994
  }
6949
6995
  }
6950
6996
  if (matchedFlag) {
@@ -7000,9 +7046,9 @@ var CamoufoxPage = class extends EventEmitter11 {
7000
7046
  }
7001
7047
  if (this.#isDebugTask) {
7002
7048
  if (matchedFlag) {
7003
- logwarn(`##dbg matched response ${request.method()} ${request.url()}`);
7049
+ loginfo(`##browser matched response ${request.method()} ${request.url()}`);
7004
7050
  } else {
7005
- loginfo(`##dbg unmatched response ${request.method()} ${request.url()}`);
7051
+ logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
7006
7052
  }
7007
7053
  }
7008
7054
  if (!matchedFlag) {
@@ -7040,7 +7086,7 @@ var CamoufoxPage = class extends EventEmitter11 {
7040
7086
  }
7041
7087
  const actOptions = Array.isArray(options) ? options : [options];
7042
7088
  if (actOptions.length <= 0) {
7043
- logwarn("Invalid paras in setResponseInterception");
7089
+ logwarn("##browser LsdPage invalid paras in setResponseInterception");
7044
7090
  return false;
7045
7091
  }
7046
7092
  const firstResponseInterception = this.#responseInterceptionOptions.length <= 0;
@@ -7053,7 +7099,7 @@ var CamoufoxPage = class extends EventEmitter11 {
7053
7099
  }
7054
7100
  if (firstResponseInterception && this.#responseInterceptionOptions.length > 0) {
7055
7101
  this.#responseCb = this.#responseListener.bind(this);
7056
- this.#page.on("response", this.#responseCb);
7102
+ this.#page.on("response" /* PAGE_RESPONSE */, this.#responseCb);
7057
7103
  }
7058
7104
  return true;
7059
7105
  }
@@ -7101,6 +7147,7 @@ var CamoufoxPage = class extends EventEmitter11 {
7101
7147
  throw new Error(`Page ${this.#pageId} is already busy!!!`);
7102
7148
  }
7103
7149
  this.#status = "busy";
7150
+ logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
7104
7151
  return true;
7105
7152
  }
7106
7153
  async waitForElement(selector, options = {}) {
@@ -7239,11 +7286,10 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
7239
7286
  for (const page of pages) {
7240
7287
  const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
7241
7288
  const lsdPage = new CamoufoxPage(this, page, pageInfo);
7289
+ this.#lsdPages.push(lsdPage);
7242
7290
  if (this.#maxViewportOfNewPage) {
7243
7291
  await lsdPage.maximizeViewport();
7244
7292
  }
7245
- this.#lsdPages.push(lsdPage);
7246
- loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
7247
7293
  }
7248
7294
  }
7249
7295
  constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, maxViewportOfNewPage = true) {
@@ -7273,8 +7319,9 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
7273
7319
  this.#lsdPages = [];
7274
7320
  this.#nextPageIdx = 1;
7275
7321
  this.#gettingPage = false;
7322
+ loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
7276
7323
  this.#initPages();
7277
- browserContext.on("page", async (page) => {
7324
+ browserContext.on("page" /* BROWSERCONTEXT_PAGE */, async (page) => {
7278
7325
  const pageInfo = page.pageInfo;
7279
7326
  if (pageInfo) {
7280
7327
  const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
@@ -7283,27 +7330,26 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
7283
7330
  const currentTime2 = getCurrentUnixTime11();
7284
7331
  const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
7285
7332
  const lsdPage = new CamoufoxPage(this, page, pageInfo2);
7333
+ this.#lsdPages.push(lsdPage);
7286
7334
  if (this.#maxViewportOfNewPage) {
7287
7335
  await lsdPage.maximizeViewport();
7288
7336
  }
7289
- this.#lsdPages.push(lsdPage);
7290
- loginfo(`##page ${lsdPage.id()} created`);
7291
7337
  }
7292
7338
  });
7293
- browserContext.on("close", (bc) => {
7339
+ browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
7294
7340
  if (browserContext !== bc) {
7295
- logerr(`##browser different browserContext in browserContext.on("close")`);
7341
+ logerr(`##browser LsdBrowserContext different browserContext in browserContext.on("close")`);
7296
7342
  }
7297
- this.#lsdBrowser.emit("browserContextClose", this);
7343
+ this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
7298
7344
  });
7299
- this.on("pageClose", (lsdPage) => {
7345
+ this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
7300
7346
  if (!(lsdPage instanceof CamoufoxPage)) {
7301
- logerr(`Invalid data in LsdBrowserContext.on("pageClose)`);
7347
+ logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
7302
7348
  return;
7303
7349
  }
7304
7350
  const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
7305
7351
  if (idx < 0) {
7306
- logerr(`Invalid lsdPage in LsdBrowserContext.on("pageClose)`);
7352
+ logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
7307
7353
  return;
7308
7354
  }
7309
7355
  this.#lsdPages.splice(idx, 1);
@@ -7320,7 +7366,7 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
7320
7366
  if (this.#browserContext) {
7321
7367
  this.#status = "closed";
7322
7368
  this.#lastStatusUpdateTime = getCurrentUnixTime11();
7323
- loginfo(`browserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
7369
+ loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
7324
7370
  await this.#browserContext.close();
7325
7371
  }
7326
7372
  return true;
@@ -7335,12 +7381,12 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
7335
7381
  await sleep4(200);
7336
7382
  }
7337
7383
  }
7338
- logwarn(`Cannot get the gettingLock.`);
7384
+ logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
7339
7385
  return false;
7340
7386
  }
7341
7387
  #freeGettingLock() {
7342
7388
  if (!this.#gettingPage) {
7343
- logwarn(`Getting lock is already free now.`);
7389
+ logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
7344
7390
  }
7345
7391
  this.#gettingPage = false;
7346
7392
  }
@@ -7349,7 +7395,7 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
7349
7395
  maxPageFreeSeconds = this.#maxPageFreeSeconds;
7350
7396
  }
7351
7397
  if (maxPageFreeSeconds <= 0) {
7352
- logwarn(`Please set valid maxPageFreeSeconds to close free pages`);
7398
+ logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
7353
7399
  return false;
7354
7400
  }
7355
7401
  const gotLock = await this.#tryToGetGettingLock();
@@ -7446,7 +7492,7 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
7446
7492
  }
7447
7493
  }
7448
7494
  id() {
7449
- return `browserContext-${this.#browserIdx}-${this.#browserContextIdx}`;
7495
+ return `CamoufoxContext-${this.#browserIdx}-${this.#browserContextIdx}`;
7450
7496
  }
7451
7497
  isFree() {
7452
7498
  return this.#status === "free";
@@ -7580,34 +7626,33 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends EventEmitter13 {
7580
7626
  this.#executablePath = executablePath;
7581
7627
  this.#nextBrowserContextIdx = 1;
7582
7628
  this.#closeFreePagesIntervalId = null;
7583
- loginfo(`##browser ${this.id()} ${this.#browserCreationMethod}ed by ${this.#browserControllerType}`);
7629
+ loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
7584
7630
  const browserContexts = browser.contexts();
7585
7631
  if (browserContexts.length > 0) {
7586
- logwarn(`There are ${browserContexts.length} new browserContexts when camoufox launches new browser`);
7632
+ logwarn(`##browser LsdBrowser there are ${browserContexts.length} new browserContexts when camoufox launches new browser`);
7587
7633
  }
7588
7634
  const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
7589
7635
  for (const browserContext of browserContexts) {
7590
7636
  const lsdBrowserContext = new CamoufoxBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
7591
7637
  this.#lsdBrowserContexts.push(lsdBrowserContext);
7592
- loginfo(`##browserContext ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
7593
7638
  }
7594
- browser.on("disconnected", () => {
7639
+ browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
7595
7640
  loginfo(`##browser ${this.id()} disconnected`);
7596
7641
  if (this.#lsdBrowserContexts.length > 0) {
7597
- logerr(`${this.id()} has browserContexts when disconnected`);
7642
+ logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
7598
7643
  }
7599
7644
  });
7600
- this.on("browserContextClose", (lsdBrowserContext) => {
7645
+ this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
7601
7646
  if (!(lsdBrowserContext instanceof CamoufoxBrowserContext)) {
7602
- logerr(`Invalid data in LsdBrowser.on("browserContextClose)`);
7647
+ logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
7603
7648
  return;
7604
7649
  }
7605
7650
  const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
7606
7651
  if (idx < 0) {
7607
- logerr(`Invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
7652
+ logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
7608
7653
  return;
7609
7654
  }
7610
- loginfo(`##browserContext ${lsdBrowserContext.id()} closed
7655
+ loginfo(`##browser ${lsdBrowserContext.id()} closed
7611
7656
  `);
7612
7657
  this.#lsdBrowserContexts.splice(idx, 1);
7613
7658
  if (this.#lsdBrowserContexts.length === 0) {
@@ -7628,7 +7673,7 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends EventEmitter13 {
7628
7673
  }
7629
7674
  async newBrowserContext(options) {
7630
7675
  if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
7631
- logwarn(`##browser ${this.id()} can not create more new browserContext`);
7676
+ logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
7632
7677
  return null;
7633
7678
  }
7634
7679
  const browserContextOptions = {};
@@ -7647,7 +7692,6 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends EventEmitter13 {
7647
7692
  const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
7648
7693
  const lsdBrowserContext = new CamoufoxBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
7649
7694
  this.#lsdBrowserContexts.push(lsdBrowserContext);
7650
- loginfo(`##browser ${lsdBrowserContext.id()} created`);
7651
7695
  return lsdBrowserContext;
7652
7696
  }
7653
7697
  async close() {
@@ -7658,6 +7702,7 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends EventEmitter13 {
7658
7702
  await lsdBrowserContext.close();
7659
7703
  }
7660
7704
  await this.#browser.close();
7705
+ loginfo(`##browser LsdBrowser ${this.id()} is closed`);
7661
7706
  return true;
7662
7707
  }
7663
7708
  browserContexts() {
@@ -7683,7 +7728,7 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends EventEmitter13 {
7683
7728
  return this.#executablePath;
7684
7729
  }
7685
7730
  id() {
7686
- return `browser-${this.#browserType}-${this.#browserIdx}`;
7731
+ return `CamoufoxBrowser-${this.#browserType}-${this.#browserIdx}`;
7687
7732
  }
7688
7733
  isConnected() {
7689
7734
  return this.#browser.isConnected();
@@ -7845,22 +7890,22 @@ var LsdBrowserController = class _LsdBrowserController {
7845
7890
  const actOptions = { closeFreePagesIntervalSeconds, maxBrowserContextsPerBrowser, maxPagesPerBrowserContext, maxPageFreeSeconds, maxViewportOfNewPage, proxy, timeout, args, executablePath, maxWindowSize, headless, minBrowserContexts, incognito, proxyPerBrowserContext, userDataDir, userAgent };
7846
7891
  let idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--incoginto"));
7847
7892
  if (idx >= 0) {
7848
- logwarn(`Please use options.incognito instead when launching new browser.`);
7893
+ logwarn(`##browser controller Please use options.incognito instead when launching new browser.`);
7849
7894
  args.splice(idx, 1);
7850
7895
  }
7851
7896
  idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--proxy-server"));
7852
7897
  if (idx >= 0) {
7853
- logwarn(`Please use options.proxy instead when launching new browser.`);
7898
+ logwarn(`##browser controller Please use options.proxy instead when launching new browser.`);
7854
7899
  args.splice(idx, 1);
7855
7900
  }
7856
7901
  idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--user-data-dir"));
7857
7902
  if (idx >= 0) {
7858
- logwarn(`Please use options.userDataDir instead when launching new browser.`);
7903
+ logwarn(`##browser controller Please use options.userDataDir instead when launching new browser.`);
7859
7904
  args.splice(idx, 1);
7860
7905
  }
7861
7906
  idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--start-maximized"));
7862
7907
  if (idx >= 0) {
7863
- logwarn(`Please use options.maxWindowSize instead when launching new browser.`);
7908
+ logwarn(`##browser controller Please use options.maxWindowSize instead when launching new browser.`);
7864
7909
  args.splice(idx, 1);
7865
7910
  }
7866
7911
  let lsdBrowser;
@@ -8058,7 +8103,7 @@ var LsdBrowserController = class _LsdBrowserController {
8058
8103
  const pids = await getPidsListeningOnPort(port);
8059
8104
  let browserPid = 0;
8060
8105
  if (pids.length !== 1) {
8061
- logerr(`##browser pids.length ${pids.length} is not 1 when trying to connect to browserUrl ${browserUrl}`);
8106
+ logerr(`##browser controller pids.length ${pids.length} is not 1 when trying to connect to browserUrl ${browserUrl}`);
8062
8107
  } else {
8063
8108
  browserPid = pids[0];
8064
8109
  }
@@ -8102,6 +8147,10 @@ var controller = new LsdBrowserController();
8102
8147
  export {
8103
8148
  CheerioElement,
8104
8149
  CheerioPage,
8150
+ ControllerEvent,
8151
+ LsdBrowserContextEvent,
8152
+ LsdBrowserEvent,
8153
+ LsdPageEvent,
8105
8154
  PlaywrightBrowser,
8106
8155
  PlaywrightBrowserContext,
8107
8156
  PlaywrightElement,