@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.
- package/LICENSE +21 -0
- package/README.md +205 -0
- package/dist/FetchEngine.d.ts +46 -0
- package/dist/FetchEngine.d.ts.map +1 -0
- package/dist/FetchEngine.js +137 -0
- package/dist/FetchEngine.js.map +1 -0
- package/dist/FetchEngine.test.d.ts +2 -0
- package/dist/FetchEngine.test.d.ts.map +1 -0
- package/dist/FetchEngine.test.js +44 -0
- package/dist/FetchEngine.test.js.map +1 -0
- package/dist/HybridEngine.d.ts +15 -0
- package/dist/HybridEngine.d.ts.map +1 -0
- package/dist/HybridEngine.js +45 -0
- package/dist/HybridEngine.js.map +1 -0
- package/dist/IEngine.d.ts +22 -0
- package/dist/IEngine.d.ts.map +1 -0
- package/dist/IEngine.js +2 -0
- package/dist/IEngine.js.map +1 -0
- package/dist/PlaywrightEngine.d.ts +88 -0
- package/dist/PlaywrightEngine.d.ts.map +1 -0
- package/dist/PlaywrightEngine.js +484 -0
- package/dist/PlaywrightEngine.js.map +1 -0
- package/dist/PlaywrightEngine.test.d.ts +2 -0
- package/dist/PlaywrightEngine.test.d.ts.map +1 -0
- package/dist/PlaywrightEngine.test.js +299 -0
- package/dist/PlaywrightEngine.test.js.map +1 -0
- package/dist/PuppeteerEngine.d.ts +21 -0
- package/dist/PuppeteerEngine.d.ts.map +1 -0
- package/dist/PuppeteerEngine.js +412 -0
- package/dist/PuppeteerEngine.js.map +1 -0
- package/dist/browser/BrowserPool.d.ts +29 -0
- package/dist/browser/BrowserPool.d.ts.map +1 -0
- package/dist/browser/BrowserPool.js +378 -0
- package/dist/browser/BrowserPool.js.map +1 -0
- package/dist/browser/PlaywrightBrowserPool.d.ts +78 -0
- package/dist/browser/PlaywrightBrowserPool.d.ts.map +1 -0
- package/dist/browser/PlaywrightBrowserPool.js +429 -0
- package/dist/browser/PlaywrightBrowserPool.js.map +1 -0
- package/dist/browser/PlaywrightBrowserPool.test.d.ts +2 -0
- package/dist/browser/PlaywrightBrowserPool.test.d.ts.map +1 -0
- package/dist/browser/PlaywrightBrowserPool.test.js +422 -0
- package/dist/browser/PlaywrightBrowserPool.test.js.map +1 -0
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +30 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +151 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowserPool.test.d.ts","sourceRoot":"","sources":["../../src/browser/PlaywrightBrowserPool.test.ts"],"names":[],"mappings":""}
|