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 { Duplex, DuplexOptions } from "stream";
|
25 | import { SecureContextOptions } from "tls";
|
26 | import { URL } from "url";
|
27 | import { ZlibOptions } from "zlib";
|
28 |
|
29 |
|
30 | declare class WebSocket extends EventEmitter {
|
31 |
|
32 | static readonly CONNECTING: 0;
|
33 |
|
34 | static readonly OPEN: 1;
|
35 |
|
36 | static readonly CLOSING: 2;
|
37 |
|
38 | static readonly CLOSED: 3;
|
39 |
|
40 | binaryType: "nodebuffer" | "arraybuffer" | "fragments";
|
41 | readonly bufferedAmount: number;
|
42 | readonly extensions: string;
|
43 | readonly protocol: string;
|
44 |
|
45 | readonly readyState:
|
46 | | typeof WebSocket.CONNECTING
|
47 | | typeof WebSocket.OPEN
|
48 | | typeof WebSocket.CLOSING
|
49 | | typeof WebSocket.CLOSED;
|
50 | readonly url: string;
|
51 |
|
52 |
|
53 | readonly CONNECTING: 0;
|
54 |
|
55 | readonly OPEN: 1;
|
56 |
|
57 | readonly CLOSING: 2;
|
58 |
|
59 | readonly CLOSED: 3;
|
60 |
|
61 | onopen: (event: WebSocket.Event) => void;
|
62 | onerror: (event: WebSocket.ErrorEvent) => void;
|
63 | onclose: (event: WebSocket.CloseEvent) => void;
|
64 | onmessage: (event: WebSocket.MessageEvent) => void;
|
65 |
|
66 | constructor(address: string | URL, options?: WebSocket.ClientOptions | ClientRequestArgs);
|
67 | constructor(
|
68 | address: string | URL,
|
69 | protocols?: string | string[],
|
70 | options?: WebSocket.ClientOptions | ClientRequestArgs,
|
71 | );
|
72 |
|
73 | close(code?: number, data?: string | Buffer): void;
|
74 | ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
|
75 | pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
|
76 | send(data: any, cb?: (err?: Error) => void): void;
|
77 | send(
|
78 | data: any,
|
79 | options: { mask?: boolean | undefined; binary?: boolean | undefined; compress?: boolean | undefined; fin?: boolean | undefined },
|
80 | cb?: (err?: Error) => void,
|
81 | ): void;
|
82 | terminate(): void;
|
83 |
|
84 | // HTML5 WebSocket events
|
85 | addEventListener(
|
86 | method: "message",
|
87 | cb: (event: WebSocket.MessageEvent) => void,
|
88 | options?: WebSocket.EventListenerOptions,
|
89 | ): void;
|
90 | addEventListener(
|
91 | method: "close",
|
92 | cb: (event: WebSocket.CloseEvent) => void,
|
93 | options?: WebSocket.EventListenerOptions,
|
94 | ): void;
|
95 | addEventListener(
|
96 | method: "error",
|
97 | cb: (event: WebSocket.ErrorEvent) => void,
|
98 | options?: WebSocket.EventListenerOptions,
|
99 | ): void;
|
100 | addEventListener(
|
101 | method: "open",
|
102 | cb: (event: WebSocket.Event) => void,
|
103 | options?: WebSocket.EventListenerOptions,
|
104 | ): void;
|
105 |
|
106 | removeEventListener(method: "message", cb: (event: WebSocket.MessageEvent) => void): void;
|
107 | removeEventListener(method: "close", cb: (event: WebSocket.CloseEvent) => void): void;
|
108 | removeEventListener(method: "error", cb: (event: WebSocket.ErrorEvent) => void): void;
|
109 | removeEventListener(method: "open", cb: (event: WebSocket.Event) => void): void;
|
110 |
|
111 | // Events
|
112 | on(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
|
113 | on(event: "error", listener: (this: WebSocket, err: Error) => void): this;
|
114 | on(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
|
115 | on(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
|
116 | on(event: "open", listener: (this: WebSocket) => void): this;
|
117 | on(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
|
118 | on(
|
119 | event: "unexpected-response",
|
120 | listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
|
121 | ): this;
|
122 | on(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
|
123 |
|
124 | once(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
|
125 | once(event: "error", listener: (this: WebSocket, err: Error) => void): this;
|
126 | once(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
|
127 | once(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
|
128 | once(event: "open", listener: (this: WebSocket) => void): this;
|
129 | once(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
|
130 | once(
|
131 | event: "unexpected-response",
|
132 | listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
|
133 | ): this;
|
134 | once(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
|
135 |
|
136 | off(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
|
137 | off(event: "error", listener: (this: WebSocket, err: Error) => void): this;
|
138 | off(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
|
139 | off(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
|
140 | off(event: "open", listener: (this: WebSocket) => void): this;
|
141 | off(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
|
142 | off(
|
143 | event: "unexpected-response",
|
144 | listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
|
145 | ): this;
|
146 | off(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
|
147 |
|
148 | addListener(event: "close", listener: (code: number, reason: Buffer) => void): this;
|
149 | addListener(event: "error", listener: (err: Error) => void): this;
|
150 | addListener(event: "upgrade", listener: (request: IncomingMessage) => void): this;
|
151 | addListener(event: "message", listener: (data: WebSocket.RawData, isBinary: boolean) => void): this;
|
152 | addListener(event: "open", listener: () => void): this;
|
153 | addListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
|
154 | addListener(
|
155 | event: "unexpected-response",
|
156 | listener: (request: ClientRequest, response: IncomingMessage) => void,
|
157 | ): this;
|
158 | addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
159 |
|
160 | removeListener(event: "close", listener: (code: number, reason: Buffer) => void): this;
|
161 | removeListener(event: "error", listener: (err: Error) => void): this;
|
162 | removeListener(event: "upgrade", listener: (request: IncomingMessage) => void): this;
|
163 | removeListener(event: "message", listener: (data: WebSocket.RawData, isBinary: boolean) => void): this;
|
164 | removeListener(event: "open", listener: () => void): this;
|
165 | removeListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
|
166 | removeListener(
|
167 | event: "unexpected-response",
|
168 | listener: (request: ClientRequest, response: IncomingMessage) => void,
|
169 | ): this;
|
170 | removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
171 | }
|
172 |
|
173 | declare const WebSocketAlias: typeof WebSocket;
|
174 | type WebSocketAlias = WebSocket;
|
175 |
|
176 | declare namespace WebSocket {
|
177 | /**
|
178 | * Data represents the raw message payload received over the WebSocket.
|
179 | */
|
180 | type RawData = Buffer | ArrayBuffer | Buffer[];
|
181 |
|
182 | /**
|
183 | * Data represents the message payload received over the WebSocket.
|
184 | */
|
185 | type Data = string | Buffer | ArrayBuffer | Buffer[];
|
186 |
|
187 | /**
|
188 | * CertMeta represents the accepted types for certificate & key data.
|
189 | */
|
190 | type CertMeta = string | string[] | Buffer | Buffer[];
|
191 |
|
192 | /**
|
193 | * VerifyClientCallbackSync is a synchronous callback used to inspect the
|
194 | * incoming message. The return value (boolean) of the function determines
|
195 | * whether or not to accept the handshake.
|
196 | */
|
197 | type VerifyClientCallbackSync = (info: { origin: string; secure: boolean; req: IncomingMessage }) => boolean;
|
198 |
|
199 | /**
|
200 | * VerifyClientCallbackAsync is an asynchronous callback used to inspect the
|
201 | * incoming message. The return value (boolean) of the function determines
|
202 | * whether or not to accept the handshake.
|
203 | */
|
204 | type VerifyClientCallbackAsync = (
|
205 | info: { origin: string; secure: boolean; req: IncomingMessage },
|
206 | callback: (res: boolean, code?: number, message?: string, headers?: OutgoingHttpHeaders) => void,
|
207 | ) => void;
|
208 |
|
209 | interface ClientOptions extends SecureContextOptions {
|
210 | protocol?: string | undefined;
|
211 | followRedirects?: boolean | undefined;
|
212 | handshakeTimeout?: number | undefined;
|
213 | maxRedirects?: number | undefined;
|
214 | perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
|
215 | localAddress?: string | undefined;
|
216 | protocolVersion?: number | undefined;
|
217 | headers?: { [key: string]: string } | undefined;
|
218 | origin?: string | undefined;
|
219 | agent?: Agent | undefined;
|
220 | host?: string | undefined;
|
221 | family?: number | undefined;
|
222 | checkServerIdentity?(servername: string, cert: CertMeta): boolean;
|
223 | rejectUnauthorized?: boolean | undefined;
|
224 | maxPayload?: number | undefined;
|
225 | }
|
226 |
|
227 | interface PerMessageDeflateOptions {
|
228 | serverNoContextTakeover?: boolean | undefined;
|
229 | clientNoContextTakeover?: boolean | undefined;
|
230 | serverMaxWindowBits?: number | undefined;
|
231 | clientMaxWindowBits?: number | undefined;
|
232 | zlibDeflateOptions?: {
|
233 | flush?: number | undefined;
|
234 | finishFlush?: number | undefined;
|
235 | chunkSize?: number | undefined;
|
236 | windowBits?: number | undefined;
|
237 | level?: number | undefined;
|
238 | memLevel?: number | undefined;
|
239 | strategy?: number | undefined;
|
240 | dictionary?: Buffer | Buffer[] | DataView | undefined;
|
241 | info?: boolean | undefined;
|
242 | } | undefined;
|
243 | zlibInflateOptions?: ZlibOptions | undefined;
|
244 | threshold?: number | undefined;
|
245 | concurrencyLimit?: number | undefined;
|
246 | }
|
247 |
|
248 | interface Event {
|
249 | type: string;
|
250 | target: WebSocket;
|
251 | }
|
252 |
|
253 | interface ErrorEvent {
|
254 | error: any;
|
255 | message: string;
|
256 | type: string;
|
257 | target: WebSocket;
|
258 | }
|
259 |
|
260 | interface CloseEvent {
|
261 | wasClean: boolean;
|
262 | code: number;
|
263 | reason: string;
|
264 | type: string;
|
265 | target: WebSocket;
|
266 | }
|
267 |
|
268 | interface MessageEvent {
|
269 | data: Data;
|
270 | type: string;
|
271 | target: WebSocket;
|
272 | }
|
273 |
|
274 | interface EventListenerOptions {
|
275 | once?: boolean | undefined;
|
276 | }
|
277 |
|
278 | interface ServerOptions {
|
279 | host?: string | undefined;
|
280 | port?: number | undefined;
|
281 | backlog?: number | undefined;
|
282 | server?: HTTPServer | HTTPSServer | undefined;
|
283 | verifyClient?: VerifyClientCallbackAsync | VerifyClientCallbackSync | undefined;
|
284 | handleProtocols?: (protocols: Set<string>, request: IncomingMessage) => string | false;
|
285 | path?: string | undefined;
|
286 | noServer?: boolean | undefined;
|
287 | clientTracking?: boolean | undefined;
|
288 | perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
|
289 | maxPayload?: number | undefined;
|
290 | skipUTF8Validation?: boolean | 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: Duplex,
|
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 | const WebSocketServer: typeof Server;
|
350 | type WebSocketServer = Server;
|
351 | const WebSocket: typeof WebSocketAlias;
|
352 | type WebSocket = WebSocketAlias;
|
353 |
|
354 | // WebSocket stream
|
355 | function createWebSocketStream(websocket: WebSocket, options?: DuplexOptions): Duplex;
|
356 | }
|
357 |
|
358 | export = WebSocket;
|