import { BrowserWindow, shell } from 'electron'; import * as path from 'path'; let mainWindow: BrowserWindow | null = null; export function getMainWindow(): BrowserWindow | null { return mainWindow; } export async function createWindow(): Promise { mainWindow = new BrowserWindow({ width: 1400, height: 900, minWidth: 800, minHeight: 600, frame: false, titleBarStyle: 'hidden', backgroundColor: '#0a0a0f', webPreferences: { nodeIntegration: false, contextIsolation: true, preload: path.join(__dirname, '..', 'preload.js'), webSecurity: true } }); if (process.env['NODE_ENV'] === 'development') { const devUrl = process.env['SSL'] === 'true' ? 'https://localhost:4200' : 'http://localhost:4200'; await mainWindow.loadURL(devUrl); if (process.env['DEBUG_DEVTOOLS'] === '1') { mainWindow.webContents.openDevTools(); } } else { await mainWindow.loadFile(path.join(__dirname, '..', '..', 'client', 'browser', 'index.html')); } mainWindow.on('closed', () => { mainWindow = null; }); mainWindow.webContents.setWindowOpenHandler(({ url }) => { shell.openExternal(url); return { action: 'deny' }; }); mainWindow.webContents.on('will-navigate', (event, url) => { const currentUrl = mainWindow?.webContents.getURL(); const isSameOrigin = new URL(url).origin === new URL(currentUrl || '').origin; if (!isSameOrigin) { event.preventDefault(); shell.openExternal(url); } }); }