import { contextBridge, ipcRenderer } from 'electron'; // Expose protected methods that allow the renderer process to use // ipcRenderer without exposing the entire object contextBridge.exposeInMainWorld('electronAPI', { invoke: (channel: string, ...args: unknown[]) => { const validChannels = [ 'storage:savePattern', 'storage:getPattern', 'storage:getLatest', 'storage:deletePattern', 'storage:clear', 'dialog:openFile', 'dialog:saveFile', 'fs:readFile', 'fs:writeFile', ]; if (validChannels.includes(channel)) { return ipcRenderer.invoke(channel, ...args); } throw new Error(`Invalid IPC channel: ${channel}`); }, // Bluetooth device selection onBluetoothDeviceList: (callback: (devices: Array<{ deviceId: string; deviceName: string }>) => void) => { ipcRenderer.on('bluetooth:device-list', (_event, devices) => callback(devices)); }, selectBluetoothDevice: (deviceId: string) => { ipcRenderer.send('bluetooth:select-device', deviceId); }, }); // Also expose process type for platform detection contextBridge.exposeInMainWorld('process', { type: 'renderer', });