export interface Plugin { title: JSX.Element; icon: JSX.Element; content: JSX.Element; onDismount?(): void; } interface ServerResponseSuccess { success: true; result: TRes; } interface ServerResponseError { success: false; result: string; } type ServerResponse = ServerResponseSuccess | ServerResponseError; export interface ServerAPI { callPluginMethod(methodName: string, args: TArgs): Promise>; callServerMethod(methodName: string, args: TArgs): Promise>; fetchNoCors(url: string, request: RequestInfo): Promise>; executeInTab(tab: string, runAsync: boolean, code: string): Promise; removeCssFromTab(tab: string, cssId: string): Promise; } type DefinePluginFn = (serverAPI: ServerAPI) => Plugin; // TypeScript helper function export const definePlugin = (fn: DefinePluginFn): DefinePluginFn => { return (...args) => { // TODO: Maybe wrap this return fn(...args); }; };