import { contextBridge, ipcRenderer, webUtils } from 'electron' import type { DesktopBridge, ProcessProgress, } from '../../src/shared/types' const bridge: DesktopBridge = { getAppInfo: () => ipcRenderer.invoke('app:info'), getLicenseState: () => ipcRenderer.invoke('license:state'), activate: (activationCode) => ipcRenderer.invoke('license:activate', activationCode), validateLicense: () => ipcRenderer.invoke('license:validate'), clearLicense: () => ipcRenderer.invoke('license:clear'), checkVersion: () => ipcRenderer.invoke('license:check-version'), downloadUpdate: (downloadUrl, latestVersion) => ipcRenderer.invoke( 'license:download-update', downloadUrl, latestVersion, ), selectImages: () => ipcRenderer.invoke('images:select-files'), selectFolder: () => ipcRenderer.invoke('images:select-folder'), selectOutputDirectory: () => ipcRenderer.invoke('images:select-output'), pathsForFiles: (files) => files .map((file) => webUtils.getPathForFile(file)) .filter(Boolean), inspectImages: (paths) => ipcRenderer.invoke('images:inspect', paths), processImages: (options) => ipcRenderer.invoke('images:process', options), cancelProcessing: () => ipcRenderer.invoke('images:cancel'), revealItem: (filePath) => ipcRenderer.invoke('images:reveal', filePath), onProcessProgress: (callback) => { const listener = (_event: Electron.IpcRendererEvent, progress: ProcessProgress) => callback(progress) ipcRenderer.on('images:progress', listener) return () => ipcRenderer.removeListener('images:progress', listener) }, } contextBridge.exposeInMainWorld('desktop', bridge)