UNPKG

@akala/json-rpc-ws

Version:

json-rpc websocket transport

73 lines (72 loc) 2.54 kB
import { Connection, type Handler, type PayloadDataType, type Parent, Payload } from './shared-connection.js'; import type { SocketAdapter } from '@akala/core'; /** * Base functionality shared by client and server * * @constructor * @public */ export declare abstract class Base<TStreamable, TConnection extends Connection<TStreamable> = Connection<TStreamable>> implements Parent<TStreamable, TConnection> { type: string; constructor(type: string); id: `${string}-${string}-${string}-${string}-${string}`; browser: boolean; private requestHandlers; protected connections: { [id: string | number]: Connection<TStreamable>; }; /** * Add a handler function for a given method * * @param {String} method - name of the method to add handler for. * @param {function} handler - function to be passed params for given method. * @todo enforce handler w/ two-param callback * @public */ expose<TParamType extends PayloadDataType<TStreamable>, TReplyType extends PayloadDataType<TStreamable>>(method: string, handler: Handler<TConnection, TStreamable, TParamType, TReplyType>): void; /** * Connected event handler * * @param {Object} socket - new socket connection * @private */ connected(socket: SocketAdapter<Payload<TStreamable>>): void; abstract connection(socket: SocketAdapter<Payload<TStreamable>>): Connection<TStreamable>; /** * Disconnected event handler * * @param {Object} connection - connection object that has been closed * @private */ disconnected(connection: Connection<TStreamable>): void; /** * Test if a handler exists for a given method * * @param {String} method - name of method * @returns {Boolean} whether or not there are any handlers for the given method * @public */ hasHandler(method: string): boolean; /** * Get handler for a given method * * @param {String} method - name of method * @returns {Array} - handler for given method * @public */ getHandler(method: string): Handler<TConnection, TStreamable, PayloadDataType<TStreamable>, PayloadDataType<TStreamable>>; /** * Get a connection by id * * @param {id} id - id of the connection to get * @returns {Connection} - Connection * @public */ getConnection(id: string | number): Connection<TStreamable>; /** * Shut down all existing connections * * @public */ hangup(): void; }