brave-real-launcher 1.2.31 → 1.2.33
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/.github/workflows/chrome-launcher-sync.yml +2 -2
- package/README.md +131 -81
- package/dist/brave-installer.d.ts +57 -0
- package/dist/brave-installer.js +352 -0
- package/dist/brave-installer.mjs +323 -0
- package/dist/brave-launcher.d.ts +21 -0
- package/dist/brave-launcher.js +207 -15
- package/dist/brave-launcher.mjs +207 -15
- package/dist/extension-manager.d.ts +58 -0
- package/dist/extension-manager.js +333 -0
- package/dist/extension-manager.mjs +304 -0
- package/dist/flags.js +15 -1
- package/dist/flags.mjs +15 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +15 -2
- package/dist/index.mjs +7 -1
- package/dist/stealth-utils.d.ts +128 -0
- package/dist/stealth-utils.js +210 -0
- package/dist/stealth-utils.mjs +206 -0
- package/package.json +1 -1
- package/console.log(ESM build works!))' +0 -0
- package/workflow-test-report.md +0 -44
package/dist/flags.js
CHANGED
|
@@ -39,6 +39,12 @@ exports.DEFAULT_FLAGS = [
|
|
|
39
39
|
'BraveNews',
|
|
40
40
|
// Brave-specific: disable Brave Wallet notifications
|
|
41
41
|
'BraveWallet',
|
|
42
|
+
// Brave-specific: disable Private Product Analytics (P3A)
|
|
43
|
+
'BraveP3A',
|
|
44
|
+
// Brave-specific: disable P3A notice
|
|
45
|
+
'BraveP3ANotice',
|
|
46
|
+
// Brave-specific: disable product analytics consent
|
|
47
|
+
'BraveAnalyticsConsent',
|
|
42
48
|
].join(','),
|
|
43
49
|
// Disable all extensions
|
|
44
50
|
'--disable-extensions',
|
|
@@ -91,5 +97,13 @@ exports.DEFAULT_FLAGS = [
|
|
|
91
97
|
'--disable-brave-update',
|
|
92
98
|
// Disable Brave's tor client
|
|
93
99
|
'--disable-tor-client-updater',
|
|
100
|
+
// Disable Brave's P3A (Privacy-Preserving Product Analytics)
|
|
101
|
+
'--disable-brave-p3a',
|
|
102
|
+
// Disable P3A notice/banner
|
|
103
|
+
'--disable-brave-p3a-notice',
|
|
104
|
+
// Disable all Brave analytics
|
|
105
|
+
'--disable-brave-stats-updater',
|
|
106
|
+
// Disable referral ping
|
|
107
|
+
'--disable-brave-referral-ping',
|
|
94
108
|
];
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILFlBQVksQ0FBQzs7O0FBRWI7OztHQUdHO0FBRVUsUUFBQSxhQUFhLEdBQTBCO0lBQ2xELHFCQUFxQjtRQUNyQjtZQUNFLHdDQUF3QztZQUN4QyxXQUFXO1lBQ1gsOERBQThEO1lBQzlELG1CQUFtQjtZQUNuQixpRkFBaUY7WUFDakYsYUFBYTtZQUNiLG9EQUFvRDtZQUNwRCx3QkFBd0I7WUFDeEIsdUNBQXVDO1lBQ3ZDLDZCQUE2QjtZQUM3QixvQ0FBb0M7WUFDcEMsZ0NBQWdDO1lBQ2hDLDRCQUE0QjtZQUM1Qix5Q0FBeUM7WUFDekMseUNBQXlDO1lBQ3pDLDZCQUE2QjtZQUM3Qix5Q0FBeUM7WUFDekMseUJBQXlCO1lBQ3pCLG9DQUFvQztZQUNwQyxVQUFVO1lBQ1Ysd0NBQXdDO1lBQ3hDLGNBQWM7WUFDZCxxQ0FBcUM7WUFDckMsV0FBVztZQUNYLHFEQUFxRDtZQUNyRCxhQUFhO1lBQ2IsMERBQTBEO1lBQzFELFVBQVU7WUFDVixxQ0FBcUM7WUFDckMsZ0JBQWdCO1lBQ2hCLG9EQUFvRDtZQUNwRCx1QkFBdUI7U0FDeEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBRVgseUJBQXlCO0lBQ3pCLHNCQUFzQjtJQUN0Qix1RUFBdUU7SUFDdkUsc0RBQXNEO0lBQ3RELDhDQUE4QztJQUM5QyxpQ0FBaUM7SUFDakMsd0NBQXdDO0lBQ3hDLDRCQUE0QjtJQUM1QiwwQ0FBMEM7SUFDMUMsMENBQTBDO0lBQzFDLDhCQUE4QjtJQUM5QixnQkFBZ0I7SUFDaEIsc0RBQXNEO0lBQ3RELDBCQUEwQjtJQUMxQixvREFBb0Q7SUFDcEQsd0JBQXdCO0lBQ3hCLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2Qsb0NBQW9DO0lBQ3BDLDRCQUE0QjtJQUM1Qix5QkFBeUI7SUFDekIsZ0JBQWdCO0lBQ2hCLHFEQUFxRDtJQUNyRCwwQ0FBMEM7SUFDMUMseUNBQXlDO0lBQ3pDLGtDQUFrQztJQUNsQywrREFBK0Q7SUFDL0QsdUNBQXVDO0lBQ3ZDLDZFQUE2RTtJQUM3RSxtQ0FBbUM7SUFDbkMsbURBQW1EO0lBQ25ELHdCQUF3QjtJQUN4QixtRUFBbUU7SUFDbkUscUJBQXFCO0lBQ3JCLDZCQUE2QjtJQUM3QixpREFBaUQ7SUFFakQsd0RBQXdEO0lBQ3hELHdCQUF3QjtJQUN4QiwyQkFBMkI7SUFDM0IsNEJBQTRCO0lBQzVCLHlDQUF5QztJQUN6Qyw4QkFBOEI7SUFDOUIsMkNBQTJDO0lBQzNDLDZCQUE2QjtJQUU3Qix1QkFBdUI7SUFDdkIsNkJBQTZCO0lBQzdCLDRCQUE0QjtJQUM1Qix1Q0FBdUM7SUFDdkMsd0JBQXdCO0lBQ3hCLDZCQUE2QjtJQUM3Qiw4QkFBOEI7SUFDOUIsNkRBQTZEO0lBQzdELHFCQUFxQjtJQUNyQiw0QkFBNEI7SUFDNUIsNEJBQTRCO0lBQzVCLDhCQUE4QjtJQUM5QiwrQkFBK0I7SUFDL0Isd0JBQXdCO0lBQ3hCLCtCQUErQjtDQUNoQyxDQUFDIn0=
|
package/dist/flags.mjs
CHANGED
|
@@ -37,6 +37,12 @@ export const DEFAULT_FLAGS = [
|
|
|
37
37
|
'BraveNews',
|
|
38
38
|
// Brave-specific: disable Brave Wallet notifications
|
|
39
39
|
'BraveWallet',
|
|
40
|
+
// Brave-specific: disable Private Product Analytics (P3A)
|
|
41
|
+
'BraveP3A',
|
|
42
|
+
// Brave-specific: disable P3A notice
|
|
43
|
+
'BraveP3ANotice',
|
|
44
|
+
// Brave-specific: disable product analytics consent
|
|
45
|
+
'BraveAnalyticsConsent',
|
|
40
46
|
].join(','),
|
|
41
47
|
// Disable all extensions
|
|
42
48
|
'--disable-extensions',
|
|
@@ -89,5 +95,13 @@ export const DEFAULT_FLAGS = [
|
|
|
89
95
|
'--disable-brave-update',
|
|
90
96
|
// Disable Brave's tor client
|
|
91
97
|
'--disable-tor-client-updater',
|
|
98
|
+
// Disable Brave's P3A (Privacy-Preserving Product Analytics)
|
|
99
|
+
'--disable-brave-p3a',
|
|
100
|
+
// Disable P3A notice/banner
|
|
101
|
+
'--disable-brave-p3a-notice',
|
|
102
|
+
// Disable all Brave analytics
|
|
103
|
+
'--disable-brave-stats-updater',
|
|
104
|
+
// Disable referral ping
|
|
105
|
+
'--disable-brave-referral-ping',
|
|
92
106
|
];
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILFlBQVksQ0FBQztBQUViOzs7R0FHRztBQUVILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBMEI7SUFDbEQscUJBQXFCO1FBQ3JCO1lBQ0Usd0NBQXdDO1lBQ3hDLFdBQVc7WUFDWCw4REFBOEQ7WUFDOUQsbUJBQW1CO1lBQ25CLGlGQUFpRjtZQUNqRixhQUFhO1lBQ2Isb0RBQW9EO1lBQ3BELHdCQUF3QjtZQUN4Qix1Q0FBdUM7WUFDdkMsNkJBQTZCO1lBQzdCLG9DQUFvQztZQUNwQyxnQ0FBZ0M7WUFDaEMsNEJBQTRCO1lBQzVCLHlDQUF5QztZQUN6Qyx5Q0FBeUM7WUFDekMsNkJBQTZCO1lBQzdCLHlDQUF5QztZQUN6Qyx5QkFBeUI7WUFDekIsb0NBQW9DO1lBQ3BDLFVBQVU7WUFDVix3Q0FBd0M7WUFDeEMsY0FBYztZQUNkLHFDQUFxQztZQUNyQyxXQUFXO1lBQ1gscURBQXFEO1lBQ3JELGFBQWE7WUFDYiwwREFBMEQ7WUFDMUQsVUFBVTtZQUNWLHFDQUFxQztZQUNyQyxnQkFBZ0I7WUFDaEIsb0RBQW9EO1lBQ3BELHVCQUF1QjtTQUN4QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFFWCx5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLHVFQUF1RTtJQUN2RSxzREFBc0Q7SUFDdEQsOENBQThDO0lBQzlDLGlDQUFpQztJQUNqQyx3Q0FBd0M7SUFDeEMsNEJBQTRCO0lBQzVCLDBDQUEwQztJQUMxQywwQ0FBMEM7SUFDMUMsOEJBQThCO0lBQzlCLGdCQUFnQjtJQUNoQixzREFBc0Q7SUFDdEQsMEJBQTBCO0lBQzFCLG9EQUFvRDtJQUNwRCx3QkFBd0I7SUFDeEIsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxvQ0FBb0M7SUFDcEMsNEJBQTRCO0lBQzVCLHlCQUF5QjtJQUN6QixnQkFBZ0I7SUFDaEIscURBQXFEO0lBQ3JELDBDQUEwQztJQUMxQyx5Q0FBeUM7SUFDekMsa0NBQWtDO0lBQ2xDLCtEQUErRDtJQUMvRCx1Q0FBdUM7SUFDdkMsNkVBQTZFO0lBQzdFLG1DQUFtQztJQUNuQyxtREFBbUQ7SUFDbkQsd0JBQXdCO0lBQ3hCLG1FQUFtRTtJQUNuRSxxQkFBcUI7SUFDckIsNkJBQTZCO0lBQzdCLGlEQUFpRDtJQUVqRCx3REFBd0Q7SUFDeEQsd0JBQXdCO0lBQ3hCLDJCQUEyQjtJQUMzQiw0QkFBNEI7SUFDNUIseUNBQXlDO0lBQ3pDLDhCQUE4QjtJQUM5QiwyQ0FBMkM7SUFDM0MsNkJBQTZCO0lBRTdCLHVCQUF1QjtJQUN2Qiw2QkFBNkI7SUFDN0IsNEJBQTRCO0lBQzVCLHVDQUF1QztJQUN2Qyx3QkFBd0I7SUFDeEIsNkJBQTZCO0lBQzdCLDhCQUE4QjtJQUM5Qiw2REFBNkQ7SUFDN0QscUJBQXFCO0lBQ3JCLDRCQUE0QjtJQUM1Qiw0QkFBNEI7SUFDNUIsOEJBQThCO0lBQzlCLCtCQUErQjtJQUMvQix3QkFBd0I7SUFDeEIsK0JBQStCO0NBQ2hDLENBQUMifQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -7,4 +7,7 @@ export { launch, killAll, getBravePath, getInstallations, findBrave, Launcher as
|
|
|
7
7
|
export { XvfbManager, XvfbOptions, detectDesktopEnvironment, getPlatform } from './utils.js';
|
|
8
8
|
export { DEFAULT_FLAGS } from './flags.js';
|
|
9
9
|
export { getRandomPort } from './random-port.js';
|
|
10
|
+
export { ExtensionManager, ExtensionInfo, ExtensionManagerOptions } from './extension-manager.js';
|
|
11
|
+
export { BraveInstaller, InstallerOptions, InstallResult } from './brave-installer.js';
|
|
12
|
+
export { STEALTH_FLAGS, STEALTH_SCRIPTS, USER_AGENTS, getStealthFlags, getStealthScript } from './stealth-utils.js';
|
|
10
13
|
export * as braveFinder from './brave-finder.js';
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
28
28
|
return result;
|
|
29
29
|
};
|
|
30
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
-
exports.braveFinder = exports.getRandomPort = exports.DEFAULT_FLAGS = exports.getPlatform = exports.detectDesktopEnvironment = exports.XvfbManager = exports.BraveLauncher = exports.findBrave = exports.getInstallations = exports.getBravePath = exports.killAll = exports.launch = void 0;
|
|
31
|
+
exports.braveFinder = exports.getStealthScript = exports.getStealthFlags = exports.USER_AGENTS = exports.STEALTH_SCRIPTS = exports.STEALTH_FLAGS = exports.BraveInstaller = exports.ExtensionManager = exports.getRandomPort = exports.DEFAULT_FLAGS = exports.getPlatform = exports.detectDesktopEnvironment = exports.XvfbManager = exports.BraveLauncher = exports.findBrave = exports.getInstallations = exports.getBravePath = exports.killAll = exports.launch = void 0;
|
|
32
32
|
var brave_launcher_js_1 = require("./brave-launcher.js");
|
|
33
33
|
Object.defineProperty(exports, "launch", { enumerable: true, get: function () { return brave_launcher_js_1.launch; } });
|
|
34
34
|
Object.defineProperty(exports, "killAll", { enumerable: true, get: function () { return brave_launcher_js_1.killAll; } });
|
|
@@ -44,6 +44,19 @@ var flags_js_1 = require("./flags.js");
|
|
|
44
44
|
Object.defineProperty(exports, "DEFAULT_FLAGS", { enumerable: true, get: function () { return flags_js_1.DEFAULT_FLAGS; } });
|
|
45
45
|
var random_port_js_1 = require("./random-port.js");
|
|
46
46
|
Object.defineProperty(exports, "getRandomPort", { enumerable: true, get: function () { return random_port_js_1.getRandomPort; } });
|
|
47
|
+
// Extension Manager for loading extensions like uBlock Origin
|
|
48
|
+
var extension_manager_js_1 = require("./extension-manager.js");
|
|
49
|
+
Object.defineProperty(exports, "ExtensionManager", { enumerable: true, get: function () { return extension_manager_js_1.ExtensionManager; } });
|
|
50
|
+
// Brave Installer for auto-installing Brave browser
|
|
51
|
+
var brave_installer_js_1 = require("./brave-installer.js");
|
|
52
|
+
Object.defineProperty(exports, "BraveInstaller", { enumerable: true, get: function () { return brave_installer_js_1.BraveInstaller; } });
|
|
53
|
+
// Stealth utilities for anti-bot-detection
|
|
54
|
+
var stealth_utils_js_1 = require("./stealth-utils.js");
|
|
55
|
+
Object.defineProperty(exports, "STEALTH_FLAGS", { enumerable: true, get: function () { return stealth_utils_js_1.STEALTH_FLAGS; } });
|
|
56
|
+
Object.defineProperty(exports, "STEALTH_SCRIPTS", { enumerable: true, get: function () { return stealth_utils_js_1.STEALTH_SCRIPTS; } });
|
|
57
|
+
Object.defineProperty(exports, "USER_AGENTS", { enumerable: true, get: function () { return stealth_utils_js_1.USER_AGENTS; } });
|
|
58
|
+
Object.defineProperty(exports, "getStealthFlags", { enumerable: true, get: function () { return stealth_utils_js_1.getStealthFlags; } });
|
|
59
|
+
Object.defineProperty(exports, "getStealthScript", { enumerable: true, get: function () { return stealth_utils_js_1.getStealthScript; } });
|
|
47
60
|
// Also export everything from brave-finder for advanced usage
|
|
48
61
|
exports.braveFinder = __importStar(require("./brave-finder.js"));
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgseURBVTZCO0FBVDNCLDJHQUFBLE1BQU0sT0FBQTtBQUNOLDRHQUFBLE9BQU8sT0FBQTtBQUNQLGlIQUFBLFlBQVksT0FBQTtBQUNaLHFIQUFBLGdCQUFnQixPQUFBO0FBQ2hCLDhHQUFBLFNBQVMsT0FBQTtBQUNULGtIQUFBLFFBQVEsT0FBaUI7QUFNM0IsdUNBS29CO0FBSmxCLHVHQUFBLFdBQVcsT0FBQTtBQUVYLG9IQUFBLHdCQUF3QixPQUFBO0FBQ3hCLHVHQUFBLFdBQVcsT0FBQTtBQUdiLHVDQUEyQztBQUFsQyx5R0FBQSxhQUFhLE9BQUE7QUFDdEIsbURBQWlEO0FBQXhDLCtHQUFBLGFBQWEsT0FBQTtBQUV0Qiw4REFBOEQ7QUFDOUQsK0RBQWtHO0FBQXpGLHdIQUFBLGdCQUFnQixPQUFBO0FBRXpCLG9EQUFvRDtBQUNwRCwyREFBdUY7QUFBOUUsb0hBQUEsY0FBYyxPQUFBO0FBRXZCLDJDQUEyQztBQUMzQyx1REFBb0g7QUFBM0csaUhBQUEsYUFBYSxPQUFBO0FBQUUsbUhBQUEsZUFBZSxPQUFBO0FBQUUsK0dBQUEsV0FBVyxPQUFBO0FBQUUsbUhBQUEsZUFBZSxPQUFBO0FBQUUsb0hBQUEsZ0JBQWdCLE9BQUE7QUFFdkYsOERBQThEO0FBQzlELGlFQUFpRCJ9
|
package/dist/index.mjs
CHANGED
|
@@ -7,6 +7,12 @@ export { launch, killAll, getBravePath, getInstallations, findBrave, Launcher as
|
|
|
7
7
|
export { XvfbManager, detectDesktopEnvironment, getPlatform } from './utils.mjs';
|
|
8
8
|
export { DEFAULT_FLAGS } from './flags.mjs';
|
|
9
9
|
export { getRandomPort } from './random-port.mjs';
|
|
10
|
+
// Extension Manager for loading extensions like uBlock Origin
|
|
11
|
+
export { ExtensionManager } from './extension-manager.mjs';
|
|
12
|
+
// Brave Installer for auto-installing Brave browser
|
|
13
|
+
export { BraveInstaller } from './brave-installer.mjs';
|
|
14
|
+
// Stealth utilities for anti-bot-detection
|
|
15
|
+
export { STEALTH_FLAGS, STEALTH_SCRIPTS, USER_AGENTS, getStealthFlags, getStealthScript } from './stealth-utils.mjs';
|
|
10
16
|
// Also export everything from brave-finder for advanced usage
|
|
11
17
|
export * as braveFinder from './brave-finder.mjs';
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFDTCxNQUFNLEVBQ04sT0FBTyxFQUNQLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFFBQVEsSUFBSSxhQUFhLEVBSTFCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUNMLFdBQVcsRUFFWCx3QkFBd0IsRUFDeEIsV0FBVyxFQUNaLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELDhEQUE4RDtBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQTBDLE1BQU0sd0JBQXdCLENBQUM7QUFFbEcsb0RBQW9EO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQW1DLE1BQU0sc0JBQXNCLENBQUM7QUFFdkYsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwSCw4REFBOEQ7QUFDOUQsT0FBTyxLQUFLLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQyJ9
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stealth flags to add to browser launch
|
|
3
|
+
* These help bypass basic bot detection
|
|
4
|
+
*/
|
|
5
|
+
export declare const STEALTH_FLAGS: ReadonlyArray<string>;
|
|
6
|
+
/**
|
|
7
|
+
* JavaScript code to inject for stealth mode
|
|
8
|
+
* Overrides various navigator properties that are commonly checked by bot detectors
|
|
9
|
+
*/
|
|
10
|
+
export declare const STEALTH_SCRIPTS: {
|
|
11
|
+
/**
|
|
12
|
+
* Override navigator.webdriver to return undefined
|
|
13
|
+
*/
|
|
14
|
+
webdriverOverride: string;
|
|
15
|
+
/**
|
|
16
|
+
* Override navigator.plugins to return realistic plugins
|
|
17
|
+
*/
|
|
18
|
+
pluginsOverride: string;
|
|
19
|
+
/**
|
|
20
|
+
* Override navigator.languages
|
|
21
|
+
*/
|
|
22
|
+
languagesOverride: string;
|
|
23
|
+
/**
|
|
24
|
+
* Override permissions query for notifications
|
|
25
|
+
*/
|
|
26
|
+
permissionsOverride: string;
|
|
27
|
+
/**
|
|
28
|
+
* Override chrome.runtime to appear as a regular browser
|
|
29
|
+
*/
|
|
30
|
+
chromeRuntimeOverride: string;
|
|
31
|
+
/**
|
|
32
|
+
* Override console.debug to prevent detection
|
|
33
|
+
*/
|
|
34
|
+
consoleOverride: string;
|
|
35
|
+
/**
|
|
36
|
+
* Fix iframe contentWindow access
|
|
37
|
+
*/
|
|
38
|
+
iframeOverride: string;
|
|
39
|
+
/**
|
|
40
|
+
* Override WebGL vendor and renderer
|
|
41
|
+
*/
|
|
42
|
+
webglOverride: string;
|
|
43
|
+
/**
|
|
44
|
+
* Override outerWidth and outerHeight
|
|
45
|
+
*/
|
|
46
|
+
dimensionsOverride: string;
|
|
47
|
+
/**
|
|
48
|
+
* Full combined stealth script
|
|
49
|
+
*/
|
|
50
|
+
readonly fullStealth: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* User agent strings for different platforms
|
|
54
|
+
*/
|
|
55
|
+
export declare const USER_AGENTS: {
|
|
56
|
+
windows: string;
|
|
57
|
+
macos: string;
|
|
58
|
+
linux: string;
|
|
59
|
+
/**
|
|
60
|
+
* Get user agent for current platform
|
|
61
|
+
*/
|
|
62
|
+
readonly current: string;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Get stealth flags with optional custom user agent
|
|
66
|
+
*/
|
|
67
|
+
export declare function getStealthFlags(userAgent?: string): string[];
|
|
68
|
+
/**
|
|
69
|
+
* Get the full stealth injection script
|
|
70
|
+
*/
|
|
71
|
+
export declare function getStealthScript(): string;
|
|
72
|
+
declare const _default: {
|
|
73
|
+
STEALTH_FLAGS: readonly string[];
|
|
74
|
+
STEALTH_SCRIPTS: {
|
|
75
|
+
/**
|
|
76
|
+
* Override navigator.webdriver to return undefined
|
|
77
|
+
*/
|
|
78
|
+
webdriverOverride: string;
|
|
79
|
+
/**
|
|
80
|
+
* Override navigator.plugins to return realistic plugins
|
|
81
|
+
*/
|
|
82
|
+
pluginsOverride: string;
|
|
83
|
+
/**
|
|
84
|
+
* Override navigator.languages
|
|
85
|
+
*/
|
|
86
|
+
languagesOverride: string;
|
|
87
|
+
/**
|
|
88
|
+
* Override permissions query for notifications
|
|
89
|
+
*/
|
|
90
|
+
permissionsOverride: string;
|
|
91
|
+
/**
|
|
92
|
+
* Override chrome.runtime to appear as a regular browser
|
|
93
|
+
*/
|
|
94
|
+
chromeRuntimeOverride: string;
|
|
95
|
+
/**
|
|
96
|
+
* Override console.debug to prevent detection
|
|
97
|
+
*/
|
|
98
|
+
consoleOverride: string;
|
|
99
|
+
/**
|
|
100
|
+
* Fix iframe contentWindow access
|
|
101
|
+
*/
|
|
102
|
+
iframeOverride: string;
|
|
103
|
+
/**
|
|
104
|
+
* Override WebGL vendor and renderer
|
|
105
|
+
*/
|
|
106
|
+
webglOverride: string;
|
|
107
|
+
/**
|
|
108
|
+
* Override outerWidth and outerHeight
|
|
109
|
+
*/
|
|
110
|
+
dimensionsOverride: string;
|
|
111
|
+
/**
|
|
112
|
+
* Full combined stealth script
|
|
113
|
+
*/
|
|
114
|
+
readonly fullStealth: string;
|
|
115
|
+
};
|
|
116
|
+
USER_AGENTS: {
|
|
117
|
+
windows: string;
|
|
118
|
+
macos: string;
|
|
119
|
+
linux: string;
|
|
120
|
+
/**
|
|
121
|
+
* Get user agent for current platform
|
|
122
|
+
*/
|
|
123
|
+
readonly current: string;
|
|
124
|
+
};
|
|
125
|
+
getStealthFlags: typeof getStealthFlags;
|
|
126
|
+
getStealthScript: typeof getStealthScript;
|
|
127
|
+
};
|
|
128
|
+
export default _default;
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright 2024 Brave Real Launcher Contributors.
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
*
|
|
5
|
+
* Stealth Utilities for Brave Real Launcher
|
|
6
|
+
* Provides anti-bot-detection capabilities
|
|
7
|
+
*/
|
|
8
|
+
'use strict';
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.getStealthScript = exports.getStealthFlags = exports.USER_AGENTS = exports.STEALTH_SCRIPTS = exports.STEALTH_FLAGS = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* Stealth flags to add to browser launch
|
|
13
|
+
* These help bypass basic bot detection
|
|
14
|
+
*/
|
|
15
|
+
exports.STEALTH_FLAGS = [
|
|
16
|
+
// Disable automation info bar (safe, no warning)
|
|
17
|
+
'--disable-infobars',
|
|
18
|
+
// Disable popup blocking
|
|
19
|
+
'--disable-popup-blocking',
|
|
20
|
+
// Disable password save prompt
|
|
21
|
+
'--disable-save-password-bubble',
|
|
22
|
+
// Disable first run welcome
|
|
23
|
+
'--no-first-run',
|
|
24
|
+
// Disable default browser check
|
|
25
|
+
'--no-default-browser-check',
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* JavaScript code to inject for stealth mode
|
|
29
|
+
* Overrides various navigator properties that are commonly checked by bot detectors
|
|
30
|
+
*/
|
|
31
|
+
exports.STEALTH_SCRIPTS = {
|
|
32
|
+
/**
|
|
33
|
+
* Override navigator.webdriver to return undefined
|
|
34
|
+
*/
|
|
35
|
+
webdriverOverride: `
|
|
36
|
+
Object.defineProperty(navigator, 'webdriver', {
|
|
37
|
+
get: () => undefined,
|
|
38
|
+
configurable: true
|
|
39
|
+
});
|
|
40
|
+
`,
|
|
41
|
+
/**
|
|
42
|
+
* Override navigator.plugins to return realistic plugins
|
|
43
|
+
*/
|
|
44
|
+
pluginsOverride: `
|
|
45
|
+
Object.defineProperty(navigator, 'plugins', {
|
|
46
|
+
get: () => {
|
|
47
|
+
const plugins = [
|
|
48
|
+
{ name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
|
|
49
|
+
{ name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai', description: '' },
|
|
50
|
+
{ name: 'Native Client', filename: 'internal-nacl-plugin', description: '' }
|
|
51
|
+
];
|
|
52
|
+
plugins.length = 3;
|
|
53
|
+
return plugins;
|
|
54
|
+
},
|
|
55
|
+
configurable: true
|
|
56
|
+
});
|
|
57
|
+
`,
|
|
58
|
+
/**
|
|
59
|
+
* Override navigator.languages
|
|
60
|
+
*/
|
|
61
|
+
languagesOverride: `
|
|
62
|
+
Object.defineProperty(navigator, 'languages', {
|
|
63
|
+
get: () => ['en-US', 'en'],
|
|
64
|
+
configurable: true
|
|
65
|
+
});
|
|
66
|
+
`,
|
|
67
|
+
/**
|
|
68
|
+
* Override permissions query for notifications
|
|
69
|
+
*/
|
|
70
|
+
permissionsOverride: `
|
|
71
|
+
const originalQuery = window.navigator.permissions.query;
|
|
72
|
+
window.navigator.permissions.query = (parameters) => (
|
|
73
|
+
parameters.name === 'notifications' ?
|
|
74
|
+
Promise.resolve({ state: Notification.permission }) :
|
|
75
|
+
originalQuery(parameters)
|
|
76
|
+
);
|
|
77
|
+
`,
|
|
78
|
+
/**
|
|
79
|
+
* Override chrome.runtime to appear as a regular browser
|
|
80
|
+
*/
|
|
81
|
+
chromeRuntimeOverride: `
|
|
82
|
+
window.chrome = {
|
|
83
|
+
runtime: {},
|
|
84
|
+
loadTimes: function() {},
|
|
85
|
+
csi: function() {},
|
|
86
|
+
app: {}
|
|
87
|
+
};
|
|
88
|
+
`,
|
|
89
|
+
/**
|
|
90
|
+
* Override console.debug to prevent detection
|
|
91
|
+
*/
|
|
92
|
+
consoleOverride: `
|
|
93
|
+
const originalDebug = console.debug;
|
|
94
|
+
console.debug = function(...args) {
|
|
95
|
+
if (args[0] && args[0].includes && args[0].includes('puppeteer')) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
return originalDebug.apply(console, args);
|
|
99
|
+
};
|
|
100
|
+
`,
|
|
101
|
+
/**
|
|
102
|
+
* Fix iframe contentWindow access
|
|
103
|
+
*/
|
|
104
|
+
iframeOverride: `
|
|
105
|
+
const originalContentWindow = Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype, 'contentWindow');
|
|
106
|
+
Object.defineProperty(HTMLIFrameElement.prototype, 'contentWindow', {
|
|
107
|
+
get: function() {
|
|
108
|
+
const window = originalContentWindow.get.call(this);
|
|
109
|
+
try {
|
|
110
|
+
if (window && window.navigator) {
|
|
111
|
+
Object.defineProperty(window.navigator, 'webdriver', {
|
|
112
|
+
get: () => undefined
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
} catch (e) {}
|
|
116
|
+
return window;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
`,
|
|
120
|
+
/**
|
|
121
|
+
* Override WebGL vendor and renderer
|
|
122
|
+
*/
|
|
123
|
+
webglOverride: `
|
|
124
|
+
const getParameter = WebGLRenderingContext.prototype.getParameter;
|
|
125
|
+
WebGLRenderingContext.prototype.getParameter = function(parameter) {
|
|
126
|
+
if (parameter === 37445) {
|
|
127
|
+
return 'Intel Inc.';
|
|
128
|
+
}
|
|
129
|
+
if (parameter === 37446) {
|
|
130
|
+
return 'Intel Iris OpenGL Engine';
|
|
131
|
+
}
|
|
132
|
+
return getParameter.call(this, parameter);
|
|
133
|
+
};
|
|
134
|
+
`,
|
|
135
|
+
/**
|
|
136
|
+
* Override outerWidth and outerHeight
|
|
137
|
+
*/
|
|
138
|
+
dimensionsOverride: `
|
|
139
|
+
Object.defineProperty(window, 'outerWidth', {
|
|
140
|
+
get: () => window.innerWidth
|
|
141
|
+
});
|
|
142
|
+
Object.defineProperty(window, 'outerHeight', {
|
|
143
|
+
get: () => window.innerHeight + 85
|
|
144
|
+
});
|
|
145
|
+
`,
|
|
146
|
+
/**
|
|
147
|
+
* Full combined stealth script
|
|
148
|
+
*/
|
|
149
|
+
get fullStealth() {
|
|
150
|
+
return [
|
|
151
|
+
this.webdriverOverride,
|
|
152
|
+
this.pluginsOverride,
|
|
153
|
+
this.languagesOverride,
|
|
154
|
+
this.permissionsOverride,
|
|
155
|
+
this.chromeRuntimeOverride,
|
|
156
|
+
this.consoleOverride,
|
|
157
|
+
this.iframeOverride,
|
|
158
|
+
this.webglOverride,
|
|
159
|
+
this.dimensionsOverride
|
|
160
|
+
].join('\n');
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* User agent strings for different platforms
|
|
165
|
+
*/
|
|
166
|
+
exports.USER_AGENTS = {
|
|
167
|
+
windows: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
168
|
+
macos: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
169
|
+
linux: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
170
|
+
/**
|
|
171
|
+
* Get user agent for current platform
|
|
172
|
+
*/
|
|
173
|
+
get current() {
|
|
174
|
+
const platform = process.platform;
|
|
175
|
+
switch (platform) {
|
|
176
|
+
case 'win32': return this.windows;
|
|
177
|
+
case 'darwin': return this.macos;
|
|
178
|
+
default: return this.linux;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Get stealth flags with optional custom user agent
|
|
184
|
+
*/
|
|
185
|
+
function getStealthFlags(userAgent) {
|
|
186
|
+
const flags = [...exports.STEALTH_FLAGS];
|
|
187
|
+
if (userAgent) {
|
|
188
|
+
flags.push(`--user-agent=${userAgent}`);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
flags.push(`--user-agent=${exports.USER_AGENTS.current}`);
|
|
192
|
+
}
|
|
193
|
+
return flags;
|
|
194
|
+
}
|
|
195
|
+
exports.getStealthFlags = getStealthFlags;
|
|
196
|
+
/**
|
|
197
|
+
* Get the full stealth injection script
|
|
198
|
+
*/
|
|
199
|
+
function getStealthScript() {
|
|
200
|
+
return exports.STEALTH_SCRIPTS.fullStealth;
|
|
201
|
+
}
|
|
202
|
+
exports.getStealthScript = getStealthScript;
|
|
203
|
+
exports.default = {
|
|
204
|
+
STEALTH_FLAGS: exports.STEALTH_FLAGS,
|
|
205
|
+
STEALTH_SCRIPTS: exports.STEALTH_SCRIPTS,
|
|
206
|
+
USER_AGENTS: exports.USER_AGENTS,
|
|
207
|
+
getStealthFlags,
|
|
208
|
+
getStealthScript
|
|
209
|
+
};
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlYWx0aC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGVhbHRoLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILFlBQVksQ0FBQzs7O0FBRWI7OztHQUdHO0FBQ1UsUUFBQSxhQUFhLEdBQTBCO0lBQ2xELGlEQUFpRDtJQUNqRCxvQkFBb0I7SUFFcEIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUUxQiwrQkFBK0I7SUFDL0IsZ0NBQWdDO0lBRWhDLDRCQUE0QjtJQUM1QixnQkFBZ0I7SUFFaEIsZ0NBQWdDO0lBQ2hDLDRCQUE0QjtDQUM3QixDQUFDO0FBRUY7OztHQUdHO0FBQ1UsUUFBQSxlQUFlLEdBQUc7SUFDN0I7O09BRUc7SUFDSCxpQkFBaUIsRUFBRTs7Ozs7R0FLbEI7SUFFRDs7T0FFRztJQUNILGVBQWUsRUFBRTs7Ozs7Ozs7Ozs7OztHQWFoQjtJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLEVBQUU7Ozs7O0dBS2xCO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsRUFBRTs7Ozs7OztHQU9wQjtJQUVEOztPQUVHO0lBQ0gscUJBQXFCLEVBQUU7Ozs7Ozs7R0FPdEI7SUFFRDs7T0FFRztJQUNILGVBQWUsRUFBRTs7Ozs7Ozs7R0FRaEI7SUFFRDs7T0FFRztJQUNILGNBQWMsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O0dBZWY7SUFFRDs7T0FFRztJQUNILGFBQWEsRUFBRTs7Ozs7Ozs7Ozs7R0FXZDtJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLEVBQUU7Ozs7Ozs7R0FPbkI7SUFFRDs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE9BQU87WUFDTCxJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQjtZQUN4QixJQUFJLENBQUMscUJBQXFCO1lBQzFCLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxjQUFjO1lBQ25CLElBQUksQ0FBQyxhQUFhO1lBQ2xCLElBQUksQ0FBQyxrQkFBa0I7U0FDeEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0NBQ0YsQ0FBQztBQUVGOztHQUVHO0FBQ1UsUUFBQSxXQUFXLEdBQUc7SUFDekIsT0FBTyxFQUFFLGlIQUFpSDtJQUMxSCxLQUFLLEVBQUUsdUhBQXVIO0lBQzlILEtBQUssRUFBRSx1R0FBdUc7SUFFOUc7O09BRUc7SUFDSCxJQUFJLE9BQU87UUFDVCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2xDLFFBQVEsUUFBUSxFQUFFO1lBQ2hCLEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2xDLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztTQUM1QjtJQUNILENBQUM7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFnQixlQUFlLENBQUMsU0FBa0I7SUFDaEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLHFCQUFhLENBQUMsQ0FBQztJQUVqQyxJQUFJLFNBQVMsRUFBRTtRQUNiLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLFNBQVMsRUFBRSxDQUFDLENBQUM7S0FDekM7U0FBTTtRQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLG1CQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNuRDtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQVZELDBDQVVDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0I7SUFDOUIsT0FBTyx1QkFBZSxDQUFDLFdBQVcsQ0FBQztBQUNyQyxDQUFDO0FBRkQsNENBRUM7QUFFRCxrQkFBZTtJQUNiLGFBQWEsRUFBYixxQkFBYTtJQUNiLGVBQWUsRUFBZix1QkFBZTtJQUNmLFdBQVcsRUFBWCxtQkFBVztJQUNYLGVBQWU7SUFDZixnQkFBZ0I7Q0FDakIsQ0FBQyJ9
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright 2024 Brave Real Launcher Contributors.
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
*
|
|
5
|
+
* Stealth Utilities for Brave Real Launcher
|
|
6
|
+
* Provides anti-bot-detection capabilities
|
|
7
|
+
*/
|
|
8
|
+
'use strict';
|
|
9
|
+
/**
|
|
10
|
+
* Stealth flags to add to browser launch
|
|
11
|
+
* These help bypass basic bot detection
|
|
12
|
+
*/
|
|
13
|
+
export const STEALTH_FLAGS = [
|
|
14
|
+
// Disable automation info bar (safe, no warning)
|
|
15
|
+
'--disable-infobars',
|
|
16
|
+
// Disable popup blocking
|
|
17
|
+
'--disable-popup-blocking',
|
|
18
|
+
// Disable password save prompt
|
|
19
|
+
'--disable-save-password-bubble',
|
|
20
|
+
// Disable first run welcome
|
|
21
|
+
'--no-first-run',
|
|
22
|
+
// Disable default browser check
|
|
23
|
+
'--no-default-browser-check',
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* JavaScript code to inject for stealth mode
|
|
27
|
+
* Overrides various navigator properties that are commonly checked by bot detectors
|
|
28
|
+
*/
|
|
29
|
+
export const STEALTH_SCRIPTS = {
|
|
30
|
+
/**
|
|
31
|
+
* Override navigator.webdriver to return undefined
|
|
32
|
+
*/
|
|
33
|
+
webdriverOverride: `
|
|
34
|
+
Object.defineProperty(navigator, 'webdriver', {
|
|
35
|
+
get: () => undefined,
|
|
36
|
+
configurable: true
|
|
37
|
+
});
|
|
38
|
+
`,
|
|
39
|
+
/**
|
|
40
|
+
* Override navigator.plugins to return realistic plugins
|
|
41
|
+
*/
|
|
42
|
+
pluginsOverride: `
|
|
43
|
+
Object.defineProperty(navigator, 'plugins', {
|
|
44
|
+
get: () => {
|
|
45
|
+
const plugins = [
|
|
46
|
+
{ name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
|
|
47
|
+
{ name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai', description: '' },
|
|
48
|
+
{ name: 'Native Client', filename: 'internal-nacl-plugin', description: '' }
|
|
49
|
+
];
|
|
50
|
+
plugins.length = 3;
|
|
51
|
+
return plugins;
|
|
52
|
+
},
|
|
53
|
+
configurable: true
|
|
54
|
+
});
|
|
55
|
+
`,
|
|
56
|
+
/**
|
|
57
|
+
* Override navigator.languages
|
|
58
|
+
*/
|
|
59
|
+
languagesOverride: `
|
|
60
|
+
Object.defineProperty(navigator, 'languages', {
|
|
61
|
+
get: () => ['en-US', 'en'],
|
|
62
|
+
configurable: true
|
|
63
|
+
});
|
|
64
|
+
`,
|
|
65
|
+
/**
|
|
66
|
+
* Override permissions query for notifications
|
|
67
|
+
*/
|
|
68
|
+
permissionsOverride: `
|
|
69
|
+
const originalQuery = window.navigator.permissions.query;
|
|
70
|
+
window.navigator.permissions.query = (parameters) => (
|
|
71
|
+
parameters.name === 'notifications' ?
|
|
72
|
+
Promise.resolve({ state: Notification.permission }) :
|
|
73
|
+
originalQuery(parameters)
|
|
74
|
+
);
|
|
75
|
+
`,
|
|
76
|
+
/**
|
|
77
|
+
* Override chrome.runtime to appear as a regular browser
|
|
78
|
+
*/
|
|
79
|
+
chromeRuntimeOverride: `
|
|
80
|
+
window.chrome = {
|
|
81
|
+
runtime: {},
|
|
82
|
+
loadTimes: function() {},
|
|
83
|
+
csi: function() {},
|
|
84
|
+
app: {}
|
|
85
|
+
};
|
|
86
|
+
`,
|
|
87
|
+
/**
|
|
88
|
+
* Override console.debug to prevent detection
|
|
89
|
+
*/
|
|
90
|
+
consoleOverride: `
|
|
91
|
+
const originalDebug = console.debug;
|
|
92
|
+
console.debug = function(...args) {
|
|
93
|
+
if (args[0] && args[0].includes && args[0].includes('puppeteer')) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
return originalDebug.apply(console, args);
|
|
97
|
+
};
|
|
98
|
+
`,
|
|
99
|
+
/**
|
|
100
|
+
* Fix iframe contentWindow access
|
|
101
|
+
*/
|
|
102
|
+
iframeOverride: `
|
|
103
|
+
const originalContentWindow = Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype, 'contentWindow');
|
|
104
|
+
Object.defineProperty(HTMLIFrameElement.prototype, 'contentWindow', {
|
|
105
|
+
get: function() {
|
|
106
|
+
const window = originalContentWindow.get.call(this);
|
|
107
|
+
try {
|
|
108
|
+
if (window && window.navigator) {
|
|
109
|
+
Object.defineProperty(window.navigator, 'webdriver', {
|
|
110
|
+
get: () => undefined
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
} catch (e) {}
|
|
114
|
+
return window;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
`,
|
|
118
|
+
/**
|
|
119
|
+
* Override WebGL vendor and renderer
|
|
120
|
+
*/
|
|
121
|
+
webglOverride: `
|
|
122
|
+
const getParameter = WebGLRenderingContext.prototype.getParameter;
|
|
123
|
+
WebGLRenderingContext.prototype.getParameter = function(parameter) {
|
|
124
|
+
if (parameter === 37445) {
|
|
125
|
+
return 'Intel Inc.';
|
|
126
|
+
}
|
|
127
|
+
if (parameter === 37446) {
|
|
128
|
+
return 'Intel Iris OpenGL Engine';
|
|
129
|
+
}
|
|
130
|
+
return getParameter.call(this, parameter);
|
|
131
|
+
};
|
|
132
|
+
`,
|
|
133
|
+
/**
|
|
134
|
+
* Override outerWidth and outerHeight
|
|
135
|
+
*/
|
|
136
|
+
dimensionsOverride: `
|
|
137
|
+
Object.defineProperty(window, 'outerWidth', {
|
|
138
|
+
get: () => window.innerWidth
|
|
139
|
+
});
|
|
140
|
+
Object.defineProperty(window, 'outerHeight', {
|
|
141
|
+
get: () => window.innerHeight + 85
|
|
142
|
+
});
|
|
143
|
+
`,
|
|
144
|
+
/**
|
|
145
|
+
* Full combined stealth script
|
|
146
|
+
*/
|
|
147
|
+
get fullStealth() {
|
|
148
|
+
return [
|
|
149
|
+
this.webdriverOverride,
|
|
150
|
+
this.pluginsOverride,
|
|
151
|
+
this.languagesOverride,
|
|
152
|
+
this.permissionsOverride,
|
|
153
|
+
this.chromeRuntimeOverride,
|
|
154
|
+
this.consoleOverride,
|
|
155
|
+
this.iframeOverride,
|
|
156
|
+
this.webglOverride,
|
|
157
|
+
this.dimensionsOverride
|
|
158
|
+
].join('\n');
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* User agent strings for different platforms
|
|
163
|
+
*/
|
|
164
|
+
export const USER_AGENTS = {
|
|
165
|
+
windows: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
166
|
+
macos: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
167
|
+
linux: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
168
|
+
/**
|
|
169
|
+
* Get user agent for current platform
|
|
170
|
+
*/
|
|
171
|
+
get current() {
|
|
172
|
+
const platform = process.platform;
|
|
173
|
+
switch (platform) {
|
|
174
|
+
case 'win32': return this.windows;
|
|
175
|
+
case 'darwin': return this.macos;
|
|
176
|
+
default: return this.linux;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
/**
|
|
181
|
+
* Get stealth flags with optional custom user agent
|
|
182
|
+
*/
|
|
183
|
+
export function getStealthFlags(userAgent) {
|
|
184
|
+
const flags = [...STEALTH_FLAGS];
|
|
185
|
+
if (userAgent) {
|
|
186
|
+
flags.push(`--user-agent=${userAgent}`);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
flags.push(`--user-agent=${USER_AGENTS.current}`);
|
|
190
|
+
}
|
|
191
|
+
return flags;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get the full stealth injection script
|
|
195
|
+
*/
|
|
196
|
+
export function getStealthScript() {
|
|
197
|
+
return STEALTH_SCRIPTS.fullStealth;
|
|
198
|
+
}
|
|
199
|
+
export default {
|
|
200
|
+
STEALTH_FLAGS,
|
|
201
|
+
STEALTH_SCRIPTS,
|
|
202
|
+
USER_AGENTS,
|
|
203
|
+
getStealthFlags,
|
|
204
|
+
getStealthScript
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlYWx0aC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGVhbHRoLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILFlBQVksQ0FBQztBQUViOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBMEI7SUFDbEQsaURBQWlEO0lBQ2pELG9CQUFvQjtJQUVwQix5QkFBeUI7SUFDekIsMEJBQTBCO0lBRTFCLCtCQUErQjtJQUMvQixnQ0FBZ0M7SUFFaEMsNEJBQTRCO0lBQzVCLGdCQUFnQjtJQUVoQixnQ0FBZ0M7SUFDaEMsNEJBQTRCO0NBQzdCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDN0I7O09BRUc7SUFDSCxpQkFBaUIsRUFBRTs7Ozs7R0FLbEI7SUFFRDs7T0FFRztJQUNILGVBQWUsRUFBRTs7Ozs7Ozs7Ozs7OztHQWFoQjtJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLEVBQUU7Ozs7O0dBS2xCO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsRUFBRTs7Ozs7OztHQU9wQjtJQUVEOztPQUVHO0lBQ0gscUJBQXFCLEVBQUU7Ozs7Ozs7R0FPdEI7SUFFRDs7T0FFRztJQUNILGVBQWUsRUFBRTs7Ozs7Ozs7R0FRaEI7SUFFRDs7T0FFRztJQUNILGNBQWMsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O0dBZWY7SUFFRDs7T0FFRztJQUNILGFBQWEsRUFBRTs7Ozs7Ozs7Ozs7R0FXZDtJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLEVBQUU7Ozs7Ozs7R0FPbkI7SUFFRDs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE9BQU87WUFDTCxJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQjtZQUN4QixJQUFJLENBQUMscUJBQXFCO1lBQzFCLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxjQUFjO1lBQ25CLElBQUksQ0FBQyxhQUFhO1lBQ2xCLElBQUksQ0FBQyxrQkFBa0I7U0FDeEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0NBQ0YsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLE9BQU8sRUFBRSxpSEFBaUg7SUFDMUgsS0FBSyxFQUFFLHVIQUF1SDtJQUM5SCxLQUFLLEVBQUUsdUdBQXVHO0lBRTlHOztPQUVHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxRQUFRLFFBQVEsRUFBRTtZQUNoQixLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNsQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNqQyxPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDNUI7SUFDSCxDQUFDO0NBQ0YsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxTQUFrQjtJQUNoRCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7SUFFakMsSUFBSSxTQUFTLEVBQUU7UUFDYixLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ3pDO1NBQU07UUFDTCxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNuRDtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixPQUFPLGVBQWUsQ0FBQyxXQUFXLENBQUM7QUFDckMsQ0FBQztBQUVELGVBQWU7SUFDYixhQUFhO0lBQ2IsZUFBZTtJQUNmLFdBQVc7SUFDWCxlQUFlO0lBQ2YsZ0JBQWdCO0NBQ2pCLENBQUMifQ==
|