@purepageio/fetch-engines 0.1.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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +205 -0
  3. package/dist/FetchEngine.d.ts +46 -0
  4. package/dist/FetchEngine.d.ts.map +1 -0
  5. package/dist/FetchEngine.js +137 -0
  6. package/dist/FetchEngine.js.map +1 -0
  7. package/dist/FetchEngine.test.d.ts +2 -0
  8. package/dist/FetchEngine.test.d.ts.map +1 -0
  9. package/dist/FetchEngine.test.js +44 -0
  10. package/dist/FetchEngine.test.js.map +1 -0
  11. package/dist/HybridEngine.d.ts +15 -0
  12. package/dist/HybridEngine.d.ts.map +1 -0
  13. package/dist/HybridEngine.js +45 -0
  14. package/dist/HybridEngine.js.map +1 -0
  15. package/dist/IEngine.d.ts +22 -0
  16. package/dist/IEngine.d.ts.map +1 -0
  17. package/dist/IEngine.js +2 -0
  18. package/dist/IEngine.js.map +1 -0
  19. package/dist/PlaywrightEngine.d.ts +88 -0
  20. package/dist/PlaywrightEngine.d.ts.map +1 -0
  21. package/dist/PlaywrightEngine.js +484 -0
  22. package/dist/PlaywrightEngine.js.map +1 -0
  23. package/dist/PlaywrightEngine.test.d.ts +2 -0
  24. package/dist/PlaywrightEngine.test.d.ts.map +1 -0
  25. package/dist/PlaywrightEngine.test.js +299 -0
  26. package/dist/PlaywrightEngine.test.js.map +1 -0
  27. package/dist/PuppeteerEngine.d.ts +21 -0
  28. package/dist/PuppeteerEngine.d.ts.map +1 -0
  29. package/dist/PuppeteerEngine.js +412 -0
  30. package/dist/PuppeteerEngine.js.map +1 -0
  31. package/dist/browser/BrowserPool.d.ts +29 -0
  32. package/dist/browser/BrowserPool.d.ts.map +1 -0
  33. package/dist/browser/BrowserPool.js +378 -0
  34. package/dist/browser/BrowserPool.js.map +1 -0
  35. package/dist/browser/PlaywrightBrowserPool.d.ts +78 -0
  36. package/dist/browser/PlaywrightBrowserPool.d.ts.map +1 -0
  37. package/dist/browser/PlaywrightBrowserPool.js +429 -0
  38. package/dist/browser/PlaywrightBrowserPool.js.map +1 -0
  39. package/dist/browser/PlaywrightBrowserPool.test.d.ts +2 -0
  40. package/dist/browser/PlaywrightBrowserPool.test.d.ts.map +1 -0
  41. package/dist/browser/PlaywrightBrowserPool.test.js +422 -0
  42. package/dist/browser/PlaywrightBrowserPool.test.js.map +1 -0
  43. package/dist/errors.d.ts +20 -0
  44. package/dist/errors.d.ts.map +1 -0
  45. package/dist/errors.js +30 -0
  46. package/dist/errors.js.map +1 -0
  47. package/dist/index.d.ts +8 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +5 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/types.d.ts +151 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +2 -0
  54. package/dist/types.js.map +1 -0
  55. package/package.json +72 -0
@@ -0,0 +1,429 @@
1
+ // Use playwright-extra via require
2
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
3
+ const playwrightExtra = require("playwright-extra");
4
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
5
+ const StealthPlugin = require("puppeteer-extra-plugin-stealth");
6
+ import UserAgent from "user-agents";
7
+ import { v4 as uuidv4 } from "uuid";
8
+ import PQueue from "p-queue"; // Restored
9
+ // REMOVED import EventEmitter from "events"; // Import EventEmitter
10
+ // Use require for CJS interop
11
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
12
+ // const Debug = require("debug");
13
+ // import * as Debug from "debug"; // Changed back to import
14
+ // import Debug from "debug"; // Try default import
15
+ // Cast the required chromium object to the correct type
16
+ const chromium = playwrightExtra.chromium;
17
+ // Apply stealth plugin - cast to any to access .use()
18
+ chromium.use(StealthPlugin());
19
+ /**
20
+ * Manages a pool of Playwright Browser instances for efficient reuse.
21
+ */
22
+ export class PlaywrightBrowserPool {
23
+ pool = new Set();
24
+ maxBrowsers;
25
+ maxPagesPerContext; // Renamed from maxPagesPerBrowser for clarity
26
+ maxBrowserAge; // Max age in ms
27
+ healthCheckInterval; // Interval in ms
28
+ healthCheckTimer = null;
29
+ maxIdleTime = 5 * 60 * 1000; // 5 minutes idle timeout
30
+ isCleaningUp = false; // Flag to prevent operations during cleanup
31
+ useHeadedMode; // Store mode for reference
32
+ // Store blocking lists as instance properties
33
+ blockedDomains;
34
+ blockedResourceTypes;
35
+ // Add proxyConfig property
36
+ proxyConfig;
37
+ // Define defaults statically
38
+ static DEFAULT_BLOCKED_DOMAINS = [
39
+ "doubleclick.net",
40
+ "google-analytics.com",
41
+ "googletagmanager.com",
42
+ "googlesyndication.com",
43
+ "googleadservices.com",
44
+ "adservice.google.com",
45
+ "facebook.net",
46
+ "fbcdn.net",
47
+ "connect.facebook.net",
48
+ "ads-twitter.com",
49
+ "platform.twitter.com",
50
+ "analytics.tiktok.com",
51
+ "ads.tiktok.com",
52
+ "amazon-adsystem.com",
53
+ "adnxs.com",
54
+ "criteo.com",
55
+ "scorecardresearch.com",
56
+ "quantserve.com",
57
+ "rubiconproject.com",
58
+ "pubmatic.com",
59
+ "taboola.com",
60
+ "outbrain.com",
61
+ // Add more domains as needed
62
+ ];
63
+ static DEFAULT_BLOCKED_RESOURCE_TYPES = [
64
+ "image", // Keep image blocked by default
65
+ "font",
66
+ "media",
67
+ "websocket",
68
+ // Removed stylesheet - essential for layout
69
+ // Removed script - essential for functionality
70
+ ];
71
+ acquireQueue = new PQueue({ concurrency: 1 }); // Queue for acquiring pages
72
+ constructor(config = {}) {
73
+ this.maxBrowsers = config.maxBrowsers ?? 2;
74
+ this.maxPagesPerContext = config.maxPagesPerContext ?? 6;
75
+ this.maxBrowserAge = config.maxBrowserAge ?? 20 * 60 * 1000;
76
+ this.healthCheckInterval = config.healthCheckInterval ?? 60 * 1000;
77
+ this.useHeadedMode = config.useHeadedMode ?? false;
78
+ this.maxIdleTime = config.maxIdleTime ?? 5 * 60 * 1000;
79
+ // Use provided lists or defaults
80
+ this.blockedDomains =
81
+ config.blockedDomains && config.blockedDomains.length > 0
82
+ ? config.blockedDomains
83
+ : PlaywrightBrowserPool.DEFAULT_BLOCKED_DOMAINS;
84
+ this.blockedResourceTypes =
85
+ config.blockedResourceTypes && config.blockedResourceTypes.length > 0
86
+ ? config.blockedResourceTypes
87
+ : PlaywrightBrowserPool.DEFAULT_BLOCKED_RESOURCE_TYPES;
88
+ // Store proxy config (will be undefined if not provided)
89
+ this.proxyConfig = config.proxy;
90
+ }
91
+ /**
92
+ * Initializes the pool and starts health checks.
93
+ */
94
+ async initialize() {
95
+ if (this.isCleaningUp)
96
+ return;
97
+ await this.ensureMinimumInstances();
98
+ this.scheduleHealthCheck(); // Now defined
99
+ }
100
+ /**
101
+ * Schedules the next health check.
102
+ */
103
+ scheduleHealthCheck() {
104
+ if (this.isCleaningUp)
105
+ return;
106
+ if (this.healthCheckTimer) {
107
+ clearTimeout(this.healthCheckTimer);
108
+ }
109
+ if (this.healthCheckInterval > 0) {
110
+ this.healthCheckTimer = setTimeout(() => {
111
+ this.healthCheck().catch((_err) => {
112
+ /* Ignore health check errors */
113
+ });
114
+ }, this.healthCheckInterval);
115
+ }
116
+ }
117
+ /**
118
+ * Ensures the pool has the configured maximum number of browser instances.
119
+ */
120
+ async ensureMinimumInstances() {
121
+ if (this.isCleaningUp)
122
+ return;
123
+ // Use a loop that checks size correctly
124
+ while (this.pool.size < this.maxBrowsers) {
125
+ try {
126
+ await this.createBrowserInstance();
127
+ }
128
+ catch (error) {
129
+ // Log error creating instance?
130
+ break; // Stop if instance creation fails
131
+ }
132
+ }
133
+ }
134
+ /**
135
+ * Creates a new Playwright Browser instance and adds it to the pool.
136
+ */
137
+ async createBrowserInstance() {
138
+ const id = uuidv4(); // Correct usage
139
+ const launchOptions = {
140
+ headless: !this.useHeadedMode,
141
+ args: [
142
+ "--no-sandbox",
143
+ "--disable-setuid-sandbox",
144
+ "--disable-dev-shm-usage",
145
+ "--disable-accelerated-2d-canvas",
146
+ "--no-first-run",
147
+ "--no-zygote",
148
+ "--disable-gpu",
149
+ "--mute-audio",
150
+ "--disable-background-networking",
151
+ ],
152
+ proxy: this.proxyConfig,
153
+ };
154
+ const chromium = playwrightExtra.chromium;
155
+ try {
156
+ chromium.use(StealthPlugin());
157
+ }
158
+ catch (_e) {
159
+ /* Ignore stealth plugin errors */
160
+ }
161
+ const browser = await chromium.launch(launchOptions);
162
+ const context = await browser.newContext({
163
+ userAgent: new UserAgent().toString(),
164
+ viewport: {
165
+ width: 1280 + Math.floor(Math.random() * 120),
166
+ height: 720 + Math.floor(Math.random() * 80),
167
+ }, // Slightly randomized viewport
168
+ javaScriptEnabled: true,
169
+ // bypassCSP: true, // Use with caution, can break sites
170
+ ignoreHTTPSErrors: true, // Useful for some sites, but less secure
171
+ // locale: 'en-US', // Set locale if needed
172
+ // timezoneId: 'America/New_York', // Set timezone if needed
173
+ });
174
+ // Apply blocking rules to the context
175
+ await context.route("**/*", async (route) => {
176
+ const request = route.request();
177
+ const url = request.url();
178
+ const resourceType = request.resourceType();
179
+ try {
180
+ const hostname = new URL(url).hostname.toLowerCase();
181
+ if (this.blockedDomains.some((domain) => hostname.includes(domain)) ||
182
+ this.blockedResourceTypes.includes(resourceType)) {
183
+ await route.abort();
184
+ }
185
+ else {
186
+ await route.continue();
187
+ }
188
+ }
189
+ catch (_e) {
190
+ await route.continue(); // Continue on URL parse errors
191
+ }
192
+ });
193
+ const now = new Date();
194
+ const metrics = {
195
+ id,
196
+ pagesCreated: 0,
197
+ activePages: 0,
198
+ lastUsed: now,
199
+ errors: 0,
200
+ createdAt: now,
201
+ isHealthy: true,
202
+ };
203
+ const instance = {
204
+ id,
205
+ browser,
206
+ context,
207
+ pages: new Set(),
208
+ metrics,
209
+ isHealthy: true,
210
+ disconnectedHandler: () => { }, // Initialize with placeholder
211
+ };
212
+ // Define and attach the disconnect handler
213
+ instance.disconnectedHandler = () => {
214
+ if (instance.isHealthy) {
215
+ // Prevent multiple calls
216
+ instance.isHealthy = false;
217
+ instance.metrics.isHealthy = false;
218
+ this.healthCheck().catch((_err) => { }); // Trigger health check immediately
219
+ }
220
+ };
221
+ browser.on("disconnected", instance.disconnectedHandler);
222
+ this.pool.add(instance); // Use Set.add
223
+ return instance;
224
+ }
225
+ /**
226
+ * Acquires a Page from a healthy browser instance in the pool.
227
+ */
228
+ acquirePage() {
229
+ // Use the acquisition queue
230
+ return this.acquireQueue.add(async () => {
231
+ if (this.isCleaningUp) {
232
+ throw new Error("Pool is shutting down.");
233
+ }
234
+ let bestInstance = null;
235
+ for (const instance of this.pool) {
236
+ if (instance.isHealthy &&
237
+ instance.pages.size < this.maxPagesPerContext) {
238
+ if (!bestInstance || instance.pages.size < bestInstance.pages.size) {
239
+ bestInstance = instance;
240
+ }
241
+ }
242
+ }
243
+ if (!bestInstance && this.pool.size < this.maxBrowsers) {
244
+ try {
245
+ bestInstance = await this.createBrowserInstance();
246
+ }
247
+ catch (error) {
248
+ throw new Error(`Failed to create new browser instance for acquisition: ${error.message}`);
249
+ }
250
+ }
251
+ if (!bestInstance) {
252
+ throw new Error("Failed to acquire Playwright page: No available browser instance.");
253
+ }
254
+ try {
255
+ const page = await bestInstance.context.newPage();
256
+ bestInstance.pages.add(page);
257
+ bestInstance.metrics.pagesCreated++;
258
+ bestInstance.metrics.activePages = bestInstance.pages.size;
259
+ bestInstance.metrics.lastUsed = new Date();
260
+ // Add handlers within try block
261
+ page.on("close", () => {
262
+ bestInstance.pages.delete(page);
263
+ bestInstance.metrics.activePages = bestInstance.pages.size;
264
+ bestInstance.metrics.lastUsed = new Date();
265
+ });
266
+ page.on("crash", () => {
267
+ bestInstance.metrics.errors++;
268
+ bestInstance.pages.delete(page); // Remove crashed page
269
+ bestInstance.isHealthy = false; // Mark instance as unhealthy on crash
270
+ bestInstance.metrics.isHealthy = false;
271
+ this.healthCheck().catch((_err) => { }); // Trigger health check
272
+ });
273
+ return page;
274
+ }
275
+ catch (error) {
276
+ bestInstance.metrics.errors++;
277
+ bestInstance.isHealthy = false; // Mark instance unhealthy
278
+ bestInstance.metrics.isHealthy = false;
279
+ this.healthCheck().catch((_err) => { }); // Trigger health check
280
+ throw new Error(`Failed to create new page: ${error.message}`);
281
+ }
282
+ }); // Assert return type to satisfy signature
283
+ }
284
+ /**
285
+ * Performs health checks on all instances.
286
+ */
287
+ async healthCheck() {
288
+ if (this.isCleaningUp)
289
+ return;
290
+ const now = new Date();
291
+ const checks = [];
292
+ for (const instance of this.pool) {
293
+ checks.push((async () => {
294
+ if (!instance.isHealthy) {
295
+ // Skip check if already marked unhealthy
296
+ // Maybe still check age/idle here? For now, assume it will be removed.
297
+ return;
298
+ }
299
+ let shouldRemove = false;
300
+ let reason = "unknown";
301
+ if (!instance.browser.isConnected()) {
302
+ shouldRemove = true;
303
+ reason = "browser disconnected";
304
+ }
305
+ if (!shouldRemove &&
306
+ this.maxBrowserAge > 0 &&
307
+ now.getTime() - instance.metrics.createdAt.getTime() >
308
+ this.maxBrowserAge) {
309
+ shouldRemove = true;
310
+ reason = "max age reached";
311
+ }
312
+ if (!shouldRemove &&
313
+ this.pool.size > 1 &&
314
+ instance.pages.size === 0 &&
315
+ this.maxIdleTime > 0 &&
316
+ now.getTime() - instance.metrics.lastUsed.getTime() >
317
+ this.maxIdleTime) {
318
+ shouldRemove = true;
319
+ reason = "idle timeout";
320
+ }
321
+ if (shouldRemove) {
322
+ instance.isHealthy = false;
323
+ instance.metrics.isHealthy = false;
324
+ await this.closeAndRemoveInstance(instance, reason);
325
+ }
326
+ else {
327
+ instance.isHealthy = true; // Ensure marked healthy if checks pass
328
+ instance.metrics.isHealthy = true;
329
+ }
330
+ })().catch((_err) => {
331
+ // Log errors during individual check? For now, ignore.
332
+ }));
333
+ }
334
+ try {
335
+ await Promise.allSettled(checks);
336
+ }
337
+ finally {
338
+ // Always ensure minimum instances and reschedule check
339
+ this.ensureMinimumInstances();
340
+ this.scheduleHealthCheck();
341
+ }
342
+ }
343
+ /**
344
+ * Closes and removes a browser instance from the pool.
345
+ */
346
+ async closeAndRemoveInstance(instance, _reason) {
347
+ const removed = this.pool.delete(instance);
348
+ if (!removed)
349
+ return;
350
+ instance.browser.off("disconnected", instance.disconnectedHandler);
351
+ try {
352
+ await instance.context.close();
353
+ }
354
+ catch (_error) {
355
+ /* Ignore context close errors */
356
+ }
357
+ try {
358
+ await instance.browser.close();
359
+ }
360
+ catch (_error) {
361
+ /* Ignore browser close errors */
362
+ }
363
+ }
364
+ /**
365
+ * Releases a page back to the pool, closing it.
366
+ */
367
+ async releasePage(page) {
368
+ if (!page || page.isClosed())
369
+ return;
370
+ let ownerInstance;
371
+ for (const instance of this.pool) {
372
+ if (instance.pages.has(page)) {
373
+ ownerInstance = instance;
374
+ break;
375
+ }
376
+ }
377
+ try {
378
+ await page.close();
379
+ // If owner known, update metrics
380
+ if (ownerInstance) {
381
+ ownerInstance.pages.delete(page); // Ensure page is removed from set
382
+ ownerInstance.metrics.activePages = ownerInstance.pages.size;
383
+ ownerInstance.metrics.lastUsed = new Date();
384
+ }
385
+ }
386
+ catch (error) {
387
+ // If close fails, mark instance potentially unhealthy
388
+ if (ownerInstance) {
389
+ ownerInstance.isHealthy = false;
390
+ ownerInstance.metrics.isHealthy = false;
391
+ ownerInstance.metrics.errors++;
392
+ // Remove page from set even on error closing?
393
+ ownerInstance.pages.delete(page);
394
+ ownerInstance.metrics.activePages = ownerInstance.pages.size;
395
+ }
396
+ }
397
+ }
398
+ /**
399
+ * Stops health checks and closes all browser instances.
400
+ */
401
+ async cleanup() {
402
+ if (this.isCleaningUp)
403
+ return;
404
+ this.isCleaningUp = true;
405
+ if (this.healthCheckTimer) {
406
+ clearTimeout(this.healthCheckTimer);
407
+ this.healthCheckTimer = null;
408
+ }
409
+ // Clear the queue
410
+ this.acquireQueue.clear();
411
+ await this.acquireQueue.onIdle();
412
+ const closePromises = [...this.pool].map((instance) => this.closeAndRemoveInstance(instance, "cleanup"));
413
+ this.pool.clear();
414
+ await Promise.allSettled(closePromises);
415
+ this.isCleaningUp = false;
416
+ }
417
+ /**
418
+ * Retrieves metrics for each browser instance in the pool.
419
+ */
420
+ getMetrics() {
421
+ // Return a copy of metrics, ensuring health/active state is up-to-date
422
+ return [...this.pool].map((instance) => ({
423
+ ...instance.metrics,
424
+ activePages: instance.pages.size,
425
+ isHealthy: instance.isHealthy,
426
+ }));
427
+ }
428
+ }
429
+ //# sourceMappingURL=PlaywrightBrowserPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightBrowserPool.js","sourceRoot":"","sources":["../../src/browser/PlaywrightBrowserPool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PlaywrightBrowserPool.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightBrowserPool.test.d.ts","sourceRoot":"","sources":["../../src/browser/PlaywrightBrowserPool.test.ts"],"names":[],"mappings":""}