'use strict' const { contextBridge, ipcRenderer } = require('electron') // 渲染层是纯静态页面,能力全部经这里白名单暴露,不开 nodeIntegration const subscribe = (channel, callback) => { const handler = (_event, payload) => callback(payload) ipcRenderer.on(channel, handler) return () => ipcRenderer.removeListener(channel, handler) } contextBridge.exposeInMainWorld('consoleApi', { getStatus: () => ipcRenderer.invoke('service:get-status'), startService: () => ipcRenderer.invoke('service:start'), stopService: () => ipcRenderer.invoke('service:stop'), restartService: () => ipcRenderer.invoke('service:restart'), getLog: () => ipcRenderer.invoke('log:tail'), clearLog: () => ipcRenderer.invoke('log:clear'), relayoutDisplays: () => ipcRenderer.invoke('display:relayout'), openServerAdmin: () => ipcRenderer.invoke('app:open-server-admin'), minimize: () => ipcRenderer.invoke('window:minimize'), maximize: () => ipcRenderer.invoke('window:maximize'), close: () => ipcRenderer.invoke('window:close'), isMaximized: () => ipcRenderer.invoke('window:is-maximized'), onMaximizeChange: (callback) => subscribe('window:maximize-changed', callback), onLog: (callback) => subscribe('log:line', callback), onStatus: (callback) => subscribe('service:status', callback) })