import { contextBridge, ipcRenderer } from "electron"; import type { DeepLinkResult, FusionAPI, SystemInfo, UpdateCheckResult } from "./types"; export type FusionDesktopAPI = FusionAPI; contextBridge.exposeInMainWorld("fusionAPI", { // Window control minimize: (): Promise => ipcRenderer.invoke("window:minimize"), maximize: (): Promise => ipcRenderer.invoke("window:maximize"), close: (): Promise => ipcRenderer.invoke("window:close"), isMaximized: (): Promise => ipcRenderer.invoke("window:isMaximized"), // App info getSystemInfo: (): Promise => ipcRenderer.invoke("app:getSystemInfo"), checkForUpdates: (): Promise => ipcRenderer.invoke("app:checkForUpdates"), getServerPort: (): Promise => ipcRenderer.invoke("app:getServerPort"), // Tray status updateTrayStatus: (status: string): Promise => ipcRenderer.invoke("tray:updateStatus", status), // Native dialogs showExportDialog: (): Promise => ipcRenderer.invoke("native:showExportDialog"), showImportDialog: (): Promise => ipcRenderer.invoke("native:showImportDialog"), // Deep link events (main → renderer) onDeepLink: (callback: (result: DeepLinkResult) => void): (() => void) => { const handler = (_event: Electron.IpcRendererEvent, result: DeepLinkResult) => callback(result); ipcRenderer.on("deep-link", handler); return () => ipcRenderer.removeListener("deep-link", handler); }, // Auto-updater events (main → renderer) onUpdateAvailable: (callback: (info: { version: string }) => void): (() => void) => { const handler = (_event: Electron.IpcRendererEvent, info: { version: string }) => callback(info); ipcRenderer.on("update-available", handler); return () => ipcRenderer.removeListener("update-available", handler); }, onUpdateDownloaded: (callback: () => void): (() => void) => { const handler = () => callback(); ipcRenderer.on("update-downloaded", handler); return () => ipcRenderer.removeListener("update-downloaded", handler); }, });