1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | import { EventEmitter } from "events";
|
15 | import {
|
16 | Agent,
|
17 | ClientRequest,
|
18 | ClientRequestArgs,
|
19 | IncomingMessage,
|
20 | OutgoingHttpHeaders,
|
21 | Server as HTTPServer,
|
22 | } from "http";
|
23 | import { Server as HTTPSServer } from "https";
|
24 | import { Socket } from "net";
|
25 | import { Duplex, DuplexOptions } from "stream";
|
26 | import { SecureContextOptions } from "tls";
|
27 | import { URL } from "url";
|
28 | import { ZlibOptions } from "zlib";
|
29 |
|
30 |
|
31 | declare class WebSocket extends EventEmitter {
|
32 |
|
33 | static readonly CONNECTING: 0;
|
34 |
|
35 | static readonly OPEN: 1;
|
36 |
|
37 | static readonly CLOSING: 2;
|
38 |
|
39 | static readonly CLOSED: 3;
|
40 |
|
41 | binaryType: "nodebuffer" | "arraybuffer" | "fragments";
|
42 | readonly bufferedAmount: number;
|
43 | readonly extensions: string;
|
44 | readonly protocol: string;
|
45 |
|
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 |
|
54 | readonly CONNECTING: 0;
|
55 |
|
56 | readonly OPEN: 1;
|
57 |
|
58 | readonly CLOSING: 2;
|
59 |
|
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 |
|
182 | declare 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 |
|
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 |
|
353 | export = WebSocket;
|