import { contextBridge, ipcRenderer } from 'electron'; // 暴露给渲染进程的 API contextBridge.exposeInMainWorld('electronAPI', { // gRPC 相关 grpc: { connect: (host: string, port: number) => ipcRenderer.invoke('grpc:connect', { host, port }), register: (partyId: string, role: string) => ipcRenderer.invoke('grpc:register', { partyId, role }), joinSession: (sessionId: string, partyId: string, joinToken: string) => ipcRenderer.invoke('grpc:joinSession', { sessionId, partyId, joinToken }), }, // 存储相关 storage: { saveShare: (share: unknown, password: string) => ipcRenderer.invoke('storage:saveShare', { share, password }), listShares: () => ipcRenderer.invoke('storage:listShares'), exportShare: (id: string, password: string) => ipcRenderer.invoke('storage:exportShare', { id, password }), importShare: (data: Buffer, password: string) => ipcRenderer.invoke('storage:importShare', { data, password }), }, // 事件监听 on: (channel: string, callback: (...args: unknown[]) => void) => { const validChannels = [ 'session:event', 'session:message', 'session:progress', 'session:completed', 'session:error', ]; if (validChannels.includes(channel)) { ipcRenderer.on(channel, (_event, ...args) => callback(...args)); } }, // 移除事件监听 removeListener: (channel: string, callback: (...args: unknown[]) => void) => { ipcRenderer.removeListener(channel, callback); }, // 平台信息 platform: process.platform, }); // 类型声明 declare global { interface Window { electronAPI: { grpc: { connect: (host: string, port: number) => Promise<{ success: boolean; error?: string }>; register: (partyId: string, role: string) => Promise<{ success: boolean; error?: string }>; joinSession: (sessionId: string, partyId: string, joinToken: string) => Promise<{ success: boolean; data?: unknown; error?: string }>; }; storage: { saveShare: (share: unknown, password: string) => Promise<{ success: boolean; error?: string }>; listShares: () => Promise<{ success: boolean; data?: unknown[]; error?: string }>; exportShare: (id: string, password: string) => Promise<{ success: boolean; data?: Buffer; error?: string }>; importShare: (data: Buffer, password: string) => Promise<{ success: boolean; data?: unknown; error?: string }>; }; on: (channel: string, callback: (...args: unknown[]) => void) => void; removeListener: (channel: string, callback: (...args: unknown[]) => void) => void; platform: NodeJS.Platform; }; } }