import { ipcRenderer, contextBridge } from 'electron'; import { BIDIRECTIONAL } from '../shared/constants/ipc-channels'; // --------- Expose some API to the Renderer process --------- contextBridge.exposeInMainWorld('ipcRenderer', { on(...args: Parameters) { const [channel, listener] = args; return ipcRenderer.on(channel, (event, ...args) => listener(event, ...args)); }, off(...args: Parameters) { const [channel, ...omit] = args; return ipcRenderer.off(channel, ...omit); }, send(...args: Parameters) { const [channel, ...omit] = args; return ipcRenderer.send(channel, ...omit); }, invoke(...args: Parameters) { const [channel, ...omit] = args; return ipcRenderer.invoke(channel, ...omit); }, }); // --------- 安全加密 API(基于 Electron safeStorage)--------- contextBridge.exposeInMainWorld('safeStorage', { /** * 加密明文字符串 * @param plaintext - 待加密的明文 * @returns Base64 编码的密文,失败返回 null */ async encrypt(plaintext: string): Promise { const result = await ipcRenderer.invoke(BIDIRECTIONAL.SAFESTORAGE_ENCRYPT, plaintext); return result?.success ? result.data : null; }, /** * 解密 Base64 密文 * @param encryptedBase64 - Base64 编码的密文 * @returns 解密后的明文,失败返回 null */ async decrypt(encryptedBase64: string): Promise { const result = await ipcRenderer.invoke(BIDIRECTIONAL.SAFESTORAGE_DECRYPT, encryptedBase64); return result?.success ? result.data : null; }, });