const { app, BrowserWindow, session } = require('electron/main') const WebSocket = require('ws') const path = require('path') // Variabel global untuk menyimpan domain let userDomain = ''; let wsPort = '9099'; let mainWindow = null; const createSetupWindow = () => { const setupWindow = new BrowserWindow({ width: 400, height: 300, webPreferences: { nodeIntegration: true, contextIsolation: false } }); setupWindow.loadFile('setup.html'); // Terima domain dari window setup const { ipcMain } = require('electron'); ipcMain.on('submit-domain', (event, domain, port) => { userDomain = domain; wsPort = port || '9099'; setupWindow.close(); // Buat window utama setelah mendapat domain createMainWindow(); }); } const createMainWindow = () => { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { autoplayPolicy: 'no-user-gesture-required', webSecurity: false, nodeIntegration: true, nodeIntegrationInWorker: true, contextIsolation: false, allowRunningInsecureContent: true } }) mainWindow.webContents.session.setPermissionRequestHandler((webContents, permission, callback) => { if (permission === 'media') { callback(true); } }); // Set CSP dengan domain yang sudah diinput mainWindow.webContents.session.webRequest.onHeadersReceived((details, callback) => { callback({ responseHeaders: { ...details.responseHeaders, 'Content-Security-Policy': [`default-src 'self' 'unsafe-inline' 'unsafe-eval' https://${userDomain} wss://${userDomain}:${wsPort} ws://${userDomain}:${wsPort}`] } }) }); session.defaultSession.webRequest.onHeadersReceived((details, callback) => { callback({ responseHeaders: { ...details.responseHeaders, 'Content-Security-Policy': [`default-src 'self' 'unsafe-inline' 'unsafe-eval' https://${userDomain} wss://${userDomain}:${wsPort} ws://${userDomain}:${wsPort}`] } }) }); mainWindow.webContents.session.webRequest.onBeforeSendHeaders((details, callback) => { callback({ requestHeaders: { ...details.requestHeaders, 'Access-Control-Allow-Origin': '*' } }); }); // Load URL dengan domain yang sudah diinput mainWindow.loadURL(`https://${userDomain}/one-ui/test/vuex/cpone-antrian/`); // Inisialisasi WebSocket setelah window utama dibuat connectWebSocket(); } app.on('certificate-error', (event, webContents, url, error, certificate, callback) => { event.preventDefault(); callback(true); }); app.whenReady().then(() => { createSetupWindow() // Mulai dengan window setup terlebih dahulu app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createSetupWindow() } }) }) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) function connectWebSocket() { try { ws = new WebSocket(`wss://${userDomain}:${wsPort}/`); ws.addEventListener('open', (event) => { console.log('WebSocket Connected'); }); ws.addEventListener('error', (error) => { console.error('WebSocket Error:', error); }); ws.addEventListener('close', (event) => { console.log('WebSocket Closed:', event.code, event.reason); setTimeout(connectWebSocket, 5000); }); } catch (error) { console.error('Error creating WebSocket:', error); setTimeout(connectWebSocket, 5000); } }