const { contextBridge, ipcRenderer } = require('electron'); const localCdnPreference = { cdn: 'local', latency: 0, timestamp: Date.now(), }; const windowControls = { minimize: () => ipcRenderer.invoke('truegrowth-window:minimize'), toggleMaximize: () => ipcRenderer.invoke('truegrowth-window:toggle-maximize'), close: () => ipcRenderer.invoke('truegrowth-window:close'), getState: () => ipcRenderer.invoke('truegrowth-window:is-maximized'), onStateChange: (callback) => { if (typeof callback !== 'function') { return () => undefined; } const listener = (_event, state) => callback(state); ipcRenderer.on('truegrowth-window:state', listener); return () => ipcRenderer.removeListener('truegrowth-window:state', listener); }, }; const themeBridge = { getSystemTheme: () => ipcRenderer.invoke('truegrowth-theme:get-system'), onSystemThemeChange: (callback) => { if (typeof callback !== 'function') { return () => undefined; } const listener = (_event, state) => callback(state); ipcRenderer.on('truegrowth-theme:system', listener); return () => ipcRenderer.removeListener('truegrowth-theme:system', listener); }, }; const updatesBridge = { getState: () => ipcRenderer.invoke('truegrowth-update:get-state'), check: () => ipcRenderer.invoke('truegrowth-update:check'), download: () => ipcRenderer.invoke('truegrowth-update:download'), install: () => ipcRenderer.invoke('truegrowth-update:install'), openChannel: () => ipcRenderer.invoke('truegrowth-update:open-channel'), onStateChange: (callback) => { if (typeof callback !== 'function') { return () => undefined; } const listener = (_event, state) => callback(state); ipcRenderer.on('truegrowth-update:state', listener); return () => ipcRenderer.removeListener('truegrowth-update:state', listener); }, }; contextBridge.exposeInMainWorld('trueGrowthRuntime', { app: 'TrueGrowth', platform: process.platform, assetMode: 'local', localApiBaseUrl: 'http://127.0.0.1:48177/local-api', windowControls, theme: themeBridge, updates: updatesBridge, }); contextBridge.exposeInMainWorld('__OPENTU_DESKTOP__', true); contextBridge.exposeInMainWorld('__OPENTU_CDN__', localCdnPreference); contextBridge.exposeInMainWorld('__AITU_CDN__', localCdnPreference);