- Use app_base_url from the device record directly instead of always falling back to localhost; use https for real domains and http for localhost dev URLs only. - Suppress DevTools in packaged .app builds (app.isPackaged check) so they only open during development.
95 lines
3.1 KiB
TypeScript
95 lines
3.1 KiB
TypeScript
import { app, BrowserWindow, ipcMain } from 'electron';
|
|
import * as path from 'path';
|
|
import * as os from 'os';
|
|
import { loadSeedConfig } from './config_loader';
|
|
import { fetchFullConfig } from './api_client';
|
|
import { registerShellHandlers } from './shell_handlers';
|
|
import { registerFileHandlers } from './file_handlers';
|
|
import { registerSystemHandlers } from './system_handlers';
|
|
import { SeedConfig } from '../shared/types';
|
|
|
|
let mainWindow: BrowserWindow | null = null;
|
|
let cachedSeed: SeedConfig | null = null;
|
|
let cachedFullConfig: any = null;
|
|
|
|
async function createWindow() {
|
|
cachedSeed = await loadSeedConfig();
|
|
if (cachedSeed) {
|
|
cachedFullConfig = await fetchFullConfig(cachedSeed);
|
|
}
|
|
|
|
mainWindow = new BrowserWindow({
|
|
width: 1600,
|
|
height: 900,
|
|
title: 'OSIT Aether Launcher (Native)',
|
|
webPreferences: {
|
|
preload: path.join(__dirname, '../preload/index.js'),
|
|
contextIsolation: true,
|
|
nodeIntegration: false,
|
|
},
|
|
});
|
|
|
|
let targetUrl = 'http://demo.localhost:5173';
|
|
if (cachedFullConfig && cachedFullConfig.native_device) {
|
|
const device = cachedFullConfig.native_device;
|
|
const eventId = device.event_id_random || device.event_id;
|
|
const locationId = device.event_location_id_random || device.event_location_id || '';
|
|
// Use app_base_url from the device record (e.g. bgh.oneskyit.com).
|
|
// Fall back to localhost only if nothing is configured — never override a real domain.
|
|
const host = device.app_base_url || 'demo.localhost:5173';
|
|
// Use https for real domains; localhost dev URLs stay on http
|
|
const protocol = host.includes('localhost') ? 'http' : 'https';
|
|
targetUrl = `${protocol}://${host}/events/${eventId}/launcher/${locationId}`;
|
|
}
|
|
|
|
// Only open DevTools in development (not in a packaged .app build)
|
|
if (!app.isPackaged) mainWindow.webContents.openDevTools();
|
|
mainWindow.loadURL(targetUrl).catch(() => {
|
|
mainWindow?.loadURL('https://dev-demo.oneskyit.com/');
|
|
});
|
|
|
|
mainWindow.on('closed', () => { mainWindow = null; });
|
|
}
|
|
|
|
registerShellHandlers();
|
|
registerFileHandlers();
|
|
registerSystemHandlers();
|
|
|
|
app.on('ready', createWindow);
|
|
|
|
app.on('window-all-closed', () => {
|
|
if (process.platform !== 'darwin') app.quit();
|
|
});
|
|
|
|
app.on('activate', () => {
|
|
if (mainWindow === null) createWindow();
|
|
});
|
|
|
|
ipcMain.handle('get-seed-config', async () => cachedSeed || await loadSeedConfig());
|
|
ipcMain.handle('get-device-config', async () => cachedFullConfig);
|
|
ipcMain.handle('get-jwt', async () => null);
|
|
|
|
ipcMain.handle('get-device-info', async () => {
|
|
const interfaces = os.networkInterfaces();
|
|
const addresses: string[] = [];
|
|
for (const name of Object.keys(interfaces)) {
|
|
for (const net of interfaces[name]!) {
|
|
if (net.family === 'IPv4' && !net.internal) {
|
|
addresses.push(net.address);
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
platform: os.platform(),
|
|
release: os.release(),
|
|
arch: os.arch(),
|
|
hostname: os.hostname(),
|
|
cpus: os.cpus().length,
|
|
total_mem: os.totalmem(),
|
|
free_mem: os.freemem(),
|
|
ip_addresses: addresses,
|
|
home_directory: os.homedir(),
|
|
tmp_directory: os.tmpdir()
|
|
};
|
|
});
|