/** * Electron preload script (TypeScript) * * Only exposes native features (dialogs, shell) and server URL. * All other operations go through HTTP API. */ import { contextBridge, ipcRenderer, OpenDialogOptions, SaveDialogOptions } from "electron"; // Expose minimal API for native features contextBridge.exposeInMainWorld("electronAPI", { // Platform info platform: process.platform, isElectron: true, // Connection check ping: (): Promise => ipcRenderer.invoke("ping"), // Get server URL for HTTP client getServerUrl: (): Promise => ipcRenderer.invoke("server:getUrl"), // Native dialogs - better UX than prompt() openDirectory: (): Promise => ipcRenderer.invoke("dialog:openDirectory"), openFile: (options?: OpenDialogOptions): Promise => ipcRenderer.invoke("dialog:openFile", options), saveFile: (options?: SaveDialogOptions): Promise => ipcRenderer.invoke("dialog:saveFile", options), // Shell operations openExternalLink: (url: string): Promise<{ success: boolean; error?: string }> => ipcRenderer.invoke("shell:openExternal", url), openPath: (filePath: string): Promise<{ success: boolean; error?: string }> => ipcRenderer.invoke("shell:openPath", filePath), // App info getPath: (name: string): Promise => ipcRenderer.invoke("app:getPath", name), getVersion: (): Promise => ipcRenderer.invoke("app:getVersion"), isPackaged: (): Promise => ipcRenderer.invoke("app:isPackaged"), }); console.log("[Preload] Electron API exposed (TypeScript)");