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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILFlBQVksQ0FBQzs7O0FBRWI7OztHQUdHO0FBRVUsUUFBQSxhQUFhLEdBQTBCO0lBQ2xELHFCQUFxQjtRQUNqQjtZQUNFLHdDQUF3QztZQUN4QyxXQUFXO1lBQ1gsOERBQThEO1lBQzlELG1CQUFtQjtZQUNuQixpRkFBaUY7WUFDakYsYUFBYTtZQUNiLG9EQUFvRDtZQUNwRCx3QkFBd0I7WUFDeEIsdUNBQXVDO1lBQ3ZDLDZCQUE2QjtZQUM3QixvQ0FBb0M7WUFDcEMsZ0NBQWdDO1lBQ2hDLDRCQUE0QjtZQUM1Qix5Q0FBeUM7WUFDekMseUNBQXlDO1lBQ3pDLDZCQUE2QjtZQUM3Qix5Q0FBeUM7WUFDekMseUJBQXlCO1lBQ3pCLG9DQUFvQztZQUNwQyxVQUFVO1lBQ1Ysd0NBQXdDO1lBQ3hDLGNBQWM7WUFDZCxxQ0FBcUM7WUFDckMsV0FBVztZQUNYLHFEQUFxRDtZQUNyRCxhQUFhO1NBQ2QsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBRWYseUJBQXlCO0lBQ3pCLHNCQUFzQjtJQUN0Qix1RUFBdUU7SUFDdkUsc0RBQXNEO0lBQ3RELDhDQUE4QztJQUM5QyxpQ0FBaUM7SUFDakMsd0NBQXdDO0lBQ3hDLDRCQUE0QjtJQUM1QiwwQ0FBMEM7SUFDMUMsMENBQTBDO0lBQzFDLDhCQUE4QjtJQUM5QixnQkFBZ0I7SUFDaEIsc0RBQXNEO0lBQ3RELDBCQUEwQjtJQUMxQixvREFBb0Q7SUFDcEQsd0JBQXdCO0lBQ3hCLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2Qsb0NBQW9DO0lBQ3BDLDRCQUE0QjtJQUM1Qix5QkFBeUI7SUFDekIsZ0JBQWdCO0lBQ2hCLHFEQUFxRDtJQUNyRCwwQ0FBMEM7SUFDMUMseUNBQXlDO0lBQ3pDLGtDQUFrQztJQUNsQywrREFBK0Q7SUFDL0QsdUNBQXVDO0lBQ3ZDLDZFQUE2RTtJQUM3RSxtQ0FBbUM7SUFDbkMsbURBQW1EO0lBQ25ELHdCQUF3QjtJQUN4QixtRUFBbUU7SUFDbkUscUJBQXFCO0lBQ3JCLDZCQUE2QjtJQUM3QixpREFBaUQ7SUFFakQsd0RBQXdEO0lBQ3hELHdCQUF3QjtJQUN4QiwyQkFBMkI7SUFDM0IsNEJBQTRCO0lBQzVCLHlDQUF5QztJQUN6Qyw4QkFBOEI7SUFDOUIsMkNBQTJDO0lBQzNDLDZCQUE2QjtJQUU3Qix1QkFBdUI7SUFDdkIsNkJBQTZCO0lBQzdCLDRCQUE0QjtJQUM1Qix1Q0FBdUM7SUFDdkMsd0JBQXdCO0lBQ3hCLDZCQUE2QjtJQUM3Qiw4QkFBOEI7Q0FDL0IsQ0FBQyJ9
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILFlBQVksQ0FBQztBQUViOzs7R0FHRztBQUVILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBMEI7SUFDbEQscUJBQXFCO1FBQ2pCO1lBQ0Usd0NBQXdDO1lBQ3hDLFdBQVc7WUFDWCw4REFBOEQ7WUFDOUQsbUJBQW1CO1lBQ25CLGlGQUFpRjtZQUNqRixhQUFhO1lBQ2Isb0RBQW9EO1lBQ3BELHdCQUF3QjtZQUN4Qix1Q0FBdUM7WUFDdkMsNkJBQTZCO1lBQzdCLG9DQUFvQztZQUNwQyxnQ0FBZ0M7WUFDaEMsNEJBQTRCO1lBQzVCLHlDQUF5QztZQUN6Qyx5Q0FBeUM7WUFDekMsNkJBQTZCO1lBQzdCLHlDQUF5QztZQUN6Qyx5QkFBeUI7WUFDekIsb0NBQW9DO1lBQ3BDLFVBQVU7WUFDVix3Q0FBd0M7WUFDeEMsY0FBYztZQUNkLHFDQUFxQztZQUNyQyxXQUFXO1lBQ1gscURBQXFEO1lBQ3JELGFBQWE7U0FDZCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFFZix5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLHVFQUF1RTtJQUN2RSxzREFBc0Q7SUFDdEQsOENBQThDO0lBQzlDLGlDQUFpQztJQUNqQyx3Q0FBd0M7SUFDeEMsNEJBQTRCO0lBQzVCLDBDQUEwQztJQUMxQywwQ0FBMEM7SUFDMUMsOEJBQThCO0lBQzlCLGdCQUFnQjtJQUNoQixzREFBc0Q7SUFDdEQsMEJBQTBCO0lBQzFCLG9EQUFvRDtJQUNwRCx3QkFBd0I7SUFDeEIsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxvQ0FBb0M7SUFDcEMsNEJBQTRCO0lBQzVCLHlCQUF5QjtJQUN6QixnQkFBZ0I7SUFDaEIscURBQXFEO0lBQ3JELDBDQUEwQztJQUMxQyx5Q0FBeUM7SUFDekMsa0NBQWtDO0lBQ2xDLCtEQUErRDtJQUMvRCx1Q0FBdUM7SUFDdkMsNkVBQTZFO0lBQzdFLG1DQUFtQztJQUNuQyxtREFBbUQ7SUFDbkQsd0JBQXdCO0lBQ3hCLG1FQUFtRTtJQUNuRSxxQkFBcUI7SUFDckIsNkJBQTZCO0lBQzdCLGlEQUFpRDtJQUVqRCx3REFBd0Q7SUFDeEQsd0JBQXdCO0lBQ3hCLDJCQUEyQjtJQUMzQiw0QkFBNEI7SUFDNUIseUNBQXlDO0lBQ3pDLDhCQUE4QjtJQUM5QiwyQ0FBMkM7SUFDM0MsNkJBQTZCO0lBRTdCLHVCQUF1QjtJQUN2Qiw2QkFBNkI7SUFDN0IsNEJBQTRCO0lBQzVCLHVDQUF1QztJQUN2Qyx3QkFBd0I7SUFDeEIsNkJBQTZCO0lBQzdCLDhCQUE4QjtDQUMvQixDQUFDIn0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgseURBVTZCO0FBVDNCLDJHQUFBLE1BQU0sT0FBQTtBQUNOLDRHQUFBLE9BQU8sT0FBQTtBQUNQLGlIQUFBLFlBQVksT0FBQTtBQUNaLHFIQUFBLGdCQUFnQixPQUFBO0FBQ2hCLDhHQUFBLFNBQVMsT0FBQTtBQUNULGtIQUFBLFFBQVEsT0FBaUI7QUFNM0IsdUNBS29CO0FBSmxCLHVHQUFBLFdBQVcsT0FBQTtBQUVYLG9IQUFBLHdCQUF3QixPQUFBO0FBQ3hCLHVHQUFBLFdBQVcsT0FBQTtBQUdiLHVDQUF5QztBQUFqQyx5R0FBQSxhQUFhLE9BQUE7QUFDckIsbURBQStDO0FBQXZDLCtHQUFBLGFBQWEsT0FBQTtBQUVyQiw4REFBOEQ7QUFDOUQsaUVBQWlEIn0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFDTCxNQUFNLEVBQ04sT0FBTyxFQUNQLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFFBQVEsSUFBSSxhQUFhLEVBSTFCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUNMLFdBQVcsRUFFWCx3QkFBd0IsRUFDeEIsV0FBVyxFQUNaLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLDhEQUE4RDtBQUM5RCxPQUFPLEtBQUssV0FBVyxNQUFNLG1CQUFtQixDQUFDIn0=
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==