71 lines
2.6 KiB
TypeScript
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;
|
|
};
|
|
}
|
|
}
|