UNPKG

11.9 kBTypeScriptView Raw
1import net = require('net');
2import tls = require('tls');
3import https = require('https');
4import http = require('http');
5import events = require('events');
6import Stream = require('stream');
7import WebSocket = require('isomorphic-ws');
8import * as connect from 'connect';
9
10type ConstructorOf<Proto, CtorArgs extends any[]> = {
11 (...args: CtorArgs): Proto;
12 new(...args: CtorArgs): Proto;
13 prototype: Proto;
14}
15
16export interface UtilsJSONParseOptions {
17 reviver?: Function;
18}
19
20export interface UtilsJSONStringifyOptions {
21 replacer?: Function;
22}
23
24export interface GenerateRequestOptions {
25 version?: number;
26 notificationIdNull?: boolean;
27 generator?: IDGenerator;
28}
29
30export declare class Utils {
31
32 static request(method: string, params: RequestParamsLike, options?: GenerateRequestOptions): JSONRPCRequest;
33 static request(method: string, params: RequestParamsLike, id?: JSONRPCIDLike | null | undefined, options?: GenerateRequestOptions): JSONRPCRequest;
34
35 static response(error: JSONRPCError | undefined | null, result: JSONRPCResultLike | undefined | null, id: JSONRPCIDLike | null | undefined, version?: number): JSONRPCVersionTwoRequest;
36 static response(error: JSONRPCError | undefined | null, result: JSONRPCResultLike | undefined | null, id: JSONRPCIDLike | null | undefined, version:2): JSONRPCVersionTwoRequest;
37 static response(error: JSONRPCError | undefined | null, result: JSONRPCResultLike | undefined | null, id: JSONRPCIDLike | null | undefined, version:1): JSONRPCVersionOneRequest;
38
39 static generateId(): string;
40
41 static merge(...objs: object[]): object;
42
43 static parseStream(stream:Stream, options:UtilsJSONParseOptions, onRequest: (err?:Error, data?:any) => void): void;
44
45 static parseBody(stream:Stream, options:UtilsJSONParseOptions, callback: (err?:Error, obj?:any) => void): void;
46
47 static getHttpListener(self:http.Server, server:Server): Function;
48
49 static isContentType(request:http.IncomingMessage, typ:string): boolean;
50
51 static isMethod(request:http.IncomingMessage, method:string): boolean;
52
53 static walk(obj:object, key:string, fn: (key:string, value:any) => any): object;
54
55 static JSON: UtilsJSON;
56
57 static Request: UtilsRequest;
58
59 static Response: UtilsResponse;
60
61}
62
63// lowercase Utils
64export declare class utils extends Utils {
65}
66
67type UtilsJSON = {
68 parse(str:string, options:UtilsJSONParseOptions | null | undefined, callback: (err?:Error, obj?:object) => void):void;
69 stringify(obj:object, options:UtilsJSONStringifyOptions | null | undefined, callback: (err?:Error, str?:string) => void):void;
70}
71
72type UtilsRequest = {
73 isBatch(request:any): boolean;
74 isNotification(request:any): boolean;
75 isValidVersionTwoRequest(request:any): boolean;
76 isValidVersionOneRequest(request:any): boolean;
77 isValidRequest(request:any, version?:number): boolean;
78}
79
80type UtilsResponse = {
81 isValidError(error:any, version?:number): boolean;
82 isValidResponse(response:any, version?:number): boolean;
83}
84
85export type RequestParamsLike = Array<any> | object | undefined;
86
87export interface JSONRPCError {
88 code: number;
89 message: string;
90 data?: object;
91}
92
93export type JSONRPCErrorLike = Error | JSONRPCError;
94
95export interface JSONRPCVersionOneRequest {
96 method: string;
97 params: Array<any>;
98 id: JSONRPCIDLike;
99}
100
101export interface JSONRPCVersionTwoRequest {
102 jsonrpc: string;
103 method: string;
104 params: RequestParamsLike;
105 id?: JSONRPCIDLike | null;
106}
107
108export type JSONRPCRequest = JSONRPCVersionOneRequest | JSONRPCVersionTwoRequest;
109
110export interface JSONRPCVersionOneResponseWithResult {
111 result: any;
112 error: null;
113 id: any;
114}
115
116export interface JSONRPCVersionOneResponseWithError {
117 result: null;
118 error: object;
119 id: any;
120}
121
122export type JSONRPCVersionOneResponse = JSONRPCVersionOneResponseWithError | JSONRPCVersionOneResponseWithResult;
123
124export interface JSONRPCVersionTwoResponseWithResult {
125 jsonrpc: string;
126 result: any;
127 id: JSONRPCIDLike | null;
128}
129
130export interface JSONRPCVersionTwoResponseWithError {
131 jsonrpc: string;
132 error: JSONRPCError;
133 id: JSONRPCIDLike | null;
134}
135
136export type JSONRPCVersionTwoResponse = JSONRPCVersionTwoResponseWithResult | JSONRPCVersionTwoResponseWithError;
137
138export type JSONRPCResponseWithError = JSONRPCVersionOneResponseWithError | JSONRPCVersionTwoResponseWithError;
139export type JSONRPCResponseWithResult = JSONRPCVersionOneResponseWithResult | JSONRPCVersionTwoResponseWithResult;
140export type JSONRPCResponse = JSONRPCVersionOneResponse | JSONRPCVersionTwoResponse;
141
142export type JSONRPCIDLike = number | string;
143
144export type JSONRPCRequestLike = JSONRPCRequest | string;
145
146export type JSONRPCResultLike = any;
147
148export interface JSONRPCCallbackTypePlain {
149 (err?: JSONRPCErrorLike | null, result?: JSONRPCResultLike): void
150}
151
152export interface JSONRPCCallbackTypeSugared {
153 (err?: Error | null, error?: JSONRPCErrorLike, result?: JSONRPCResultLike): void
154}
155
156type JSONRPCCallbackType = JSONRPCCallbackTypePlain | JSONRPCCallbackTypeSugared;
157
158export interface JSONRPCCallbackTypeBatchPlain {
159 (err: JSONRPCErrorLike, results?: Array<JSONRPCResultLike>): void
160}
161
162export interface JSONRPCCallbackTypeBatchSugared {
163 (err: Error, errors?: Array<JSONRPCErrorLike>, results?: Array<JSONRPCResultLike>): void
164}
165
166type JSONRPCCallbackTypeBatch = JSONRPCCallbackTypeBatchPlain | JSONRPCCallbackTypeBatchSugared;
167
168export interface MethodHandler {
169 (this:Server, args:RequestParamsLike, callback:JSONRPCCallbackTypePlain): void;
170}
171
172export interface MethodHandlerContext {
173 (this:Server, args:RequestParamsLike, context:object, callback:JSONRPCCallbackTypePlain): void;
174}
175
176export type MethodHandlerType = MethodHandlerContext | MethodHandler;
177export type MethodOptionsParamsLike = Array<any> | Object | object;
178
179export interface MethodOptions {
180 handler?: MethodHandlerType;
181 useContext?: boolean;
182 params?: MethodOptionsParamsLike;
183}
184
185export type MethodExecuteCallbackType = {
186 (err?: Error | null, result?: JSONRPCResultLike): void
187}
188
189type MethodConstructor = ConstructorOf<Method, [options: MethodOptions] | [handler?: MethodHandlerType, options?: MethodOptions]>;
190
191export interface Method {
192 getHandler(): MethodHandlerType;
193 setHandler(handler: MethodHandlerType): void;
194 execute(server: Server, requestParams: RequestParamsLike, callback: MethodExecuteCallbackType): any | Promise<any>;
195 execute(server: Server, requestParams: RequestParamsLike, context:object, callback: MethodExecuteCallbackType): any | Promise<any>;
196}
197
198export declare const Method: MethodConstructor;
199
200// lowercase Method
201export type method = Method;
202export declare const method: MethodConstructor;
203
204export type MethodLike = Function | Method | Client;
205
206export type ServerRouterFunction = (this: Server, method: string, params: RequestParamsLike) => MethodLike;
207
208export interface ServerOptions {
209 useContext?: boolean;
210 params?: MethodOptionsParamsLike;
211 version?: number;
212 reviver?: JSONParseReviver;
213 replacer?: JSONStringifyReplacer;
214 encoding?: string;
215 router?: ServerRouterFunction;
216 methodConstructor?: Function;
217}
218
219export type ServerCallCallbackType = {
220 (err?: JSONRPCResponseWithError | null, result?: JSONRPCResponseWithResult): void
221}
222
223export interface MethodMap { [methodName:string]: Method }
224
225type ServerConstructor = ConstructorOf<Server, [methods?: {[methodName: string]: MethodLike}, options?: ServerOptions]> & {
226 errors: {[errorName: string]: number};
227 errorMessages: {[errorMessage: string]: string};
228 interfaces: {[interfaces: string]: Function};
229}
230
231export interface Server extends events.EventEmitter {
232 _methods: MethodMap;
233 options: ServerOptions;
234 errorMessages: {[errorMessage: string]: string};
235
236 http(options?: HttpServerOptions): HttpServer;
237 https(options?: HttpsServerOptions): HttpsServer;
238 tcp(options?: TcpServerOptions): TcpServer;
239 tls(options?: TlsServerOptions): TlsServer;
240 websocket(options?: WebsocketServerOptions): WebsocketServer;
241 middleware(options?: MiddlewareServerOptions): connect.HandleFunction;
242
243 method(name: string, definition: MethodLike): void;
244 methods(methods: {[methodName: string]: MethodLike}): void;
245 hasMethod(name: string): boolean;
246 removeMethod(name: string): void;
247 getMethod(name: string): MethodLike;
248 error(code?: number, message?: string, data?: object): JSONRPCError;
249 call(request: JSONRPCRequestLike | Array<JSONRPCRequestLike>, originalCallback?: ServerCallCallbackType): void;
250 call(request: JSONRPCRequestLike | Array<JSONRPCRequestLike>, context: object, originalCallback?: ServerCallCallbackType): void;
251 callp(request: JSONRPCRequestLike | Array<JSONRPCRequestLike>, context?: object): Promise<JSONRPCResultLike>;
252}
253
254export declare const Server: ServerConstructor;
255
256// lowercase Server
257export type server = Server;
258export declare const server: ServerConstructor;
259
260export interface MiddlewareServerOptions extends ServerOptions {
261 end?: boolean;
262}
263
264export interface HttpServerOptions extends ServerOptions {
265}
266
267declare class HttpServer extends http.Server {
268 constructor(server: Server, options?: HttpServerOptions);
269}
270
271export interface HttpsServerOptions extends ServerOptions, https.ServerOptions {
272}
273
274declare class HttpsServer extends https.Server {
275 constructor(server: Server, options?: HttpsServerOptions);
276}
277
278export interface TcpServerOptions extends ServerOptions {
279}
280
281declare class TcpServer extends net.Server {
282 constructor(server: Server, options?: TcpServerOptions);
283}
284
285export interface TlsServerOptions extends tls.TlsOptions {
286}
287
288declare class TlsServer extends tls.Server {
289 constructor(server: Server, options?: TlsServerOptions);
290}
291
292export interface WebsocketServerOptions extends ServerOptions, WebSocket.ServerOptions {
293 wss?: WebSocket.Server;
294}
295
296declare class WebsocketServer {
297 constructor(server: Server, options?: WebsocketServerOptions);
298}
299
300type JSONParseReviver = (key: string, value: any) => any;
301type JSONStringifyReplacer = (key: string, value: any) => any;
302
303type IDGenerator = () => JSONRPCIDLike;
304
305export interface ClientOptions {
306 version?: number;
307 reviver?: JSONParseReviver;
308 replacer?: JSONStringifyReplacer;
309 generator?: IDGenerator;
310 notificationIdNull?: boolean;
311}
312
313export interface HttpClientOptions extends ClientOptions, http.RequestOptions {
314}
315
316declare class HttpClient extends Client {
317 constructor(options?: HttpClientOptions);
318}
319
320export interface TlsClientOptions extends ClientOptions, tls.ConnectionOptions {
321}
322
323declare class TlsClient extends Client {
324 constructor(options?: TlsClientOptions);
325}
326
327export interface TcpClientOptions extends ClientOptions, net.TcpSocketConnectOpts {
328}
329
330declare class TcpClient extends Client {
331 constructor(options?: TcpClientOptions);
332}
333
334export interface HttpsClientOptions extends ClientOptions, https.RequestOptions {
335}
336
337declare class HttpsClient extends Client {
338 constructor(options?: HttpsClientOptions);
339}
340
341export interface WebsocketClientOptions extends ClientOptions {
342 url?: string;
343 ws?: WebSocket;
344 timeout?: number;
345}
346
347declare class WebsocketClient extends Client {
348 constructor(options?: WebsocketClientOptions);
349}
350
351type ClientConstructor = ConstructorOf<Client, [options: ClientOptions] | [server: Server, options?: ClientOptions]> & {
352 http(options?: HttpClientOptions): HttpClient;
353 https(options?: HttpsClientOptions): HttpsClient;
354 tcp(options?: TcpClientOptions): TcpClient;
355 tls(options?: TlsClientOptions): TlsClient;
356 websocket(options?: WebsocketClientOptions): WebsocketClient;
357}
358
359export interface Client extends events.EventEmitter {
360 request(method: string, params: RequestParamsLike, id?: string | null, callback?: JSONRPCCallbackType): JSONRPCRequest;
361 request(method: string, params: RequestParamsLike, callback?: JSONRPCCallbackType): JSONRPCRequest;
362 request(method: Array<JSONRPCRequestLike>, callback: JSONRPCCallbackTypeBatch): Array<JSONRPCRequest>;
363}
364
365export declare const Client: ClientConstructor;
366
367// lowercase Client
368export type client = Client;
369export declare const client: ClientConstructor