import { Socket } from 'socket.io'; import { Configuration } from '@spinajs/configuration'; import { AsyncService, Constructor, IContainer } from '@spinajs/di'; import { IRouteParameter, ParameterType } from '@spinajs/http'; import { Log } from '@spinajs/log-common'; import { DataValidator } from '@spinajs/validation'; /** * Middleware used server - wide ( for all incoming socket connections ) */ export declare abstract class SocketServerMiddleware extends AsyncService { /** * Execution order, ascending execution ( lower first ) */ abstract get Order(): number; /** * * Middleware func run for ALL sockets before message is proceeded * Example for auth middleware or logging, etc. * * @param socket * @param next */ abstract before(socket: Socket): Promise; /** * * Executed on connection event * * @param socket */ abstract onConnect(socket: Socket): Promise; /** * * Executed on disconnect event * * @param socket */ abstract onDisconnect(socket: Socket, reason: string): Promise; } /** * Middleware for specific socket */ export declare abstract class SocketMiddleware extends AsyncService { /** * * Middleware func before message is proceeded for this socket * Example for auth middleware * * @param socket * @param next */ abstract execute(socket: Socket, event: string, args: any[]): Promise; } export interface ISocketMiddlewareDescriptor { Type: Constructor; Options: any[]; } /** * Describes parameters passed to socket event */ export interface ISocketEventParameter extends IRouteParameter { } export interface ISocketEvent { /** * Event name */ Name: string; Method: string; Parameters: Map; Schema: any; } /** * Descriptor for controller */ export interface ISocketControllerDescriptor { /** * Controller routes */ Events: Map; /** * Controller - wise middlewares */ Middlewares: ISocketMiddlewareDescriptor[]; /** * Sockets room ( optional ), if not set "/" is set ( main room ) */ Room?: string; } /** * Route action call spefici data. Used to pass data / arguments when parsing * action parameters for specific call. Eg. to parse form data, and extract it * as different arguments. */ export interface ISocketEventCall { Payload: any; } export interface ISocketEventArgsResult { CallData: ISocketEventCall; Args: any; } export interface ISocketRouteArgs { SupportedType: ParameterType | string; extract(callData: ISocketEventCall, routeParameter: IRouteParameter, incomingArgs: any[], socket: Socket): Promise; } export declare abstract class SocketRouteArgs implements ISocketRouteArgs { protected Validator: DataValidator; abstract get SupportedType(): ParameterType | string; abstract extract(callData: ISocketEventCall, routeParameter: IRouteParameter, incomingArgs: any[], socket: Socket): Promise; protected tryHydrateParam(arg: any, routeParameter: IRouteParameter, event: ISocketEvent): Promise; protected tryHydrateObject(arg: any, route: IRouteParameter, hydrator: any): Promise; protected getHydrator(param: IRouteParameter): any; protected tryExtractObject(arg: any, param: IRouteParameter): any; protected isRuntimeType(param: IRouteParameter): boolean; protected fromRuntimeType(param: IRouteParameter, arg: any): any; } export declare abstract class SocketController extends AsyncService { /** * Event method getter */ [action: string]: any; /** * Controller descriptor */ get Descriptor(): ISocketControllerDescriptor; protected _container: IContainer; protected _log: Log; protected _cfg: Configuration; protected _middlewares: SocketMiddleware[]; resolve(): Promise; attach(socket: Socket): Promise; } //# sourceMappingURL=interfaces.d.ts.map