export type MethodName<T> = keyof {
    [K in keyof T as T[K] extends (...args: any) => any ? K : never]: T[K];
};
export type RPCParams<T, M extends MethodName<T>> = T[M] extends (...args: infer P) => any ? P[0] extends undefined ? never : P : never;
export type RPCResult<T, M extends MethodName<T>> = T[M] extends (...args: any) => infer R ? R extends Promise<infer U> ? U : R : never;
export interface RPCClientConfig {
    endpoint: string;
    headers?: Record<string, string>;
    timeout?: number;
}
export interface JSONRPCRequest {
    jsonrpc: "2.0";
    method: string;
    params?: unknown;
    id: number;
}
export interface JSONRPCResponse<T = unknown> {
    jsonrpc: "2.0";
    id: number | null;
    result?: T;
    error?: JSONRPCError;
}
export interface JSONRPCError {
    code: number;
    message: string;
    data?: unknown;
}
