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