import * as plugins from './plugins.js'; export class TypedElectronBackend { // STATIC public static async createTypedElectronBackend() { return new TypedElectronBackend(); } // INSTANCE public typedrouter = new plugins.typedrequest.TypedRouter(); constructor() { plugins.electron.ipcMain.on('typedrequest', async (eventArg, payloadArg) => { const updatedPayload = await this.typedrouter.routeAndAddResponse({ ...payloadArg }); // TODO: check how to pass on eventArg eventArg.sender.send('typedrequest', updatedPayload); }); } createTypedRequest( methodName: T['method'], windowArg: plugins.electron.BrowserWindow ) { const typedrequest = new plugins.typedrequest.TypedRequest( new plugins.typedrequest.TypedTarget({ typedRouterRef: this.typedrouter, postMethodWithTypedRouter: async (payloadArg: T) => { windowArg.webContents.send('typedrequest', payloadArg); }, }), methodName ); return typedrequest; } }