import { Event } from 'electron'; export interface IpcRpcCaller { invoke(event: string, ...args: unknown[]): Promise; } export interface IpcRpcHandler { on(event: string, callback: (event: Event, ...args: any[]) => Promise): this; once(event: string, callback: (event: Event, ...args: any[]) => Promise): this; } export interface IpcRpc extends IpcRpcCaller, IpcRpcHandler { } export interface SyncIpcRpcCaller { invokeSync(event: string, ...args: unknown[]): T; } export interface SyncIpcRpcHandler { onSync(event: string, callback: (event: Event, ...args: any[]) => unknown): this; onceSync(event: string, callback: (event: Event, ...args: any[]) => unknown): this; } export interface IpcRpcEvent extends Event { readonly replyTo?: string; }