UNPKG

picorpc

Version:

A tiny RPC library and spec, inspired by JSON-RPC 2.0 and tRPC.

76 lines (75 loc) 2.29 kB
import type Request from './objects/request'; import type Response from './objects/response'; type IContext = { [K in string]: unknown; }; type IProcedures = { [Method in string]: (...params: any[]) => any; }; type IRequest = { version: string; id: string; method: string; params?: unknown[]; context?: IContext; }; type IResponseSuccess = { version: string; id: string; result: unknown; }; type IResponseError = { version: string; id: string; error: { code: number; message: string; data?: unknown; }; }; type IResponse = IResponseSuccess | IResponseError; type IRequestHandler = (request: IRequest) => Promise<Response>; type IResponseHandler = (response: IResponse) => void; type IAbstractClientOptions = { context?: () => IContext; handler: IRequestHandler; }; type IAbstractServerOptions<T extends IProcedures> = { procedures: T; handler: IResponseHandler; }; type IAbstractClient<T extends IProcedures> = { [Method in keyof T]: (...params: Parameters<T[Method]>) => Request<ReturnType<T[Method]>>; }; type IAbstractServer = { handle: (request: IRequest) => Promise<Response>; }; type IMemoryClientOptions = { context?: () => IContext; server: IMemoryServer; }; type IMemoryServerOptions<T extends IProcedures> = { procedures: T; }; type IMemoryClient<T extends IProcedures> = IAbstractClient<T>; type IMemoryServer = IAbstractServer; type IHttpClientOptions = { context?: () => IContext; serializer?: (value: unknown) => string; deserializer?: (value: string) => any; url: string; }; type IHttpServerOptions<T extends IProcedures> = { serializer?: (value: unknown) => string; deserializer?: (value: string) => any; port: number; procedures: T; }; type IHttpClient<T extends IProcedures> = IAbstractClient<T>; type IHttpServer = IAbstractServer & { close: () => void; }; export type { IContext, IProcedures, IRequest, IResponse, IRequestHandler, IResponseHandler }; export type { IAbstractClientOptions, IAbstractServerOptions, IAbstractClient, IAbstractServer }; export type { IMemoryClientOptions, IMemoryServerOptions, IMemoryClient, IMemoryServer }; export type { IHttpClientOptions, IHttpServerOptions, IHttpClient, IHttpServer };