@crawlee/browser-pool 3.0.0-alpha.3 → 3.0.0-alpha.4
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/README.md +151 -769
- package/{dist/index.js → index.js} +0 -0
- package/package.json +9 -10
- package/dist/LICENSE.md +0 -201
- package/dist/README.md +0 -214
- package/dist/abstract-classes/browser-controller.d.ts +0 -153
- package/dist/abstract-classes/browser-controller.d.ts.map +0 -1
- package/dist/abstract-classes/browser-controller.js +0 -234
- package/dist/abstract-classes/browser-controller.js.map +0 -1
- package/dist/abstract-classes/browser-plugin.d.ts +0 -91
- package/dist/abstract-classes/browser-plugin.d.ts.map +0 -1
- package/dist/abstract-classes/browser-plugin.js +0 -116
- package/dist/abstract-classes/browser-plugin.js.map +0 -1
- package/dist/abstract-classes/utils.d.ts +0 -2
- package/dist/abstract-classes/utils.d.ts.map +0 -1
- package/dist/abstract-classes/utils.js +0 -8
- package/dist/abstract-classes/utils.js.map +0 -1
- package/dist/browser-pool.d.ts +0 -406
- package/dist/browser-pool.d.ts.map +0 -1
- package/dist/browser-pool.js +0 -582
- package/dist/browser-pool.js.map +0 -1
- package/dist/events.d.ts +0 -11
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js +0 -17
- package/dist/events.js.map +0 -1
- package/dist/fingerprinting/hooks.d.ts +0 -8
- package/dist/fingerprinting/hooks.d.ts.map +0 -1
- package/dist/fingerprinting/hooks.js +0 -81
- package/dist/fingerprinting/hooks.js.map +0 -1
- package/dist/fingerprinting/types.d.ts +0 -33
- package/dist/fingerprinting/types.d.ts.map +0 -1
- package/dist/fingerprinting/types.js +0 -21
- package/dist/fingerprinting/types.js.map +0 -1
- package/dist/fingerprinting/utils.d.ts +0 -5
- package/dist/fingerprinting/utils.d.ts.map +0 -1
- package/dist/fingerprinting/utils.js +0 -61
- package/dist/fingerprinting/utils.js.map +0 -1
- package/dist/index.d.ts +0 -35
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -11
- package/dist/launch-context.d.ts +0 -68
- package/dist/launch-context.d.ts.map +0 -1
- package/dist/launch-context.js +0 -94
- package/dist/launch-context.js.map +0 -1
- package/dist/logger.d.ts +0 -2
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -9
- package/dist/logger.js.map +0 -1
- package/dist/package.json +0 -53
- package/dist/playwright/browser.d.ts +0 -26
- package/dist/playwright/browser.d.ts.map +0 -1
- package/dist/playwright/browser.js +0 -66
- package/dist/playwright/browser.js.map +0 -1
- package/dist/playwright/playwright-controller.d.ts +0 -11
- package/dist/playwright/playwright-controller.d.ts.map +0 -1
- package/dist/playwright/playwright-controller.js +0 -51
- package/dist/playwright/playwright-controller.js.map +0 -1
- package/dist/playwright/playwright-plugin.d.ts +0 -11
- package/dist/playwright/playwright-plugin.d.ts.map +0 -1
- package/dist/playwright/playwright-plugin.js +0 -61
- package/dist/playwright/playwright-plugin.js.map +0 -1
- package/dist/proxy-server.d.ts +0 -2
- package/dist/proxy-server.d.ts.map +0 -1
- package/dist/proxy-server.js +0 -19
- package/dist/proxy-server.js.map +0 -1
- package/dist/puppeteer/puppeteer-controller.d.ts +0 -11
- package/dist/puppeteer/puppeteer-controller.d.ts.map +0 -1
- package/dist/puppeteer/puppeteer-controller.js +0 -88
- package/dist/puppeteer/puppeteer-controller.js.map +0 -1
- package/dist/puppeteer/puppeteer-plugin.d.ts +0 -11
- package/dist/puppeteer/puppeteer-plugin.d.ts.map +0 -1
- package/dist/puppeteer/puppeteer-plugin.js +0 -82
- package/dist/puppeteer/puppeteer-plugin.js.map +0 -1
- package/dist/puppeteer/puppeteer-proxy-per-page.d.ts +0 -25
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/utils.d.ts +0 -6
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -7
- package/dist/utils.js.map +0 -1
package/dist/browser-pool.js
DELETED
|
@@ -1,582 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BrowserPool = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const p_limit_1 = tslib_1.__importDefault(require("p-limit"));
|
|
6
|
-
const nanoid_1 = require("nanoid");
|
|
7
|
-
const ow_1 = tslib_1.__importDefault(require("ow"));
|
|
8
|
-
const tiny_typed_emitter_1 = require("tiny-typed-emitter");
|
|
9
|
-
const timeout_1 = require("@apify/timeout");
|
|
10
|
-
const fingerprint_injector_1 = require("fingerprint-injector");
|
|
11
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
12
|
-
// @ts-expect-error no types for this package yet
|
|
13
|
-
const fingerprint_generator_1 = tslib_1.__importDefault(require("fingerprint-generator"));
|
|
14
|
-
const quick_lru_1 = tslib_1.__importDefault(require("quick-lru"));
|
|
15
|
-
const logger_1 = require("./logger");
|
|
16
|
-
const hooks_1 = require("./fingerprinting/hooks");
|
|
17
|
-
const PAGE_CLOSE_KILL_TIMEOUT_MILLIS = 1000;
|
|
18
|
-
const BROWSER_KILLER_INTERVAL_MILLIS = 10 * 1000;
|
|
19
|
-
/**
|
|
20
|
-
* The `BrowserPool` class is the most important class of the `browser-pool` module.
|
|
21
|
-
* It manages opening and closing of browsers and their pages and its constructor
|
|
22
|
-
* options allow easy configuration of the browsers' and pages' lifecycle.
|
|
23
|
-
*
|
|
24
|
-
* The most important and useful constructor options are the various lifecycle hooks.
|
|
25
|
-
* Those allow you to sequentially call a list of (asynchronous) functions at each
|
|
26
|
-
* stage of the browser / page lifecycle.
|
|
27
|
-
*
|
|
28
|
-
* **Example:**
|
|
29
|
-
* ```js
|
|
30
|
-
* const { BrowserPool, PlaywrightPlugin } = require('@crawlee/browser-pool');
|
|
31
|
-
* const playwright = require('playwright');
|
|
32
|
-
*
|
|
33
|
-
* const browserPool = new BrowserPool({
|
|
34
|
-
* browserPlugins: [ new PlaywrightPlugin(playwright.chromium)],
|
|
35
|
-
* preLaunchHooks: [(pageId, launchContext) => {
|
|
36
|
-
* // do something before a browser gets launched
|
|
37
|
-
* launchContext.launchOptions.headless = false;
|
|
38
|
-
* }],
|
|
39
|
-
* postLaunchHooks: [(pageId, browserController) => {
|
|
40
|
-
* // manipulate the browser right after launch
|
|
41
|
-
* console.dir(browserController.browser.contexts());
|
|
42
|
-
* }],
|
|
43
|
-
* prePageCreateHooks: [(pageId, browserController) => {
|
|
44
|
-
* if (pageId === 'my-page') {
|
|
45
|
-
* // make changes right before a specific page is created
|
|
46
|
-
* }
|
|
47
|
-
* }],
|
|
48
|
-
* postPageCreateHooks: [async (page, browserController) => {
|
|
49
|
-
* // update some or all new pages
|
|
50
|
-
* await page.evaluate(() => {
|
|
51
|
-
* // now all pages will have 'foo'
|
|
52
|
-
* window.foo = 'bar'
|
|
53
|
-
* })
|
|
54
|
-
* }],
|
|
55
|
-
* prePageCloseHooks: [async (page, browserController) => {
|
|
56
|
-
* // collect information just before a page closes
|
|
57
|
-
* await page.screenshot();
|
|
58
|
-
* }],
|
|
59
|
-
* postPageCloseHooks: [(pageId, browserController) => {
|
|
60
|
-
* // clean up or log after a job is done
|
|
61
|
-
* console.log('Page closed: ', pageId)
|
|
62
|
-
* }]
|
|
63
|
-
* });
|
|
64
|
-
* ```
|
|
65
|
-
*/
|
|
66
|
-
class BrowserPool extends tiny_typed_emitter_1.TypedEmitter {
|
|
67
|
-
constructor(options) {
|
|
68
|
-
super();
|
|
69
|
-
Object.defineProperty(this, "browserPlugins", {
|
|
70
|
-
enumerable: true,
|
|
71
|
-
configurable: true,
|
|
72
|
-
writable: true,
|
|
73
|
-
value: void 0
|
|
74
|
-
});
|
|
75
|
-
Object.defineProperty(this, "maxOpenPagesPerBrowser", {
|
|
76
|
-
enumerable: true,
|
|
77
|
-
configurable: true,
|
|
78
|
-
writable: true,
|
|
79
|
-
value: void 0
|
|
80
|
-
});
|
|
81
|
-
Object.defineProperty(this, "retireBrowserAfterPageCount", {
|
|
82
|
-
enumerable: true,
|
|
83
|
-
configurable: true,
|
|
84
|
-
writable: true,
|
|
85
|
-
value: void 0
|
|
86
|
-
});
|
|
87
|
-
Object.defineProperty(this, "operationTimeoutMillis", {
|
|
88
|
-
enumerable: true,
|
|
89
|
-
configurable: true,
|
|
90
|
-
writable: true,
|
|
91
|
-
value: void 0
|
|
92
|
-
});
|
|
93
|
-
Object.defineProperty(this, "closeInactiveBrowserAfterMillis", {
|
|
94
|
-
enumerable: true,
|
|
95
|
-
configurable: true,
|
|
96
|
-
writable: true,
|
|
97
|
-
value: void 0
|
|
98
|
-
});
|
|
99
|
-
Object.defineProperty(this, "useFingerprints", {
|
|
100
|
-
enumerable: true,
|
|
101
|
-
configurable: true,
|
|
102
|
-
writable: true,
|
|
103
|
-
value: void 0
|
|
104
|
-
});
|
|
105
|
-
Object.defineProperty(this, "fingerprintsOptions", {
|
|
106
|
-
enumerable: true,
|
|
107
|
-
configurable: true,
|
|
108
|
-
writable: true,
|
|
109
|
-
value: void 0
|
|
110
|
-
});
|
|
111
|
-
Object.defineProperty(this, "preLaunchHooks", {
|
|
112
|
-
enumerable: true,
|
|
113
|
-
configurable: true,
|
|
114
|
-
writable: true,
|
|
115
|
-
value: void 0
|
|
116
|
-
});
|
|
117
|
-
Object.defineProperty(this, "postLaunchHooks", {
|
|
118
|
-
enumerable: true,
|
|
119
|
-
configurable: true,
|
|
120
|
-
writable: true,
|
|
121
|
-
value: void 0
|
|
122
|
-
});
|
|
123
|
-
Object.defineProperty(this, "prePageCreateHooks", {
|
|
124
|
-
enumerable: true,
|
|
125
|
-
configurable: true,
|
|
126
|
-
writable: true,
|
|
127
|
-
value: void 0
|
|
128
|
-
});
|
|
129
|
-
Object.defineProperty(this, "postPageCreateHooks", {
|
|
130
|
-
enumerable: true,
|
|
131
|
-
configurable: true,
|
|
132
|
-
writable: true,
|
|
133
|
-
value: void 0
|
|
134
|
-
});
|
|
135
|
-
Object.defineProperty(this, "prePageCloseHooks", {
|
|
136
|
-
enumerable: true,
|
|
137
|
-
configurable: true,
|
|
138
|
-
writable: true,
|
|
139
|
-
value: void 0
|
|
140
|
-
});
|
|
141
|
-
Object.defineProperty(this, "postPageCloseHooks", {
|
|
142
|
-
enumerable: true,
|
|
143
|
-
configurable: true,
|
|
144
|
-
writable: true,
|
|
145
|
-
value: void 0
|
|
146
|
-
});
|
|
147
|
-
Object.defineProperty(this, "pageCounter", {
|
|
148
|
-
enumerable: true,
|
|
149
|
-
configurable: true,
|
|
150
|
-
writable: true,
|
|
151
|
-
value: 0
|
|
152
|
-
});
|
|
153
|
-
Object.defineProperty(this, "pages", {
|
|
154
|
-
enumerable: true,
|
|
155
|
-
configurable: true,
|
|
156
|
-
writable: true,
|
|
157
|
-
value: new Map()
|
|
158
|
-
});
|
|
159
|
-
Object.defineProperty(this, "pageIds", {
|
|
160
|
-
enumerable: true,
|
|
161
|
-
configurable: true,
|
|
162
|
-
writable: true,
|
|
163
|
-
value: new WeakMap()
|
|
164
|
-
});
|
|
165
|
-
Object.defineProperty(this, "activeBrowserControllers", {
|
|
166
|
-
enumerable: true,
|
|
167
|
-
configurable: true,
|
|
168
|
-
writable: true,
|
|
169
|
-
value: new Set()
|
|
170
|
-
});
|
|
171
|
-
Object.defineProperty(this, "retiredBrowserControllers", {
|
|
172
|
-
enumerable: true,
|
|
173
|
-
configurable: true,
|
|
174
|
-
writable: true,
|
|
175
|
-
value: new Set()
|
|
176
|
-
});
|
|
177
|
-
Object.defineProperty(this, "pageToBrowserController", {
|
|
178
|
-
enumerable: true,
|
|
179
|
-
configurable: true,
|
|
180
|
-
writable: true,
|
|
181
|
-
value: new WeakMap()
|
|
182
|
-
});
|
|
183
|
-
Object.defineProperty(this, "fingerprintInjector", {
|
|
184
|
-
enumerable: true,
|
|
185
|
-
configurable: true,
|
|
186
|
-
writable: true,
|
|
187
|
-
value: void 0
|
|
188
|
-
});
|
|
189
|
-
Object.defineProperty(this, "fingerprintGenerator", {
|
|
190
|
-
enumerable: true,
|
|
191
|
-
configurable: true,
|
|
192
|
-
writable: true,
|
|
193
|
-
value: void 0
|
|
194
|
-
});
|
|
195
|
-
Object.defineProperty(this, "fingerprintCache", {
|
|
196
|
-
enumerable: true,
|
|
197
|
-
configurable: true,
|
|
198
|
-
writable: true,
|
|
199
|
-
value: void 0
|
|
200
|
-
});
|
|
201
|
-
Object.defineProperty(this, "browserKillerInterval", {
|
|
202
|
-
enumerable: true,
|
|
203
|
-
configurable: true,
|
|
204
|
-
writable: true,
|
|
205
|
-
value: setInterval(() => this._closeInactiveRetiredBrowsers(), BROWSER_KILLER_INTERVAL_MILLIS)
|
|
206
|
-
});
|
|
207
|
-
Object.defineProperty(this, "limiter", {
|
|
208
|
-
enumerable: true,
|
|
209
|
-
configurable: true,
|
|
210
|
-
writable: true,
|
|
211
|
-
value: (0, p_limit_1.default)(1)
|
|
212
|
-
});
|
|
213
|
-
(0, ow_1.default)(options, ow_1.default.object.exactShape({
|
|
214
|
-
browserPlugins: ow_1.default.array.minLength(1),
|
|
215
|
-
maxOpenPagesPerBrowser: ow_1.default.optional.number,
|
|
216
|
-
retireBrowserAfterPageCount: ow_1.default.optional.number,
|
|
217
|
-
operationTimeoutSecs: ow_1.default.optional.number,
|
|
218
|
-
closeInactiveBrowserAfterSecs: ow_1.default.optional.number,
|
|
219
|
-
preLaunchHooks: ow_1.default.optional.array,
|
|
220
|
-
postLaunchHooks: ow_1.default.optional.array,
|
|
221
|
-
prePageCreateHooks: ow_1.default.optional.array,
|
|
222
|
-
postPageCreateHooks: ow_1.default.optional.array,
|
|
223
|
-
prePageCloseHooks: ow_1.default.optional.array,
|
|
224
|
-
postPageCloseHooks: ow_1.default.optional.array,
|
|
225
|
-
useFingerprints: ow_1.default.optional.boolean,
|
|
226
|
-
fingerprintsOptions: ow_1.default.optional.object,
|
|
227
|
-
}));
|
|
228
|
-
const { browserPlugins, maxOpenPagesPerBrowser = 20, retireBrowserAfterPageCount = 100, operationTimeoutSecs = 15, closeInactiveBrowserAfterSecs = 300, preLaunchHooks = [], postLaunchHooks = [], prePageCreateHooks = [], postPageCreateHooks = [], prePageCloseHooks = [], postPageCloseHooks = [], useFingerprints = false, fingerprintsOptions = {}, } = options;
|
|
229
|
-
this.browserPlugins = browserPlugins;
|
|
230
|
-
this.maxOpenPagesPerBrowser = maxOpenPagesPerBrowser;
|
|
231
|
-
this.retireBrowserAfterPageCount = retireBrowserAfterPageCount;
|
|
232
|
-
this.operationTimeoutMillis = operationTimeoutSecs * 1000;
|
|
233
|
-
this.closeInactiveBrowserAfterMillis = closeInactiveBrowserAfterSecs * 1000;
|
|
234
|
-
this.useFingerprints = useFingerprints;
|
|
235
|
-
this.fingerprintsOptions = fingerprintsOptions;
|
|
236
|
-
// hooks
|
|
237
|
-
this.preLaunchHooks = preLaunchHooks;
|
|
238
|
-
this.postLaunchHooks = postLaunchHooks;
|
|
239
|
-
this.prePageCreateHooks = prePageCreateHooks;
|
|
240
|
-
this.postPageCreateHooks = postPageCreateHooks;
|
|
241
|
-
this.prePageCloseHooks = prePageCloseHooks;
|
|
242
|
-
this.postPageCloseHooks = postPageCloseHooks;
|
|
243
|
-
// fingerprinting
|
|
244
|
-
if (this.useFingerprints) {
|
|
245
|
-
this._initializeFingerprinting();
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Opens a new page in one of the running browsers or launches
|
|
250
|
-
* a new browser and opens a page there, if no browsers are active,
|
|
251
|
-
* or their page limits have been exceeded.
|
|
252
|
-
*/
|
|
253
|
-
async newPage(options = {}) {
|
|
254
|
-
const { id = (0, nanoid_1.nanoid)(), pageOptions, browserPlugin = this._pickBrowserPlugin(), proxyUrl, } = options;
|
|
255
|
-
if (this.pages.has(id)) {
|
|
256
|
-
throw new Error(`Page with ID: ${id} already exists.`);
|
|
257
|
-
}
|
|
258
|
-
if (browserPlugin && !this.browserPlugins.includes(browserPlugin)) {
|
|
259
|
-
throw new Error('Provided browserPlugin is not one of the plugins used by BrowserPool.');
|
|
260
|
-
}
|
|
261
|
-
// Limiter is necessary - https://github.com/apify/apify-js/issues/1126
|
|
262
|
-
return this.limiter(async () => {
|
|
263
|
-
let browserController = this._pickBrowserWithFreeCapacity(browserPlugin);
|
|
264
|
-
if (!browserController)
|
|
265
|
-
browserController = await this._launchBrowser(id, { browserPlugin });
|
|
266
|
-
(0, timeout_1.tryCancel)();
|
|
267
|
-
return this._createPageForBrowser(id, browserController, pageOptions, proxyUrl);
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Unlike {@link newPage}, `newPageInNewBrowser` always launches a new
|
|
272
|
-
* browser to open the page in. Use the `launchOptions` option to
|
|
273
|
-
* configure the new browser.
|
|
274
|
-
*/
|
|
275
|
-
async newPageInNewBrowser(options = {}) {
|
|
276
|
-
const { id = (0, nanoid_1.nanoid)(), pageOptions, launchOptions, browserPlugin = this._pickBrowserPlugin(), } = options;
|
|
277
|
-
if (this.pages.has(id)) {
|
|
278
|
-
throw new Error(`Page with ID: ${id} already exists.`);
|
|
279
|
-
}
|
|
280
|
-
const browserController = await this._launchBrowser(id, { launchOptions, browserPlugin });
|
|
281
|
-
(0, timeout_1.tryCancel)();
|
|
282
|
-
return this._createPageForBrowser(id, browserController, pageOptions);
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Opens new pages with all available plugins and returns an array
|
|
286
|
-
* of pages in the same order as the plugins were provided to `BrowserPool`.
|
|
287
|
-
* This is useful when you want to run a script in multiple environments
|
|
288
|
-
* at the same time, typically in testing or website analysis.
|
|
289
|
-
*
|
|
290
|
-
* **Example:**
|
|
291
|
-
* ```js
|
|
292
|
-
* const browserPool = new BrowserPool({
|
|
293
|
-
* browserPlugins: [
|
|
294
|
-
* new PlaywrightPlugin(playwright.chromium),
|
|
295
|
-
* new PlaywrightPlugin(playwright.firefox),
|
|
296
|
-
* new PlaywrightPlugin(playwright.webkit),
|
|
297
|
-
* new PuppeteerPlugin(puppeteer),
|
|
298
|
-
* ]
|
|
299
|
-
* });
|
|
300
|
-
*
|
|
301
|
-
* const pages = await browserPool.newPageWithEachPlugin();
|
|
302
|
-
* const [chromiumPage, firefoxPage, webkitPage, puppeteerPage] = pages;
|
|
303
|
-
* ```
|
|
304
|
-
*/
|
|
305
|
-
async newPageWithEachPlugin(optionsList = []) {
|
|
306
|
-
const pagePromises = this.browserPlugins.map((browserPlugin, idx) => {
|
|
307
|
-
const userOptions = optionsList[idx] || {};
|
|
308
|
-
return this.newPage({
|
|
309
|
-
...userOptions,
|
|
310
|
-
browserPlugin,
|
|
311
|
-
});
|
|
312
|
-
});
|
|
313
|
-
return Promise.all(pagePromises);
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Retrieves a {@link BrowserController} for a given page. This is useful
|
|
317
|
-
* when you're working only with pages and need to access the browser
|
|
318
|
-
* manipulation functionality.
|
|
319
|
-
*
|
|
320
|
-
* You could access the browser directly from the page,
|
|
321
|
-
* but that would circumvent `BrowserPool` and most likely
|
|
322
|
-
* cause weird things to happen, so please always use `BrowserController`
|
|
323
|
-
* to control your browsers. The function returns `undefined` if the
|
|
324
|
-
* browser is closed.
|
|
325
|
-
*
|
|
326
|
-
* @param page - Browser plugin page
|
|
327
|
-
*/
|
|
328
|
-
getBrowserControllerByPage(page) {
|
|
329
|
-
return this.pageToBrowserController.get(page);
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* If you provided a custom ID to one of your pages or saved the
|
|
333
|
-
* randomly generated one, you can use this function to retrieve
|
|
334
|
-
* the page. If the page is no longer open, the function will
|
|
335
|
-
* return `undefined`.
|
|
336
|
-
*/
|
|
337
|
-
getPage(id) {
|
|
338
|
-
return this.pages.get(id);
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Page IDs are used throughout `BrowserPool` as a method of linking
|
|
342
|
-
* events. You can use a page ID to track the full lifecycle of the page.
|
|
343
|
-
* It is created even before a browser is launched and stays with the page
|
|
344
|
-
* until it's closed.
|
|
345
|
-
*/
|
|
346
|
-
getPageId(page) {
|
|
347
|
-
return this.pageIds.get(page);
|
|
348
|
-
}
|
|
349
|
-
async _createPageForBrowser(pageId, browserController, pageOptions = {}, proxyUrl) {
|
|
350
|
-
// TODO This is needed for concurrent newPage calls to wait for the browser launch.
|
|
351
|
-
// It's not ideal though, we need to come up with a better API.
|
|
352
|
-
// eslint-disable-next-line dot-notation -- accessing private property
|
|
353
|
-
await browserController['isActivePromise'];
|
|
354
|
-
(0, timeout_1.tryCancel)();
|
|
355
|
-
const finalPageOptions = browserController.launchContext.useIncognitoPages ? pageOptions : undefined;
|
|
356
|
-
if (finalPageOptions) {
|
|
357
|
-
Object.assign(finalPageOptions, browserController.normalizeProxyOptions(proxyUrl, pageOptions));
|
|
358
|
-
}
|
|
359
|
-
await this._executeHooks(this.prePageCreateHooks, pageId, browserController, finalPageOptions);
|
|
360
|
-
(0, timeout_1.tryCancel)();
|
|
361
|
-
let page;
|
|
362
|
-
try {
|
|
363
|
-
page = await (0, timeout_1.addTimeoutToPromise)(() => browserController.newPage(finalPageOptions), this.operationTimeoutMillis, 'browserController.newPage() timed out.');
|
|
364
|
-
(0, timeout_1.tryCancel)();
|
|
365
|
-
this.pages.set(pageId, page);
|
|
366
|
-
this.pageIds.set(page, pageId);
|
|
367
|
-
this.pageToBrowserController.set(page, browserController);
|
|
368
|
-
// TODO if you synchronously trigger a lot of page launches, browser
|
|
369
|
-
// will not get retired soon enough. Not sure if it's a problem, let's monitor it.
|
|
370
|
-
if (browserController.totalPages >= this.retireBrowserAfterPageCount) {
|
|
371
|
-
this.retireBrowserController(browserController);
|
|
372
|
-
}
|
|
373
|
-
this._overridePageClose(page);
|
|
374
|
-
}
|
|
375
|
-
catch (err) {
|
|
376
|
-
this.retireBrowserController(browserController);
|
|
377
|
-
throw new Error(`browserController.newPage() failed: ${browserController.id}\nCause:${err.message}.`);
|
|
378
|
-
}
|
|
379
|
-
await this._executeHooks(this.postPageCreateHooks, page, browserController);
|
|
380
|
-
(0, timeout_1.tryCancel)();
|
|
381
|
-
this.emit("pageCreated" /* PAGE_CREATED */, page); // @TODO: CONSIDER renaming this event.
|
|
382
|
-
return page;
|
|
383
|
-
}
|
|
384
|
-
/**
|
|
385
|
-
* Removes a browser controller from the pool. The underlying
|
|
386
|
-
* browser will be closed after all its pages are closed.
|
|
387
|
-
*
|
|
388
|
-
*/
|
|
389
|
-
retireBrowserController(browserController) {
|
|
390
|
-
const hasBeenRetiredOrKilled = !this.activeBrowserControllers.has(browserController);
|
|
391
|
-
if (hasBeenRetiredOrKilled)
|
|
392
|
-
return;
|
|
393
|
-
this.retiredBrowserControllers.add(browserController);
|
|
394
|
-
this.emit("browserRetired" /* BROWSER_RETIRED */, browserController);
|
|
395
|
-
this.activeBrowserControllers.delete(browserController);
|
|
396
|
-
}
|
|
397
|
-
/**
|
|
398
|
-
* Removes a browser from the pool. It will be
|
|
399
|
-
* closed after all its pages are closed.
|
|
400
|
-
*/
|
|
401
|
-
retireBrowserByPage(page) {
|
|
402
|
-
const browserController = this.getBrowserControllerByPage(page);
|
|
403
|
-
if (browserController)
|
|
404
|
-
this.retireBrowserController(browserController);
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* Removes all active browsers from the pool. The browsers will be
|
|
408
|
-
* closed after all their pages are closed.
|
|
409
|
-
*/
|
|
410
|
-
retireAllBrowsers() {
|
|
411
|
-
this.activeBrowserControllers.forEach((controller) => {
|
|
412
|
-
this.retireBrowserController(controller);
|
|
413
|
-
});
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* Closes all managed browsers without waiting for pages to close.
|
|
417
|
-
* @return {Promise<void>}
|
|
418
|
-
*/
|
|
419
|
-
async closeAllBrowsers() {
|
|
420
|
-
const controllers = this._getAllBrowserControllers();
|
|
421
|
-
const promises = [...controllers]
|
|
422
|
-
.filter((controller) => controller.isActive)
|
|
423
|
-
.map((controller) => controller.close());
|
|
424
|
-
await Promise.all(promises);
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* Closes all managed browsers and tears down the pool.
|
|
428
|
-
*/
|
|
429
|
-
async destroy() {
|
|
430
|
-
clearInterval(this.browserKillerInterval);
|
|
431
|
-
this.browserKillerInterval = undefined;
|
|
432
|
-
await this.closeAllBrowsers();
|
|
433
|
-
this._teardown();
|
|
434
|
-
}
|
|
435
|
-
_teardown() {
|
|
436
|
-
this.activeBrowserControllers.clear();
|
|
437
|
-
this.retiredBrowserControllers.clear();
|
|
438
|
-
this.removeAllListeners();
|
|
439
|
-
}
|
|
440
|
-
_getAllBrowserControllers() {
|
|
441
|
-
return new Set([...this.activeBrowserControllers, ...this.retiredBrowserControllers]);
|
|
442
|
-
}
|
|
443
|
-
async _launchBrowser(pageId, options) {
|
|
444
|
-
const { browserPlugin, launchOptions, } = options;
|
|
445
|
-
const browserController = browserPlugin.createController();
|
|
446
|
-
this.activeBrowserControllers.add(browserController);
|
|
447
|
-
const launchContext = browserPlugin.createLaunchContext({
|
|
448
|
-
id: pageId,
|
|
449
|
-
launchOptions,
|
|
450
|
-
});
|
|
451
|
-
try {
|
|
452
|
-
// If the hooks or the launch fails, we need to delete the controller,
|
|
453
|
-
// because otherwise it would be stuck in limbo without a browser.
|
|
454
|
-
await this._executeHooks(this.preLaunchHooks, pageId, launchContext);
|
|
455
|
-
(0, timeout_1.tryCancel)();
|
|
456
|
-
const browser = await browserPlugin.launch(launchContext);
|
|
457
|
-
(0, timeout_1.tryCancel)();
|
|
458
|
-
browserController.assignBrowser(browser, launchContext);
|
|
459
|
-
}
|
|
460
|
-
catch (err) {
|
|
461
|
-
this.activeBrowserControllers.delete(browserController);
|
|
462
|
-
throw err;
|
|
463
|
-
}
|
|
464
|
-
logger_1.log.debug('Launched new browser.', { id: browserController.id });
|
|
465
|
-
try {
|
|
466
|
-
// If the launch fails on the post-launch hooks, we need to clean up
|
|
467
|
-
// both the controller and the browser before throwing.
|
|
468
|
-
await this._executeHooks(this.postLaunchHooks, pageId, browserController);
|
|
469
|
-
}
|
|
470
|
-
catch (err) {
|
|
471
|
-
this.activeBrowserControllers.delete(browserController);
|
|
472
|
-
browserController.close().catch((closeErr) => {
|
|
473
|
-
logger_1.log.error(`Could not close browser whose post-launch hooks failed.\nCause:${closeErr.message}`, { id: browserController.id });
|
|
474
|
-
});
|
|
475
|
-
throw err;
|
|
476
|
-
}
|
|
477
|
-
(0, timeout_1.tryCancel)();
|
|
478
|
-
browserController.activate();
|
|
479
|
-
this.emit("browserLaunched" /* BROWSER_LAUNCHED */, browserController);
|
|
480
|
-
return browserController;
|
|
481
|
-
}
|
|
482
|
-
/**
|
|
483
|
-
* Picks plugins round robin.
|
|
484
|
-
* @private
|
|
485
|
-
*/
|
|
486
|
-
_pickBrowserPlugin() {
|
|
487
|
-
const pluginIndex = this.pageCounter % this.browserPlugins.length;
|
|
488
|
-
this.pageCounter++;
|
|
489
|
-
return this.browserPlugins[pluginIndex];
|
|
490
|
-
}
|
|
491
|
-
_pickBrowserWithFreeCapacity(browserPlugin) {
|
|
492
|
-
for (const controller of this.activeBrowserControllers) {
|
|
493
|
-
const hasCapacity = controller.activePages < this.maxOpenPagesPerBrowser;
|
|
494
|
-
const isCorrectPlugin = controller.browserPlugin === browserPlugin;
|
|
495
|
-
if (hasCapacity && isCorrectPlugin) {
|
|
496
|
-
return controller;
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
return undefined;
|
|
500
|
-
}
|
|
501
|
-
async _closeInactiveRetiredBrowsers() {
|
|
502
|
-
const closedBrowserIds = [];
|
|
503
|
-
for (const controller of this.retiredBrowserControllers) {
|
|
504
|
-
const millisSinceLastPageOpened = Date.now() - controller.lastPageOpenedAt;
|
|
505
|
-
const isBrowserIdle = millisSinceLastPageOpened >= this.closeInactiveBrowserAfterMillis;
|
|
506
|
-
const isBrowserEmpty = controller.activePages === 0;
|
|
507
|
-
if (isBrowserIdle || isBrowserEmpty) {
|
|
508
|
-
const { id } = controller;
|
|
509
|
-
logger_1.log.debug('Closing retired browser.', { id });
|
|
510
|
-
await controller.close();
|
|
511
|
-
this.retiredBrowserControllers.delete(controller);
|
|
512
|
-
closedBrowserIds.push(id);
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
if (closedBrowserIds.length) {
|
|
516
|
-
logger_1.log.debug('Closed retired browsers.', {
|
|
517
|
-
count: closedBrowserIds.length,
|
|
518
|
-
closedBrowserIds,
|
|
519
|
-
});
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
_overridePageClose(page) {
|
|
523
|
-
const originalPageClose = page.close;
|
|
524
|
-
const browserController = this.pageToBrowserController.get(page);
|
|
525
|
-
const pageId = this.getPageId(page);
|
|
526
|
-
page.close = async (...args) => {
|
|
527
|
-
await this._executeHooks(this.prePageCloseHooks, page, browserController);
|
|
528
|
-
await originalPageClose.apply(page, args)
|
|
529
|
-
.catch((err) => {
|
|
530
|
-
logger_1.log.debug(`Could not close page.\nCause:${err.message}`, { id: browserController.id });
|
|
531
|
-
});
|
|
532
|
-
await this._executeHooks(this.postPageCloseHooks, pageId, browserController);
|
|
533
|
-
this.pages.delete(pageId);
|
|
534
|
-
this._closeRetiredBrowserWithNoPages(browserController);
|
|
535
|
-
this.emit("pageClosed" /* PAGE_CLOSED */, page);
|
|
536
|
-
};
|
|
537
|
-
}
|
|
538
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
539
|
-
async _executeHooks(hooks, ...args) {
|
|
540
|
-
for (const hook of hooks) {
|
|
541
|
-
await hook(...args);
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
_closeRetiredBrowserWithNoPages(browserController) {
|
|
545
|
-
if (browserController.activePages === 0 && this.retiredBrowserControllers.has(browserController)) {
|
|
546
|
-
// Run this with a delay, otherwise page.close()
|
|
547
|
-
// might fail with "Protocol error (Target.closeTarget): Target closed."
|
|
548
|
-
setTimeout(() => {
|
|
549
|
-
logger_1.log.debug('Closing retired browser because it has no active pages', { id: browserController.id });
|
|
550
|
-
// TODO: @typescript-eslint/no-floating-promises
|
|
551
|
-
browserController.close(); // eslint-disable-line
|
|
552
|
-
this.retiredBrowserControllers.delete(browserController);
|
|
553
|
-
}, PAGE_CLOSE_KILL_TIMEOUT_MILLIS);
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
_initializeFingerprinting() {
|
|
557
|
-
const { useFingerprintPerProxyCache = true, fingerprintPerProxyCacheSize = 10000 } = this.fingerprintsOptions;
|
|
558
|
-
this.fingerprintGenerator = new fingerprint_generator_1.default(this.fingerprintsOptions.fingerprintGeneratorOptions);
|
|
559
|
-
this.fingerprintInjector = new fingerprint_injector_1.FingerprintInjector();
|
|
560
|
-
if (useFingerprintPerProxyCache) {
|
|
561
|
-
this.fingerprintCache = new quick_lru_1.default({ maxSize: fingerprintPerProxyCacheSize });
|
|
562
|
-
}
|
|
563
|
-
this._addFingerprintHooks();
|
|
564
|
-
}
|
|
565
|
-
_addFingerprintHooks() {
|
|
566
|
-
this.preLaunchHooks = [
|
|
567
|
-
...this.preLaunchHooks,
|
|
568
|
-
// This is flipped because of the fingerprint cache.
|
|
569
|
-
// It is usual to generate proxy per browser and we want to know the proxyUrl for the caching.
|
|
570
|
-
(0, hooks_1.createFingerprintPreLaunchHook)(this),
|
|
571
|
-
];
|
|
572
|
-
this.prePageCreateHooks = [
|
|
573
|
-
(0, hooks_1.createPrePageCreateHook)(),
|
|
574
|
-
...this.prePageCreateHooks,
|
|
575
|
-
];
|
|
576
|
-
this.postPageCreateHooks = [
|
|
577
|
-
(0, hooks_1.createPostPageCreateHook)(this.fingerprintInjector),
|
|
578
|
-
];
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
exports.BrowserPool = BrowserPool;
|
|
582
|
-
//# sourceMappingURL=browser-pool.js.map
|
package/dist/browser-pool.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser-pool.js","sourceRoot":"","sources":["../src/browser-pool.ts"],"names":[],"mappings":";;;;AAAA,8DAA6B;AAC7B,mCAAgC;AAChC,oDAAoB;AACpB,2DAAkD;AAClD,4CAAgE;AAChE,+DAAwE;AACxE,6DAA6D;AAC7D,iDAAiD;AACjD,0FAAyD;AACzD,kEAAiC;AAKjC,qCAA+B;AAE/B,kDAA2H;AAG3H,MAAM,8BAA8B,GAAG,IAAI,CAAC;AAC5C,MAAM,8BAA8B,GAAG,EAAE,GAAG,IAAI,CAAC;AA6LjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAa,WAOX,SAAQ,iCAAoE;IAoD1E,YAAY,OAA6F;QACrG,KAAK,EAAE,CAAC;QApDZ;;;;;WAA+B;QAE/B;;;;;WAA+B;QAE/B;;;;;WAAoC;QAEpC;;;;;WAA+B;QAE/B;;;;;WAAwC;QAExC;;;;;WAA0B;QAE1B;;;;;WAAyC;QAEzC;;;;;WAAqD;QAErD;;;;;WAA2D;QAE3D;;;;;WAA8E;QAE9E;;;;;WAA+E;QAE/E;;;;;WAA2E;QAE3E;;;;;WAAiE;QAEjE;;;;mBAAc,CAAC;WAAC;QAEhB;;;;mBAAQ,IAAI,GAAG,EAAsB;WAAC;QAEtC;;;;mBAAU,IAAI,OAAO,EAAsB;WAAC;QAE5C;;;;mBAA2B,IAAI,GAAG,EAA2B;WAAC;QAE9D;;;;mBAA4B,IAAI,GAAG,EAA2B;WAAC;QAE/D;;;;mBAA0B,IAAI,OAAO,EAAuC;WAAC;QAE7E;;;;;WAA0C;QAE1C;;;;;WAA4C;QAE5C;;;;;WAAiD;QAEjD;;;;mBAAiC,WAAW,CACxC,GAAG,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAC1C,8BAA8B,CACjC;WAAC;QAEF;;;;mBAAkB,IAAA,iBAAM,EAAC,CAAC,CAAC;WAAC;QAKxB,IAAA,YAAE,EAAC,OAAO,EAAE,YAAE,CAAC,MAAM,CAAC,UAAU,CAAC;YAC7B,cAAc,EAAE,YAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YACrC,sBAAsB,EAAE,YAAE,CAAC,QAAQ,CAAC,MAAM;YAC1C,2BAA2B,EAAE,YAAE,CAAC,QAAQ,CAAC,MAAM;YAC/C,oBAAoB,EAAE,YAAE,CAAC,QAAQ,CAAC,MAAM;YACxC,6BAA6B,EAAE,YAAE,CAAC,QAAQ,CAAC,MAAM;YACjD,cAAc,EAAE,YAAE,CAAC,QAAQ,CAAC,KAAK;YACjC,eAAe,EAAE,YAAE,CAAC,QAAQ,CAAC,KAAK;YAClC,kBAAkB,EAAE,YAAE,CAAC,QAAQ,CAAC,KAAK;YACrC,mBAAmB,EAAE,YAAE,CAAC,QAAQ,CAAC,KAAK;YACtC,iBAAiB,EAAE,YAAE,CAAC,QAAQ,CAAC,KAAK;YACpC,kBAAkB,EAAE,YAAE,CAAC,QAAQ,CAAC,KAAK;YACrC,eAAe,EAAE,YAAE,CAAC,QAAQ,CAAC,OAAO;YACpC,mBAAmB,EAAE,YAAE,CAAC,QAAQ,CAAC,MAAM;SAC1C,CAAC,CAAC,CAAC;QAEJ,MAAM,EACF,cAAc,EACd,sBAAsB,GAAG,EAAE,EAC3B,2BAA2B,GAAG,GAAG,EACjC,oBAAoB,GAAG,EAAE,EACzB,6BAA6B,GAAG,GAAG,EACnC,cAAc,GAAG,EAAE,EACnB,eAAe,GAAG,EAAE,EACpB,kBAAkB,GAAG,EAAE,EACvB,mBAAmB,GAAG,EAAE,EACxB,iBAAiB,GAAG,EAAE,EACtB,kBAAkB,GAAG,EAAE,EACvB,eAAe,GAAG,KAAK,EACvB,mBAAmB,GAAG,EAAE,GAC3B,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,cAAc,GAAG,cAA2C,CAAC;QAClE,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QACrD,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QAC/D,IAAI,CAAC,sBAAsB,GAAG,oBAAoB,GAAG,IAAI,CAAC;QAC1D,IAAI,CAAC,+BAA+B,GAAG,6BAA6B,GAAG,IAAI,CAAC;QAC5E,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAE/C,QAAQ;QACR,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAE7C,iBAAiB;QACjB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACpC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,UAA0E,EAAE;QACtF,MAAM,EACF,EAAE,GAAG,IAAA,eAAM,GAAE,EACb,WAAW,EACX,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,EACzC,QAAQ,GACX,GAAG,OAAO,CAAC;QAEZ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;SAC1D;QAED,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YAC/D,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;SAC5F;QAED,uEAAuE;QACvE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAC3B,IAAI,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAC;YACzE,IAAI,CAAC,iBAAiB;gBAAE,iBAAiB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAC7F,IAAA,mBAAS,GAAE,CAAC;YAEZ,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB,CAAC,UAAsF,EAAE;QAC9G,MAAM,EACF,EAAE,GAAG,IAAA,eAAM,GAAE,EACb,WAAW,EACX,aAAa,EACb,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAC5C,GAAG,OAAO,CAAC;QAEZ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;SAC1D;QAED,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1F,IAAA,mBAAS,GAAE,CAAC;QACZ,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,qBAAqB,CACvB,cAAuG,EAAE;QAEzG,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE;YAChE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,OAAO,CAAC;gBAChB,GAAG,WAAW;gBACd,aAAa;aAChB,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,0BAA0B,CAAC,IAAgB;QACvC,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,EAAU;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,IAAgB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAC/B,MAAc,EACd,iBAA0C,EAC1C,cAA2B,EAAiB,EAC5C,QAAiB;QAEjB,mFAAmF;QACnF,+DAA+D;QAC/D,sEAAsE;QACtE,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;QAC3C,IAAA,mBAAS,GAAE,CAAC;QAEZ,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAErG,IAAI,gBAAgB,EAAE;YAClB,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;SACnG;QAED,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAC/F,IAAA,mBAAS,GAAE,CAAC;QAEZ,IAAI,IAAgB,CAAC;QAErB,IAAI;YACA,IAAI,GAAG,MAAM,IAAA,6BAAmB,EAC5B,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,CAAC,EACjD,IAAI,CAAC,sBAAsB,EAC3B,wCAAwC,CAC7B,CAAC;YAChB,IAAA,mBAAS,GAAE,CAAC;YAEZ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/B,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;YAE1D,oEAAoE;YACpE,mFAAmF;YACnF,IAAI,iBAAiB,CAAC,UAAU,IAAI,IAAI,CAAC,2BAA2B,EAAE;gBAClE,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;aACnD;YAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;SACjC;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,uCAAuC,iBAAiB,CAAC,EAAE,WAAY,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;SACpH;QAED,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC5E,IAAA,mBAAS,GAAE,CAAC;QAEZ,IAAI,CAAC,IAAI,mCAAmC,IAAI,CAAC,CAAC,CAAC,uCAAuC;QAE1F,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,uBAAuB,CAAC,iBAA0C;QAC9D,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACrF,IAAI,sBAAsB;YAAE,OAAO;QAEnC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,yCAAsC,iBAAiB,CAAC,CAAC;QAClE,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,IAAgB;QAChC,MAAM,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,iBAAiB;YAAE,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACH,iBAAiB;QACb,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACjD,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,CAAC;aAC5B,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;aAC3C,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QAE7C,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACT,aAAa,CAAC,IAAI,CAAC,qBAAsB,CAAC,CAAC;QAC3C,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QAEvC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAEO,SAAS;QACb,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;QAEvC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAEO,yBAAyB;QAC7B,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,wBAAwB,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC1F,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,OAA6D;QACtG,MAAM,EACF,aAAa,EACb,aAAa,GAChB,GAAG,OAAO,CAAC;QAEZ,MAAM,iBAAiB,GAAG,aAAa,CAAC,gBAAgB,EAA6B,CAAC;QACtF,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAErD,MAAM,aAAa,GAAG,aAAa,CAAC,mBAAmB,CAAC;YACpD,EAAE,EAAE,MAAM;YACV,aAAa;SAChB,CAAC,CAAC;QAEH,IAAI;YACA,sEAAsE;YACtE,kEAAkE;YAClE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YACrE,IAAA,mBAAS,GAAE,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1D,IAAA,mBAAS,GAAE,CAAC;YACZ,iBAAiB,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;SAC3D;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACxD,MAAM,GAAG,CAAC;SACb;QAED,YAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC;QAEjE,IAAI;YACA,oEAAoE;YACpE,uDAAuD;YACvD,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;SAC7E;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACxD,iBAAiB,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACzC,YAAG,CAAC,KAAK,CACL,kEAAkE,QAAQ,CAAC,OAAO,EAAE,EACpF,EAAE,EAAE,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAC/B,CAAC;YACN,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,CAAC;SACb;QAED,IAAA,mBAAS,GAAE,CAAC;QACZ,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,2CAAuC,iBAAiB,CAAC,CAAC;QAEnE,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACK,kBAAkB;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QAClE,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAEO,4BAA4B,CAAC,aAA4B;QAC7D,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACpD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC;YACzE,MAAM,eAAe,GAAG,UAAU,CAAC,aAAa,KAAK,aAAa,CAAC;YACnE,IAAI,WAAW,IAAI,eAAe,EAAE;gBAChC,OAAO,UAAU,CAAC;aACrB;SACJ;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,6BAA6B;QACvC,MAAM,gBAAgB,GAAa,EAAE,CAAC;QAEtC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,yBAAyB,EAAE;YACrD,MAAM,yBAAyB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,gBAAgB,CAAC;YAC3E,MAAM,aAAa,GAAG,yBAAyB,IAAI,IAAI,CAAC,+BAA+B,CAAC;YACxF,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,KAAK,CAAC,CAAC;YAEpD,IAAI,aAAa,IAAI,cAAc,EAAE;gBACjC,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC;gBAC1B,YAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC9C,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAClD,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC7B;SACJ;QAED,IAAI,gBAAgB,CAAC,MAAM,EAAE;YACzB,YAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE;gBAClC,KAAK,EAAE,gBAAgB,CAAC,MAAM;gBAC9B,gBAAgB;aACnB,CAAC,CAAC;SACN;IACL,CAAC;IAEO,kBAAkB,CAAC,IAAgB;QACvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC;QAErC,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;YACtC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;YAE1E,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;iBACpC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;gBAClB,YAAG,CAAC,KAAK,CAAC,gCAAgC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3F,CAAC,CAAC,CAAC;YAEP,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAE7E,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,+BAA+B,CAAC,iBAAiB,CAAC,CAAC;YAExD,IAAI,CAAC,IAAI,iCAAkC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC;IACN,CAAC;IAED,8DAA8D;IACtD,KAAK,CAAC,aAAa,CAAC,KAAsC,EAAE,GAAG,IAAe;QAClF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;SACvB;IACL,CAAC;IAEO,+BAA+B,CAAC,iBAA0C;QAC9E,IAAI,iBAAiB,CAAC,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC9F,gDAAgD;YAChD,wEAAwE;YACxE,UAAU,CAAC,GAAG,EAAE;gBACZ,YAAG,CAAC,KAAK,CAAC,wDAAwD,EAAE,EAAE,EAAE,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClG,gDAAgD;gBAChD,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,sBAAsB;gBACjD,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAC7D,CAAC,EAAE,8BAA8B,CAAC,CAAC;SACtC;IACL,CAAC;IAEO,yBAAyB;QAC7B,MAAM,EAAE,2BAA2B,GAAG,IAAI,EAAE,4BAA4B,GAAG,KAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC/G,IAAI,CAAC,oBAAoB,GAAG,IAAI,+BAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,CAAC,CAAC;QAC3G,IAAI,CAAC,mBAAmB,GAAG,IAAI,0CAAmB,EAAE,CAAC;QAErD,IAAI,2BAA2B,EAAE;YAC7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,mBAAQ,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;SACnF;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAEO,oBAAoB;QACxB,IAAI,CAAC,cAAc,GAAG;YAClB,GAAG,IAAI,CAAC,cAAc;YACtB,oDAAoD;YACpD,8FAA8F;YAE9F,IAAA,sCAA8B,EAAC,IAAI,CAAC;SAEvC,CAAC;QACF,IAAI,CAAC,kBAAkB,GAAG;YACtB,IAAA,+BAAuB,GAAE;YACzB,GAAG,IAAI,CAAC,kBAAkB;SAC7B,CAAC;QACF,IAAI,CAAC,mBAAmB,GAAG;YACvB,IAAA,gCAAwB,EAAC,IAAI,CAAC,mBAAoB,CAAC;SACtD,CAAC;IACN,CAAC;CACJ;AArhBD,kCAqhBC"}
|
package/dist/events.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare const enum BROWSER_POOL_EVENTS {
|
|
2
|
-
BROWSER_LAUNCHED = "browserLaunched",
|
|
3
|
-
BROWSER_RETIRED = "browserRetired",
|
|
4
|
-
BROWSER_CLOSED = "browserClosed",
|
|
5
|
-
PAGE_CREATED = "pageCreated",
|
|
6
|
-
PAGE_CLOSED = "pageClosed"
|
|
7
|
-
}
|
|
8
|
-
export declare const enum BROWSER_CONTROLLER_EVENTS {
|
|
9
|
-
BROWSER_CLOSED = "browserClosed"
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=events.d.ts.map
|
package/dist/events.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,0BAAkB,mBAAmB;IACjC,gBAAgB,oBAAoB;IACpC,eAAe,mBAAmB;IAClC,cAAc,kBAAkB;IAEhC,YAAY,gBAAgB;IAC5B,WAAW,eAAe;CAC7B;AAED,0BAAkB,yBAAyB;IACvC,cAAc,kBAAkB;CACnC"}
|
package/dist/events.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BROWSER_CONTROLLER_EVENTS = exports.BROWSER_POOL_EVENTS = void 0;
|
|
4
|
-
var BROWSER_POOL_EVENTS;
|
|
5
|
-
(function (BROWSER_POOL_EVENTS) {
|
|
6
|
-
BROWSER_POOL_EVENTS["BROWSER_LAUNCHED"] = "browserLaunched";
|
|
7
|
-
BROWSER_POOL_EVENTS["BROWSER_RETIRED"] = "browserRetired";
|
|
8
|
-
BROWSER_POOL_EVENTS["BROWSER_CLOSED"] = "browserClosed";
|
|
9
|
-
BROWSER_POOL_EVENTS["PAGE_CREATED"] = "pageCreated";
|
|
10
|
-
BROWSER_POOL_EVENTS["PAGE_CLOSED"] = "pageClosed";
|
|
11
|
-
})(BROWSER_POOL_EVENTS = exports.BROWSER_POOL_EVENTS || (exports.BROWSER_POOL_EVENTS = {}));
|
|
12
|
-
var BROWSER_CONTROLLER_EVENTS;
|
|
13
|
-
(function (BROWSER_CONTROLLER_EVENTS) {
|
|
14
|
-
BROWSER_CONTROLLER_EVENTS["BROWSER_CLOSED"] = "browserClosed";
|
|
15
|
-
})(BROWSER_CONTROLLER_EVENTS = exports.BROWSER_CONTROLLER_EVENTS || (exports.BROWSER_CONTROLLER_EVENTS = {}));
|
|
16
|
-
;
|
|
17
|
-
//# sourceMappingURL=events.js.map
|
package/dist/events.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":";;;AAAA,IAAkB,mBAOjB;AAPD,WAAkB,mBAAmB;IACjC,2DAAoC,CAAA;IACpC,yDAAkC,CAAA;IAClC,uDAAgC,CAAA;IAEhC,mDAA4B,CAAA;IAC5B,iDAA0B,CAAA;AAC9B,CAAC,EAPiB,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAOpC;AAED,IAAkB,yBAEjB;AAFD,WAAkB,yBAAyB;IACvC,6DAAgC,CAAA;AACpC,CAAC,EAFiB,yBAAyB,GAAzB,iCAAyB,KAAzB,iCAAyB,QAE1C;AAAA,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { FingerprintInjector } from 'fingerprint-injector';
|
|
2
|
-
import { BrowserPool } from '..';
|
|
3
|
-
import { BrowserController } from '../abstract-classes/browser-controller';
|
|
4
|
-
import { LaunchContext } from '../launch-context';
|
|
5
|
-
export declare function createFingerprintPreLaunchHook(browserPool: BrowserPool<any, any, any, any, any>): (_pageId: string, launchContext: LaunchContext) => void;
|
|
6
|
-
export declare function createPrePageCreateHook(): (_pageId: string, browserController: BrowserController, pageOptions: any) => void;
|
|
7
|
-
export declare function createPostPageCreateHook(fingerprintInjector: FingerprintInjector): (page: any, browserController: BrowserController) => Promise<void>;
|
|
8
|
-
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/fingerprinting/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAqC,MAAM,IAAI,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,aAS3E,MAAM,iBAAiB,aAAa,UAiCxD;AAED,wBAAgB,uBAAuB,cAClB,MAAM,qBAAqB,iBAAiB,eAAe,GAAG,KAAG,IAAI,CAYzF;AAED,wBAAgB,wBAAwB,CAAC,mBAAmB,EAAE,mBAAmB,UACzD,GAAG,qBAAqB,iBAAiB,KAAG,QAAQ,IAAI,CAAC,CAwBhF"}
|