UNPKG

socket-actions

Version:

Websocket implementation to simplify communication and queueing of user actions.

98 lines (93 loc) 4.16 kB
/// <reference types="node" /> import ws, { ServerOptions } from 'ws'; import { IncomingMessage, Server } from 'http'; type DataType = Record<string, any>; type ClientSocket = ws & { userData: DataType; }; type MessageObject = { path: string; data: DataType; requestId?: string; }; type sendMessageToAllOptions = { exceptions: ClientSocket[] | string[]; }; type onConnection = (socket: ClientSocket, req: IncomingMessage) => Promise<void> | void; type onAuth = (socket: ClientSocket, message: Buffer) => Promise<void> | void; type onAuthSuccess = (socket: ClientSocket, message: Buffer) => Promise<void> | void; type onAuthFailure = (socket: ClientSocket, error: Error, message: Buffer) => Promise<void> | void; type onMessage = (socket: ClientSocket, messageObject: MessageObject) => Promise<void> | void; type onClose = (socket: ClientSocket) => Promise<void> | void; type onError = (socket: ClientSocket, err: Error) => Promise<void> | void; type SocketOptions = { serverOptions?: ServerOptions; actionsPath?: string; actions?: Record<string, Action>; disableAuthentication?: boolean; onConnection?: onConnection; onAuth?: onAuth; onAuthSuccess?: onAuthSuccess; onAuthFailure?: onAuthFailure; onClose?: onClose; onError?: onError; onMessage?: onMessage; }; declare class Socket { protected _server: Server | undefined; protected readonly onConnection: onConnection; protected readonly onAuth: onAuth; protected readonly onAuthSuccess: onAuthSuccess; protected readonly onAuthFailure: onAuthFailure; protected readonly onClose: onClose; protected readonly onError: onError; protected readonly onMessage: onMessage; protected readonly Actions: Record<string, Action>; protected readonly disableAuthentication: boolean; protected readonly _activeClients: ClientSocket[]; private wsInstance; private readonly serverOptions; constructor(options: SocketOptions); initActions({ actions, actionsPath }: SocketOptions): Promise<void>; start(): Promise<void>; restart(): Promise<void>; protected prepareAllActions(): Promise<void>; protected connecting(socket: ClientSocket, req: IncomingMessage): Promise<void>; protected authenticating(socket: ClientSocket, message: Buffer): Promise<void>; protected receivingMessage(socket: ClientSocket, message: string): Promise<void>; protected reportingError(socket: ClientSocket, err: Error): Promise<void>; protected closing(socket: ClientSocket): Promise<void>; closeSocket(cb?: ((err?: Error | undefined) => void) | undefined): void; close(socketCallback?: ((err?: Error | undefined) => void) | undefined, expressCallback?: (err?: Error | undefined) => void): void; get activeClients(): DataType[]; get server(): Server | undefined; sendMessage(socket: ClientSocket, data: DataType | string): void; sendMessageById(id: string, data: DataType | string): void; sendMessageToAll(data: DataType | string, { exceptions }: sendMessageToAllOptions): void; } type ActionParameters = { socket: ClientSocket; userData: DataType; requestId: string | undefined; data: DataType; }; type OnRunParameters = { socket: ClientSocket; userData: DataType; data: DataType; respond: (data: DataType) => void; }; declare abstract class Action { protected server: Socket | null; prepareAction(server: Socket): Promise<void>; protected onCheckPermissions(_parameters: ActionParameters): Promise<void> | void; protected onError(_parameters: ActionParameters, err: unknown): Promise<void> | void; run(parameters: ActionParameters): Promise<void>; abstract onRun(data: OnRunParameters): Promise<void> | void; } declare const _default: { default: typeof Socket; Action: typeof Action; Socket: typeof Socket; }; export { Action, type ActionParameters, type ClientSocket, type DataType, type MessageObject, type OnRunParameters, Socket, type SocketOptions, _default as default, type onAuth, type onAuthFailure, type onAuthSuccess, type onClose, type onConnection, type onError, type onMessage };