brave-real-launcher 1.2.45 โ†’ 1.2.46

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brave-real-launcher",
3
- "version": "1.2.45",
3
+ "version": "1.2.46",
4
4
  "description": "Launch Brave Browser with ease from node. Based on chrome-launcher with Brave-specific support.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -21,36 +21,36 @@ class ChromeLauncherSyncManager {
21
21
 
22
22
  async run(targetVersion = 'latest') {
23
23
  console.log('๐Ÿš€ Starting Chrome-launcher Comprehensive Sync...\n');
24
-
24
+
25
25
  try {
26
26
  // Step 1: Prepare environment
27
27
  await this.prepareEnvironment();
28
-
28
+
29
29
  // Step 2: Fetch chrome-launcher
30
30
  await this.fetchChromeLauncher(targetVersion);
31
-
31
+
32
32
  // Step 3: Backup Brave-specific files
33
33
  await this.backupBraveFiles();
34
-
34
+
35
35
  // Step 4: Integrate chrome-launcher code
36
36
  await this.integrateChromeLauncher();
37
-
37
+
38
38
  // Step 5: Restore and enhance Brave features
39
39
  await this.restoreBraveFeatures();
40
-
40
+
41
41
  // Step 6: Smart version increment
42
42
  await this.incrementVersion();
43
-
43
+
44
44
  // Step 7: Update configurations
45
45
  await this.updateConfigurations();
46
-
46
+
47
47
  // Step 8: Verify integration
48
48
  await this.verifyIntegration();
49
-
49
+
50
50
  console.log('\n๐ŸŽ‰ Chrome-launcher sync completed successfully!');
51
51
  console.log(`โœ… Updated to chrome-launcher v${this.chromeVersion}`);
52
52
  console.log(`๐Ÿ“ฆ All Brave features preserved and enhanced`);
53
-
53
+
54
54
  } catch (error) {
55
55
  console.error('\nโŒ Sync failed:', error.message);
56
56
  process.exit(1);
@@ -62,7 +62,7 @@ class ChromeLauncherSyncManager {
62
62
 
63
63
  async prepareEnvironment() {
64
64
  console.log('๐Ÿ“ Preparing sync environment...');
65
-
65
+
66
66
  // Remove old temp directories
67
67
  if (fs.existsSync(this.tempDir)) {
68
68
  execSync(`rm -rf "${this.tempDir}"`);
@@ -70,22 +70,22 @@ class ChromeLauncherSyncManager {
70
70
  if (fs.existsSync(this.backupDir)) {
71
71
  execSync(`rm -rf "${this.backupDir}"`);
72
72
  }
73
-
73
+
74
74
  // Create temp directories
75
75
  fs.mkdirSync(this.tempDir, { recursive: true });
76
76
  fs.mkdirSync(this.backupDir, { recursive: true });
77
-
77
+
78
78
  console.log('โœ… Environment prepared');
79
79
  }
80
80
 
81
81
  async fetchChromeLauncher(targetVersion) {
82
82
  console.log(`๐Ÿ“ฅ Fetching chrome-launcher ${targetVersion}...`);
83
-
83
+
84
84
  process.chdir(this.tempDir);
85
-
85
+
86
86
  // Clone chrome-launcher
87
87
  execSync('git clone https://github.com/GoogleChrome/chrome-launcher.git .');
88
-
88
+
89
89
  // Get version info
90
90
  if (targetVersion !== 'latest') {
91
91
  try {
@@ -105,19 +105,19 @@ class ChromeLauncherSyncManager {
105
105
  console.log('Using main branch');
106
106
  }
107
107
  }
108
-
108
+
109
109
  this.chromeCommit = execSync('git rev-parse --short HEAD').toString().trim();
110
-
110
+
111
111
  console.log(`โœ… Fetched chrome-launcher v${this.chromeVersion} (${this.chromeCommit})`);
112
112
  process.chdir(this.projectRoot);
113
113
  }
114
114
 
115
115
  async backupBraveFiles() {
116
116
  console.log('๐Ÿ’พ Backing up Brave-specific files...');
117
-
117
+
118
118
  const braveFiles = [
119
119
  'src/brave-finder.ts',
120
- 'src/brave-launcher.ts',
120
+ 'src/brave-launcher.ts',
121
121
  'src/flags.ts',
122
122
  'src/utils.ts',
123
123
  'src/index.ts',
@@ -132,168 +132,170 @@ class ChromeLauncherSyncManager {
132
132
  'CHANGELOG.md',
133
133
  'GITHUB_SETUP.md'
134
134
  ];
135
-
135
+
136
136
  braveFiles.forEach(file => {
137
137
  const srcPath = path.join(this.projectRoot, file);
138
138
  const destPath = path.join(this.backupDir, file);
139
-
139
+
140
140
  if (fs.existsSync(srcPath)) {
141
141
  // Create directory if needed
142
142
  const destDir = path.dirname(destPath);
143
143
  if (!fs.existsSync(destDir)) {
144
144
  fs.mkdirSync(destDir, { recursive: true });
145
145
  }
146
-
146
+
147
147
  // Copy file/directory
148
148
  execSync(`cp -r "${srcPath}" "${destPath}"`);
149
149
  console.log(` โœ… Backed up: ${file}`);
150
150
  }
151
151
  });
152
-
152
+
153
153
  console.log('โœ… Brave files backed up');
154
154
  }
155
155
 
156
156
  async integrateChromeLauncher() {
157
157
  console.log('๐Ÿ”„ Integrating chrome-launcher code...');
158
-
159
- // Clean up any existing chrome-chrome-* files to prevent conflicts
158
+
159
+ // Clean up any existing chrome-chrome-* files
160
160
  await this.cleanupDuplicateFiles();
161
-
162
- // Since we're now using version increment logic instead of full integration,
163
- // we'll just copy essential reference files and update dependencies
164
-
165
- // Copy package.json for dependency reference
161
+
162
+ // 1. Copy Reference Files
166
163
  const chromePkgSrc = path.join(this.tempDir, 'package.json');
167
164
  const chromePkgDest = path.join(this.projectRoot, 'chrome-launcher-package.json');
168
-
169
- if (fs.existsSync(chromePkgSrc)) {
170
- fs.copyFileSync(chromePkgSrc, chromePkgDest);
171
- console.log(` โœ… Reference: package.json โ†’ chrome-launcher-package.json`);
172
- }
173
-
174
- // Copy README for reference
165
+ if (fs.existsSync(chromePkgSrc)) fs.copyFileSync(chromePkgSrc, chromePkgDest);
166
+
175
167
  const chromeReadmeSrc = path.join(this.tempDir, 'README.md');
176
168
  const chromeReadmeDest = path.join(this.projectRoot, 'chrome-launcher-README.md');
177
-
178
- if (fs.existsSync(chromeReadmeSrc)) {
179
- fs.copyFileSync(chromeReadmeSrc, chromeReadmeDest);
180
- console.log(` โœ… Reference: README.md โ†’ chrome-launcher-README.md`);
181
- }
182
-
169
+ if (fs.existsSync(chromeReadmeSrc)) fs.copyFileSync(chromeReadmeSrc, chromeReadmeDest);
170
+
171
+ // 2. Copy Safe Files (Utilities that change rarely and can be synced)
172
+ const safeFiles = [
173
+ 'src/random-port.ts',
174
+ 'src/utils.ts' // Warning: Check if Brave utils has changes. Assuming upstream utils are better/newer.
175
+ // Note: Brave-Real-Launcher utils.ts has Brave specific code?
176
+ // If so, we should NOT overwrite utils.ts without checking.
177
+ // For safety, we ONLY merge flags.ts automatically for now.
178
+ ];
179
+
180
+ // safeFiles.forEach... (Skipped for safety as per analysis, only flags is safe to merge if smart)
181
+
183
182
  console.log('โœ… Chrome-launcher reference files integrated');
184
- console.log('โ„น๏ธ Full code integration skipped - using version increment approach');
185
183
  }
186
184
 
187
185
  async restoreBraveFeatures() {
188
186
  console.log('๐Ÿฆ Restoring and enhancing Brave features...');
189
-
190
- // Store current version before restoring
187
+
191
188
  const currentVersion = this.getCurrentVersion();
192
189
  console.log(` ๐Ÿ“ฆ Preserving current version: ${currentVersion}`);
193
-
194
- // Restore all Brave-specific files except package.json (we'll handle it specially)
190
+
191
+ // Restore backup
195
192
  if (fs.existsSync(this.backupDir)) {
196
193
  const backupFiles = fs.readdirSync(this.backupDir);
197
194
  backupFiles.forEach(file => {
198
- if (file !== 'package.json') {
195
+ if (file !== 'package.json') { // package.json handled separately
199
196
  const srcPath = path.join(this.backupDir, file);
200
197
  const destPath = path.join(this.projectRoot, file);
201
198
  execSync(`cp -r "${srcPath}" "${destPath}"`);
202
- console.log(` โœ… Restored: ${file}`);
203
199
  }
204
200
  });
205
201
  }
206
-
207
- // Merge package.json dependencies only (preserve current version)
202
+
203
+ // Merge package.json
208
204
  await this.mergePackageJsonDependencies(currentVersion);
209
-
210
- // Enhance Brave files with chrome-launcher improvements
211
- await this.enhanceBraveFiles();
212
-
205
+
206
+ // SMART MERGE: Flags
207
+ await this.mergeFlags();
208
+
213
209
  console.log('โœ… Brave features restored and enhanced');
214
210
  }
215
211
 
216
- getCurrentVersion() {
217
- try {
218
- const bravePkgPath = path.join(this.projectRoot, 'package.json');
219
- if (fs.existsSync(bravePkgPath)) {
220
- const pkg = JSON.parse(fs.readFileSync(bravePkgPath, 'utf8'));
221
- return pkg.version;
222
- }
223
- } catch (e) {
224
- console.log(' โš ๏ธ Could not read current version');
225
- }
226
- return '1.2.0'; // fallback
227
- }
212
+ async mergeFlags() {
213
+ console.log('๐Ÿšฉ Smart Merging flags.ts...');
214
+ const chromeFlagsPath = path.join(this.tempDir, 'src/flags.ts');
215
+ const braveFlagsPath = path.join(this.projectRoot, 'src/flags.ts');
216
+
217
+ if (fs.existsSync(chromeFlagsPath) && fs.existsSync(braveFlagsPath)) {
218
+ let chromeContent = fs.readFileSync(chromeFlagsPath, 'utf8');
219
+
220
+ // Inject Brave-specific flags
221
+ // We hardcode the essential Brave flags to ensure they are always present even if backup is weird
222
+ // But we should also respect the file structure.
223
+
224
+ const braveFeaturesToAdd = [
225
+ ' // Brave-specific: disable Brave Ads',
226
+ " 'BraveAds',",
227
+ " 'BraveRewards',",
228
+ " 'BraveNews',",
229
+ " 'BraveWallet',",
230
+ " 'BraveP3A',",
231
+ " 'BraveP3ANotice',",
232
+ " 'BraveAnalyticsConsent',"
233
+ ].join('\n');
234
+
235
+ const braveFlagsToAdd = [
236
+ ' // Brave-specific flags',
237
+ " '--disable-brave-secure-dns',",
238
+ " '--disable-brave-update',",
239
+ " '--disable-tor-client-updater',",
240
+ " '--disable-brave-p3a',",
241
+ " '--disable-brave-p3a-notice',",
242
+ " '--disable-brave-stats-updater',",
243
+ " '--disable-brave-referral-ping',"
244
+ ].join('\n');
228
245
 
229
- async mergePackageJsonDependencies(preserveVersion) {
230
- console.log('๐Ÿ“ฆ Merging package.json dependencies (preserving version)...');
231
-
232
- const chromePkgPath = path.join(this.projectRoot, 'chrome-launcher-package.json');
233
- const bravePkgPath = path.join(this.projectRoot, 'package.json');
234
-
235
- if (fs.existsSync(chromePkgPath)) {
236
- const chromePkg = JSON.parse(fs.readFileSync(chromePkgPath, 'utf8'));
237
- const bravePkg = JSON.parse(fs.readFileSync(bravePkgPath, 'utf8'));
238
-
239
- // Merge dependencies (chrome-launcher deps take precedence for conflicts)
240
- bravePkg.dependencies = { ...bravePkg.dependencies, ...chromePkg.dependencies };
241
-
242
- // PRESERVE CURRENT VERSION (don't overwrite with chrome version)
243
- bravePkg.version = preserveVersion || bravePkg.version;
244
-
245
- // Keep our engines but merge if chrome-launcher has newer requirements
246
- if (chromePkg.engines) {
247
- bravePkg.engines = { ...bravePkg.engines, ...chromePkg.engines };
246
+ // Inject Features
247
+ if (chromeContent.includes('.join(\',\')')) {
248
+ // Look for the end of the features array
249
+ chromeContent = chromeContent.replace(
250
+ /(\s*)\/\/ Disable all extensions/i,
251
+ `\n${braveFeaturesToAdd}\n$1// Disable all extensions` // Rough injection point before array close usually?
252
+ // Actually flags.ts structure is:
253
+ // array join(',') ...
254
+ // We need to inject BEFORE .join(',')
255
+ );
256
+
257
+ // Better regex finding the array end
258
+ // array of features ends with ].join(',')
259
+ chromeContent = chromeContent.replace(
260
+ /(\s*)\]\.join\(/,
261
+ `$1$1// Brave Specific Features\n$1$1'BraveAds',\n$1$1'BraveRewards',\n$1$1'BraveNews',\n$1$1'BraveWallet',\n$1$1'BraveP3A',\n$1$1'BraveP3ANotice',\n$1$1'BraveAnalyticsConsent',\n$1].join(`
262
+ );
248
263
  }
249
-
250
- // Save updated package.json
251
- fs.writeFileSync(bravePkgPath, JSON.stringify(bravePkg, null, 2));
252
-
253
- console.log(` โœ… Version preserved: ${bravePkg.version}`);
254
- console.log(` โœ… Dependencies merged from chrome-launcher`);
255
-
256
- // Remove temporary file
257
- fs.unlinkSync(chromePkgPath);
258
- } else {
259
- console.log(' โ„น๏ธ No chrome-launcher package.json found, skipping dependency merge');
264
+
265
+ // Inject Flags
266
+ // Insert before the last ];
267
+ chromeContent = chromeContent.replace(
268
+ /(\s*)\];\s*$/,
269
+ `\n${braveFlagsToAdd}\n$1];`
270
+ );
271
+
272
+ fs.writeFileSync(braveFlagsPath, chromeContent);
273
+ console.log(' โœ… flags.ts merged with Brave features');
260
274
  }
261
275
  }
262
276
 
263
277
  async enhanceBraveFiles() {
264
- console.log('๐Ÿ”ง Enhancing Brave files with chrome-launcher improvements...');
265
-
266
- // This is where we would add intelligent code merging
267
- // For now, we'll just verify our Brave files are compatible
268
-
269
- const braveFiles = ['src/brave-launcher.ts', 'src/brave-finder.ts', 'src/flags.ts'];
270
-
271
- braveFiles.forEach(file => {
272
- if (fs.existsSync(file)) {
273
- console.log(` โœ… Verified: ${file}`);
274
- // Here you could add specific merging logic for each file
275
- }
276
- });
278
+ // Deprecated by mergeFlags
277
279
  }
278
280
 
279
281
  async incrementVersion() {
280
282
  console.log('๐Ÿ“ฆ Smart Version Increment...');
281
-
283
+
282
284
  try {
283
285
  // Use version increment utility
284
286
  const VersionManager = require('./version-increment.cjs');
285
287
  const versionManager = new VersionManager();
286
-
288
+
287
289
  // Always increment with force flag for continuous updates
288
- const result = await versionManager.run({
289
- force: true,
290
- strategy: 'auto'
290
+ const result = await versionManager.run({
291
+ force: true,
292
+ strategy: 'auto'
291
293
  });
292
-
294
+
293
295
  if (result.success && result.incremented) {
294
296
  console.log(` โœ… Version incremented: ${result.oldVersion} โ†’ ${result.newVersion}`);
295
297
  console.log(` ๐Ÿ“ Reason: ${result.reason}`);
296
-
298
+
297
299
  // Update chrome version reference for consistency
298
300
  if (result.newVersion !== this.chromeVersion) {
299
301
  this.chromeVersion = result.newVersion;
@@ -301,22 +303,22 @@ class ChromeLauncherSyncManager {
301
303
  } else {
302
304
  console.log(' โ„น๏ธ Version increment skipped');
303
305
  }
304
-
306
+
305
307
  } catch (error) {
306
308
  console.error(' โš ๏ธ Version increment warning:', error.message);
307
309
  console.log(' ๐Ÿ”„ Continuing with existing version...');
308
310
  }
309
-
311
+
310
312
  console.log('โœ… Version management completed');
311
313
  }
312
314
 
313
315
  async updateConfigurations() {
314
316
  console.log('โš™๏ธ Updating configurations...');
315
-
317
+
316
318
  // Update dependencies
317
319
  console.log(' ๐Ÿ“ฆ Installing updated dependencies...');
318
320
  execSync('npm install', { cwd: this.projectRoot });
319
-
321
+
320
322
  // Update TypeScript build
321
323
  console.log(' ๐Ÿ”จ Updating TypeScript build...');
322
324
  try {
@@ -324,13 +326,13 @@ class ChromeLauncherSyncManager {
324
326
  } catch (e) {
325
327
  console.log(' โš ๏ธ Build will be handled later');
326
328
  }
327
-
329
+
328
330
  console.log('โœ… Configurations updated');
329
331
  }
330
332
 
331
333
  async verifyIntegration() {
332
334
  console.log('๐Ÿงช Verifying integration...');
333
-
335
+
334
336
  const checks = [
335
337
  { name: 'Package.json', file: 'package.json' },
336
338
  { name: 'Brave Launcher', file: 'src/brave-launcher.ts' },
@@ -340,9 +342,9 @@ class ChromeLauncherSyncManager {
340
342
  { name: 'Utils', file: 'src/utils.ts' },
341
343
  { name: 'Chrome Reference', file: 'chrome-launcher-package.json', optional: true }
342
344
  ];
343
-
345
+
344
346
  let allGood = true;
345
-
347
+
346
348
  checks.forEach(check => {
347
349
  if (fs.existsSync(path.join(this.projectRoot, check.file))) {
348
350
  console.log(` โœ… ${check.name}`);
@@ -353,23 +355,23 @@ class ChromeLauncherSyncManager {
353
355
  allGood = false;
354
356
  }
355
357
  });
356
-
358
+
357
359
  if (!allGood) {
358
360
  throw new Error('Integration verification failed - some files are missing');
359
361
  }
360
-
362
+
361
363
  console.log('โœ… Integration verified');
362
364
  }
363
365
 
364
366
  async cleanupDuplicateFiles() {
365
367
  console.log('๐Ÿงน Cleaning up duplicate chrome files...');
366
-
368
+
367
369
  const srcDir = path.join(this.projectRoot, 'src');
368
370
  const duplicatePatterns = [
369
371
  'chrome-chrome-*.ts',
370
372
  'chrome-chrome-*.js'
371
373
  ];
372
-
374
+
373
375
  try {
374
376
  duplicatePatterns.forEach(pattern => {
375
377
  const files = require('glob').sync(pattern, { cwd: srcDir });
@@ -381,7 +383,7 @@ class ChromeLauncherSyncManager {
381
383
  }
382
384
  });
383
385
  });
384
-
386
+
385
387
  console.log('โœ… Duplicate files cleaned up');
386
388
  } catch (e) {
387
389
  // If glob is not available, use alternative approach
@@ -389,10 +391,10 @@ class ChromeLauncherSyncManager {
389
391
  this.alternativeCleanup();
390
392
  }
391
393
  }
392
-
394
+
393
395
  alternativeCleanup() {
394
396
  const srcDir = path.join(this.projectRoot, 'src');
395
-
397
+
396
398
  try {
397
399
  const files = fs.readdirSync(srcDir);
398
400
  files.forEach(file => {
@@ -409,7 +411,7 @@ class ChromeLauncherSyncManager {
409
411
 
410
412
  async cleanup() {
411
413
  console.log('๐Ÿงน Cleaning up...');
412
-
414
+
413
415
  try {
414
416
  if (fs.existsSync(this.tempDir)) {
415
417
  execSync(`rm -rf "${this.tempDir}"`);