const { contextBridge, ipcRenderer } = require('electron'); /** * Exposer des APIs sécurisées au renderer process * Utilise invoke() générique pour tous les appels IPC */ contextBridge.exposeInMainWorld('electron', { // Platform info platform: process.platform, // Generic invoke method - use this for all IPC calls invoke: (channel: string, ...args: any[]) => ipcRenderer.invoke(channel, ...args), // Token management (shortcuts for convenience) getToken: () => ipcRenderer.invoke('get-token'), setToken: (token: string) => ipcRenderer.invoke('set-token', token), removeToken: () => ipcRenderer.invoke('remove-token'), // Language management (shortcuts for convenience) getLang: () => ipcRenderer.invoke('get-lang'), setLang: (lang: 'fr' | 'en') => ipcRenderer.invoke('set-lang', lang), // Auth events (use send for one-way communication) loginSuccess: (token: string) => ipcRenderer.send('login-success', token), logout: () => ipcRenderer.send('logout'), // User initialization (after getting user info from server) initUser: (userId: string) => ipcRenderer.invoke('init-user', userId), // Encryption key management (shortcuts for convenience) generateEncryptionKey: (userId: string) => ipcRenderer.invoke('generate-encryption-key', userId), getUserEncryptionKey: (userId: string) => ipcRenderer.invoke('get-user-encryption-key', userId), setUserEncryptionKey: (userId: string, encryptionKey: string) => ipcRenderer.invoke('set-user-encryption-key', userId, encryptionKey), // Database initialization (shortcut for convenience) dbInitialize: (userId: string, encryptionKey: string) => ipcRenderer.invoke('db-initialize', userId, encryptionKey), // Open external links (browser/native app) openExternal: (url: string) => ipcRenderer.invoke('open-external', url), // Offline mode management offlinePinSet: (pin: string) => ipcRenderer.invoke('offline:pin:set', { pin }), offlinePinVerify: (pin: string) => ipcRenderer.invoke('offline:pin:verify', { pin }), offlineModeSet: (enabled: boolean, syncInterval?: number) => ipcRenderer.invoke('offline:mode:set', { enabled, syncInterval }), offlineModeGet: () => ipcRenderer.invoke('offline:mode:get'), offlineSyncCheck: () => ipcRenderer.invoke('offline:sync:check'), });