sockress 0.1.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/dist/index.js ADDED
@@ -0,0 +1,580 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SockressApp = exports.SockressResponse = exports.SockressRequestImpl = void 0;
7
+ exports.createSockress = createSockress;
8
+ const http_1 = __importDefault(require("http"));
9
+ const tls_1 = require("tls");
10
+ const ws_1 = require("ws");
11
+ const cookie_1 = require("cookie");
12
+ const nanoid_1 = require("nanoid");
13
+ class SockressRequestImpl {
14
+ constructor(id, method, path, query, headers, body, cookies, type, ip, protocol, secure, raw) {
15
+ this.id = id;
16
+ this.method = method;
17
+ this.path = path;
18
+ this.query = query;
19
+ this.headers = headers;
20
+ this.body = body;
21
+ this.cookies = cookies;
22
+ this.type = type;
23
+ this.ip = ip;
24
+ this.protocol = protocol;
25
+ this.secure = secure;
26
+ this.raw = raw;
27
+ this.params = {};
28
+ this.context = {};
29
+ }
30
+ get(field) {
31
+ const key = field.toLowerCase();
32
+ const value = this.headers[key];
33
+ if (Array.isArray(value)) {
34
+ return value[0];
35
+ }
36
+ if (typeof value === 'number') {
37
+ return String(value);
38
+ }
39
+ return value;
40
+ }
41
+ }
42
+ exports.SockressRequestImpl = SockressRequestImpl;
43
+ class SockressResponse {
44
+ constructor(mode, cors, allowedOrigin) {
45
+ this.mode = mode;
46
+ this.cors = cors;
47
+ this.allowedOrigin = allowedOrigin;
48
+ this.statusCode = 200;
49
+ this.sent = false;
50
+ this.headers = {};
51
+ this.cookies = [];
52
+ }
53
+ status(code) {
54
+ this.statusCode = code;
55
+ return this;
56
+ }
57
+ set(field, value) {
58
+ this.headers[field.toLowerCase()] = value;
59
+ return this;
60
+ }
61
+ append(field, value) {
62
+ const current = this.headers[field.toLowerCase()];
63
+ if (current) {
64
+ this.headers[field.toLowerCase()] = `${current}, ${value}`;
65
+ }
66
+ else {
67
+ this.headers[field.toLowerCase()] = value;
68
+ }
69
+ return this;
70
+ }
71
+ cookie(name, value, options = {}) {
72
+ this.cookies.push((0, cookie_1.serialize)(name, value, options));
73
+ return this;
74
+ }
75
+ clearCookie(name, options = {}) {
76
+ return this.cookie(name, '', { ...options, maxAge: 0 });
77
+ }
78
+ json(payload) {
79
+ this.set('content-type', 'application/json; charset=utf-8');
80
+ return this.send(JSON.stringify(payload));
81
+ }
82
+ send(payload) {
83
+ if (this.sent) {
84
+ return this;
85
+ }
86
+ this.sent = true;
87
+ if (!this.headers['content-type'] && typeof payload === 'string') {
88
+ this.set('content-type', 'text/plain; charset=utf-8');
89
+ }
90
+ const headersWithCors = this.buildHeaders();
91
+ if (this.mode.kind === 'http') {
92
+ const res = this.mode.res;
93
+ res.statusCode = this.statusCode;
94
+ Object.entries(headersWithCors).forEach(([key, value]) => {
95
+ res.setHeader(key, value);
96
+ });
97
+ if (this.cookies.length) {
98
+ res.setHeader('Set-Cookie', this.cookies);
99
+ }
100
+ if (Buffer.isBuffer(payload)) {
101
+ res.end(payload);
102
+ }
103
+ else if (typeof payload === 'string') {
104
+ res.end(payload);
105
+ }
106
+ else if (payload === undefined || payload === null) {
107
+ res.end();
108
+ }
109
+ else {
110
+ const buffer = Buffer.from(JSON.stringify(payload));
111
+ if (!this.headers['content-type']) {
112
+ res.setHeader('content-type', 'application/json; charset=utf-8');
113
+ }
114
+ res.end(buffer);
115
+ }
116
+ return this;
117
+ }
118
+ const message = {
119
+ type: 'response',
120
+ id: this.mode.requestId,
121
+ status: this.statusCode,
122
+ headers: headersWithCors,
123
+ body: payload,
124
+ cookies: this.cookies.length ? [...this.cookies] : undefined
125
+ };
126
+ this.mode.socket.send(JSON.stringify(message));
127
+ return this;
128
+ }
129
+ end() {
130
+ return this.send();
131
+ }
132
+ isSent() {
133
+ return this.sent;
134
+ }
135
+ buildHeaders() {
136
+ const headers = { ...this.headers };
137
+ headers['access-control-allow-origin'] = this.allowedOrigin;
138
+ headers['access-control-allow-credentials'] = String(this.cors.credentials);
139
+ headers['access-control-allow-methods'] = this.cors.methods.join(', ');
140
+ headers['access-control-allow-headers'] = this.cors.allowedHeaders.join(', ');
141
+ headers['access-control-expose-headers'] = this.cors.exposedHeaders.join(', ');
142
+ headers['access-control-max-age'] = String(this.cors.maxAge);
143
+ return headers;
144
+ }
145
+ }
146
+ exports.SockressResponse = SockressResponse;
147
+ class SockressApp {
148
+ constructor(config) {
149
+ this.config = config;
150
+ this.middlewares = [];
151
+ this.routes = [];
152
+ }
153
+ static create(options) {
154
+ return new SockressApp(normalizeOptions(options));
155
+ }
156
+ use(pathOrHandler, ...rest) {
157
+ let path = '/';
158
+ let stack = [];
159
+ if (typeof pathOrHandler === 'string') {
160
+ path = pathOrHandler;
161
+ stack = rest;
162
+ }
163
+ else {
164
+ stack = [pathOrHandler, ...rest];
165
+ }
166
+ if (!stack.length) {
167
+ throw new Error('use() requires at least one handler');
168
+ }
169
+ for (const handler of stack) {
170
+ if (!handler)
171
+ continue;
172
+ this.middlewares.push({
173
+ path,
174
+ handler,
175
+ isErrorHandler: handler.length === 4
176
+ });
177
+ }
178
+ return this;
179
+ }
180
+ register(method, path, handlers) {
181
+ if (!handlers.length) {
182
+ throw new Error(`Route ${method} ${path} requires at least one handler`);
183
+ }
184
+ this.routes.push({
185
+ method,
186
+ matcher: buildMatcher(path),
187
+ handlers
188
+ });
189
+ return this;
190
+ }
191
+ get(path, ...handlers) {
192
+ return this.register('GET', path, handlers);
193
+ }
194
+ post(path, ...handlers) {
195
+ return this.register('POST', path, handlers);
196
+ }
197
+ put(path, ...handlers) {
198
+ return this.register('PUT', path, handlers);
199
+ }
200
+ patch(path, ...handlers) {
201
+ return this.register('PATCH', path, handlers);
202
+ }
203
+ delete(path, ...handlers) {
204
+ return this.register('DELETE', path, handlers);
205
+ }
206
+ head(path, ...handlers) {
207
+ return this.register('HEAD', path, handlers);
208
+ }
209
+ options(path, ...handlers) {
210
+ return this.register('OPTIONS', path, handlers);
211
+ }
212
+ all(path, ...handlers) {
213
+ return this.register('ALL', path, handlers);
214
+ }
215
+ listen(port, host, callback) {
216
+ if (this.server) {
217
+ throw new Error('Sockress server is already running');
218
+ }
219
+ const httpServer = http_1.default.createServer((req, res) => this.handleHttp(req, res));
220
+ const wss = new ws_1.WebSocketServer({ noServer: true });
221
+ httpServer.on('upgrade', (req, socket, head) => {
222
+ var _a;
223
+ const { pathname } = new URL((_a = req.url) !== null && _a !== void 0 ? _a : '/', `http://${req.headers.host || 'localhost'}`);
224
+ if (pathname !== this.config.socket.path) {
225
+ socket.destroy();
226
+ return;
227
+ }
228
+ if (!isOriginAllowed(req.headers.origin, this.config.cors.origin)) {
229
+ socket.destroy();
230
+ return;
231
+ }
232
+ wss.handleUpgrade(req, socket, head, (ws) => {
233
+ wss.emit('connection', ws, req);
234
+ });
235
+ });
236
+ wss.on('connection', (socket, req) => this.handleSocket(socket, req));
237
+ this.server = httpServer;
238
+ this.wss = wss;
239
+ const listener = httpServer.listen(port, host, () => {
240
+ const address = httpServer.address();
241
+ if (callback)
242
+ callback(address);
243
+ });
244
+ this.startHeartbeat();
245
+ return listener;
246
+ }
247
+ async close() {
248
+ await Promise.all([
249
+ this.server
250
+ ? new Promise((resolve, reject) => this.server.close((err) => (err ? reject(err) : resolve())))
251
+ : Promise.resolve(),
252
+ this.wss
253
+ ? new Promise((resolve, reject) => this.wss.close((err) => (err ? reject(err) : resolve())))
254
+ : Promise.resolve()
255
+ ]);
256
+ if (this.heartbeatInterval) {
257
+ clearInterval(this.heartbeatInterval);
258
+ }
259
+ }
260
+ startHeartbeat() {
261
+ if (!this.wss)
262
+ return;
263
+ this.heartbeatInterval = setInterval(() => {
264
+ var _a;
265
+ (_a = this.wss) === null || _a === void 0 ? void 0 : _a.clients.forEach((socket) => {
266
+ if (socket.isAlive === false) {
267
+ return socket.terminate();
268
+ }
269
+ socket.isAlive = false;
270
+ socket.ping();
271
+ });
272
+ }, this.config.socket.heartbeatInterval);
273
+ }
274
+ async handleHttp(req, res) {
275
+ var _a;
276
+ try {
277
+ const { method = 'GET' } = req;
278
+ const url = new URL((_a = req.url) !== null && _a !== void 0 ? _a : '/', `http://${req.headers.host || 'localhost'}`);
279
+ const path = url.pathname || '/';
280
+ const query = parseQuery(url.searchParams);
281
+ const cookies = req.headers.cookie ? (0, cookie_1.parse)(req.headers.cookie) : {};
282
+ const body = await readBody(req, this.config.bodyLimit);
283
+ const parsedBody = parseBody(body, req.headers['content-type']);
284
+ const secure = isSocketEncrypted(req.socket);
285
+ const sockressReq = new SockressRequestImpl((0, nanoid_1.nanoid)(), method.toUpperCase(), path, query, req.headers, parsedBody, cookies, 'http', getIp(req), secure ? 'https' : 'http', secure, req);
286
+ const origin = pickOrigin(req.headers.origin, this.config.cors.origin);
287
+ const sockressRes = new SockressResponse({ kind: 'http', req, res }, this.config.cors, origin);
288
+ if (sockressReq.method === 'OPTIONS') {
289
+ sockressRes.status(204).end();
290
+ return;
291
+ }
292
+ await this.runPipeline(sockressReq, sockressRes);
293
+ }
294
+ catch (error) {
295
+ res.statusCode = 500;
296
+ res.setHeader('content-type', 'application/json; charset=utf-8');
297
+ res.end(JSON.stringify({ error: 'Internal Server Error', details: error instanceof Error ? error.message : error }));
298
+ }
299
+ }
300
+ handleSocket(socket, req) {
301
+ socket.isAlive = true;
302
+ socket.on('pong', () => {
303
+ socket.isAlive = true;
304
+ });
305
+ socket.on('message', async (raw) => {
306
+ var _a, _b, _c;
307
+ try {
308
+ const payload = JSON.parse(raw.toString());
309
+ if (payload.type !== 'request') {
310
+ return socket.send(JSON.stringify({ type: 'error', message: 'Unsupported message type' }));
311
+ }
312
+ const path = payload.path || '/';
313
+ const method = (payload.method || 'GET').toUpperCase();
314
+ const query = (_a = payload.query) !== null && _a !== void 0 ? _a : {};
315
+ const headers = (_b = payload.headers) !== null && _b !== void 0 ? _b : {};
316
+ const cookies = headers.cookie ? (0, cookie_1.parse)(headers.cookie) : {};
317
+ const secure = isSocketEncrypted(req.socket);
318
+ const sockressReq = new SockressRequestImpl((_c = payload.id) !== null && _c !== void 0 ? _c : (0, nanoid_1.nanoid)(), method, path, query, headers, payload.body, cookies, 'socket', getIp(req), secure ? 'wss' : 'ws', secure);
319
+ const origin = pickOrigin(req.headers.origin, this.config.cors.origin);
320
+ const sockressRes = new SockressResponse({ kind: 'socket', socket, requestId: sockressReq.id }, this.config.cors, origin);
321
+ await this.runPipeline(sockressReq, sockressRes);
322
+ }
323
+ catch (error) {
324
+ const outgoing = {
325
+ type: 'error',
326
+ message: error instanceof Error ? error.message : 'Unexpected socket payload'
327
+ };
328
+ socket.send(JSON.stringify(outgoing));
329
+ }
330
+ });
331
+ }
332
+ async runPipeline(req, res) {
333
+ const stack = this.composeStack(req, req.method);
334
+ let idx = 0;
335
+ const next = async (err) => {
336
+ const layer = stack[idx++];
337
+ if (!layer) {
338
+ if (err) {
339
+ this.renderError(err, req, res);
340
+ }
341
+ else if (!res.isSent()) {
342
+ res.status(404).json({ error: 'Not Found' });
343
+ }
344
+ return;
345
+ }
346
+ const handler = layer.handler;
347
+ const isErrorHandler = layer.isErrorHandler;
348
+ try {
349
+ if (err) {
350
+ if (isErrorHandler) {
351
+ await handler(err, req, res, next);
352
+ }
353
+ else {
354
+ await next(err);
355
+ }
356
+ return;
357
+ }
358
+ if (isErrorHandler) {
359
+ await next();
360
+ return;
361
+ }
362
+ await handler(req, res, next);
363
+ }
364
+ catch (error) {
365
+ await next(error);
366
+ }
367
+ };
368
+ await next();
369
+ }
370
+ composeStack(req, method) {
371
+ const { path } = req;
372
+ const stack = [];
373
+ for (const layer of this.middlewares) {
374
+ if (matchesPrefix(layer.path, path)) {
375
+ stack.push({
376
+ handler: layer.handler,
377
+ isErrorHandler: layer.isErrorHandler
378
+ });
379
+ }
380
+ }
381
+ for (const route of this.routes) {
382
+ if (route.method !== method && route.method !== 'ALL') {
383
+ continue;
384
+ }
385
+ const match = route.matcher.match(path);
386
+ if (!match)
387
+ continue;
388
+ for (const handler of route.handlers) {
389
+ const isErrorHandler = handler.length === 4;
390
+ if (isErrorHandler) {
391
+ const wrapped = (err, request, res, next) => {
392
+ request.params = { ...match.params };
393
+ return handler(err, request, res, next);
394
+ };
395
+ stack.push({ handler: wrapped, isErrorHandler: true });
396
+ }
397
+ else {
398
+ const wrapped = (request, res, next) => {
399
+ request.params = { ...match.params };
400
+ return handler(request, res, next);
401
+ };
402
+ stack.push({ handler: wrapped, isErrorHandler: false });
403
+ }
404
+ }
405
+ }
406
+ return stack;
407
+ }
408
+ renderError(err, req, res) {
409
+ if (res.isSent()) {
410
+ return;
411
+ }
412
+ res.status(500).json({
413
+ error: 'Internal Server Error',
414
+ details: err instanceof Error ? err.message : err
415
+ });
416
+ }
417
+ }
418
+ exports.SockressApp = SockressApp;
419
+ function createSockress(options) {
420
+ return SockressApp.create(options);
421
+ }
422
+ function normalizeOptions(options) {
423
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
424
+ const cors = {
425
+ origin: (_b = (_a = options === null || options === void 0 ? void 0 : options.cors) === null || _a === void 0 ? void 0 : _a.origin) !== null && _b !== void 0 ? _b : '*',
426
+ credentials: (_d = (_c = options === null || options === void 0 ? void 0 : options.cors) === null || _c === void 0 ? void 0 : _c.credentials) !== null && _d !== void 0 ? _d : true,
427
+ methods: (_f = (_e = options === null || options === void 0 ? void 0 : options.cors) === null || _e === void 0 ? void 0 : _e.methods) !== null && _f !== void 0 ? _f : ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
428
+ allowedHeaders: (_h = (_g = options === null || options === void 0 ? void 0 : options.cors) === null || _g === void 0 ? void 0 : _g.allowedHeaders) !== null && _h !== void 0 ? _h : ['Content-Type', 'Authorization', 'X-Requested-With'],
429
+ exposedHeaders: (_k = (_j = options === null || options === void 0 ? void 0 : options.cors) === null || _j === void 0 ? void 0 : _j.exposedHeaders) !== null && _k !== void 0 ? _k : [],
430
+ maxAge: (_m = (_l = options === null || options === void 0 ? void 0 : options.cors) === null || _l === void 0 ? void 0 : _l.maxAge) !== null && _m !== void 0 ? _m : 600
431
+ };
432
+ const socket = {
433
+ path: (_p = (_o = options === null || options === void 0 ? void 0 : options.socket) === null || _o === void 0 ? void 0 : _o.path) !== null && _p !== void 0 ? _p : '/sockress',
434
+ heartbeatInterval: (_r = (_q = options === null || options === void 0 ? void 0 : options.socket) === null || _q === void 0 ? void 0 : _q.heartbeatInterval) !== null && _r !== void 0 ? _r : 30000,
435
+ idleTimeout: (_t = (_s = options === null || options === void 0 ? void 0 : options.socket) === null || _s === void 0 ? void 0 : _s.idleTimeout) !== null && _t !== void 0 ? _t : 120000
436
+ };
437
+ const bodyLimit = (_u = options === null || options === void 0 ? void 0 : options.bodyLimit) !== null && _u !== void 0 ? _u : 1000000;
438
+ return { cors, socket, bodyLimit };
439
+ }
440
+ function buildMatcher(path) {
441
+ if (path === '*' || path === '/*') {
442
+ return {
443
+ raw: path,
444
+ match: (incoming) => ({ params: { wild: incoming.replace(/^\//, '') } })
445
+ };
446
+ }
447
+ const keys = [];
448
+ const pattern = path
449
+ .split('/')
450
+ .map((segment) => {
451
+ if (!segment)
452
+ return '';
453
+ if (segment.startsWith(':')) {
454
+ const key = segment.replace(/^:/, '').replace(/\?$/, '');
455
+ keys.push(key);
456
+ return segment.endsWith('?') ? '(?:\\/([^/]+))?' : '\\/([^/]+)';
457
+ }
458
+ if (segment === '*') {
459
+ keys.push('wild');
460
+ return '\\/(.*)';
461
+ }
462
+ return `\\/${segment.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`;
463
+ })
464
+ .join('');
465
+ const regex = new RegExp(`^${pattern || '\\/'}\\/?$`);
466
+ return {
467
+ raw: path,
468
+ match: (incoming) => {
469
+ const exec = regex.exec(incoming === '' ? '/' : incoming);
470
+ if (!exec) {
471
+ return null;
472
+ }
473
+ const params = {};
474
+ keys.forEach((key, index) => {
475
+ const value = exec[index + 1];
476
+ if (value !== undefined) {
477
+ params[key] = decodeURIComponent(value);
478
+ }
479
+ });
480
+ return { params };
481
+ }
482
+ };
483
+ }
484
+ async function readBody(req, limit) {
485
+ return new Promise((resolve, reject) => {
486
+ const chunks = [];
487
+ let total = 0;
488
+ req.on('data', (chunk) => {
489
+ total += chunk.length;
490
+ if (total > limit) {
491
+ reject(new Error('Payload too large'));
492
+ req.destroy();
493
+ return;
494
+ }
495
+ chunks.push(chunk);
496
+ });
497
+ req.on('end', () => resolve(Buffer.concat(chunks)));
498
+ req.on('error', (err) => reject(err));
499
+ });
500
+ }
501
+ function parseBody(buffer, contentType) {
502
+ if (!buffer.length)
503
+ return undefined;
504
+ const type = contentType === null || contentType === void 0 ? void 0 : contentType.split(';')[0].trim().toLowerCase();
505
+ if (type === 'application/json') {
506
+ const text = buffer.toString('utf8');
507
+ return text ? JSON.parse(text) : undefined;
508
+ }
509
+ if (type === 'application/x-www-form-urlencoded') {
510
+ const params = new URLSearchParams(buffer.toString('utf8'));
511
+ const result = {};
512
+ for (const [key, value] of params.entries()) {
513
+ if (result[key]) {
514
+ const existing = result[key];
515
+ result[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];
516
+ }
517
+ else {
518
+ result[key] = value;
519
+ }
520
+ }
521
+ return result;
522
+ }
523
+ return buffer;
524
+ }
525
+ function parseQuery(searchParams) {
526
+ const result = {};
527
+ for (const [key, value] of searchParams.entries()) {
528
+ if (result[key]) {
529
+ const existing = result[key];
530
+ result[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];
531
+ }
532
+ else {
533
+ result[key] = value;
534
+ }
535
+ }
536
+ return result;
537
+ }
538
+ function matchesPrefix(base, path) {
539
+ if (base === '/' || base === '')
540
+ return true;
541
+ if (!base.startsWith('/')) {
542
+ base = `/${base}`;
543
+ }
544
+ return path === base || path.startsWith(`${base}/`);
545
+ }
546
+ function getIp(req) {
547
+ var _a;
548
+ const forwarded = req.headers['x-forwarded-for'];
549
+ if (Array.isArray(forwarded)) {
550
+ return forwarded[0];
551
+ }
552
+ if (typeof forwarded === 'string') {
553
+ return forwarded.split(',')[0].trim();
554
+ }
555
+ return (_a = req.socket.remoteAddress) !== null && _a !== void 0 ? _a : undefined;
556
+ }
557
+ function isOriginAllowed(originHeader, allowed) {
558
+ if (!originHeader || allowed === '*')
559
+ return true;
560
+ if (Array.isArray(allowed)) {
561
+ return allowed.includes(originHeader);
562
+ }
563
+ return allowed === originHeader;
564
+ }
565
+ function pickOrigin(requestOrigin, allowed) {
566
+ var _a;
567
+ if (allowed === '*')
568
+ return '*';
569
+ if (Array.isArray(allowed)) {
570
+ if (requestOrigin && allowed.includes(requestOrigin)) {
571
+ return requestOrigin;
572
+ }
573
+ return (_a = allowed[0]) !== null && _a !== void 0 ? _a : '*';
574
+ }
575
+ return allowed;
576
+ }
577
+ function isSocketEncrypted(socket) {
578
+ return socket instanceof tls_1.TLSSocket && Boolean(socket.encrypted);
579
+ }
580
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "sockress",
3
+ "version": "0.1.0",
4
+ "description": "Express-like server framework with built-in socket fallback",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "commonjs",
8
+ "exports": {
9
+ ".": {
10
+ "require": "./dist/index.js",
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "build": "tsc -p tsconfig.json",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "dependencies": {
20
+ "cookie": "^0.6.0",
21
+ "nanoid": "^5.0.7",
22
+ "ws": "^8.16.0"
23
+ },
24
+ "devDependencies": {
25
+ "@types/cookie": "^0.6.0",
26
+ "@types/node": "^20.14.10",
27
+ "@types/ws": "^8.5.10"
28
+ }
29
+ }