Enhance: Implement dynamic launcher URL and restore package.json

- Added logic to construct launcher URL based on hydrated device context.
- Implemented dev/production host fallback for demo.localhost.
- Restored missing package.json with proper start and build scripts.
- Finalized IPC handlers for seed and device configuration.
This commit is contained in:
Scott Idem
2026-01-23 14:08:31 -05:00
parent 0497f5767b
commit 30db989b2c
5 changed files with 1140 additions and 31 deletions

31
dist/main/index.js vendored
View File

@@ -56,14 +56,21 @@ async function createWindow() {
nodeIntegration: false,
},
});
// Prioritize demo.localhost for local development
const devUrl = 'http://demo.localhost:5173';
// Fallback URL if local is offline
const fallbackUrl = 'https://dev-demo.oneskyit.com/';
console.log(`Loading UI from: ${devUrl}`);
mainWindow.loadURL(devUrl).catch(() => {
console.warn(`Failed to load ${devUrl}. Falling back to ${fallbackUrl}`);
mainWindow?.loadURL(fallbackUrl);
// Determine target URL based on hydrated config
let targetUrl = 'http://demo.localhost:5173'; // Default Dev Fallback
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 || '';
const host = device.app_base_url || 'demo.localhost:5173';
// In development, we likely want to stick to localhost even if app_base_url is set
const useHost = (host.includes('localhost')) ? host : 'demo.localhost:5173';
targetUrl = `http://${useHost}/events/${eventId}/launcher/${locationId}`;
}
console.log(`Launcher: Navigating to ${targetUrl}`);
mainWindow.loadURL(targetUrl).catch(() => {
console.warn(`Failed to load ${targetUrl}. Falling back to dev-demo...`);
mainWindow?.loadURL('https://dev-demo.oneskyit.com/');
});
mainWindow.on('closed', () => {
mainWindow = null;
@@ -85,13 +92,7 @@ electron_1.ipcMain.handle('get-seed-config', async () => {
return cachedSeed || await (0, config_loader_1.loadSeedConfig)();
});
electron_1.ipcMain.handle('get-device-config', async () => {
if (cachedFullConfig)
return cachedFullConfig;
if (cachedSeed) {
cachedFullConfig = await (0, api_client_1.fetchFullConfig)(cachedSeed);
return cachedFullConfig;
}
return null;
return cachedFullConfig;
});
electron_1.ipcMain.handle('get-jwt', async () => {
return null;

View File

@@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/main/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAuD;AACvD,2CAA6B;AAC7B,mDAAiD;AACjD,6CAA+C;AAG/C,IAAI,UAAU,GAAyB,IAAI,CAAC;AAC5C,IAAI,UAAU,GAAsB,IAAI,CAAC;AACzC,IAAI,gBAAgB,GAAQ,IAAI,CAAC;AAEjC,KAAK,UAAU,YAAY;IACzB,6BAA6B;IAC7B,UAAU,GAAG,MAAM,IAAA,8BAAc,GAAE,CAAC;IACpC,IAAI,UAAU,EAAE,CAAC;QACf,gBAAgB,GAAG,MAAM,IAAA,4BAAe,EAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAED,UAAU,GAAG,IAAI,wBAAa,CAAC;QAC7B,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,+BAA+B;QACtC,cAAc,EAAE;YACd,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC;YACpD,gBAAgB,EAAE,IAAI;YACtB,eAAe,EAAE,KAAK;SACvB;KACF,CAAC,CAAC;IAEH,kDAAkD;IAClD,MAAM,MAAM,GAAG,4BAA4B,CAAC;IAC5C,mCAAmC;IACnC,MAAM,WAAW,GAAG,gCAAgC,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;IAE1C,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACpC,OAAO,CAAC,IAAI,CAAC,kBAAkB,MAAM,qBAAqB,WAAW,EAAE,CAAC,CAAC;QACzE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC3B,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,cAAG,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAE9B,cAAG,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,cAAG,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,cAAG,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;IACtB,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,YAAY,EAAE,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe;AACf,kBAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;IAC3C,OAAO,UAAU,IAAI,MAAM,IAAA,8BAAc,GAAE,CAAC;AAC9C,CAAC,CAAC,CAAC;AAEH,kBAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;IAC7C,IAAI,gBAAgB;QAAE,OAAO,gBAAgB,CAAC;IAC9C,IAAI,UAAU,EAAE,CAAC;QACf,gBAAgB,GAAG,MAAM,IAAA,4BAAe,EAAC,UAAU,CAAC,CAAC;QACrD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC;AAEH,kBAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IACnC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/main/index.ts"],"names":[],"mappings":"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"}

1085
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

18
package.json Normal file
View File

@@ -0,0 +1,18 @@
{
"name": "aether_app_native_electron",
"version": "1.0.0",
"description": "AE Native Launcher V3",
"main": "dist/main/index.js",
"scripts": {
"start": "tsc && electron .",
"dev": "tsc && electron .",
"build": "tsc",
"watch": "tsc -w"
},
"devDependencies": {
"@types/node": "^22.10.7",
"electron": "^34.0.0",
"ts-node": "^10.9.2",
"typescript": "^5.7.3"
}
}

View File

@@ -26,16 +26,26 @@ async function createWindow() {
},
});
// Prioritize demo.localhost for local development
const devUrl = 'http://demo.localhost:5173';
// Fallback URL if local is offline
const fallbackUrl = 'https://dev-demo.oneskyit.com/';
console.log(`Loading UI from: ${devUrl}`);
// Determine target URL based on hydrated config
let targetUrl = 'http://demo.localhost:5173'; // Default Dev Fallback
mainWindow.loadURL(devUrl).catch(() => {
console.warn(`Failed to load ${devUrl}. Falling back to ${fallbackUrl}`);
mainWindow?.loadURL(fallbackUrl);
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 || '';
const host = device.app_base_url || 'demo.localhost:5173';
// In development, we likely want to stick to localhost even if app_base_url is set
const useHost = (host.includes('localhost')) ? host : 'demo.localhost:5173';
targetUrl = `http://${useHost}/events/${eventId}/launcher/${locationId}`;
}
console.log(`Launcher: Navigating to ${targetUrl}`);
mainWindow.loadURL(targetUrl).catch(() => {
console.warn(`Failed to load ${targetUrl}. Falling back to dev-demo...`);
mainWindow?.loadURL('https://dev-demo.oneskyit.com/');
});
mainWindow.on('closed', () => {
@@ -63,12 +73,7 @@ ipcMain.handle('get-seed-config', async () => {
});
ipcMain.handle('get-device-config', async () => {
if (cachedFullConfig) return cachedFullConfig;
if (cachedSeed) {
cachedFullConfig = await fetchFullConfig(cachedSeed);
return cachedFullConfig;
}
return null;
return cachedFullConfig;
});
ipcMain.handle('get-jwt', async () => {