openpetswithchatandmcp/apps/desktop/panel-preload.cjs
2026-06-10 08:16:38 +02:00

17 lines
812 B
JavaScript

const { contextBridge, ipcRenderer } = require("electron");
const tokenArg = process.argv.find((arg) => arg.startsWith("--openpets-panel-token="));
const channel = tokenArg ? `openpets:plugin-panel:${tokenArg.slice("--openpets-panel-token=".length)}` : "";
const handlers = new Set();
ipcRenderer.on(`${channel}:message`, (_event, msg) => {
for (const handler of handlers) {
try { handler(msg); } catch { /* panel handler errors stay in the panel */ }
}
});
contextBridge.exposeInMainWorld("openPetsPanel", {
postMessage: (msg) => { if (channel) ipcRenderer.send(`${channel}:to-plugin`, msg); },
onMessage: (handler) => { if (typeof handler === "function") handlers.add(handler); return () => handlers.delete(handler); },
close: () => { if (channel) ipcRenderer.send(`${channel}:close`); },
});