@small-web/kitten-types 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ws/index.d.ts ADDED
@@ -0,0 +1,458 @@
1
+ /// <reference types="node" />
2
+
3
+ /**
4
+ Copied from the ws 8.18.1 type definitions at
5
+ https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ws
6
+
7
+ The only alteration is the export of BufferLike type so we can expose it on the Kitten global.
8
+ */
9
+
10
+ import { EventEmitter } from "events";
11
+ import {
12
+ Agent,
13
+ ClientRequest,
14
+ ClientRequestArgs,
15
+ IncomingMessage,
16
+ OutgoingHttpHeaders,
17
+ Server as HTTPServer,
18
+ } from "http";
19
+ import { Server as HTTPSServer } from "https";
20
+ import { createConnection } from "net";
21
+ import { Duplex, DuplexOptions } from "stream";
22
+ import { SecureContextOptions } from "tls";
23
+ import { URL } from "url";
24
+ import { ZlibOptions } from "zlib";
25
+
26
+ // can not get all overload of BufferConstructor['from'], need to copy all it's first arguments here
27
+ // https://github.com/microsoft/TypeScript/issues/32164
28
+ export type BufferLike =
29
+ | string
30
+ | Buffer
31
+ | DataView
32
+ | number
33
+ | ArrayBufferView
34
+ | Uint8Array
35
+ | ArrayBuffer
36
+ | SharedArrayBuffer
37
+ | Blob
38
+ | readonly any[]
39
+ | readonly number[]
40
+ | { valueOf(): ArrayBuffer }
41
+ | { valueOf(): SharedArrayBuffer }
42
+ | { valueOf(): Uint8Array }
43
+ | { valueOf(): readonly number[] }
44
+ | { valueOf(): string }
45
+ | { [Symbol.toPrimitive](hint: string): string };
46
+
47
+ // WebSocket socket.
48
+ declare class WebSocket extends EventEmitter {
49
+ /** The connection is not yet open. */
50
+ static readonly CONNECTING: 0;
51
+ /** The connection is open and ready to communicate. */
52
+ static readonly OPEN: 1;
53
+ /** The connection is in the process of closing. */
54
+ static readonly CLOSING: 2;
55
+ /** The connection is closed. */
56
+ static readonly CLOSED: 3;
57
+
58
+ binaryType: "nodebuffer" | "arraybuffer" | "fragments";
59
+ readonly bufferedAmount: number;
60
+ readonly extensions: string;
61
+ /** Indicates whether the websocket is paused */
62
+ readonly isPaused: boolean;
63
+ readonly protocol: string;
64
+ /** The current state of the connection */
65
+ readonly readyState:
66
+ | typeof WebSocket.CONNECTING
67
+ | typeof WebSocket.OPEN
68
+ | typeof WebSocket.CLOSING
69
+ | typeof WebSocket.CLOSED;
70
+ readonly url: string;
71
+
72
+ /** The connection is not yet open. */
73
+ readonly CONNECTING: 0;
74
+ /** The connection is open and ready to communicate. */
75
+ readonly OPEN: 1;
76
+ /** The connection is in the process of closing. */
77
+ readonly CLOSING: 2;
78
+ /** The connection is closed. */
79
+ readonly CLOSED: 3;
80
+
81
+ onopen: ((event: WebSocket.Event) => void) | null;
82
+ onerror: ((event: WebSocket.ErrorEvent) => void) | null;
83
+ onclose: ((event: WebSocket.CloseEvent) => void) | null;
84
+ onmessage: ((event: WebSocket.MessageEvent) => void) | null;
85
+
86
+ constructor(address: null);
87
+ constructor(address: string | URL, options?: WebSocket.ClientOptions | ClientRequestArgs);
88
+ constructor(
89
+ address: string | URL,
90
+ protocols?: string | string[],
91
+ options?: WebSocket.ClientOptions | ClientRequestArgs,
92
+ );
93
+
94
+ close(code?: number, data?: string | Buffer): void;
95
+ ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
96
+ pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
97
+ // https://github.com/websockets/ws/issues/2076#issuecomment-1250354722
98
+ send(data: BufferLike, cb?: (err?: Error) => void): void;
99
+ send(
100
+ data: BufferLike,
101
+ options: {
102
+ mask?: boolean | undefined;
103
+ binary?: boolean | undefined;
104
+ compress?: boolean | undefined;
105
+ fin?: boolean | undefined;
106
+ },
107
+ cb?: (err?: Error) => void,
108
+ ): void;
109
+ terminate(): void;
110
+
111
+ /**
112
+ * Pause the websocket causing it to stop emitting events. Some events can still be
113
+ * emitted after this is called, until all buffered data is consumed. This method
114
+ * is a noop if the ready state is `CONNECTING` or `CLOSED`.
115
+ */
116
+ pause(): void;
117
+ /**
118
+ * Make a paused socket resume emitting events. This method is a noop if the ready
119
+ * state is `CONNECTING` or `CLOSED`.
120
+ */
121
+ resume(): void;
122
+
123
+ // HTML5 WebSocket events
124
+ addEventListener<K extends keyof WebSocket.WebSocketEventMap>(
125
+ type: K,
126
+ listener:
127
+ | ((event: WebSocket.WebSocketEventMap[K]) => void)
128
+ | { handleEvent(event: WebSocket.WebSocketEventMap[K]): void },
129
+ options?: WebSocket.EventListenerOptions,
130
+ ): void;
131
+ removeEventListener<K extends keyof WebSocket.WebSocketEventMap>(
132
+ type: K,
133
+ listener:
134
+ | ((event: WebSocket.WebSocketEventMap[K]) => void)
135
+ | { handleEvent(event: WebSocket.WebSocketEventMap[K]): void },
136
+ ): void;
137
+
138
+ // Events
139
+ on(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
140
+ on(event: "error", listener: (this: WebSocket, error: Error) => void): this;
141
+ on(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
142
+ on(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
143
+ on(event: "open", listener: (this: WebSocket) => void): this;
144
+ on(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
145
+ on(event: "redirect", listener: (this: WebSocket, url: string, request: ClientRequest) => void): this;
146
+ on(
147
+ event: "unexpected-response",
148
+ listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
149
+ ): this;
150
+ on(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
151
+
152
+ once(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
153
+ once(event: "error", listener: (this: WebSocket, error: Error) => void): this;
154
+ once(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
155
+ once(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
156
+ once(event: "open", listener: (this: WebSocket) => void): this;
157
+ once(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
158
+ once(event: "redirect", listener: (this: WebSocket, url: string, request: ClientRequest) => void): this;
159
+ once(
160
+ event: "unexpected-response",
161
+ listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
162
+ ): this;
163
+ once(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
164
+
165
+ off(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
166
+ off(event: "error", listener: (this: WebSocket, error: Error) => void): this;
167
+ off(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
168
+ off(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
169
+ off(event: "open", listener: (this: WebSocket) => void): this;
170
+ off(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
171
+ off(event: "redirect", listener: (this: WebSocket, url: string, request: ClientRequest) => void): this;
172
+ off(
173
+ event: "unexpected-response",
174
+ listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
175
+ ): this;
176
+ off(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
177
+
178
+ addListener(event: "close", listener: (code: number, reason: Buffer) => void): this;
179
+ addListener(event: "error", listener: (error: Error) => void): this;
180
+ addListener(event: "upgrade", listener: (request: IncomingMessage) => void): this;
181
+ addListener(event: "message", listener: (data: WebSocket.RawData, isBinary: boolean) => void): this;
182
+ addListener(event: "open", listener: () => void): this;
183
+ addListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
184
+ addListener(event: "redirect", listener: (url: string, request: ClientRequest) => void): this;
185
+ addListener(
186
+ event: "unexpected-response",
187
+ listener: (request: ClientRequest, response: IncomingMessage) => void,
188
+ ): this;
189
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
190
+
191
+ removeListener(event: "close", listener: (code: number, reason: Buffer) => void): this;
192
+ removeListener(event: "error", listener: (error: Error) => void): this;
193
+ removeListener(event: "upgrade", listener: (request: IncomingMessage) => void): this;
194
+ removeListener(event: "message", listener: (data: WebSocket.RawData, isBinary: boolean) => void): this;
195
+ removeListener(event: "open", listener: () => void): this;
196
+ removeListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
197
+ removeListener(event: "redirect", listener: (url: string, request: ClientRequest) => void): this;
198
+ removeListener(
199
+ event: "unexpected-response",
200
+ listener: (request: ClientRequest, response: IncomingMessage) => void,
201
+ ): this;
202
+ removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
203
+ }
204
+
205
+ declare namespace WebSocket {
206
+ /**
207
+ * Data represents the raw message payload received over the WebSocket.
208
+ */
209
+ type RawData = Buffer | ArrayBuffer | Buffer[];
210
+
211
+ /**
212
+ * Data represents the message payload received over the WebSocket.
213
+ */
214
+ type Data = string | Buffer | ArrayBuffer | Buffer[];
215
+
216
+ /**
217
+ * CertMeta represents the accepted types for certificate & key data.
218
+ */
219
+ type CertMeta = string | string[] | Buffer | Buffer[];
220
+
221
+ /**
222
+ * VerifyClientCallbackSync is a synchronous callback used to inspect the
223
+ * incoming message. The return value (boolean) of the function determines
224
+ * whether or not to accept the handshake.
225
+ */
226
+ type VerifyClientCallbackSync<Request extends IncomingMessage = IncomingMessage> = (info: {
227
+ origin: string;
228
+ secure: boolean;
229
+ req: Request;
230
+ }) => boolean;
231
+
232
+ /**
233
+ * VerifyClientCallbackAsync is an asynchronous callback used to inspect the
234
+ * incoming message. The return value (boolean) of the function determines
235
+ * whether or not to accept the handshake.
236
+ */
237
+ type VerifyClientCallbackAsync<Request extends IncomingMessage = IncomingMessage> = (
238
+ info: { origin: string; secure: boolean; req: Request },
239
+ callback: (res: boolean, code?: number, message?: string, headers?: OutgoingHttpHeaders) => void,
240
+ ) => void;
241
+
242
+ /**
243
+ * FinishRequestCallback is a callback for last minute customization of the
244
+ * headers. If finishRequest is set, then it has the responsibility to call
245
+ * request.end() once it is done setting request headers.
246
+ */
247
+ type FinishRequestCallback = (request: ClientRequest, websocket: WebSocket) => void;
248
+
249
+ interface ClientOptions extends SecureContextOptions {
250
+ protocol?: string | undefined;
251
+ followRedirects?: boolean | undefined;
252
+ generateMask?(mask: Buffer): void;
253
+ handshakeTimeout?: number | undefined;
254
+ maxRedirects?: number | undefined;
255
+ perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
256
+ localAddress?: string | undefined;
257
+ protocolVersion?: number | undefined;
258
+ headers?: { [key: string]: string } | undefined;
259
+ origin?: string | undefined;
260
+ agent?: Agent | undefined;
261
+ host?: string | undefined;
262
+ family?: number | undefined;
263
+ checkServerIdentity?(servername: string, cert: CertMeta): boolean;
264
+ rejectUnauthorized?: boolean | undefined;
265
+ allowSynchronousEvents?: boolean | undefined;
266
+ autoPong?: boolean | undefined;
267
+ maxPayload?: number | undefined;
268
+ skipUTF8Validation?: boolean | undefined;
269
+ createConnection?: typeof createConnection | undefined;
270
+ finishRequest?: FinishRequestCallback | undefined;
271
+ }
272
+
273
+ interface PerMessageDeflateOptions {
274
+ serverNoContextTakeover?: boolean | undefined;
275
+ clientNoContextTakeover?: boolean | undefined;
276
+ serverMaxWindowBits?: number | undefined;
277
+ clientMaxWindowBits?: number | undefined;
278
+ zlibDeflateOptions?:
279
+ | {
280
+ flush?: number | undefined;
281
+ finishFlush?: number | undefined;
282
+ chunkSize?: number | undefined;
283
+ windowBits?: number | undefined;
284
+ level?: number | undefined;
285
+ memLevel?: number | undefined;
286
+ strategy?: number | undefined;
287
+ dictionary?: Buffer | Buffer[] | DataView | undefined;
288
+ info?: boolean | undefined;
289
+ }
290
+ | undefined;
291
+ zlibInflateOptions?: ZlibOptions | undefined;
292
+ threshold?: number | undefined;
293
+ concurrencyLimit?: number | undefined;
294
+ }
295
+
296
+ interface Event {
297
+ type: string;
298
+ target: WebSocket;
299
+ }
300
+
301
+ interface ErrorEvent {
302
+ error: any;
303
+ message: string;
304
+ type: string;
305
+ target: WebSocket;
306
+ }
307
+
308
+ interface CloseEvent {
309
+ wasClean: boolean;
310
+ code: number;
311
+ reason: string;
312
+ type: string;
313
+ target: WebSocket;
314
+ }
315
+
316
+ interface MessageEvent {
317
+ data: Data;
318
+ type: string;
319
+ target: WebSocket;
320
+ }
321
+
322
+ interface WebSocketEventMap {
323
+ open: Event;
324
+ error: ErrorEvent;
325
+ close: CloseEvent;
326
+ message: MessageEvent;
327
+ }
328
+
329
+ interface EventListenerOptions {
330
+ once?: boolean | undefined;
331
+ }
332
+
333
+ interface ServerOptions<
334
+ U extends typeof WebSocket = typeof WebSocket,
335
+ V extends typeof IncomingMessage = typeof IncomingMessage,
336
+ > {
337
+ host?: string | undefined;
338
+ port?: number | undefined;
339
+ backlog?: number | undefined;
340
+ server?: HTTPServer<V> | HTTPSServer<V> | undefined;
341
+ verifyClient?:
342
+ | VerifyClientCallbackAsync<InstanceType<V>>
343
+ | VerifyClientCallbackSync<InstanceType<V>>
344
+ | undefined;
345
+ handleProtocols?: (protocols: Set<string>, request: InstanceType<V>) => string | false;
346
+ path?: string | undefined;
347
+ noServer?: boolean | undefined;
348
+ allowSynchronousEvents?: boolean | undefined;
349
+ autoPong?: boolean | undefined;
350
+ clientTracking?: boolean | undefined;
351
+ perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
352
+ maxPayload?: number | undefined;
353
+ skipUTF8Validation?: boolean | undefined;
354
+ WebSocket?: U | undefined;
355
+ }
356
+
357
+ interface AddressInfo {
358
+ address: string;
359
+ family: string;
360
+ port: number;
361
+ }
362
+ }
363
+
364
+ export import AddressInfo = WebSocket.AddressInfo;
365
+ export import CertMeta = WebSocket.CertMeta;
366
+ export import ClientOptions = WebSocket.ClientOptions;
367
+ export import CloseEvent = WebSocket.CloseEvent;
368
+ export import Data = WebSocket.Data;
369
+ export import ErrorEvent = WebSocket.ErrorEvent;
370
+ export import Event = WebSocket.Event;
371
+ export import EventListenerOptions = WebSocket.EventListenerOptions;
372
+ export import FinishRequestCallback = WebSocket.FinishRequestCallback;
373
+ export import MessageEvent = WebSocket.MessageEvent;
374
+ export import PerMessageDeflateOptions = WebSocket.PerMessageDeflateOptions;
375
+ export import RawData = WebSocket.RawData;
376
+ export import ServerOptions = WebSocket.ServerOptions;
377
+ export import VerifyClientCallbackAsync = WebSocket.VerifyClientCallbackAsync;
378
+ export import VerifyClientCallbackSync = WebSocket.VerifyClientCallbackSync;
379
+
380
+ // WebSocket Server
381
+ declare class Server<
382
+ T extends typeof WebSocket = typeof WebSocket,
383
+ U extends typeof IncomingMessage = typeof IncomingMessage,
384
+ > extends EventEmitter {
385
+ options: WebSocket.ServerOptions<T, U>;
386
+ path: string;
387
+ clients: Set<InstanceType<T>>;
388
+
389
+ constructor(options?: WebSocket.ServerOptions<T, U>, callback?: () => void);
390
+
391
+ address(): WebSocket.AddressInfo | string | null;
392
+ close(cb?: (err?: Error) => void): void;
393
+ handleUpgrade(
394
+ request: InstanceType<U>,
395
+ socket: Duplex,
396
+ upgradeHead: Buffer,
397
+ callback: (client: InstanceType<T>, request: InstanceType<U>) => void,
398
+ ): void;
399
+ shouldHandle(request: InstanceType<U>): boolean | Promise<boolean>;
400
+
401
+ // Events
402
+ on(event: "connection", cb: (this: Server<T>, websocket: InstanceType<T>, request: InstanceType<U>) => void): this;
403
+ on(event: "error", cb: (this: Server<T>, error: Error) => void): this;
404
+ on(event: "headers", cb: (this: Server<T>, headers: string[], request: InstanceType<U>) => void): this;
405
+ on(event: "close" | "listening", cb: (this: Server<T>) => void): this;
406
+ on(
407
+ event: "wsClientError",
408
+ cb: (this: Server<T>, error: Error, socket: Duplex, request: InstanceType<U>) => void,
409
+ ): this;
410
+ on(event: string | symbol, listener: (this: Server<T>, ...args: any[]) => void): this;
411
+
412
+ once(
413
+ event: "connection",
414
+ cb: (this: Server<T>, websocket: InstanceType<T>, request: InstanceType<U>) => void,
415
+ ): this;
416
+ once(event: "error", cb: (this: Server<T>, error: Error) => void): this;
417
+ once(event: "headers", cb: (this: Server<T>, headers: string[], request: InstanceType<U>) => void): this;
418
+ once(event: "close" | "listening", cb: (this: Server<T>) => void): this;
419
+ once(
420
+ event: "wsClientError",
421
+ cb: (this: Server<T>, error: Error, socket: Duplex, request: InstanceType<U>) => void,
422
+ ): this;
423
+ once(event: string | symbol, listener: (this: Server<T>, ...args: any[]) => void): this;
424
+
425
+ off(event: "connection", cb: (this: Server<T>, websocket: InstanceType<T>, request: InstanceType<U>) => void): this;
426
+ off(event: "error", cb: (this: Server<T>, error: Error) => void): this;
427
+ off(event: "headers", cb: (this: Server<T>, headers: string[], request: InstanceType<U>) => void): this;
428
+ off(event: "close" | "listening", cb: (this: Server<T>) => void): this;
429
+ off(
430
+ event: "wsClientError",
431
+ cb: (this: Server<T>, error: Error, socket: Duplex, request: InstanceType<U>) => void,
432
+ ): this;
433
+ off(event: string | symbol, listener: (this: Server<T>, ...args: any[]) => void): this;
434
+
435
+ addListener(event: "connection", cb: (websocket: InstanceType<T>, request: InstanceType<U>) => void): this;
436
+ addListener(event: "error", cb: (error: Error) => void): this;
437
+ addListener(event: "headers", cb: (headers: string[], request: InstanceType<U>) => void): this;
438
+ addListener(event: "close" | "listening", cb: () => void): this;
439
+ addListener(event: "wsClientError", cb: (error: Error, socket: Duplex, request: InstanceType<U>) => void): this;
440
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
441
+
442
+ removeListener(event: "connection", cb: (websocket: InstanceType<T>, request: InstanceType<U>) => void): this;
443
+ removeListener(event: "error", cb: (error: Error) => void): this;
444
+ removeListener(event: "headers", cb: (headers: string[], request: InstanceType<U>) => void): this;
445
+ removeListener(event: "close" | "listening", cb: () => void): this;
446
+ removeListener(event: "wsClientError", cb: (error: Error, socket: Duplex, request: InstanceType<U>) => void): this;
447
+ removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
448
+ }
449
+ export { type Server };
450
+
451
+ export const WebSocketServer: typeof Server;
452
+ export interface WebSocketServer extends Server {} // eslint-disable-line @typescript-eslint/no-empty-interface
453
+
454
+ // WebSocket stream
455
+ export function createWebSocketStream(websocket: WebSocket, options?: DuplexOptions): Duplex;
456
+
457
+ export default WebSocket;
458
+ export { WebSocket };