37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import { ipcRenderer } from 'electron';
|
|
import { uuid } from '../../services/uuid';
|
|
import IpcRendererEvent = Electron.IpcRendererEvent;
|
|
|
|
const ipcClient: IIpcClient = {
|
|
ask: (channel: IpcChannel, data?: unknown): Promise<unknown> => {
|
|
const id = uuid();
|
|
const payload: IIpcPayload = {
|
|
id,
|
|
data,
|
|
};
|
|
|
|
return new Promise((resolve: (value?: unknown) => void, reject: (reason?: Error) => void): void => {
|
|
const listener = (event: IpcRendererEvent, response: IIpcResponse): void => {
|
|
if (response.id === id) {
|
|
if (response.success) {
|
|
resolve(response.data);
|
|
} else {
|
|
reject(new Error(response.error));
|
|
}
|
|
ipcRenderer.removeListener(channel, listener);
|
|
}
|
|
};
|
|
ipcRenderer.on(channel, listener);
|
|
ipcRenderer.send(channel, payload);
|
|
});
|
|
},
|
|
};
|
|
|
|
export function login(credentials: ICredentials): Promise<void> {
|
|
return ipcClient.ask(IpcChannel.LOGIN, credentials) as Promise<void>;
|
|
}
|
|
|
|
export function isLoggedIn(): Promise<boolean> {
|
|
return ipcClient.ask(IpcChannel.LOGGED_IN) as Promise<boolean>;
|
|
}
|