import { contextBridge, ipcRenderer } from "electron"; import type { DesktopBridge } from "../shared/desktopBridge.js"; import type { OfferRefreshRequest, PurchasePlan, SearchHistory } from "../shared/contract.js"; const bridge: DesktopBridge = { platform: "desktop", os: process.platform as DesktopBridge["os"], stores: () => ipcRenderer.invoke("engine:stores"), search: (storeId, query) => ipcRenderer.invoke("engine:search", storeId, query), refreshOffer: (request: OfferRefreshRequest) => ipcRenderer.invoke("engine:refreshOffer", request), loadPlan: () => ipcRenderer.invoke("plan:load"), savePlan: (plan: PurchasePlan) => ipcRenderer.invoke("plan:save", plan), loadSearchHistory: () => ipcRenderer.invoke("history:load"), saveSearchHistory: (history: SearchHistory) => ipcRenderer.invoke("history:save", history), showSolve: (storeId) => ipcRenderer.invoke("solve:show", storeId), dismissSolve: (storeId) => ipcRenderer.invoke("solve:dismiss", storeId), onSolveCleared(listener) { const handler = (_event: Electron.IpcRendererEvent, storeId: string) => listener(storeId); ipcRenderer.on("solve:cleared", handler); return () => ipcRenderer.removeListener("solve:cleared", handler); }, onSolveDismissed(listener) { const handler = (_event: Electron.IpcRendererEvent, storeId: string) => listener(storeId); ipcRenderer.on("solve:dismissed", handler); return () => ipcRenderer.removeListener("solve:dismissed", handler); }, }; contextBridge.exposeInMainWorld("comparatorDesktop", bridge);