RenaiApp/src/renderer/services/ipc-client.ts

28 lines
816 B
TypeScript

import { ipcRenderer } from 'electron';
import { uuid } from '../../shared/services/uuid';
export const ipcClient: IpcClientInterface = {
ask: (channel: IpcChannel, data?: never): Promise<never> => {
const id = uuid();
const payload: IpcPayload = {
id,
data,
};
return new Promise<never>((resolve, reject): void => {
const listener = (event: Electron.Renderer.IpcRendererEvent, response: IpcResponse): void => {
if (response.id === id) {
if (response.success) {
resolve(response.data as never);
} else {
reject(new Error(response.error));
}
ipcRenderer.removeListener(channel, listener);
}
};
ipcRenderer.on(channel, listener);
ipcRenderer.send(channel, payload);
});
},
};