import type { JSONSchemaType } from "ajv"; export interface RPCRequest { bypassCache?: boolean; module: string; method: string; data: any; } export interface RPCResponse { updated?: number; data?: any; error?: string; } export interface RPCMethod { cacheable: boolean; handler: ( request: RPCRequest, sendStream: (stream: AsyncIterable) => void ) => Promise; } // @ts-ignore export const RPC_REQUEST_SCHEMA: JSONSchemaType = { type: "object", properties: { module: { type: "string", }, method: { type: "string", }, data: { type: ["number", "string", "boolean", "object", "array"], }, bypassCache: { type: "boolean", nullable: true, }, }, }; export interface StreamFileResponse { data?: Uint8Array; done: boolean; } export interface PluginAPI { config: any; registerMethod: (methodName: string, method: RPCMethod) => void; loadPlugin: (moduleName: string) => Promise; getMethods: () => string[]; } export type PluginFunction = (api: PluginAPI) => Promise; export interface Plugin { name: string; plugin: PluginFunction; exports?: any; default?: Plugin; } export type RPCStreamHandler = ( stream: AsyncIterable ) => Promise;