rwadurian/backend/mpc-system/services/service-party-app/electron/preload.ts

71 lines
2.6 KiB
TypeScript

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;
};
}
}