const { contextBridge, ipcRenderer } = require('electron') contextBridge.exposeInMainWorld('yaoyaoDesktop', Object.freeze({ unreadState: account => ipcRenderer.invoke('desktop:unread-state', account), status: () => ipcRenderer.invoke('desktop:status'), selectServer: mode => ipcRenderer.invoke('desktop:onboarding-select', mode), prepareServer: input => ipcRenderer.invoke('desktop:onboarding-prepare', input), login: input => ipcRenderer.invoke('desktop:onboarding-submit', input), openLogin: () => ipcRenderer.invoke('desktop:open-login'), forgetLogin: () => ipcRenderer.invoke('desktop:forget-login'), retry: () => ipcRenderer.invoke('desktop:retry'), forceSync: () => ipcRenderer.invoke('desktop:force-sync'), logs: () => ipcRenderer.invoke('desktop:logs'), openUpdates: () => ipcRenderer.invoke('desktop:updates'), updateState: () => ipcRenderer.invoke('desktop-update:state'), updateAction: action => ipcRenderer.invoke(`desktop-update:${action}`), onUpdateRequested: callback => { const listener = () => callback() ipcRenderer.on('desktop:update-requested', listener) return () => ipcRenderer.removeListener('desktop:update-requested', listener) }, modeState: () => ipcRenderer.invoke('desktop:mode-state'), switchMode: mode => ipcRenderer.invoke('desktop:mode-switch', mode), openRemoteLogin: () => ipcRenderer.invoke('desktop:remote-login'), authorizeComputer: csrfToken => ipcRenderer.invoke('desktop:computer-authorize', csrfToken), authorizeCurrentDevice: scope => ipcRenderer.invoke('desktop:device-authorize', scope), /** 'local' on the YaoYao server Mac; paired host uuid in remote mode; null if unknown. */ deviceHost: () => ipcRenderer.invoke('desktop:device-host'), openComputer: (id, target) => ipcRenderer.invoke('desktop-computer:open', id, target), computerTargetChanged: target => ipcRenderer.invoke('desktop-computer:target', target), computerClosed: () => ipcRenderer.invoke('desktop-computer:closed'), onComputerClose: callback => { const listener = () => callback() ipcRenderer.on('desktop-computer:request-close', listener) return () => ipcRenderer.removeListener('desktop-computer:request-close', listener) }, }))