123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- /// <reference types="node" />
- import { EventEmitter } from "events";
- import { IncomingMessage, Server as HttpServer } from "http";
- import { CookieSerializeOptions } from "cookie";
- import { CorsOptions, CorsOptionsDelegate } from "cors";
- declare type Transport = "polling" | "websocket";
- export interface AttachOptions {
- /**
- * name of the path to capture
- * @default "/engine.io"
- */
- path?: string;
- /**
- * destroy unhandled upgrade requests
- * @default true
- */
- destroyUpgrade?: boolean;
- /**
- * milliseconds after which unhandled requests are ended
- * @default 1000
- */
- destroyUpgradeTimeout?: number;
- }
- export interface ServerOptions {
- /**
- * how many ms without a pong packet to consider the connection closed
- * @default 20000
- */
- pingTimeout?: number;
- /**
- * how many ms before sending a new ping packet
- * @default 25000
- */
- pingInterval?: number;
- /**
- * how many ms before an uncompleted transport upgrade is cancelled
- * @default 10000
- */
- upgradeTimeout?: number;
- /**
- * how many bytes or characters a message can be, before closing the session (to avoid DoS).
- * @default 1e5 (100 KB)
- */
- maxHttpBufferSize?: number;
- /**
- * A function that receives a given handshake or upgrade request as its first parameter,
- * and can decide whether to continue or not. The second argument is a function that needs
- * to be called with the decided information: fn(err, success), where success is a boolean
- * value where false means that the request is rejected, and err is an error code.
- */
- allowRequest?: (req: IncomingMessage, fn: (err: string | null | undefined, success: boolean) => void) => void;
- /**
- * the low-level transports that are enabled
- * @default ["polling", "websocket"]
- */
- transports?: Transport[];
- /**
- * whether to allow transport upgrades
- * @default true
- */
- allowUpgrades?: boolean;
- /**
- * parameters of the WebSocket permessage-deflate extension (see ws module api docs). Set to false to disable.
- * @default false
- */
- perMessageDeflate?: boolean | object;
- /**
- * parameters of the http compression for the polling transports (see zlib api docs). Set to false to disable.
- * @default true
- */
- httpCompression?: boolean | object;
- /**
- * what WebSocket server implementation to use. Specified module must
- * conform to the ws interface (see ws module api docs).
- * An alternative c++ addon is also available by installing eiows module.
- *
- * @default `require("ws").Server`
- */
- wsEngine?: any;
- /**
- * an optional packet which will be concatenated to the handshake packet emitted by Engine.IO.
- */
- initialPacket?: any;
- /**
- * configuration of the cookie that contains the client sid to send as part of handshake response headers. This cookie
- * might be used for sticky-session. Defaults to not sending any cookie.
- * @default false
- */
- cookie?: (CookieSerializeOptions & {
- name: string;
- }) | boolean;
- /**
- * the options that will be forwarded to the cors module
- */
- cors?: CorsOptions | CorsOptionsDelegate;
- /**
- * whether to enable compatibility with Socket.IO v2 clients
- * @default false
- */
- allowEIO3?: boolean;
- }
- export declare abstract class BaseServer extends EventEmitter {
- opts: ServerOptions;
- protected clients: any;
- private clientsCount;
- protected corsMiddleware: Function;
- /**
- * Server constructor.
- *
- * @param {Object} opts - options
- * @api public
- */
- constructor(opts?: ServerOptions);
- protected abstract init(): any;
- /**
- * Returns a list of available transports for upgrade given a certain transport.
- *
- * @return {Array}
- * @api public
- */
- upgrades(transport: any): any;
- /**
- * Verifies a request.
- *
- * @param {http.IncomingMessage}
- * @return {Boolean} whether the request is valid
- * @api private
- */
- protected verify(req: any, upgrade: any, fn: any): any;
- /**
- * Closes all clients.
- *
- * @api public
- */
- close(): this;
- protected abstract cleanup(): any;
- /**
- * generate a socket id.
- * Overwrite this method to generate your custom socket id
- *
- * @param {Object} request object
- * @api public
- */
- generateId(req: any): any;
- /**
- * Handshakes a new client.
- *
- * @param {String} transport name
- * @param {Object} request object
- * @param {Function} closeConnection
- *
- * @api protected
- */
- protected handshake(transportName: any, req: any, closeConnection: any): Promise<any>;
- protected abstract createTransport(transportName: any, req: any): any;
- /**
- * Protocol errors mappings.
- */
- static errors: {
- UNKNOWN_TRANSPORT: number;
- UNKNOWN_SID: number;
- BAD_HANDSHAKE_METHOD: number;
- BAD_REQUEST: number;
- FORBIDDEN: number;
- UNSUPPORTED_PROTOCOL_VERSION: number;
- };
- static errorMessages: {
- 0: string;
- 1: string;
- 2: string;
- 3: string;
- 4: string;
- 5: string;
- };
- }
- export declare class Server extends BaseServer {
- httpServer?: HttpServer;
- private ws;
- /**
- * Initialize websocket server
- *
- * @api protected
- */
- protected init(): void;
- protected cleanup(): void;
- /**
- * Prepares a request by processing the query string.
- *
- * @api private
- */
- private prepare;
- protected createTransport(transportName: any, req: any): any;
- /**
- * Handles an Engine.IO HTTP request.
- *
- * @param {http.IncomingMessage} request
- * @param {http.ServerResponse|http.OutgoingMessage} response
- * @api public
- */
- handleRequest(req: any, res: any): void;
- /**
- * Handles an Engine.IO HTTP Upgrade.
- *
- * @api public
- */
- handleUpgrade(req: any, socket: any, upgradeHead: any): void;
- /**
- * Called upon a ws.io connection.
- *
- * @param {ws.Socket} websocket
- * @api private
- */
- private onWebSocket;
- /**
- * Captures upgrade requests for a http.Server.
- *
- * @param {http.Server} server
- * @param {Object} options
- * @api public
- */
- attach(server: HttpServer, options?: AttachOptions): void;
- }
- export {};
|