const { contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('electronAPI', { // Window controls minimizeWindow: () => ipcRenderer.send('window-minimize'), maximizeWindow: () => ipcRenderer.send('window-maximize'), closeWindow: () => ipcRenderer.send('window-close'), // Open URL in system default browser openExternal: (url) => ipcRenderer.invoke('open-external', url), // Desktop capturer for screen sharing getSources: () => ipcRenderer.invoke('get-sources'), // App data path for SQLite storage getAppDataPath: () => ipcRenderer.invoke('get-app-data-path'), // File system operations for database persistence readFile: (filePath) => ipcRenderer.invoke('read-file', filePath), writeFile: (filePath, data) => ipcRenderer.invoke('write-file', filePath, data), fileExists: (filePath) => ipcRenderer.invoke('file-exists', filePath), ensureDir: (dirPath) => ipcRenderer.invoke('ensure-dir', dirPath), db: { initialize: () => ipcRenderer.invoke('db:initialize'), // Messages saveMessage: (message) => ipcRenderer.invoke('db:saveMessage', message), getMessages: (roomId, limit, offset) => ipcRenderer.invoke('db:getMessages', roomId, limit, offset), deleteMessage: (messageId) => ipcRenderer.invoke('db:deleteMessage', messageId), updateMessage: (messageId, updates) => ipcRenderer.invoke('db:updateMessage', messageId, updates), getMessageById: (messageId) => ipcRenderer.invoke('db:getMessageById', messageId), clearRoomMessages: (roomId) => ipcRenderer.invoke('db:clearRoomMessages', roomId), // Reactions saveReaction: (reaction) => ipcRenderer.invoke('db:saveReaction', reaction), removeReaction: (messageId, userId, emoji) => ipcRenderer.invoke('db:removeReaction', messageId, userId, emoji), getReactionsForMessage: (messageId) => ipcRenderer.invoke('db:getReactionsForMessage', messageId), // Users saveUser: (user) => ipcRenderer.invoke('db:saveUser', user), getUser: (userId) => ipcRenderer.invoke('db:getUser', userId), getCurrentUser: () => ipcRenderer.invoke('db:getCurrentUser'), setCurrentUserId: (userId) => ipcRenderer.invoke('db:setCurrentUserId', userId), getUsersByRoom: (roomId) => ipcRenderer.invoke('db:getUsersByRoom', roomId), updateUser: (userId, updates) => ipcRenderer.invoke('db:updateUser', userId, updates), // Rooms saveRoom: (room) => ipcRenderer.invoke('db:saveRoom', room), getRoom: (roomId) => ipcRenderer.invoke('db:getRoom', roomId), getAllRooms: () => ipcRenderer.invoke('db:getAllRooms'), deleteRoom: (roomId) => ipcRenderer.invoke('db:deleteRoom', roomId), updateRoom: (roomId, updates) => ipcRenderer.invoke('db:updateRoom', roomId, updates), // Bans saveBan: (ban) => ipcRenderer.invoke('db:saveBan', ban), removeBan: (oderId) => ipcRenderer.invoke('db:removeBan', oderId), getBansForRoom: (roomId) => ipcRenderer.invoke('db:getBansForRoom', roomId), isUserBanned: (userId, roomId) => ipcRenderer.invoke('db:isUserBanned', userId, roomId), // Attachments saveAttachment: (attachment) => ipcRenderer.invoke('db:saveAttachment', attachment), getAttachmentsForMessage: (messageId) => ipcRenderer.invoke('db:getAttachmentsForMessage', messageId), getAllAttachments: () => ipcRenderer.invoke('db:getAllAttachments'), deleteAttachmentsForMessage: (messageId) => ipcRenderer.invoke('db:deleteAttachmentsForMessage', messageId), // Utilities clearAllData: () => ipcRenderer.invoke('db:clearAllData'), }, });