UNPKG

15.7 kBTypeScriptView Raw
1// Type definitions for ws 8.2
2// Project: https://github.com/websockets/ws
3// Definitions by: Paul Loyd <https://github.com/loyd>
4// Margus Lamp <https://github.com/mlamp>
5// Philippe D'Alva <https://github.com/TitaneBoy>
6// reduckted <https://github.com/reduckted>
7// teidesu <https://github.com/teidesu>
8// Bartosz Wojtkowiak <https://github.com/wojtkowiak>
9// Kyle Hensel <https://github.com/k-yle>
10// Samuel Skeen <https://github.com/cwadrupldijjit>
11// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
12
13/// <reference types="node" />
14
15import { EventEmitter } from "events";
16import {
17 Agent,
18 ClientRequest,
19 ClientRequestArgs,
20 IncomingMessage,
21 OutgoingHttpHeaders,
22 Server as HTTPServer,
23} from "http";
24import { Server as HTTPSServer } from "https";
25import { Duplex, DuplexOptions } from "stream";
26import { SecureContextOptions } from "tls";
27import { URL } from "url";
28import { ZlibOptions } from "zlib";
29
30// WebSocket socket.
31declare class WebSocket extends EventEmitter {
32 /** The connection is not yet open. */
33 static readonly CONNECTING: 0;
34 /** The connection is open and ready to communicate. */
35 static readonly OPEN: 1;
36 /** The connection is in the process of closing. */
37 static readonly CLOSING: 2;
38 /** The connection is closed. */
39 static readonly CLOSED: 3;
40
41 binaryType: "nodebuffer" | "arraybuffer" | "fragments";
42 readonly bufferedAmount: number;
43 readonly extensions: string;
44 readonly protocol: string;
45 /** The current state of the connection */
46 readonly readyState:
47 | typeof WebSocket.CONNECTING
48 | typeof WebSocket.OPEN
49 | typeof WebSocket.CLOSING
50 | typeof WebSocket.CLOSED;
51 readonly url: string;
52
53 /** The connection is not yet open. */
54 readonly CONNECTING: 0;
55 /** The connection is open and ready to communicate. */
56 readonly OPEN: 1;
57 /** The connection is in the process of closing. */
58 readonly CLOSING: 2;
59 /** The connection is closed. */
60 readonly CLOSED: 3;
61
62 onopen: (event: WebSocket.Event) => void;
63 onerror: (event: WebSocket.ErrorEvent) => void;
64 onclose: (event: WebSocket.CloseEvent) => void;
65 onmessage: (event: WebSocket.MessageEvent) => void;
66
67 constructor(address: string | URL, options?: WebSocket.ClientOptions | ClientRequestArgs);
68 constructor(
69 address: string | URL,
70 protocols?: string | string[],
71 options?: WebSocket.ClientOptions | ClientRequestArgs,
72 );
73
74 close(code?: number, data?: string | Buffer): void;
75 ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
76 pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
77 send(data: any, cb?: (err?: Error) => void): void;
78 send(
79 data: any,
80 options: { mask?: boolean | undefined; binary?: boolean | undefined; compress?: boolean | undefined; fin?: boolean | undefined },
81 cb?: (err?: Error) => void,
82 ): void;
83 terminate(): void;
84
85 // HTML5 WebSocket events
86 addEventListener(
87 method: "message",
88 cb: (event: WebSocket.MessageEvent) => void,
89 options?: WebSocket.EventListenerOptions,
90 ): void;
91 addEventListener(
92 method: "close",
93 cb: (event: WebSocket.CloseEvent) => void,
94 options?: WebSocket.EventListenerOptions,
95 ): void;
96 addEventListener(
97 method: "error",
98 cb: (event: WebSocket.ErrorEvent) => void,
99 options?: WebSocket.EventListenerOptions,
100 ): void;
101 addEventListener(
102 method: "open",
103 cb: (event: WebSocket.Event) => void,
104 options?: WebSocket.EventListenerOptions,
105 ): void;
106
107 removeEventListener(method: "message", cb: (event: WebSocket.MessageEvent) => void): void;
108 removeEventListener(method: "close", cb: (event: WebSocket.CloseEvent) => void): void;
109 removeEventListener(method: "error", cb: (event: WebSocket.ErrorEvent) => void): void;
110 removeEventListener(method: "open", cb: (event: WebSocket.Event) => void): void;
111
112 // Events
113 on(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
114 on(event: "error", listener: (this: WebSocket, err: Error) => void): this;
115 on(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
116 on(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
117 on(event: "open", listener: (this: WebSocket) => void): this;
118 on(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
119 on(
120 event: "unexpected-response",
121 listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
122 ): this;
123 on(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
124
125 once(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
126 once(event: "error", listener: (this: WebSocket, err: Error) => void): this;
127 once(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
128 once(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
129 once(event: "open", listener: (this: WebSocket) => void): this;
130 once(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
131 once(
132 event: "unexpected-response",
133 listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
134 ): this;
135 once(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
136
137 off(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
138 off(event: "error", listener: (this: WebSocket, err: Error) => void): this;
139 off(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
140 off(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
141 off(event: "open", listener: (this: WebSocket) => void): this;
142 off(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
143 off(
144 event: "unexpected-response",
145 listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
146 ): this;
147 off(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
148
149 addListener(event: "close", listener: (code: number, reason: Buffer) => void): this;
150 addListener(event: "error", listener: (err: Error) => void): this;
151 addListener(event: "upgrade", listener: (request: IncomingMessage) => void): this;
152 addListener(event: "message", listener: (data: WebSocket.RawData, isBinary: boolean) => void): this;
153 addListener(event: "open", listener: () => void): this;
154 addListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
155 addListener(
156 event: "unexpected-response",
157 listener: (request: ClientRequest, response: IncomingMessage) => void,
158 ): this;
159 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
160
161 removeListener(event: "close", listener: (code: number, reason: Buffer) => void): this;
162 removeListener(event: "error", listener: (err: Error) => void): this;
163 removeListener(event: "upgrade", listener: (request: IncomingMessage) => void): this;
164 removeListener(event: "message", listener: (data: WebSocket.RawData, isBinary: boolean) => void): this;
165 removeListener(event: "open", listener: () => void): this;
166 removeListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
167 removeListener(
168 event: "unexpected-response",
169 listener: (request: ClientRequest, response: IncomingMessage) => void,
170 ): this;
171 removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
172}
173
174declare const WebSocketAlias: typeof WebSocket;
175interface WebSocketAlias extends WebSocket {} // tslint:disable-line no-empty-interface
176
177declare namespace WebSocket {
178 /**
179 * Data represents the raw message payload received over the WebSocket.
180 */
181 type RawData = Buffer | ArrayBuffer | Buffer[];
182
183 /**
184 * Data represents the message payload received over the WebSocket.
185 */
186 type Data = string | Buffer | ArrayBuffer | Buffer[];
187
188 /**
189 * CertMeta represents the accepted types for certificate & key data.
190 */
191 type CertMeta = string | string[] | Buffer | Buffer[];
192
193 /**
194 * VerifyClientCallbackSync is a synchronous callback used to inspect the
195 * incoming message. The return value (boolean) of the function determines
196 * whether or not to accept the handshake.
197 */
198 type VerifyClientCallbackSync = (info: { origin: string; secure: boolean; req: IncomingMessage }) => boolean;
199
200 /**
201 * VerifyClientCallbackAsync is an asynchronous callback used to inspect the
202 * incoming message. The return value (boolean) of the function determines
203 * whether or not to accept the handshake.
204 */
205 type VerifyClientCallbackAsync = (
206 info: { origin: string; secure: boolean; req: IncomingMessage },
207 callback: (res: boolean, code?: number, message?: string, headers?: OutgoingHttpHeaders) => void,
208 ) => void;
209
210 interface ClientOptions extends SecureContextOptions {
211 protocol?: string | undefined;
212 followRedirects?: boolean | undefined;
213 handshakeTimeout?: number | undefined;
214 maxRedirects?: number | undefined;
215 perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
216 localAddress?: string | undefined;
217 protocolVersion?: number | undefined;
218 headers?: { [key: string]: string } | undefined;
219 origin?: string | undefined;
220 agent?: Agent | undefined;
221 host?: string | undefined;
222 family?: number | undefined;
223 checkServerIdentity?(servername: string, cert: CertMeta): boolean;
224 rejectUnauthorized?: boolean | undefined;
225 maxPayload?: number | undefined;
226 }
227
228 interface PerMessageDeflateOptions {
229 serverNoContextTakeover?: boolean | undefined;
230 clientNoContextTakeover?: boolean | undefined;
231 serverMaxWindowBits?: number | undefined;
232 clientMaxWindowBits?: number | undefined;
233 zlibDeflateOptions?: {
234 flush?: number | undefined;
235 finishFlush?: number | undefined;
236 chunkSize?: number | undefined;
237 windowBits?: number | undefined;
238 level?: number | undefined;
239 memLevel?: number | undefined;
240 strategy?: number | undefined;
241 dictionary?: Buffer | Buffer[] | DataView | undefined;
242 info?: boolean | undefined;
243 } | undefined;
244 zlibInflateOptions?: ZlibOptions | undefined;
245 threshold?: number | undefined;
246 concurrencyLimit?: number | undefined;
247 }
248
249 interface Event {
250 type: string;
251 target: WebSocket;
252 }
253
254 interface ErrorEvent {
255 error: any;
256 message: string;
257 type: string;
258 target: WebSocket;
259 }
260
261 interface CloseEvent {
262 wasClean: boolean;
263 code: number;
264 reason: string;
265 type: string;
266 target: WebSocket;
267 }
268
269 interface MessageEvent {
270 data: Data;
271 type: string;
272 target: WebSocket;
273 }
274
275 interface EventListenerOptions {
276 once?: boolean | undefined;
277 }
278
279 interface ServerOptions {
280 host?: string | undefined;
281 port?: number | undefined;
282 backlog?: number | undefined;
283 server?: HTTPServer | HTTPSServer | undefined;
284 verifyClient?: VerifyClientCallbackAsync | VerifyClientCallbackSync | undefined;
285 handleProtocols?: (protocols: Set<string>, request: IncomingMessage) => string | false;
286 path?: string | undefined;
287 noServer?: boolean | undefined;
288 clientTracking?: boolean | undefined;
289 perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
290 maxPayload?: number | undefined;
291 skipUTF8Validation?: boolean | undefined;
292 }
293
294 interface AddressInfo {
295 address: string;
296 family: string;
297 port: number;
298 }
299
300 // WebSocket Server
301 class Server extends EventEmitter {
302 options: ServerOptions;
303 path: string;
304 clients: Set<WebSocket>;
305
306 constructor(options?: ServerOptions, callback?: () => void);
307
308 address(): AddressInfo | string;
309 close(cb?: (err?: Error) => void): void;
310 handleUpgrade(
311 request: IncomingMessage,
312 socket: Duplex,
313 upgradeHead: Buffer,
314 callback: (client: WebSocket, request: IncomingMessage) => void,
315 ): void;
316 shouldHandle(request: IncomingMessage): boolean | Promise<boolean>;
317
318 // Events
319 on(event: "connection", cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void): this;
320 on(event: "error", cb: (this: Server, error: Error) => void): this;
321 on(event: "headers", cb: (this: Server, headers: string[], request: IncomingMessage) => void): this;
322 on(event: "close" | "listening", cb: (this: Server) => void): this;
323 on(event: string | symbol, listener: (this: Server, ...args: any[]) => void): this;
324
325 once(event: "connection", cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void): this;
326 once(event: "error", cb: (this: Server, error: Error) => void): this;
327 once(event: "headers", cb: (this: Server, headers: string[], request: IncomingMessage) => void): this;
328 once(event: "close" | "listening", cb: (this: Server) => void): this;
329 once(event: string | symbol, listener: (...args: any[]) => void): this;
330
331 off(event: "connection", cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void): this;
332 off(event: "error", cb: (this: Server, error: Error) => void): this;
333 off(event: "headers", cb: (this: Server, headers: string[], request: IncomingMessage) => void): this;
334 off(event: "close" | "listening", cb: (this: Server) => void): this;
335 off(event: string | symbol, listener: (this: Server, ...args: any[]) => void): this;
336
337 addListener(event: "connection", cb: (client: WebSocket, request: IncomingMessage) => void): this;
338 addListener(event: "error", cb: (err: Error) => void): this;
339 addListener(event: "headers", cb: (headers: string[], request: IncomingMessage) => void): this;
340 addListener(event: "close" | "listening", cb: () => void): this;
341 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
342
343 removeListener(event: "connection", cb: (client: WebSocket) => void): this;
344 removeListener(event: "error", cb: (err: Error) => void): this;
345 removeListener(event: "headers", cb: (headers: string[], request: IncomingMessage) => void): this;
346 removeListener(event: "close" | "listening", cb: () => void): this;
347 removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
348 }
349
350 const WebSocketServer: typeof Server;
351 interface WebSocketServer extends Server {} // tslint:disable-line no-empty-interface
352 const WebSocket: typeof WebSocketAlias;
353 interface WebSocket extends WebSocketAlias {} // tslint:disable-line no-empty-interface
354
355 // WebSocket stream
356 function createWebSocketStream(websocket: WebSocket, options?: DuplexOptions): Duplex;
357}
358
359export = WebSocket;