@crawlee/browser-pool 3.0.0-alpha.10 → 3.0.0-alpha.13
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/abstract-classes/browser-controller.d.ts +153 -0
- package/abstract-classes/browser-controller.d.ts.map +1 -0
- package/abstract-classes/browser-controller.js +234 -0
- package/abstract-classes/browser-controller.js.map +1 -0
- package/abstract-classes/browser-plugin.d.ts +91 -0
- package/abstract-classes/browser-plugin.d.ts.map +1 -0
- package/abstract-classes/browser-plugin.js +116 -0
- package/abstract-classes/browser-plugin.js.map +1 -0
- package/abstract-classes/utils.d.ts +2 -0
- package/abstract-classes/utils.d.ts.map +1 -0
- package/abstract-classes/utils.js +8 -0
- package/abstract-classes/utils.js.map +1 -0
- package/anonymize-proxy.d.ts +4 -0
- package/anonymize-proxy.d.ts.map +1 -0
- package/anonymize-proxy.js +34 -0
- package/anonymize-proxy.js.map +1 -0
- package/browser-pool.d.ts +406 -0
- package/browser-pool.d.ts.map +1 -0
- package/browser-pool.js +583 -0
- package/browser-pool.js.map +1 -0
- package/events.d.ts +11 -0
- package/events.d.ts.map +1 -0
- package/events.js +17 -0
- package/events.js.map +1 -0
- package/fingerprinting/hooks.d.ts +17 -0
- package/fingerprinting/hooks.d.ts.map +1 -0
- package/fingerprinting/hooks.js +89 -0
- package/fingerprinting/hooks.js.map +1 -0
- package/fingerprinting/types.d.ts +33 -0
- package/fingerprinting/types.d.ts.map +1 -0
- package/fingerprinting/types.js +21 -0
- package/fingerprinting/types.js.map +1 -0
- package/fingerprinting/utils.d.ts +5 -0
- package/fingerprinting/utils.d.ts.map +1 -0
- package/fingerprinting/utils.js +61 -0
- package/fingerprinting/utils.js.map +1 -0
- package/index.d.ts +35 -0
- package/index.d.ts.map +1 -0
- package/index.js.map +1 -0
- package/index.mjs +11 -0
- package/launch-context.d.ts +68 -0
- package/launch-context.d.ts.map +1 -0
- package/launch-context.js +94 -0
- package/launch-context.js.map +1 -0
- package/logger.d.ts +2 -0
- package/logger.d.ts.map +1 -0
- package/logger.js +9 -0
- package/logger.js.map +1 -0
- package/package.json +1 -4
- package/playwright/browser.d.ts +26 -0
- package/playwright/browser.d.ts.map +1 -0
- package/playwright/browser.js +66 -0
- package/playwright/browser.js.map +1 -0
- package/playwright/playwright-controller.d.ts +11 -0
- package/playwright/playwright-controller.d.ts.map +1 -0
- package/playwright/playwright-controller.js +71 -0
- package/playwright/playwright-controller.js.map +1 -0
- package/playwright/playwright-plugin.d.ts +11 -0
- package/playwright/playwright-plugin.d.ts.map +1 -0
- package/playwright/playwright-plugin.js +85 -0
- package/playwright/playwright-plugin.js.map +1 -0
- package/proxy-server.d.ts +2 -0
- package/proxy-server.d.ts.map +1 -0
- package/proxy-server.js +19 -0
- package/proxy-server.js.map +1 -0
- package/puppeteer/puppeteer-controller.d.ts +11 -0
- package/puppeteer/puppeteer-controller.d.ts.map +1 -0
- package/puppeteer/puppeteer-controller.js +112 -0
- package/puppeteer/puppeteer-controller.js.map +1 -0
- package/puppeteer/puppeteer-plugin.d.ts +11 -0
- package/puppeteer/puppeteer-plugin.d.ts.map +1 -0
- package/puppeteer/puppeteer-plugin.js +137 -0
- package/puppeteer/puppeteer-plugin.js.map +1 -0
- package/puppeteer/puppeteer-proxy-per-page.d.ts +25 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/utils.d.ts +6 -0
- package/utils.d.ts.map +1 -0
- package/utils.js +7 -0
- package/utils.js.map +1 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPostPageCreateHook = exports.createPrePageCreateHook = exports.createFingerprintPreLaunchHook = void 0;
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
function createFingerprintPreLaunchHook(browserPool) {
|
|
10
|
+
const { fingerprintGenerator, fingerprintCache, fingerprintsOptions: { fingerprintGeneratorOptions, }, } = browserPool;
|
|
11
|
+
return (_pageId, launchContext) => {
|
|
12
|
+
const { useIncognitoPages, proxyUrl } = launchContext;
|
|
13
|
+
// @TODO: Fix the typings so they are easier to work with.
|
|
14
|
+
const { launchOptions } = launchContext;
|
|
15
|
+
// If no options are passed we try to pass best default options as possible to match browser and OS.
|
|
16
|
+
const fingerprintGeneratorFinalOptions = fingerprintGeneratorOptions || (0, utils_1.getGeneratorDefaultOptions)(launchContext);
|
|
17
|
+
let fingerprint;
|
|
18
|
+
if (proxyUrl && fingerprintCache?.has(proxyUrl)) {
|
|
19
|
+
fingerprint = fingerprintCache.get(proxyUrl);
|
|
20
|
+
}
|
|
21
|
+
else if (proxyUrl) {
|
|
22
|
+
fingerprint = fingerprintGenerator.getFingerprint(fingerprintGeneratorFinalOptions).fingerprint;
|
|
23
|
+
fingerprintCache?.set(proxyUrl, fingerprint);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
fingerprint = fingerprintGenerator.getFingerprint(fingerprintGeneratorFinalOptions).fingerprint;
|
|
27
|
+
}
|
|
28
|
+
launchContext.extend({ fingerprint });
|
|
29
|
+
// hide webdriver with arg.
|
|
30
|
+
launchOptions.args = (0, utils_1.mergeArgsToHideWebdriver)(launchOptions.args);
|
|
31
|
+
if (useIncognitoPages) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const { userAgent, screen } = fingerprint;
|
|
35
|
+
launchOptions.userAgent = userAgent;
|
|
36
|
+
launchOptions.viewport = {
|
|
37
|
+
width: screen.width,
|
|
38
|
+
height: screen.height,
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
exports.createFingerprintPreLaunchHook = createFingerprintPreLaunchHook;
|
|
43
|
+
/**
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
function createPrePageCreateHook() {
|
|
47
|
+
return (_pageId, browserController, pageOptions) => {
|
|
48
|
+
const { launchContext, browserPlugin } = browserController;
|
|
49
|
+
const fingerprint = launchContext.fingerprint;
|
|
50
|
+
if (launchContext.useIncognitoPages && browserPlugin instanceof __1.PlaywrightPlugin && pageOptions) {
|
|
51
|
+
pageOptions.userAgent = fingerprint.userAgent;
|
|
52
|
+
pageOptions.viewport = {
|
|
53
|
+
width: fingerprint.screen.width,
|
|
54
|
+
height: fingerprint.screen.height,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
exports.createPrePageCreateHook = createPrePageCreateHook;
|
|
60
|
+
/**
|
|
61
|
+
* @internal
|
|
62
|
+
*/
|
|
63
|
+
function createPostPageCreateHook(fingerprintInjector) {
|
|
64
|
+
return async (page, browserController) => {
|
|
65
|
+
const { browserPlugin, launchContext } = browserController;
|
|
66
|
+
const fingerprint = launchContext.fingerprint;
|
|
67
|
+
// TODO this will require refactoring, we should use common API instead of branching based on plugin type,
|
|
68
|
+
// and there should be no public methods specific to some browser.
|
|
69
|
+
if (browserPlugin instanceof __1.PlaywrightPlugin) {
|
|
70
|
+
const { useIncognitoPages, isFingerprintInjected } = launchContext;
|
|
71
|
+
if (isFingerprintInjected) {
|
|
72
|
+
// If not incognitoPages are used we would add the injection script over and over which could cause memory leaks.
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const context = page.context();
|
|
76
|
+
await fingerprintInjector.attachFingerprintToPlaywright(context, fingerprint);
|
|
77
|
+
if (!useIncognitoPages) {
|
|
78
|
+
// There is only one context
|
|
79
|
+
// We would add the injection script over and over which could cause memory/cpu leaks.
|
|
80
|
+
launchContext.extend({ isFingerprintInjected: true });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (browserPlugin instanceof __1.PuppeteerPlugin) {
|
|
84
|
+
await fingerprintInjector.attachFingerprintToPuppeteer(page, fingerprint);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
exports.createPostPageCreateHook = createPostPageCreateHook;
|
|
89
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/fingerprinting/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Fingerprint } from 'fingerprint-injector';
|
|
2
|
+
export interface FingerprintGenerator {
|
|
3
|
+
getFingerprint: (fingerprintGeneratorOptions?: FingerprintGeneratorOptions) => GetFingerprintReturn;
|
|
4
|
+
}
|
|
5
|
+
export declare type GetFingerprintReturn = {
|
|
6
|
+
fingerprint: Fingerprint;
|
|
7
|
+
};
|
|
8
|
+
export declare type FingerprintGeneratorOptions = {
|
|
9
|
+
browsers?: BrowserName[] | BrowserSpecification[];
|
|
10
|
+
operatingSystems?: OperatingSystemsName[];
|
|
11
|
+
devices?: DeviceCategory[];
|
|
12
|
+
locales?: string[];
|
|
13
|
+
};
|
|
14
|
+
export declare const enum BrowserName {
|
|
15
|
+
chrome = "chrome",
|
|
16
|
+
firefox = "firefox",
|
|
17
|
+
safari = "safari"
|
|
18
|
+
}
|
|
19
|
+
export declare type BrowserSpecification = {
|
|
20
|
+
name: BrowserName;
|
|
21
|
+
minVersion?: number;
|
|
22
|
+
maxVersion?: number;
|
|
23
|
+
};
|
|
24
|
+
export declare const enum OperatingSystemsName {
|
|
25
|
+
linux = "linux",
|
|
26
|
+
macos = "macos",
|
|
27
|
+
windows = "windows"
|
|
28
|
+
}
|
|
29
|
+
export declare const enum DeviceCategory {
|
|
30
|
+
mobile = "mobile",
|
|
31
|
+
desktop = "desktop"
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fingerprinting/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACjC,cAAc,EAAE,CAAC,2BAA2B,CAAC,EAAE,2BAA2B,KAAK,oBAAoB,CAAC;CACvG;AAED,oBAAY,oBAAoB,GAAG;IAC/B,WAAW,EAAE,WAAW,CAAC;CAC5B,CAAA;AAED,oBAAY,2BAA2B,GAAG;IACtC,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAClD,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CAEtB,CAAA;AAED,0BAAkB,WAAW;IACzB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CACpB;AAED,oBAAY,oBAAoB,GAAG;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAA;AAED,0BAAkB,oBAAoB;IAClC,KAAK,UAAU;IACf,KAAK,UAAU;IACf,OAAO,YAAY;CACtB;AAED,0BAAkB,cAAc;IAC5B,MAAM,WAAW;IACjB,OAAO,YAAY;CACtB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeviceCategory = exports.OperatingSystemsName = exports.BrowserName = void 0;
|
|
4
|
+
var BrowserName;
|
|
5
|
+
(function (BrowserName) {
|
|
6
|
+
BrowserName["chrome"] = "chrome";
|
|
7
|
+
BrowserName["firefox"] = "firefox";
|
|
8
|
+
BrowserName["safari"] = "safari";
|
|
9
|
+
})(BrowserName = exports.BrowserName || (exports.BrowserName = {}));
|
|
10
|
+
var OperatingSystemsName;
|
|
11
|
+
(function (OperatingSystemsName) {
|
|
12
|
+
OperatingSystemsName["linux"] = "linux";
|
|
13
|
+
OperatingSystemsName["macos"] = "macos";
|
|
14
|
+
OperatingSystemsName["windows"] = "windows";
|
|
15
|
+
})(OperatingSystemsName = exports.OperatingSystemsName || (exports.OperatingSystemsName = {}));
|
|
16
|
+
var DeviceCategory;
|
|
17
|
+
(function (DeviceCategory) {
|
|
18
|
+
DeviceCategory["mobile"] = "mobile";
|
|
19
|
+
DeviceCategory["desktop"] = "desktop";
|
|
20
|
+
})(DeviceCategory = exports.DeviceCategory || (exports.DeviceCategory = {}));
|
|
21
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/fingerprinting/types.ts"],"names":[],"mappings":";;;AAkBA,IAAkB,WAIjB;AAJD,WAAkB,WAAW;IACzB,gCAAiB,CAAA;IACjB,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;AACrB,CAAC,EAJiB,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAI5B;AAQD,IAAkB,oBAIjB;AAJD,WAAkB,oBAAoB;IAClC,uCAAe,CAAA;IACf,uCAAe,CAAA;IACf,2CAAmB,CAAA;AACvB,CAAC,EAJiB,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAIrC;AAED,IAAkB,cAGjB;AAHD,WAAkB,cAAc;IAC5B,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;AACvB,CAAC,EAHiB,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAG/B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { LaunchContext } from '../launch-context';
|
|
2
|
+
import { FingerprintGeneratorOptions } from './types';
|
|
3
|
+
export declare const getGeneratorDefaultOptions: (launchContext: LaunchContext) => FingerprintGeneratorOptions;
|
|
4
|
+
export declare const mergeArgsToHideWebdriver: (originalArgs: string[]) => string[];
|
|
5
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fingerprinting/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAA+B,2BAA2B,EAAwB,MAAM,SAAS,CAAC;AAEzG,eAAO,MAAM,0BAA0B,kBAAmB,aAAa,KAAG,2BAWzE,CAAC;AAEF,eAAO,MAAM,wBAAwB,iBAAkB,MAAM,EAAE,KAAG,MAAM,EAcvE,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeArgsToHideWebdriver = exports.getGeneratorDefaultOptions = void 0;
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
const getGeneratorDefaultOptions = (launchContext) => {
|
|
6
|
+
const { browserPlugin, launchOptions } = launchContext;
|
|
7
|
+
const options = {
|
|
8
|
+
devices: ["desktop" /* desktop */],
|
|
9
|
+
locales: ['en-US'],
|
|
10
|
+
browsers: [getBrowserName(browserPlugin, launchOptions)],
|
|
11
|
+
operatingSystems: [getOperatingSystem()],
|
|
12
|
+
};
|
|
13
|
+
return options;
|
|
14
|
+
};
|
|
15
|
+
exports.getGeneratorDefaultOptions = getGeneratorDefaultOptions;
|
|
16
|
+
const mergeArgsToHideWebdriver = (originalArgs) => {
|
|
17
|
+
if (!originalArgs?.length) {
|
|
18
|
+
return ['--disable-blink-features=AutomationControlled'];
|
|
19
|
+
}
|
|
20
|
+
const argumentIndex = originalArgs.findIndex((arg) => arg.startsWith('--disable-blink-features='));
|
|
21
|
+
if (argumentIndex !== -1) {
|
|
22
|
+
originalArgs[argumentIndex] += ',AutomationControlled';
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
originalArgs.push('--disable-blink-features=AutomationControlled');
|
|
26
|
+
}
|
|
27
|
+
return originalArgs;
|
|
28
|
+
};
|
|
29
|
+
exports.mergeArgsToHideWebdriver = mergeArgsToHideWebdriver;
|
|
30
|
+
const getBrowserName = (browserPlugin, launchOptions) => {
|
|
31
|
+
const { library } = browserPlugin;
|
|
32
|
+
let browserName;
|
|
33
|
+
if (browserPlugin instanceof __1.PlaywrightPlugin) {
|
|
34
|
+
browserName = library.name();
|
|
35
|
+
}
|
|
36
|
+
if (browserPlugin instanceof __1.PuppeteerPlugin) {
|
|
37
|
+
browserName = launchOptions.product || library.product;
|
|
38
|
+
}
|
|
39
|
+
switch (browserName) {
|
|
40
|
+
case 'webkit':
|
|
41
|
+
return "safari" /* safari */;
|
|
42
|
+
case 'firefox':
|
|
43
|
+
return "firefox" /* firefox */;
|
|
44
|
+
default:
|
|
45
|
+
return "chrome" /* chrome */;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const getOperatingSystem = () => {
|
|
49
|
+
const { platform } = process;
|
|
50
|
+
switch (platform) {
|
|
51
|
+
case 'win32':
|
|
52
|
+
// platform is win32 even for 64-bit
|
|
53
|
+
return "windows" /* windows */;
|
|
54
|
+
case 'darwin':
|
|
55
|
+
return "macos" /* macos */;
|
|
56
|
+
default:
|
|
57
|
+
// consider everything else a linux
|
|
58
|
+
return "linux" /* linux */;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/fingerprinting/utils.ts"],"names":[],"mappings":";;;AAAA,0BAAuD;AAKhD,MAAM,0BAA0B,GAAG,CAAC,aAA4B,EAA+B,EAAE;IACpG,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,aAAa,CAAC;IAEvD,MAAM,OAAO,GAAG;QACZ,OAAO,EAAE,yBAAwB;QACjC,OAAO,EAAE,CAAC,OAAO,CAAC;QAClB,QAAQ,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QACxD,gBAAgB,EAAE,CAAC,kBAAkB,EAAE,CAAC;KAC3C,CAAC;IAEF,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAXW,QAAA,0BAA0B,8BAWrC;AAEK,MAAM,wBAAwB,GAAG,CAAC,YAAsB,EAAY,EAAE;IACzE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;QACvB,OAAO,CAAC,+CAA+C,CAAC,CAAC;KAC5D;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAE3G,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;QACtB,YAAY,CAAC,aAAa,CAAC,IAAI,uBAAuB,CAAC;KAC1D;SAAM;QACH,YAAY,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;KACtE;IAED,OAAO,YAAY,CAAC;AACxB,CAAC,CAAC;AAdW,QAAA,wBAAwB,4BAcnC;AAEF,MAAM,cAAc,GAAG,CAAC,aAA4B,EAAE,aAAkB,EAAe,EAAE;IACrF,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC;IAClC,IAAI,WAAW,CAAC;IAEhB,IAAI,aAAa,YAAY,oBAAgB,EAAE;QAC3C,WAAW,GAAG,OAAO,CAAC,IAAK,EAAE,CAAC;KACjC;IAAC,IAAI,aAAa,YAAY,mBAAe,EAAE;QAC5C,WAAW,GAAG,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;KAC1D;IAED,QAAQ,WAAW,EAAE;QACjB,KAAK,QAAQ;YACT,6BAA0B;QAC9B,KAAK,SAAS;YACV,+BAA2B;QAC/B;YACI,6BAA0B;KACjC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,GAAyB,EAAE;IAClD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,QAAQ,QAAQ,EAAE;QACd,KAAK,OAAO;YACR,oCAAoC;YACpC,+BAAoC;QACxC,KAAK,QAAQ;YACT,2BAAkC;QACtC;YACI,mCAAmC;YACnC,2BAAkC;KACzC;AACL,CAAC,CAAC"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `browser-pool` module exports three constructors. One for `BrowserPool`
|
|
3
|
+
* itself and two for the included Puppeteer and Playwright plugins.
|
|
4
|
+
*
|
|
5
|
+
* **Example:**
|
|
6
|
+
* ```js
|
|
7
|
+
* const {
|
|
8
|
+
* BrowserPool,
|
|
9
|
+
* PuppeteerPlugin,
|
|
10
|
+
* PlaywrightPlugin
|
|
11
|
+
* } = require('@crawlee/browser-pool');
|
|
12
|
+
* const puppeteer = require('puppeteer');
|
|
13
|
+
* const playwright = require('playwright');
|
|
14
|
+
*
|
|
15
|
+
* const browserPool = new BrowserPool({
|
|
16
|
+
* browserPlugins: [
|
|
17
|
+
* new PuppeteerPlugin(puppeteer),
|
|
18
|
+
* new PlaywrightPlugin(playwright.chromium),
|
|
19
|
+
* ]
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @module browser-pool
|
|
24
|
+
*/
|
|
25
|
+
export * from './browser-pool';
|
|
26
|
+
export * from './playwright/playwright-plugin';
|
|
27
|
+
export * from './puppeteer/puppeteer-plugin';
|
|
28
|
+
export * from './events';
|
|
29
|
+
export { BrowserName, DeviceCategory, OperatingSystemsName, } from './fingerprinting/types';
|
|
30
|
+
export type { BrowserController, BrowserControllerEvents, Cookie, } from './abstract-classes/browser-controller';
|
|
31
|
+
export type { CommonPage, BrowserPlugin, BrowserPluginOptions, CreateLaunchContextOptions, } from './abstract-classes/browser-plugin';
|
|
32
|
+
export type { LaunchContext, LaunchContextOptions, } from './launch-context';
|
|
33
|
+
export type { BrowserSpecification, FingerprintGenerator, FingerprintGeneratorOptions, GetFingerprintReturn, } from './fingerprinting/types';
|
|
34
|
+
export type { InferBrowserPluginArray } from './utils';
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,OAAO,EACH,WAAW,EACX,cAAc,EACd,oBAAoB,GACvB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACR,iBAAiB,EACjB,uBAAuB,EACvB,MAAM,GACT,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACR,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,0BAA0B,GAC7B,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACR,aAAa,EACb,oBAAoB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACR,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC"}
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,yDAA+B;AAC/B,yEAA+C;AAC/C,uEAA6C;AAC7C,mDAAyB;AACzB,gDAIgC;AAH5B,oGAAA,WAAW,OAAA;AACX,uGAAA,cAAc,OAAA;AACd,6GAAA,oBAAoB,OAAA"}
|
package/index.mjs
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import mod from "./index.js";
|
|
2
|
+
|
|
3
|
+
export default mod;
|
|
4
|
+
export const BROWSER_CONTROLLER_EVENTS = mod.BROWSER_CONTROLLER_EVENTS;
|
|
5
|
+
export const BROWSER_POOL_EVENTS = mod.BROWSER_POOL_EVENTS;
|
|
6
|
+
export const BrowserName = mod.BrowserName;
|
|
7
|
+
export const BrowserPool = mod.BrowserPool;
|
|
8
|
+
export const DeviceCategory = mod.DeviceCategory;
|
|
9
|
+
export const OperatingSystemsName = mod.OperatingSystemsName;
|
|
10
|
+
export const PlaywrightPlugin = mod.PlaywrightPlugin;
|
|
11
|
+
export const PuppeteerPlugin = mod.PuppeteerPlugin;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Fingerprint } from 'fingerprint-injector';
|
|
2
|
+
import type { BrowserPlugin, CommonBrowser, CommonLibrary } from './abstract-classes/browser-plugin';
|
|
3
|
+
import { UnwrapPromise } from './utils';
|
|
4
|
+
/**
|
|
5
|
+
* `LaunchContext` holds information about the launched browser. It's useful
|
|
6
|
+
* to retrieve the `launchOptions`, the proxy the browser was launched with
|
|
7
|
+
* or any other information user chose to add to the `LaunchContext` by calling
|
|
8
|
+
* its `extend` function. This is very useful to keep track of browser-scoped
|
|
9
|
+
* values, such as session IDs.
|
|
10
|
+
*/
|
|
11
|
+
export interface LaunchContextOptions<Library extends CommonLibrary = CommonLibrary, LibraryOptions = Parameters<Library['launch']>[0], LaunchResult extends CommonBrowser = UnwrapPromise<ReturnType<Library['launch']>>, NewPageOptions = Parameters<LaunchResult['newPage']>[0], NewPageResult = UnwrapPromise<ReturnType<LaunchResult['newPage']>>> {
|
|
12
|
+
/**
|
|
13
|
+
* To make identification of `LaunchContext` easier, `BrowserPool` assigns
|
|
14
|
+
* the `LaunchContext` an `id` that's equal to the `id` of the page that
|
|
15
|
+
* triggered the browser launch. This is useful, because many pages share
|
|
16
|
+
* a single launch context (single browser).
|
|
17
|
+
*/
|
|
18
|
+
id?: string;
|
|
19
|
+
/**
|
|
20
|
+
* The `BrowserPlugin` instance used to launch the browser.
|
|
21
|
+
*/
|
|
22
|
+
browserPlugin: BrowserPlugin<Library, LibraryOptions, LaunchResult, NewPageOptions, NewPageResult>;
|
|
23
|
+
/**
|
|
24
|
+
* The actual options the browser was launched with, after changes.
|
|
25
|
+
* Those changes would be typically made in pre-launch hooks.
|
|
26
|
+
*/
|
|
27
|
+
launchOptions: LibraryOptions;
|
|
28
|
+
/**
|
|
29
|
+
* By default pages share the same browser context.
|
|
30
|
+
* If set to `true` each page uses its own context that is destroyed once the page is closed or crashes.
|
|
31
|
+
*/
|
|
32
|
+
useIncognitoPages?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Path to a User Data Directory, which stores browser session data like cookies and local storage.
|
|
35
|
+
*/
|
|
36
|
+
userDataDir?: string;
|
|
37
|
+
proxyUrl?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare class LaunchContext<Library extends CommonLibrary = CommonLibrary, LibraryOptions = Parameters<Library['launch']>[0], LaunchResult extends CommonBrowser = UnwrapPromise<ReturnType<Library['launch']>>, NewPageOptions = Parameters<LaunchResult['newPage']>[0], NewPageResult = UnwrapPromise<ReturnType<LaunchResult['newPage']>>> {
|
|
40
|
+
id?: string;
|
|
41
|
+
browserPlugin: BrowserPlugin<Library, LibraryOptions, LaunchResult, NewPageOptions, NewPageResult>;
|
|
42
|
+
launchOptions: LibraryOptions;
|
|
43
|
+
useIncognitoPages: boolean;
|
|
44
|
+
userDataDir: string;
|
|
45
|
+
private _proxyUrl?;
|
|
46
|
+
private readonly _reservedFieldNames;
|
|
47
|
+
fingerprint?: Fingerprint;
|
|
48
|
+
[K: string]: unknown;
|
|
49
|
+
constructor(options: LaunchContextOptions<Library, LibraryOptions, LaunchResult, NewPageOptions, NewPageResult>);
|
|
50
|
+
/**
|
|
51
|
+
* Extend the launch context with any extra fields.
|
|
52
|
+
* This is useful to keep state information relevant
|
|
53
|
+
* to the browser being launched. It ensures that
|
|
54
|
+
* no internal fields are overridden and should be
|
|
55
|
+
* used instead of property assignment.
|
|
56
|
+
*/
|
|
57
|
+
extend<T extends Record<PropertyKey, unknown>>(fields: T): void;
|
|
58
|
+
/**
|
|
59
|
+
* Sets a proxy URL for the browser.
|
|
60
|
+
* Use `undefined` to unset existing proxy URL.
|
|
61
|
+
*/
|
|
62
|
+
set proxyUrl(url: string | undefined);
|
|
63
|
+
/**
|
|
64
|
+
* Returns the proxy URL of the browser.
|
|
65
|
+
*/
|
|
66
|
+
get proxyUrl(): string | undefined;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=launch-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-context.d.ts","sourceRoot":"","sources":["../src/launch-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB,CACjC,OAAO,SAAS,aAAa,GAAG,aAAa,EAC7C,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EACjD,YAAY,SAAS,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EACjF,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EACvD,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAElE;;;;;OAKG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IACnG;;;OAGG;IACH,aAAa,EAAE,cAAc,CAAC;IAC9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,aAAa,CACtB,OAAO,SAAS,aAAa,GAAG,aAAa,EAC7C,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EACjD,YAAY,SAAS,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EACjF,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EACvD,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAElE,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IAEnG,aAAa,EAAE,cAAc,CAAC;IAE9B,iBAAiB,EAAE,OAAO,CAAC;IAE3B,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,SAAS,CAAC,CAAS;IAE3B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwC;IAE5E,WAAW,CAAC,EAAE,WAAW,CAAC;IAG1B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;gBAET,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC;IAmB/G;;;;;;OAMG;IACH,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI;IAU/D;;;OAGG;IACH,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAEnC;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;CACJ"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LaunchContext = void 0;
|
|
4
|
+
class LaunchContext {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
Object.defineProperty(this, "id", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
writable: true,
|
|
10
|
+
value: void 0
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(this, "browserPlugin", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true,
|
|
16
|
+
value: void 0
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(this, "launchOptions", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: void 0
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(this, "useIncognitoPages", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: void 0
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(this, "userDataDir", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
configurable: true,
|
|
33
|
+
writable: true,
|
|
34
|
+
value: void 0
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(this, "_proxyUrl", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
writable: true,
|
|
40
|
+
value: void 0
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(this, "_reservedFieldNames", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
configurable: true,
|
|
45
|
+
writable: true,
|
|
46
|
+
value: [...Reflect.ownKeys(this), 'extend']
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(this, "fingerprint", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
configurable: true,
|
|
51
|
+
writable: true,
|
|
52
|
+
value: void 0
|
|
53
|
+
});
|
|
54
|
+
const { id, browserPlugin, launchOptions, proxyUrl, useIncognitoPages, userDataDir = '', } = options;
|
|
55
|
+
this.id = id;
|
|
56
|
+
this.browserPlugin = browserPlugin;
|
|
57
|
+
this.launchOptions = launchOptions;
|
|
58
|
+
this.useIncognitoPages = useIncognitoPages ?? false;
|
|
59
|
+
this.userDataDir = userDataDir;
|
|
60
|
+
this._proxyUrl = proxyUrl;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Extend the launch context with any extra fields.
|
|
64
|
+
* This is useful to keep state information relevant
|
|
65
|
+
* to the browser being launched. It ensures that
|
|
66
|
+
* no internal fields are overridden and should be
|
|
67
|
+
* used instead of property assignment.
|
|
68
|
+
*/
|
|
69
|
+
extend(fields) {
|
|
70
|
+
Object.entries(fields).forEach(([key, value]) => {
|
|
71
|
+
if (this._reservedFieldNames.includes(key)) {
|
|
72
|
+
throw new Error(`Cannot extend LaunchContext with key: ${key}, because it's reserved.`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
Reflect.set(this, key, value);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Sets a proxy URL for the browser.
|
|
81
|
+
* Use `undefined` to unset existing proxy URL.
|
|
82
|
+
*/
|
|
83
|
+
set proxyUrl(url) {
|
|
84
|
+
this._proxyUrl = url && new URL(url).href;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Returns the proxy URL of the browser.
|
|
88
|
+
*/
|
|
89
|
+
get proxyUrl() {
|
|
90
|
+
return this._proxyUrl;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.LaunchContext = LaunchContext;
|
|
94
|
+
//# sourceMappingURL=launch-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-context.js","sourceRoot":"","sources":["../src/launch-context.ts"],"names":[],"mappings":";;;AA8CA,MAAa,aAAa;IA0BtB,YAAY,OAAmG;QAnB/G;;;;;WAAY;QAEZ;;;;;WAAmG;QAEnG;;;;;WAA8B;QAE9B;;;;;WAA2B;QAE3B;;;;;WAAoB;QAEpB;;;;;WAA2B;QAE3B;;;;mBAAuC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;WAAC;QAE5E;;;;;WAA0B;QAMtB,MAAM,EACF,EAAE,EACF,aAAa,EACb,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,WAAW,GAAG,EAAE,GACnB,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,IAAI,KAAK,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAyC,MAAS;QACpD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC5C,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACxC,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,0BAA0B,CAAC,CAAC;aAC3F;iBAAM;gBACH,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;aACjC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACH,IAAI,QAAQ,CAAC,GAAuB;QAChC,IAAI,CAAC,SAAS,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;CACJ;AA5ED,sCA4EC"}
|
package/logger.d.ts
ADDED
package/logger.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,0BAEd,CAAC"}
|
package/logger.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.log = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const log_1 = tslib_1.__importDefault(require("@apify/log"));
|
|
6
|
+
exports.log = log_1.default.child({
|
|
7
|
+
prefix: 'BrowserPool',
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=logger.js.map
|
package/logger.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;AAAA,6DAAoC;AAEvB,QAAA,GAAG,GAAG,aAAU,CAAC,KAAK,CAAC;IAChC,MAAM,EAAE,aAAa;CACxB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crawlee/browser-pool",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.13",
|
|
4
4
|
"description": "Rotate multiple browsers using popular automation libraries such as Playwright or Puppeteer.",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=16.0.0"
|
|
@@ -27,9 +27,6 @@
|
|
|
27
27
|
"bugs": {
|
|
28
28
|
"url": "https://github.com/apify/apify-ts/issues"
|
|
29
29
|
},
|
|
30
|
-
"files": [
|
|
31
|
-
"dist"
|
|
32
|
-
],
|
|
33
30
|
"scripts": {
|
|
34
31
|
"build": "npm run clean && npm run compile && npm run copy && node copy-definitions.js",
|
|
35
32
|
"clean": "rimraf ./dist",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import type { BrowserContext, Browser as PlaywrightBrowser } from 'playwright';
|
|
4
|
+
export interface BrowserOptions {
|
|
5
|
+
browserContext: BrowserContext;
|
|
6
|
+
version: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Browser wrapper created to have consistent API with persistent and non-persistent contexts.
|
|
10
|
+
*/
|
|
11
|
+
export declare class Browser extends EventEmitter implements PlaywrightBrowser {
|
|
12
|
+
private _browserContext;
|
|
13
|
+
private _version;
|
|
14
|
+
private _isConnected;
|
|
15
|
+
constructor(options: BrowserOptions);
|
|
16
|
+
close(): Promise<void>;
|
|
17
|
+
contexts(): BrowserContext[];
|
|
18
|
+
isConnected(): boolean;
|
|
19
|
+
version(): string;
|
|
20
|
+
newPage(...args: Parameters<BrowserContext['newPage']>): ReturnType<BrowserContext['newPage']>;
|
|
21
|
+
newContext(): Promise<never>;
|
|
22
|
+
newBrowserCDPSession(): Promise<never>;
|
|
23
|
+
startTracing(): Promise<never>;
|
|
24
|
+
stopTracing(): Promise<never>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/playwright/browser.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,cAAc;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,YAAa,YAAW,iBAAiB;IAClE,OAAO,CAAC,eAAe,CAAiB;IAExC,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,YAAY,CAAQ;gBAEhB,OAAO,EAAE,cAAc;IAc7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,QAAQ,IAAI,cAAc,EAAE;IAI5B,WAAW,IAAI,OAAO;IAItB,OAAO,IAAI,MAAM;IAIX,OAAO,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAI9F,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;IAI5B,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAItC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IAI9B,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;CAGtC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Browser = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
/**
|
|
6
|
+
* Browser wrapper created to have consistent API with persistent and non-persistent contexts.
|
|
7
|
+
*/
|
|
8
|
+
class Browser extends events_1.EventEmitter {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
super();
|
|
11
|
+
Object.defineProperty(this, "_browserContext", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true,
|
|
15
|
+
value: void 0
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(this, "_version", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true,
|
|
21
|
+
value: void 0
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(this, "_isConnected", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: true
|
|
28
|
+
});
|
|
29
|
+
const { browserContext, version } = options;
|
|
30
|
+
this._browserContext = browserContext;
|
|
31
|
+
this._version = version;
|
|
32
|
+
this._browserContext.once('close', () => {
|
|
33
|
+
this._isConnected = false;
|
|
34
|
+
this.emit('disconnected');
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async close() {
|
|
38
|
+
await this._browserContext.close();
|
|
39
|
+
}
|
|
40
|
+
contexts() {
|
|
41
|
+
return [this._browserContext];
|
|
42
|
+
}
|
|
43
|
+
isConnected() {
|
|
44
|
+
return this._isConnected;
|
|
45
|
+
}
|
|
46
|
+
version() {
|
|
47
|
+
return this._version;
|
|
48
|
+
}
|
|
49
|
+
async newPage(...args) {
|
|
50
|
+
return this._browserContext.newPage(...args);
|
|
51
|
+
}
|
|
52
|
+
async newContext() {
|
|
53
|
+
throw new Error('Function `newContext()` is not available in incognito mode');
|
|
54
|
+
}
|
|
55
|
+
async newBrowserCDPSession() {
|
|
56
|
+
throw new Error('Function `newBrowserCDPSession()` is not available in incognito mode');
|
|
57
|
+
}
|
|
58
|
+
async startTracing() {
|
|
59
|
+
throw new Error('Function `startTracing()` is not available in incognito mode');
|
|
60
|
+
}
|
|
61
|
+
async stopTracing() {
|
|
62
|
+
throw new Error('Function `stopTracing()` is not available in incognito mode');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.Browser = Browser;
|
|
66
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/playwright/browser.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAQtC;;GAEG;AACH,MAAa,OAAQ,SAAQ,qBAAY;IAOrC,YAAY,OAAuB;QAC/B,KAAK,EAAE,CAAC;QAPZ;;;;;WAAwC;QAExC;;;;;WAAyB;QAEzB;;;;mBAAuB,IAAI;WAAC;QAKxB,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QAEtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACpC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IAED,QAAQ;QACJ,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,OAAO;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAG,IAA2C;QACxD,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,oBAAoB;QACtB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC5F,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,WAAW;QACb,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;CACJ;AAxDD,0BAwDC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Browser, BrowserType, Page } from 'playwright';
|
|
2
|
+
import { BrowserController, Cookie } from '../abstract-classes/browser-controller';
|
|
3
|
+
export declare class PlaywrightController extends BrowserController<BrowserType, Parameters<BrowserType['launch']>[0], Browser> {
|
|
4
|
+
normalizeProxyOptions(proxyUrl: string | undefined, pageOptions: any): Record<string, unknown>;
|
|
5
|
+
protected _newPage(contextOptions?: Parameters<Browser['newPage']>[0]): Promise<Page>;
|
|
6
|
+
protected _close(): Promise<void>;
|
|
7
|
+
protected _kill(): Promise<void>;
|
|
8
|
+
protected _getCookies(page: Page): Promise<Cookie[]>;
|
|
9
|
+
protected _setCookies(page: Page, cookies: Cookie[]): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=playwright-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-controller.d.ts","sourceRoot":"","sources":["../../src/playwright/playwright-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;AAGnF,qBAAa,oBAAqB,SAAQ,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IACnH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;cAmB9E,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;cA0C3E,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;cAIvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKpD,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAItE"}
|