/// /// import * as bunyan from 'bunyan'; import * as Koa from 'koa'; import { VError } from 'verror'; /** * RPC specific error codes, application errors should not use these. */ export declare enum JsonRpcErrorCode { ParseError = -32700, InvalidRequest = -32600, MethodNotFound = -32601, InvalidParams = -32602, InternalError = -32603, } export declare type JsonRpcId = string | number | null; export declare class JsonRpcError extends VError { readonly name: string; readonly code: number; constructor(code: number, ...params: any[]); toJSON(): { code: number; data: any; message: string; } | { code: number; message: string; data?: undefined; }; } export interface JsonRpcResponseOptions { error?: JsonRpcError; request?: JsonRpcRequest; result?: any; time?: number; } export declare class JsonRpcResponse { readonly jsonrpc: string; readonly id: JsonRpcId; readonly error?: JsonRpcError; readonly request?: JsonRpcRequest; readonly result?: any; readonly time?: number; constructor({error, request, result, time}: JsonRpcResponseOptions); toJSON(): { jsonrpc: string; id: string | number | null; error: JsonRpcError; result?: undefined; } | { jsonrpc: string; id: string | number | null; result: any; error?: undefined; }; } export declare class JsonRpcRequest { readonly jsonrpc: string; readonly id: JsonRpcId; readonly method: string; readonly params: any; static from(data: any): JsonRpcRequest; constructor(jsonrpc: string, id: JsonRpcId, method: string, params?: any); } export declare function rpcAssert(value: any, message?: string): void; export declare function rpcAssertEqual(actual: any, expected: any, message?: string): void; export interface JsonRpcMethodContext { ctx: Koa.Context; log: bunyan; request: JsonRpcRequest; assert: typeof rpcAssert; assertEqual: typeof rpcAssertEqual; } export declare type JsonRpcMethod = (this: JsonRpcMethodContext, ...params) => any; export declare class JsonRpc { namespace: string | undefined; readonly methods: { [name: string]: { method: JsonRpcMethod; params: string[]; }; }; /** * @param namespace Optional namespace to add to all methods. */ constructor(namespace?: string | undefined); /** * Register a rpc method. * @param name Method name. * @param method Method implementation. */ register(name: string, method: JsonRpcMethod): void; middleware: (ctx: Koa.Context, next: () => Promise) => Promise; private handleRequest; }