// Renderer bridge for the Messages panel. // All hermes-* IPC returns { ok, ... } | { ok: false, err }. const { contextBridge, ipcRenderer } = require("electron"); contextBridge.exposeInMainWorld("hermes", { status: () => ipcRenderer.invoke("hermes-status"), canUseVault: () => ipcRenderer.invoke("hermes-can-use-vault"), init: (mnemonic) => ipcRenderer.invoke("hermes-init", { mnemonic }), initFromVault: () => ipcRenderer.invoke("hermes-init", { useVault: true }), close: () => ipcRenderer.invoke("hermes-close"), inbox: () => ipcRenderer.invoke("hermes-inbox"), send: (to, text) => ipcRenderer.invoke("hermes-send", { to, text }), // Server-push: new decrypted message arrived. Callback gets { senderPkHex, senderName, text, createdAt }. onMessage: (cb) => { const wrapped = (_e, msg) => cb(msg); ipcRenderer.on("hermes-message", wrapped); return () => ipcRenderer.removeListener("hermes-message", wrapped); }, // Server-push: relay connection state changed. Callback gets { relaysConnected, relaysTotal }. onStatus: (cb) => { const wrapped = (_e, s) => cb(s); ipcRenderer.on("hermes-status-update", wrapped); return () => ipcRenderer.removeListener("hermes-status-update", wrapped); }, });