UNPKG

15.3 kBTypeScriptView Raw
1// Type definitions for ws 7.4
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// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
11
12/// <reference types="node" />
13
14import { EventEmitter } from "events";
15import {
16 Agent,
17 ClientRequest,
18 ClientRequestArgs,
19 IncomingMessage,
20 OutgoingHttpHeaders,
21 Server as HTTPServer,
22} from "http";
23import { Server as HTTPSServer } from "https";
24import { Socket } from "net";
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.OpenEvent) => 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): 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: { data: any; type: string; target: WebSocket }) => void,
89 options?: WebSocket.EventListenerOptions,
90 ): void;
91 addEventListener(
92 method: "close",
93 cb: (event: { wasClean: boolean; code: number; reason: string; target: WebSocket }) => void,
94 options?: WebSocket.EventListenerOptions,
95 ): void;
96 addEventListener(
97 method: "error",
98 cb: (event: { error: any; message: any; type: string; target: WebSocket }) => void,
99 options?: WebSocket.EventListenerOptions,
100 ): void;
101 addEventListener(
102 method: "open",
103 cb: (event: { target: WebSocket }) => void,
104 options?: WebSocket.EventListenerOptions,
105 ): void;
106 addEventListener(method: string, listener: () => void, options?: WebSocket.EventListenerOptions): void;
107
108 removeEventListener(method: "message", cb?: (event: { data: any; type: string; target: WebSocket }) => void): void;
109 removeEventListener(
110 method: "close",
111 cb?: (event: { wasClean: boolean; code: number; reason: string; target: WebSocket }) => void,
112 ): void;
113 removeEventListener(
114 method: "error",
115 cb?: (event: { error: any; message: any; type: string; target: WebSocket }) => void,
116 ): void;
117 removeEventListener(method: "open", cb?: (event: { target: WebSocket }) => void): void;
118 removeEventListener(method: string, listener?: () => void): void;
119
120 // Events
121 on(event: "close", listener: (this: WebSocket, code: number, reason: string) => void): this;
122 on(event: "error", listener: (this: WebSocket, err: Error) => void): this;
123 on(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
124 on(event: "message", listener: (this: WebSocket, data: WebSocket.Data) => void): this;
125 on(event: "open", listener: (this: WebSocket) => void): this;
126 on(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
127 on(
128 event: "unexpected-response",
129 listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
130 ): this;
131 on(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
132
133 once(event: "close", listener: (this: WebSocket, code: number, reason: string) => void): this;
134 once(event: "error", listener: (this: WebSocket, err: Error) => void): this;
135 once(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
136 once(event: "message", listener: (this: WebSocket, data: WebSocket.Data) => void): this;
137 once(event: "open", listener: (this: WebSocket) => void): this;
138 once(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
139 once(
140 event: "unexpected-response",
141 listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
142 ): this;
143 once(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
144
145 off(event: "close", listener: (this: WebSocket, code: number, reason: string) => void): this;
146 off(event: "error", listener: (this: WebSocket, err: Error) => void): this;
147 off(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
148 off(event: "message", listener: (this: WebSocket, data: WebSocket.Data) => void): this;
149 off(event: "open", listener: (this: WebSocket) => void): this;
150 off(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
151 off(
152 event: "unexpected-response",
153 listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
154 ): this;
155 off(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
156
157 addListener(event: "close", listener: (code: number, message: string) => void): this;
158 addListener(event: "error", listener: (err: Error) => void): this;
159 addListener(event: "upgrade", listener: (request: IncomingMessage) => void): this;
160 addListener(event: "message", listener: (data: WebSocket.Data) => void): this;
161 addListener(event: "open", listener: () => void): this;
162 addListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
163 addListener(
164 event: "unexpected-response",
165 listener: (request: ClientRequest, response: IncomingMessage) => void,
166 ): this;
167 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
168
169 removeListener(event: "close", listener: (code: number, message: string) => void): this;
170 removeListener(event: "error", listener: (err: Error) => void): this;
171 removeListener(event: "upgrade", listener: (request: IncomingMessage) => void): this;
172 removeListener(event: "message", listener: (data: WebSocket.Data) => void): this;
173 removeListener(event: "open", listener: () => void): this;
174 removeListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
175 removeListener(
176 event: "unexpected-response",
177 listener: (request: ClientRequest, response: IncomingMessage) => void,
178 ): this;
179 removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
180}
181
182declare namespace WebSocket {
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 OpenEvent {
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?: any;
286 path?: string | undefined;
287 noServer?: boolean | undefined;
288 clientTracking?: boolean | undefined;
289 perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
290 maxPayload?: number | undefined;
291 }
292
293 interface AddressInfo {
294 address: string;
295 family: string;
296 port: number;
297 }
298
299 // WebSocket Server
300 class Server extends EventEmitter {
301 options: ServerOptions;
302 path: string;
303 clients: Set<WebSocket>;
304
305 constructor(options?: ServerOptions, callback?: () => void);
306
307 address(): AddressInfo | string;
308 close(cb?: (err?: Error) => void): void;
309 handleUpgrade(
310 request: IncomingMessage,
311 socket: Socket,
312 upgradeHead: Buffer,
313 callback: (client: WebSocket, request: IncomingMessage) => void,
314 ): void;
315 shouldHandle(request: IncomingMessage): boolean | Promise<boolean>;
316
317 // Events
318 on(event: "connection", cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void): this;
319 on(event: "error", cb: (this: Server, error: Error) => void): this;
320 on(event: "headers", cb: (this: Server, headers: string[], request: IncomingMessage) => void): this;
321 on(event: "close" | "listening", cb: (this: Server) => void): this;
322 on(event: string | symbol, listener: (this: Server, ...args: any[]) => void): this;
323
324 once(event: "connection", cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void): this;
325 once(event: "error", cb: (this: Server, error: Error) => void): this;
326 once(event: "headers", cb: (this: Server, headers: string[], request: IncomingMessage) => void): this;
327 once(event: "close" | "listening", cb: (this: Server) => void): this;
328 once(event: string | symbol, listener: (...args: any[]) => void): this;
329
330 off(event: "connection", cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void): this;
331 off(event: "error", cb: (this: Server, error: Error) => void): this;
332 off(event: "headers", cb: (this: Server, headers: string[], request: IncomingMessage) => void): this;
333 off(event: "close" | "listening", cb: (this: Server) => void): this;
334 off(event: string | symbol, listener: (this: Server, ...args: any[]) => void): this;
335
336 addListener(event: "connection", cb: (client: WebSocket, request: IncomingMessage) => void): this;
337 addListener(event: "error", cb: (err: Error) => void): this;
338 addListener(event: "headers", cb: (headers: string[], request: IncomingMessage) => void): this;
339 addListener(event: "close" | "listening", cb: () => void): this;
340 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
341
342 removeListener(event: "connection", cb: (client: WebSocket) => void): this;
343 removeListener(event: "error", cb: (err: Error) => void): this;
344 removeListener(event: "headers", cb: (headers: string[], request: IncomingMessage) => void): this;
345 removeListener(event: "close" | "listening", cb: () => void): this;
346 removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
347 }
348
349 // WebSocket stream
350 function createWebSocketStream(websocket: WebSocket, options?: DuplexOptions): Duplex;
351}
352
353export = WebSocket;