interface ServerConfig { serverUrl?: string; allowInvalidCertificate?: boolean; [key: string]: unknown; } interface ConnectionTestResult { success: boolean; error?: string; [key: string]: unknown; } interface DialogOptions { title?: string; defaultPath?: string; buttonLabel?: string; filters?: Array<{ name: string; extensions: string[] }>; properties?: string[]; [key: string]: unknown; } interface DialogResult { canceled: boolean; filePath?: string; filePaths?: string[]; [key: string]: unknown; } export interface ElectronAPI { getAppVersion: () => Promise; getPlatform: () => Promise; getSetting?: (key: string) => Promise; setSetting?: (key: string, value: string) => Promise; getServerConfig: () => Promise; saveServerConfig: (config: ServerConfig) => Promise<{ success: boolean }>; testServerConnection: (serverUrl: string) => Promise; getC2STunnelConfig: () => Promise; saveC2STunnelConfig: ( config: unknown[], ) => Promise<{ success: boolean; error?: string }>; checkLocalPortAvailable: ( host: string, port: number, ) => Promise<{ available: boolean; error?: string }>; getC2STunnelPresetDefaultName: () => Promise; startC2STunnel: ( tunnel: unknown, index: number, ) => Promise<{ success: boolean; tunnelName?: string; error?: string }>; testC2STunnel: ( tunnel: unknown, index: number, ) => Promise<{ success: boolean; message?: string; error?: string }>; stopC2STunnel: ( tunnelName: string, ) => Promise<{ success: boolean; error?: string }>; getC2STunnelStatuses: () => Promise>; onC2STunnelStatuses?: ( callback: (statuses: Record) => void, ) => () => void; startC2SAutoStartTunnels: () => Promise<{ success: boolean; started: number; errors: string[]; }>; onRemoteSyncStatusChanged?: ( callback: (status: { connected: boolean; syncing: boolean; lastSyncedAt: string | null; lastError: string | null; needsReauth: boolean; }) => void, ) => () => void; clearSessionCookies: () => Promise; getSessionCookie: ( name: string, targetUrl?: string, ) => Promise; waitForSessionCookie: ( name: string, targetUrl?: string, previousValue?: string | null, timeoutMs?: number, ) => Promise<{ success: boolean; value?: string; error?: string }>; showSaveDialog: (options: DialogOptions) => Promise; showOpenDialog: (options: DialogOptions) => Promise; openExternalEditor: (fileData: { fileName: string; content: string; encoding?: "utf8" | "base64"; editorPath?: string | null; }) => Promise<{ success: boolean; editId?: string; path?: string; error?: string; }>; closeExternalEditor: (editId: string) => Promise<{ success: boolean; error?: string; }>; onExternalEditorSaved?: ( callback: (payload: { editId: string; content: string; encoding: "utf8"; path: string; }) => void, ) => () => void; onUpdateAvailable: (callback: () => void) => void; onUpdateDownloaded: (callback: () => void) => void; removeAllListeners: (channel: string) => void; isElectron: boolean; isDev: boolean; invoke: (channel: string, ...args: unknown[]) => Promise; createTempFile: (fileData: { fileName: string; content: string; encoding?: "base64" | "utf8"; }) => Promise<{ success: boolean; tempId?: string; path?: string; error?: string; }>; createTempFolder: (folderData: { folderName: string; files: Array<{ relativePath: string; content: string; encoding?: "base64" | "utf8"; }>; }) => Promise<{ success: boolean; tempId?: string; path?: string; error?: string; }>; startDragToDesktop: (dragData: { tempId: string; fileName: string; }) => Promise<{ success: boolean; error?: string; }>; cleanupTempFile: (tempId: string) => Promise<{ success: boolean; error?: string; }>; } declare global { interface Window { electronAPI: ElectronAPI; IS_ELECTRON: boolean; electronClipboard?: { writeText(text: string): Promise; readText(): Promise; }; } }