roster-server 1.8.6 → 1.9.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/README.md CHANGED
@@ -32,7 +32,9 @@ Your project should look something like this:
32
32
  ├── example.com/
33
33
  │ └── index.js
34
34
  └── subdomain.example.com/
35
- └── index.js
35
+ └── index.js
36
+ └── other-domain.com/
37
+ └── index.js
36
38
  ```
37
39
 
38
40
  ### Setting Up Your Server
@@ -105,6 +107,7 @@ module.exports = (httpsServer) => {
105
107
  });
106
108
 
107
109
  return (req, res) => {
110
+ if (req.url && req.url.startsWith(io.opts.path)) return;
108
111
  res.writeHead(200);
109
112
  res.end('Socket.IO server running');
110
113
  };
@@ -9,6 +9,8 @@
9
9
  "version": "1.0.0",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
+ "express": "^5.2.1",
13
+ "shotx": "^1.4.2",
12
14
  "socket.io": "^4.8.1"
13
15
  }
14
16
  },
@@ -58,6 +60,107 @@
58
60
  "node": "^4.5.0 || >= 5.9"
59
61
  }
60
62
  },
63
+ "node_modules/body-parser": {
64
+ "version": "2.2.1",
65
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz",
66
+ "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==",
67
+ "license": "MIT",
68
+ "dependencies": {
69
+ "bytes": "^3.1.2",
70
+ "content-type": "^1.0.5",
71
+ "debug": "^4.4.3",
72
+ "http-errors": "^2.0.0",
73
+ "iconv-lite": "^0.7.0",
74
+ "on-finished": "^2.4.1",
75
+ "qs": "^6.14.0",
76
+ "raw-body": "^3.0.1",
77
+ "type-is": "^2.0.1"
78
+ },
79
+ "engines": {
80
+ "node": ">=18"
81
+ },
82
+ "funding": {
83
+ "type": "opencollective",
84
+ "url": "https://opencollective.com/express"
85
+ }
86
+ },
87
+ "node_modules/body-parser/node_modules/debug": {
88
+ "version": "4.4.3",
89
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
90
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
91
+ "license": "MIT",
92
+ "dependencies": {
93
+ "ms": "^2.1.3"
94
+ },
95
+ "engines": {
96
+ "node": ">=6.0"
97
+ },
98
+ "peerDependenciesMeta": {
99
+ "supports-color": {
100
+ "optional": true
101
+ }
102
+ }
103
+ },
104
+ "node_modules/bytes": {
105
+ "version": "3.1.2",
106
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
107
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
108
+ "license": "MIT",
109
+ "engines": {
110
+ "node": ">= 0.8"
111
+ }
112
+ },
113
+ "node_modules/call-bind-apply-helpers": {
114
+ "version": "1.0.2",
115
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
116
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
117
+ "license": "MIT",
118
+ "dependencies": {
119
+ "es-errors": "^1.3.0",
120
+ "function-bind": "^1.1.2"
121
+ },
122
+ "engines": {
123
+ "node": ">= 0.4"
124
+ }
125
+ },
126
+ "node_modules/call-bound": {
127
+ "version": "1.0.4",
128
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
129
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
130
+ "license": "MIT",
131
+ "dependencies": {
132
+ "call-bind-apply-helpers": "^1.0.2",
133
+ "get-intrinsic": "^1.3.0"
134
+ },
135
+ "engines": {
136
+ "node": ">= 0.4"
137
+ },
138
+ "funding": {
139
+ "url": "https://github.com/sponsors/ljharb"
140
+ }
141
+ },
142
+ "node_modules/content-disposition": {
143
+ "version": "1.0.1",
144
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz",
145
+ "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==",
146
+ "license": "MIT",
147
+ "engines": {
148
+ "node": ">=18"
149
+ },
150
+ "funding": {
151
+ "type": "opencollective",
152
+ "url": "https://opencollective.com/express"
153
+ }
154
+ },
155
+ "node_modules/content-type": {
156
+ "version": "1.0.5",
157
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
158
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
159
+ "license": "MIT",
160
+ "engines": {
161
+ "node": ">= 0.6"
162
+ }
163
+ },
61
164
  "node_modules/cookie": {
62
165
  "version": "0.7.2",
63
166
  "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
@@ -67,6 +170,15 @@
67
170
  "node": ">= 0.6"
68
171
  }
69
172
  },
173
+ "node_modules/cookie-signature": {
174
+ "version": "1.2.2",
175
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
176
+ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
177
+ "license": "MIT",
178
+ "engines": {
179
+ "node": ">=6.6.0"
180
+ }
181
+ },
70
182
  "node_modules/cors": {
71
183
  "version": "2.8.5",
72
184
  "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
@@ -97,6 +209,54 @@
97
209
  }
98
210
  }
99
211
  },
212
+ "node_modules/deepbase": {
213
+ "version": "2.0.4",
214
+ "resolved": "https://registry.npmjs.org/deepbase/-/deepbase-2.0.4.tgz",
215
+ "integrity": "sha512-zeHRWA52lXNaHIr1lmoFOItSASM2vfaT+T/QjBV3rOa9dlkp+Qzzapn7qRUEd4YUptIqDcQAjFl3lRJu3aOdHQ==",
216
+ "license": "MIT",
217
+ "dependencies": {
218
+ "nanoid": "^5.1.2",
219
+ "steno": "^0.4.4"
220
+ }
221
+ },
222
+ "node_modules/depd": {
223
+ "version": "2.0.0",
224
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
225
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
226
+ "license": "MIT",
227
+ "engines": {
228
+ "node": ">= 0.8"
229
+ }
230
+ },
231
+ "node_modules/dunder-proto": {
232
+ "version": "1.0.1",
233
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
234
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
235
+ "license": "MIT",
236
+ "dependencies": {
237
+ "call-bind-apply-helpers": "^1.0.1",
238
+ "es-errors": "^1.3.0",
239
+ "gopd": "^1.2.0"
240
+ },
241
+ "engines": {
242
+ "node": ">= 0.4"
243
+ }
244
+ },
245
+ "node_modules/ee-first": {
246
+ "version": "1.1.1",
247
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
248
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
249
+ "license": "MIT"
250
+ },
251
+ "node_modules/encodeurl": {
252
+ "version": "2.0.0",
253
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
254
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
255
+ "license": "MIT",
256
+ "engines": {
257
+ "node": ">= 0.8"
258
+ }
259
+ },
100
260
  "node_modules/engine.io": {
101
261
  "version": "6.6.4",
102
262
  "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz",
@@ -117,6 +277,19 @@
117
277
  "node": ">=10.2.0"
118
278
  }
119
279
  },
280
+ "node_modules/engine.io-client": {
281
+ "version": "6.6.3",
282
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz",
283
+ "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==",
284
+ "license": "MIT",
285
+ "dependencies": {
286
+ "@socket.io/component-emitter": "~3.1.0",
287
+ "debug": "~4.3.1",
288
+ "engine.io-parser": "~5.2.1",
289
+ "ws": "~8.17.1",
290
+ "xmlhttprequest-ssl": "~2.1.1"
291
+ }
292
+ },
120
293
  "node_modules/engine.io-parser": {
121
294
  "version": "5.2.3",
122
295
  "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
@@ -126,6 +299,398 @@
126
299
  "node": ">=10.0.0"
127
300
  }
128
301
  },
302
+ "node_modules/es-define-property": {
303
+ "version": "1.0.1",
304
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
305
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
306
+ "license": "MIT",
307
+ "engines": {
308
+ "node": ">= 0.4"
309
+ }
310
+ },
311
+ "node_modules/es-errors": {
312
+ "version": "1.3.0",
313
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
314
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
315
+ "license": "MIT",
316
+ "engines": {
317
+ "node": ">= 0.4"
318
+ }
319
+ },
320
+ "node_modules/es-object-atoms": {
321
+ "version": "1.1.1",
322
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
323
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
324
+ "license": "MIT",
325
+ "dependencies": {
326
+ "es-errors": "^1.3.0"
327
+ },
328
+ "engines": {
329
+ "node": ">= 0.4"
330
+ }
331
+ },
332
+ "node_modules/escape-html": {
333
+ "version": "1.0.3",
334
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
335
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
336
+ "license": "MIT"
337
+ },
338
+ "node_modules/etag": {
339
+ "version": "1.8.1",
340
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
341
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
342
+ "license": "MIT",
343
+ "engines": {
344
+ "node": ">= 0.6"
345
+ }
346
+ },
347
+ "node_modules/express": {
348
+ "version": "5.2.1",
349
+ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
350
+ "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
351
+ "license": "MIT",
352
+ "dependencies": {
353
+ "accepts": "^2.0.0",
354
+ "body-parser": "^2.2.1",
355
+ "content-disposition": "^1.0.0",
356
+ "content-type": "^1.0.5",
357
+ "cookie": "^0.7.1",
358
+ "cookie-signature": "^1.2.1",
359
+ "debug": "^4.4.0",
360
+ "depd": "^2.0.0",
361
+ "encodeurl": "^2.0.0",
362
+ "escape-html": "^1.0.3",
363
+ "etag": "^1.8.1",
364
+ "finalhandler": "^2.1.0",
365
+ "fresh": "^2.0.0",
366
+ "http-errors": "^2.0.0",
367
+ "merge-descriptors": "^2.0.0",
368
+ "mime-types": "^3.0.0",
369
+ "on-finished": "^2.4.1",
370
+ "once": "^1.4.0",
371
+ "parseurl": "^1.3.3",
372
+ "proxy-addr": "^2.0.7",
373
+ "qs": "^6.14.0",
374
+ "range-parser": "^1.2.1",
375
+ "router": "^2.2.0",
376
+ "send": "^1.1.0",
377
+ "serve-static": "^2.2.0",
378
+ "statuses": "^2.0.1",
379
+ "type-is": "^2.0.1",
380
+ "vary": "^1.1.2"
381
+ },
382
+ "engines": {
383
+ "node": ">= 18"
384
+ },
385
+ "funding": {
386
+ "type": "opencollective",
387
+ "url": "https://opencollective.com/express"
388
+ }
389
+ },
390
+ "node_modules/express/node_modules/accepts": {
391
+ "version": "2.0.0",
392
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
393
+ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
394
+ "license": "MIT",
395
+ "dependencies": {
396
+ "mime-types": "^3.0.0",
397
+ "negotiator": "^1.0.0"
398
+ },
399
+ "engines": {
400
+ "node": ">= 0.6"
401
+ }
402
+ },
403
+ "node_modules/express/node_modules/debug": {
404
+ "version": "4.4.3",
405
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
406
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
407
+ "license": "MIT",
408
+ "dependencies": {
409
+ "ms": "^2.1.3"
410
+ },
411
+ "engines": {
412
+ "node": ">=6.0"
413
+ },
414
+ "peerDependenciesMeta": {
415
+ "supports-color": {
416
+ "optional": true
417
+ }
418
+ }
419
+ },
420
+ "node_modules/express/node_modules/mime-db": {
421
+ "version": "1.54.0",
422
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
423
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
424
+ "license": "MIT",
425
+ "engines": {
426
+ "node": ">= 0.6"
427
+ }
428
+ },
429
+ "node_modules/express/node_modules/mime-types": {
430
+ "version": "3.0.2",
431
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
432
+ "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
433
+ "license": "MIT",
434
+ "dependencies": {
435
+ "mime-db": "^1.54.0"
436
+ },
437
+ "engines": {
438
+ "node": ">=18"
439
+ },
440
+ "funding": {
441
+ "type": "opencollective",
442
+ "url": "https://opencollective.com/express"
443
+ }
444
+ },
445
+ "node_modules/express/node_modules/negotiator": {
446
+ "version": "1.0.0",
447
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
448
+ "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
449
+ "license": "MIT",
450
+ "engines": {
451
+ "node": ">= 0.6"
452
+ }
453
+ },
454
+ "node_modules/finalhandler": {
455
+ "version": "2.1.1",
456
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
457
+ "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
458
+ "license": "MIT",
459
+ "dependencies": {
460
+ "debug": "^4.4.0",
461
+ "encodeurl": "^2.0.0",
462
+ "escape-html": "^1.0.3",
463
+ "on-finished": "^2.4.1",
464
+ "parseurl": "^1.3.3",
465
+ "statuses": "^2.0.1"
466
+ },
467
+ "engines": {
468
+ "node": ">= 18.0.0"
469
+ },
470
+ "funding": {
471
+ "type": "opencollective",
472
+ "url": "https://opencollective.com/express"
473
+ }
474
+ },
475
+ "node_modules/finalhandler/node_modules/debug": {
476
+ "version": "4.4.3",
477
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
478
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
479
+ "license": "MIT",
480
+ "dependencies": {
481
+ "ms": "^2.1.3"
482
+ },
483
+ "engines": {
484
+ "node": ">=6.0"
485
+ },
486
+ "peerDependenciesMeta": {
487
+ "supports-color": {
488
+ "optional": true
489
+ }
490
+ }
491
+ },
492
+ "node_modules/forwarded": {
493
+ "version": "0.2.0",
494
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
495
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
496
+ "license": "MIT",
497
+ "engines": {
498
+ "node": ">= 0.6"
499
+ }
500
+ },
501
+ "node_modules/fresh": {
502
+ "version": "2.0.0",
503
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
504
+ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
505
+ "license": "MIT",
506
+ "engines": {
507
+ "node": ">= 0.8"
508
+ }
509
+ },
510
+ "node_modules/function-bind": {
511
+ "version": "1.1.2",
512
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
513
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
514
+ "license": "MIT",
515
+ "funding": {
516
+ "url": "https://github.com/sponsors/ljharb"
517
+ }
518
+ },
519
+ "node_modules/get-intrinsic": {
520
+ "version": "1.3.0",
521
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
522
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
523
+ "license": "MIT",
524
+ "dependencies": {
525
+ "call-bind-apply-helpers": "^1.0.2",
526
+ "es-define-property": "^1.0.1",
527
+ "es-errors": "^1.3.0",
528
+ "es-object-atoms": "^1.1.1",
529
+ "function-bind": "^1.1.2",
530
+ "get-proto": "^1.0.1",
531
+ "gopd": "^1.2.0",
532
+ "has-symbols": "^1.1.0",
533
+ "hasown": "^2.0.2",
534
+ "math-intrinsics": "^1.1.0"
535
+ },
536
+ "engines": {
537
+ "node": ">= 0.4"
538
+ },
539
+ "funding": {
540
+ "url": "https://github.com/sponsors/ljharb"
541
+ }
542
+ },
543
+ "node_modules/get-proto": {
544
+ "version": "1.0.1",
545
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
546
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
547
+ "license": "MIT",
548
+ "dependencies": {
549
+ "dunder-proto": "^1.0.1",
550
+ "es-object-atoms": "^1.0.0"
551
+ },
552
+ "engines": {
553
+ "node": ">= 0.4"
554
+ }
555
+ },
556
+ "node_modules/gopd": {
557
+ "version": "1.2.0",
558
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
559
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
560
+ "license": "MIT",
561
+ "engines": {
562
+ "node": ">= 0.4"
563
+ },
564
+ "funding": {
565
+ "url": "https://github.com/sponsors/ljharb"
566
+ }
567
+ },
568
+ "node_modules/graceful-fs": {
569
+ "version": "4.2.11",
570
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
571
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
572
+ "license": "ISC"
573
+ },
574
+ "node_modules/has-symbols": {
575
+ "version": "1.1.0",
576
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
577
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
578
+ "license": "MIT",
579
+ "engines": {
580
+ "node": ">= 0.4"
581
+ },
582
+ "funding": {
583
+ "url": "https://github.com/sponsors/ljharb"
584
+ }
585
+ },
586
+ "node_modules/hasown": {
587
+ "version": "2.0.2",
588
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
589
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
590
+ "license": "MIT",
591
+ "dependencies": {
592
+ "function-bind": "^1.1.2"
593
+ },
594
+ "engines": {
595
+ "node": ">= 0.4"
596
+ }
597
+ },
598
+ "node_modules/http-errors": {
599
+ "version": "2.0.1",
600
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
601
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
602
+ "license": "MIT",
603
+ "dependencies": {
604
+ "depd": "~2.0.0",
605
+ "inherits": "~2.0.4",
606
+ "setprototypeof": "~1.2.0",
607
+ "statuses": "~2.0.2",
608
+ "toidentifier": "~1.0.1"
609
+ },
610
+ "engines": {
611
+ "node": ">= 0.8"
612
+ },
613
+ "funding": {
614
+ "type": "opencollective",
615
+ "url": "https://opencollective.com/express"
616
+ }
617
+ },
618
+ "node_modules/iconv-lite": {
619
+ "version": "0.7.1",
620
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz",
621
+ "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==",
622
+ "license": "MIT",
623
+ "dependencies": {
624
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
625
+ },
626
+ "engines": {
627
+ "node": ">=0.10.0"
628
+ },
629
+ "funding": {
630
+ "type": "opencollective",
631
+ "url": "https://opencollective.com/express"
632
+ }
633
+ },
634
+ "node_modules/inherits": {
635
+ "version": "2.0.4",
636
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
637
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
638
+ "license": "ISC"
639
+ },
640
+ "node_modules/ipaddr.js": {
641
+ "version": "1.9.1",
642
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
643
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
644
+ "license": "MIT",
645
+ "engines": {
646
+ "node": ">= 0.10"
647
+ }
648
+ },
649
+ "node_modules/is-promise": {
650
+ "version": "4.0.0",
651
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
652
+ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
653
+ "license": "MIT"
654
+ },
655
+ "node_modules/lemonlog": {
656
+ "version": "1.2.0",
657
+ "resolved": "https://registry.npmjs.org/lemonlog/-/lemonlog-1.2.0.tgz",
658
+ "integrity": "sha512-gBhvkCXzpdEdD2gnso4XFKNJANlhpVOliV03gio6sk13hD47yhXpesiM/ttmBH+CuOBXoHI0rncK34AJdgmdXQ==",
659
+ "license": "MIT",
660
+ "dependencies": {
661
+ "debug": "^4.1.1"
662
+ }
663
+ },
664
+ "node_modules/math-intrinsics": {
665
+ "version": "1.1.0",
666
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
667
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
668
+ "license": "MIT",
669
+ "engines": {
670
+ "node": ">= 0.4"
671
+ }
672
+ },
673
+ "node_modules/media-typer": {
674
+ "version": "1.1.0",
675
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
676
+ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
677
+ "license": "MIT",
678
+ "engines": {
679
+ "node": ">= 0.8"
680
+ }
681
+ },
682
+ "node_modules/merge-descriptors": {
683
+ "version": "2.0.0",
684
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
685
+ "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
686
+ "license": "MIT",
687
+ "engines": {
688
+ "node": ">=18"
689
+ },
690
+ "funding": {
691
+ "url": "https://github.com/sponsors/sindresorhus"
692
+ }
693
+ },
129
694
  "node_modules/mime-db": {
130
695
  "version": "1.52.0",
131
696
  "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
@@ -153,6 +718,24 @@
153
718
  "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
154
719
  "license": "MIT"
155
720
  },
721
+ "node_modules/nanoid": {
722
+ "version": "5.1.6",
723
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz",
724
+ "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==",
725
+ "funding": [
726
+ {
727
+ "type": "github",
728
+ "url": "https://github.com/sponsors/ai"
729
+ }
730
+ ],
731
+ "license": "MIT",
732
+ "bin": {
733
+ "nanoid": "bin/nanoid.js"
734
+ },
735
+ "engines": {
736
+ "node": "^18 || >=20"
737
+ }
738
+ },
156
739
  "node_modules/negotiator": {
157
740
  "version": "0.6.3",
158
741
  "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -171,6 +754,302 @@
171
754
  "node": ">=0.10.0"
172
755
  }
173
756
  },
757
+ "node_modules/object-inspect": {
758
+ "version": "1.13.4",
759
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
760
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
761
+ "license": "MIT",
762
+ "engines": {
763
+ "node": ">= 0.4"
764
+ },
765
+ "funding": {
766
+ "url": "https://github.com/sponsors/ljharb"
767
+ }
768
+ },
769
+ "node_modules/on-finished": {
770
+ "version": "2.4.1",
771
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
772
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
773
+ "license": "MIT",
774
+ "dependencies": {
775
+ "ee-first": "1.1.1"
776
+ },
777
+ "engines": {
778
+ "node": ">= 0.8"
779
+ }
780
+ },
781
+ "node_modules/once": {
782
+ "version": "1.4.0",
783
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
784
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
785
+ "license": "ISC",
786
+ "dependencies": {
787
+ "wrappy": "1"
788
+ }
789
+ },
790
+ "node_modules/parseurl": {
791
+ "version": "1.3.3",
792
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
793
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
794
+ "license": "MIT",
795
+ "engines": {
796
+ "node": ">= 0.8"
797
+ }
798
+ },
799
+ "node_modules/path-to-regexp": {
800
+ "version": "8.3.0",
801
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz",
802
+ "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==",
803
+ "license": "MIT",
804
+ "funding": {
805
+ "type": "opencollective",
806
+ "url": "https://opencollective.com/express"
807
+ }
808
+ },
809
+ "node_modules/proxy-addr": {
810
+ "version": "2.0.7",
811
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
812
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
813
+ "license": "MIT",
814
+ "dependencies": {
815
+ "forwarded": "0.2.0",
816
+ "ipaddr.js": "1.9.1"
817
+ },
818
+ "engines": {
819
+ "node": ">= 0.10"
820
+ }
821
+ },
822
+ "node_modules/qs": {
823
+ "version": "6.14.0",
824
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
825
+ "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
826
+ "license": "BSD-3-Clause",
827
+ "dependencies": {
828
+ "side-channel": "^1.1.0"
829
+ },
830
+ "engines": {
831
+ "node": ">=0.6"
832
+ },
833
+ "funding": {
834
+ "url": "https://github.com/sponsors/ljharb"
835
+ }
836
+ },
837
+ "node_modules/range-parser": {
838
+ "version": "1.2.1",
839
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
840
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
841
+ "license": "MIT",
842
+ "engines": {
843
+ "node": ">= 0.6"
844
+ }
845
+ },
846
+ "node_modules/raw-body": {
847
+ "version": "3.0.2",
848
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
849
+ "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
850
+ "license": "MIT",
851
+ "dependencies": {
852
+ "bytes": "~3.1.2",
853
+ "http-errors": "~2.0.1",
854
+ "iconv-lite": "~0.7.0",
855
+ "unpipe": "~1.0.0"
856
+ },
857
+ "engines": {
858
+ "node": ">= 0.10"
859
+ }
860
+ },
861
+ "node_modules/router": {
862
+ "version": "2.2.0",
863
+ "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
864
+ "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
865
+ "license": "MIT",
866
+ "dependencies": {
867
+ "debug": "^4.4.0",
868
+ "depd": "^2.0.0",
869
+ "is-promise": "^4.0.0",
870
+ "parseurl": "^1.3.3",
871
+ "path-to-regexp": "^8.0.0"
872
+ },
873
+ "engines": {
874
+ "node": ">= 18"
875
+ }
876
+ },
877
+ "node_modules/router/node_modules/debug": {
878
+ "version": "4.4.3",
879
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
880
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
881
+ "license": "MIT",
882
+ "dependencies": {
883
+ "ms": "^2.1.3"
884
+ },
885
+ "engines": {
886
+ "node": ">=6.0"
887
+ },
888
+ "peerDependenciesMeta": {
889
+ "supports-color": {
890
+ "optional": true
891
+ }
892
+ }
893
+ },
894
+ "node_modules/safer-buffer": {
895
+ "version": "2.1.2",
896
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
897
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
898
+ "license": "MIT"
899
+ },
900
+ "node_modules/send": {
901
+ "version": "1.2.0",
902
+ "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz",
903
+ "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==",
904
+ "license": "MIT",
905
+ "dependencies": {
906
+ "debug": "^4.3.5",
907
+ "encodeurl": "^2.0.0",
908
+ "escape-html": "^1.0.3",
909
+ "etag": "^1.8.1",
910
+ "fresh": "^2.0.0",
911
+ "http-errors": "^2.0.0",
912
+ "mime-types": "^3.0.1",
913
+ "ms": "^2.1.3",
914
+ "on-finished": "^2.4.1",
915
+ "range-parser": "^1.2.1",
916
+ "statuses": "^2.0.1"
917
+ },
918
+ "engines": {
919
+ "node": ">= 18"
920
+ }
921
+ },
922
+ "node_modules/send/node_modules/mime-db": {
923
+ "version": "1.54.0",
924
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
925
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
926
+ "license": "MIT",
927
+ "engines": {
928
+ "node": ">= 0.6"
929
+ }
930
+ },
931
+ "node_modules/send/node_modules/mime-types": {
932
+ "version": "3.0.2",
933
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
934
+ "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
935
+ "license": "MIT",
936
+ "dependencies": {
937
+ "mime-db": "^1.54.0"
938
+ },
939
+ "engines": {
940
+ "node": ">=18"
941
+ },
942
+ "funding": {
943
+ "type": "opencollective",
944
+ "url": "https://opencollective.com/express"
945
+ }
946
+ },
947
+ "node_modules/serve-static": {
948
+ "version": "2.2.0",
949
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz",
950
+ "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==",
951
+ "license": "MIT",
952
+ "dependencies": {
953
+ "encodeurl": "^2.0.0",
954
+ "escape-html": "^1.0.3",
955
+ "parseurl": "^1.3.3",
956
+ "send": "^1.2.0"
957
+ },
958
+ "engines": {
959
+ "node": ">= 18"
960
+ }
961
+ },
962
+ "node_modules/setprototypeof": {
963
+ "version": "1.2.0",
964
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
965
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
966
+ "license": "ISC"
967
+ },
968
+ "node_modules/shotx": {
969
+ "version": "1.4.2",
970
+ "resolved": "https://registry.npmjs.org/shotx/-/shotx-1.4.2.tgz",
971
+ "integrity": "sha512-99w3rvEYjW+0l/VBcSW35SmsRVW75x/oCtBSwMTKegw3tBXdDAXIdXPUBOdekoNa8gQ1xX4z9pVkWZCZCe2KWg==",
972
+ "license": "MIT",
973
+ "dependencies": {
974
+ "deepbase": "^2.0.4",
975
+ "lemonlog": "^1.1.4",
976
+ "socket.io": "^4.8.1",
977
+ "socket.io-client": "^4.8.1",
978
+ "uuid": "^11.0.5"
979
+ }
980
+ },
981
+ "node_modules/side-channel": {
982
+ "version": "1.1.0",
983
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
984
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
985
+ "license": "MIT",
986
+ "dependencies": {
987
+ "es-errors": "^1.3.0",
988
+ "object-inspect": "^1.13.3",
989
+ "side-channel-list": "^1.0.0",
990
+ "side-channel-map": "^1.0.1",
991
+ "side-channel-weakmap": "^1.0.2"
992
+ },
993
+ "engines": {
994
+ "node": ">= 0.4"
995
+ },
996
+ "funding": {
997
+ "url": "https://github.com/sponsors/ljharb"
998
+ }
999
+ },
1000
+ "node_modules/side-channel-list": {
1001
+ "version": "1.0.0",
1002
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
1003
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
1004
+ "license": "MIT",
1005
+ "dependencies": {
1006
+ "es-errors": "^1.3.0",
1007
+ "object-inspect": "^1.13.3"
1008
+ },
1009
+ "engines": {
1010
+ "node": ">= 0.4"
1011
+ },
1012
+ "funding": {
1013
+ "url": "https://github.com/sponsors/ljharb"
1014
+ }
1015
+ },
1016
+ "node_modules/side-channel-map": {
1017
+ "version": "1.0.1",
1018
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
1019
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
1020
+ "license": "MIT",
1021
+ "dependencies": {
1022
+ "call-bound": "^1.0.2",
1023
+ "es-errors": "^1.3.0",
1024
+ "get-intrinsic": "^1.2.5",
1025
+ "object-inspect": "^1.13.3"
1026
+ },
1027
+ "engines": {
1028
+ "node": ">= 0.4"
1029
+ },
1030
+ "funding": {
1031
+ "url": "https://github.com/sponsors/ljharb"
1032
+ }
1033
+ },
1034
+ "node_modules/side-channel-weakmap": {
1035
+ "version": "1.0.2",
1036
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
1037
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
1038
+ "license": "MIT",
1039
+ "dependencies": {
1040
+ "call-bound": "^1.0.2",
1041
+ "es-errors": "^1.3.0",
1042
+ "get-intrinsic": "^1.2.5",
1043
+ "object-inspect": "^1.13.3",
1044
+ "side-channel-map": "^1.0.1"
1045
+ },
1046
+ "engines": {
1047
+ "node": ">= 0.4"
1048
+ },
1049
+ "funding": {
1050
+ "url": "https://github.com/sponsors/ljharb"
1051
+ }
1052
+ },
174
1053
  "node_modules/socket.io": {
175
1054
  "version": "4.8.1",
176
1055
  "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz",
@@ -199,6 +1078,21 @@
199
1078
  "ws": "~8.17.1"
200
1079
  }
201
1080
  },
1081
+ "node_modules/socket.io-client": {
1082
+ "version": "4.8.1",
1083
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz",
1084
+ "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==",
1085
+ "license": "MIT",
1086
+ "dependencies": {
1087
+ "@socket.io/component-emitter": "~3.1.0",
1088
+ "debug": "~4.3.2",
1089
+ "engine.io-client": "~6.6.1",
1090
+ "socket.io-parser": "~4.2.4"
1091
+ },
1092
+ "engines": {
1093
+ "node": ">=10.0.0"
1094
+ }
1095
+ },
202
1096
  "node_modules/socket.io-parser": {
203
1097
  "version": "4.2.4",
204
1098
  "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
@@ -212,12 +1106,100 @@
212
1106
  "node": ">=10.0.0"
213
1107
  }
214
1108
  },
1109
+ "node_modules/statuses": {
1110
+ "version": "2.0.2",
1111
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
1112
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
1113
+ "license": "MIT",
1114
+ "engines": {
1115
+ "node": ">= 0.8"
1116
+ }
1117
+ },
1118
+ "node_modules/steno": {
1119
+ "version": "0.4.4",
1120
+ "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz",
1121
+ "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==",
1122
+ "license": "MIT",
1123
+ "dependencies": {
1124
+ "graceful-fs": "^4.1.3"
1125
+ }
1126
+ },
1127
+ "node_modules/toidentifier": {
1128
+ "version": "1.0.1",
1129
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1130
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1131
+ "license": "MIT",
1132
+ "engines": {
1133
+ "node": ">=0.6"
1134
+ }
1135
+ },
1136
+ "node_modules/type-is": {
1137
+ "version": "2.0.1",
1138
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
1139
+ "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
1140
+ "license": "MIT",
1141
+ "dependencies": {
1142
+ "content-type": "^1.0.5",
1143
+ "media-typer": "^1.1.0",
1144
+ "mime-types": "^3.0.0"
1145
+ },
1146
+ "engines": {
1147
+ "node": ">= 0.6"
1148
+ }
1149
+ },
1150
+ "node_modules/type-is/node_modules/mime-db": {
1151
+ "version": "1.54.0",
1152
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
1153
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
1154
+ "license": "MIT",
1155
+ "engines": {
1156
+ "node": ">= 0.6"
1157
+ }
1158
+ },
1159
+ "node_modules/type-is/node_modules/mime-types": {
1160
+ "version": "3.0.2",
1161
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
1162
+ "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
1163
+ "license": "MIT",
1164
+ "dependencies": {
1165
+ "mime-db": "^1.54.0"
1166
+ },
1167
+ "engines": {
1168
+ "node": ">=18"
1169
+ },
1170
+ "funding": {
1171
+ "type": "opencollective",
1172
+ "url": "https://opencollective.com/express"
1173
+ }
1174
+ },
215
1175
  "node_modules/undici-types": {
216
1176
  "version": "7.16.0",
217
1177
  "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
218
1178
  "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
219
1179
  "license": "MIT"
220
1180
  },
1181
+ "node_modules/unpipe": {
1182
+ "version": "1.0.0",
1183
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1184
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1185
+ "license": "MIT",
1186
+ "engines": {
1187
+ "node": ">= 0.8"
1188
+ }
1189
+ },
1190
+ "node_modules/uuid": {
1191
+ "version": "11.1.0",
1192
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
1193
+ "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
1194
+ "funding": [
1195
+ "https://github.com/sponsors/broofa",
1196
+ "https://github.com/sponsors/ctavan"
1197
+ ],
1198
+ "license": "MIT",
1199
+ "bin": {
1200
+ "uuid": "dist/esm/bin/uuid"
1201
+ }
1202
+ },
221
1203
  "node_modules/vary": {
222
1204
  "version": "1.1.2",
223
1205
  "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -227,6 +1209,12 @@
227
1209
  "node": ">= 0.8"
228
1210
  }
229
1211
  },
1212
+ "node_modules/wrappy": {
1213
+ "version": "1.0.2",
1214
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1215
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
1216
+ "license": "ISC"
1217
+ },
230
1218
  "node_modules/ws": {
231
1219
  "version": "8.17.1",
232
1220
  "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
@@ -247,6 +1235,14 @@
247
1235
  "optional": true
248
1236
  }
249
1237
  }
1238
+ },
1239
+ "node_modules/xmlhttprequest-ssl": {
1240
+ "version": "2.1.2",
1241
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
1242
+ "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
1243
+ "engines": {
1244
+ "node": ">=0.4.0"
1245
+ }
250
1246
  }
251
1247
  }
252
1248
  }
package/demo/package.json CHANGED
@@ -10,6 +10,8 @@
10
10
  "test": "echo \"Error: no test specified\" && exit 1"
11
11
  },
12
12
  "dependencies": {
13
+ "express": "^5.2.1",
14
+ "shotx": "^1.4.2",
13
15
  "socket.io": "^4.8.1"
14
16
  }
15
17
  }
package/demo/socketio.js CHANGED
@@ -20,6 +20,7 @@ roster.register('example.com', (httpsServer) => {
20
20
  });
21
21
 
22
22
  return (req, res) => {
23
+ if (req.url && req.url.startsWith(io.opts.path)) return;
23
24
  res.writeHead(404);
24
25
  res.end('Not found');
25
26
  };
@@ -0,0 +1,18 @@
1
+ const SxClient = require('shotx/client').default;
2
+
3
+ const client = new SxClient('http://localhost:3002');
4
+
5
+ (async () => {
6
+
7
+ const login = await client.connect('valid');
8
+ console.log('CLIENT --> Login:', login);
9
+
10
+ // Join a room
11
+ await client.join('user-room');
12
+ console.log('CLIENT --> Joined room: user-room');
13
+
14
+ // Set up message handlers for specific routes
15
+ client.onMessage('notification', async (data, socket) => {
16
+ console.log('CLIENT --> Received notification:', data);
17
+ });
18
+ })();
@@ -0,0 +1,11 @@
1
+ const SxServer = require('shotx/server').default;
2
+
3
+ module.exports = (httpsServer) => {
4
+ const server = new SxServer(httpsServer, {}, { auto404: true });
5
+
6
+ return (req, res) => {
7
+ if (req.url && req.url.startsWith(server.io.opts.path)) return;
8
+ res.writeHead(200);
9
+ res.end('ShotX server running');
10
+ };
11
+ }
@@ -18,6 +18,7 @@ const app = (httpsServer) => {
18
18
 
19
19
  // Devolvemos el handler para las peticiones HTTP
20
20
  return (req, res) => {
21
+ if (req.url && req.url.startsWith(io.opts.path)) return;
21
22
  res.writeHead(200);
22
23
  res.end('Socket.IO server running');
23
24
  };
package/index.js CHANGED
@@ -13,6 +13,7 @@ class VirtualServer extends EventEmitter {
13
13
  super();
14
14
  this.domain = domain;
15
15
  this.requestListeners = [];
16
+ this.upgradeListeners = [];
16
17
 
17
18
  // Simulate http.Server properties
18
19
  this.listening = false;
@@ -27,6 +28,8 @@ class VirtualServer extends EventEmitter {
27
28
  on(event, listener) {
28
29
  if (event === 'request') {
29
30
  this.requestListeners.push(listener);
31
+ } else if (event === 'upgrade') {
32
+ this.upgradeListeners.push(listener);
30
33
  }
31
34
  return super.on(event, listener);
32
35
  }
@@ -39,6 +42,8 @@ class VirtualServer extends EventEmitter {
39
42
  listeners(event) {
40
43
  if (event === 'request') {
41
44
  return this.requestListeners.slice();
45
+ } else if (event === 'upgrade') {
46
+ return this.upgradeListeners.slice();
42
47
  }
43
48
  return super.listeners(event);
44
49
  }
@@ -49,6 +54,11 @@ class VirtualServer extends EventEmitter {
49
54
  if (index !== -1) {
50
55
  this.requestListeners.splice(index, 1);
51
56
  }
57
+ } else if (event === 'upgrade') {
58
+ const index = this.upgradeListeners.indexOf(listener);
59
+ if (index !== -1) {
60
+ this.upgradeListeners.splice(index, 1);
61
+ }
52
62
  }
53
63
  return super.removeListener(event, listener);
54
64
  }
@@ -56,6 +66,8 @@ class VirtualServer extends EventEmitter {
56
66
  removeAllListeners(event) {
57
67
  if (event === 'request') {
58
68
  this.requestListeners = [];
69
+ } else if (event === 'upgrade') {
70
+ this.upgradeListeners = [];
59
71
  }
60
72
  return super.removeAllListeners(event);
61
73
  }
@@ -94,6 +106,19 @@ class VirtualServer extends EventEmitter {
94
106
  res.end('No handler found');
95
107
  }
96
108
  }
109
+
110
+ // Process upgrade events (WebSocket)
111
+ processUpgrade(req, socket, head) {
112
+ // Emit to all registered upgrade listeners
113
+ for (const listener of this.upgradeListeners) {
114
+ listener(req, socket, head);
115
+ }
116
+
117
+ // If no listeners, destroy the socket
118
+ if (this.upgradeListeners.length === 0) {
119
+ socket.destroy();
120
+ }
121
+ }
97
122
  }
98
123
 
99
124
  class Roster {
@@ -375,6 +400,11 @@ class Roster {
375
400
  const httpServer = http.createServer(dispatcher);
376
401
  this.portServers[port] = httpServer;
377
402
 
403
+ // Handle WebSocket upgrade events
404
+ httpServer.on('upgrade', (req, socket, head) => {
405
+ virtualServer.processUpgrade(req, socket, head);
406
+ });
407
+
378
408
  httpServer.listen(port, 'localhost', () => {
379
409
  log.info(`🌐 ${domain} → http://localhost:${port}`);
380
410
  });
@@ -476,16 +506,38 @@ class Roster {
476
506
  log.info('HTTP server listening on port 80');
477
507
  });
478
508
 
509
+ // Create upgrade handler for WebSocket connections
510
+ const createUpgradeHandler = (portData) => {
511
+ return (req, socket, head) => {
512
+ const host = req.headers.host || '';
513
+ const hostWithoutPort = host.split(':')[0];
514
+ const domain = hostWithoutPort.startsWith('www.') ? hostWithoutPort.slice(4) : hostWithoutPort;
515
+
516
+ const virtualServer = portData.virtualServers[domain];
517
+
518
+ if (virtualServer) {
519
+ virtualServer.processUpgrade(req, socket, head);
520
+ } else {
521
+ // No virtual server found, destroy the socket
522
+ socket.destroy();
523
+ }
524
+ };
525
+ };
526
+
479
527
  // Handle different port types
480
528
  for (const [port, portData] of Object.entries(sitesByPort)) {
481
529
  const portNum = parseInt(port);
482
530
  const dispatcher = createDispatcher(portData);
531
+ const upgradeHandler = createUpgradeHandler(portData);
483
532
 
484
533
  if (portNum === this.defaultPort) {
485
534
  // Use Greenlock for default port (443) with SSL
486
535
  const httpsServer = glx.httpsServer(null, dispatcher);
487
536
  this.portServers[portNum] = httpsServer;
488
537
 
538
+ // Handle WebSocket upgrade events
539
+ httpsServer.on('upgrade', upgradeHandler);
540
+
489
541
  httpsServer.listen(portNum, this.hostname, () => {
490
542
  log.info(`HTTPS server listening on port ${portNum}`);
491
543
  });
@@ -520,6 +572,9 @@ class Roster {
520
572
 
521
573
  const httpsServer = https.createServer(httpsOptions, dispatcher);
522
574
 
575
+ // Handle WebSocket upgrade events
576
+ httpsServer.on('upgrade', upgradeHandler);
577
+
523
578
  httpsServer.on('error', (error) => {
524
579
  log.error(`HTTPS server error on port ${portNum}:`, error.message);
525
580
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "roster-server",
3
- "version": "1.8.6",
3
+ "version": "1.9.0",
4
4
  "description": "👾 RosterServer - A domain host router to host multiple HTTPS.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -25,6 +25,7 @@
25
25
  "websocket",
26
26
  "express",
27
27
  "greenlock-express",
28
+ "shotx",
28
29
  "clasen"
29
30
  ],
30
31
  "author": "Martin Clasen",