@opentermsarchive/engine 10.1.3 → 10.3.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opentermsarchive/engine",
3
- "version": "10.1.3",
3
+ "version": "10.3.0",
4
4
  "description": "Tracks and makes visible changes to the terms of online services",
5
5
  "homepage": "https://opentermsarchive.org",
6
6
  "bugs": {
@@ -113,7 +113,7 @@
113
113
  "supertest": "^7.1.4"
114
114
  },
115
115
  "peerDependencies": {
116
- "@opentermsarchive/terms-types": "^2.1.0"
116
+ "@opentermsarchive/terms-types": "^2.2.0"
117
117
  },
118
118
  "engines": {
119
119
  "node": ">=20 <=24"
@@ -8,6 +8,7 @@ puppeteer.use(stealthPlugin());
8
8
  let browser;
9
9
 
10
10
  export default async function fetch(url, cssSelectors, config) {
11
+ let context;
11
12
  let page;
12
13
  let response;
13
14
  const selectors = [].concat(cssSelectors);
@@ -17,16 +18,13 @@ export default async function fetch(url, cssSelectors, config) {
17
18
  }
18
19
 
19
20
  try {
20
- page = await browser.newPage();
21
+ context = await browser.createBrowserContext(); // Create an isolated browser context to ensure complete isolation between fetches (cookies, localStorage, sessionStorage, IndexedDB, cache)
22
+ page = await context.newPage();
21
23
 
24
+ await page.setViewport({ width: 1920, height: 1080 }); // Set a realistic viewport size to avoid detection based on default Puppeteer dimensions (800x600)
22
25
  await page.setDefaultNavigationTimeout(config.navigationTimeout);
23
26
  await page.setExtraHTTPHeaders({ 'Accept-Language': config.language });
24
27
 
25
- await page.setCacheEnabled(false); // Disable cache to ensure fresh content on each fetch and prevent stale data from previous requests
26
- const client = await page.target().createCDPSession();
27
-
28
- await client.send('Network.clearBrowserCookies'); // Clear cookies to ensure clean state between fetches and prevent session persistence across different URLs
29
-
30
28
  if (browser.proxyCredentials?.username && browser.proxyCredentials?.password) {
31
29
  await page.authenticate(browser.proxyCredentials);
32
30
  }
@@ -78,6 +76,9 @@ export default async function fetch(url, cssSelectors, config) {
78
76
  if (page) {
79
77
  await page.close();
80
78
  }
79
+ if (context) {
80
+ await context.close(); // Close the isolated context to free resources and ensure complete cleanup
81
+ }
81
82
  }
82
83
  }
83
84