jsonrpctts
Version:
A TypeScript JSON-RPC 2.0 client with axios
77 lines (76 loc) • 2.2 kB
TypeScript
import { MethodName, RPCParams, RPCResult, RPCClientConfig } from "./types";
/**
* JSON-RPC 2.0 客户端实现
* @template T - 定义RPC方法的类型结构
*/
export declare class RPCClient<T> {
private id;
private config;
private abortController;
private pendingRequests;
/**
* 构造函数
* @param config 客户端配置
* {
* endpoint: string, // RPC服务器地址
* timeout?: number, // 超时时间(毫秒)
* headers?: Record<string, string> // 自定义请求头
* }
*/
constructor(config: RPCClientConfig);
/**
* 执行RPC调用
* @param method RPC方法名
* @param params 方法参数
* @returns 返回RPC调用结果的Promise
*/
call<M extends MethodName<T>>(method: M, ...params: RPCParams<T, M>): Promise<RPCResult<T, M>>;
/**
* 取消所有进行中的请求
*/
abortAll(): void;
/**
* 处理HTTP响应并提取RPC结果
* @param response Axios响应对象
* @param request 原始RPC请求
* @returns 解析后的结果
* @throws 当响应不符合规范时抛出RPCError
*/
private processResponse;
/**
* 处理JSON-RPC错误响应
* @param error JSON-RPC错误对象
* @throws 根据错误类型抛出BackendError或RPCError
*/
private handleErrorResponse;
/**
* 解析JSON-RPC响应
* @param response 原始响应数据
* @returns 解析后的JSON-RPC响应
* @throws 当响应格式无效时抛出RPCError
*/
private parseJSONResponse;
/**
* 处理请求过程中的错误
* @param error 捕获的错误对象
* @returns 适当封装的错误对象
*/
private handleError;
/**
* 处理Axios特有的错误
* @param error Axios错误对象
* @returns 封装的网络或RPC错误
*/
private handleAxiosError;
/**
* 验证参数是否符合JSON序列化要求
* @param params 参数数组
* @throws 当参数无效时抛出RPCError
*/
private validateParams;
/**
* 生成下一个请求ID
* @returns 唯一且没有冲突的请求ID
*/
private nextID;
}