const { app, BrowserWindow, ipcMain } = require('electron'); const path = require('path'); // Parse command line arguments const args = process.argv.slice(2); const userDataDir = args[0]; const cdpPort = args[1]; const startUrl = args[2] || 'https://www.google.com'; // This must be called before app.ready app.commandLine.appendSwitch('remote-debugging-port', cdpPort); console.log('[ELECTRON BROWSER] Starting with:'); console.log(' Chrome version:', process.versions.chrome); console.log(' User data dir (requested):', userDataDir); console.log(' CDP port:', cdpPort); console.log(' Start URL:', startUrl); // Set app paths - must be done before app.ready // Do NOT use commandLine.appendSwitch('user-data-dir') as it conflicts with setPath app.setPath('userData', userDataDir); app.setPath('sessionData', userDataDir); app.whenReady().then(async () => { const { session } = require('electron'); const fs = require('fs'); const path = require('path'); // Log actual paths being used console.log('[ELECTRON BROWSER] Actual paths:'); console.log(' app.getPath("userData"):', app.getPath('userData')); console.log(' app.getPath("sessionData"):', app.getPath('sessionData')); console.log(' app.getPath("cache"):', app.getPath('cache')); console.log(' app.getPath("temp"):', app.getPath('temp')); console.log(' process.argv:', process.argv); // Check command line switches console.log('[ELECTRON BROWSER] Command line switches:'); console.log(' user-data-dir:', app.commandLine.getSwitchValue('user-data-dir')); console.log(' remote-debugging-port:', app.commandLine.getSwitchValue('remote-debugging-port')); // Log partition session info const userLoginSession = session.fromPartition('persist:user_login'); console.log('[ELECTRON BROWSER] Session info:'); console.log(' Partition: persist:user_login'); console.log(' Session storage path:', userLoginSession.getStoragePath()); // Check if Cookies file exists const cookiesPath = path.join(app.getPath('userData'), 'Partitions', 'user_login', 'Cookies'); console.log('[ELECTRON BROWSER] Cookies path:', cookiesPath); console.log('[ELECTRON BROWSER] Cookies exists:', fs.existsSync(cookiesPath)); if (fs.existsSync(cookiesPath)) { const stats = fs.statSync(cookiesPath); console.log('[ELECTRON BROWSER] Cookies file size:', stats.size, 'bytes'); } const win = new BrowserWindow({ width: 1400, height: 900, title: 'Eigent Browser - Login', webPreferences: { nodeIntegration: true, contextIsolation: false, webviewTag: true } }); // Create navigation bar and webview HTML const html = ` `; win.loadURL('data:text/html;charset=UTF-8,' + encodeURIComponent(html)); // Show window when ready win.once('ready-to-show', () => { win.show(); // Log cookies periodically to track changes setInterval(async () => { try { const cookies = await userLoginSession.cookies.get({}); console.log('[ELECTRON BROWSER] Current cookies count:', cookies.length); if (cookies.length > 0) { console.log('[ELECTRON BROWSER] Cookie domains:', [...new Set(cookies.map(c => c.domain))]); } } catch (error) { console.error('[ELECTRON BROWSER] Failed to get cookies:', error); } }, 5000); // Check every 5 seconds }); win.on('closed', async () => { console.log('[ELECTRON BROWSER] Window closed, preparing to quit...'); // Flush storage data before quitting to ensure cookies are saved try { const { session } = require('electron'); const fs = require('fs'); const path = require('path'); const userLoginSession = session.fromPartition('persist:user_login'); // Log cookies before flush const cookiesBeforeFlush = await userLoginSession.cookies.get({}); console.log('[ELECTRON BROWSER] Cookies count before flush:', cookiesBeforeFlush.length); // Flush storage console.log('[ELECTRON BROWSER] Flushing storage data...'); await userLoginSession.flushStorageData(); console.log('[ELECTRON BROWSER] Storage data flushed successfully'); // Check cookies file after flush const cookiesPath = path.join(app.getPath('userData'), 'Partitions', 'user_login', 'Cookies'); if (fs.existsSync(cookiesPath)) { const stats = fs.statSync(cookiesPath); console.log('[ELECTRON BROWSER] Cookies file size after flush:', stats.size, 'bytes'); } else { console.log('[ELECTRON BROWSER] WARNING: Cookies file does not exist after flush!'); } } catch (error) { console.error('[ELECTRON BROWSER] Failed to flush storage data:', error); } app.quit(); }); }); let isQuitting = false; app.on('before-quit', async (event) => { if (isQuitting) return; // Prevent immediate quit to allow storage flush and cookie sync event.preventDefault(); isQuitting = true; console.log('[ELECTRON BROWSER] before-quit event triggered'); try { const { session } = require('electron'); const fs = require('fs'); const path = require('path'); const userLoginSession = session.fromPartition('persist:user_login'); // Log cookies before flush const cookiesBeforeQuit = await userLoginSession.cookies.get({}); console.log('[ELECTRON BROWSER] Cookies count before quit:', cookiesBeforeQuit.length); if (cookiesBeforeQuit.length > 0) { console.log('[ELECTRON BROWSER] Cookie domains before quit:', [...new Set(cookiesBeforeQuit.map(c => c.domain))]); } // Flush storage console.log('[ELECTRON BROWSER] Flushing storage on quit...'); await userLoginSession.flushStorageData(); console.log('[ELECTRON BROWSER] Storage data flushed on quit'); } catch (error) { console.error('[ELECTRON BROWSER] Failed to sync cookies:', error); } finally { console.log('[ELECTRON BROWSER] Exiting now...'); // Force quit after sync app.exit(0); } }); app.on('window-all-closed', () => { if (!isQuitting) { app.quit(); } });