github-actions[bot] commited on
Commit
26ffe70
·
1 Parent(s): 677a318

Sync from GitHub:

Browse files
index.js CHANGED
@@ -1,366 +1,375 @@
1
- const express = require('express');
2
- const http = require('http');
3
- const path = require('path');
4
- const { Server } = require('socket.io');
5
- const rateLimit = require('express-rate-limit');
6
- const helmet = require('helmet');
7
- const bcrypt = require('bcryptjs');
8
- const validator = require('validator');
9
- require('dotenv').config();
10
-
11
- const app = express();
12
- const server = http.createServer(app);
13
-
14
- // Security middleware
15
- app.use(helmet({
16
- contentSecurityPolicy: {
17
- directives: {
18
- defaultSrc: ["'self'"],
19
- scriptSrc: ["'self'", "'unsafe-inline'"],
20
- styleSrc: ["'self'", "'unsafe-inline'"],
21
- imgSrc: ["'self'", "data:", "https:"],
22
- connectSrc: ["'self'", "ws:", "wss:"],
23
- frameSrc: ["'self'", "https://www.youtube.com", "https://player.vimeo.com", "https://www.dailymotion.com"],
24
- },
25
- },
26
- }));
27
-
28
- // Rate limiting
29
- const limiter = rateLimit({
30
- windowMs: 15 * 60 * 1000, // 15 minutes
31
- max: 100, // Limit each IP to 100 requests per windowMs
32
- message: 'Too many requests from this IP, please try again later.'
33
- });
34
-
35
- app.use(limiter);
36
- app.use(express.json({ limit: '10kb' })); // Limit payload size
37
-
38
- // CORS configuration from environment variable
39
- const allowedOrigins = process.env.CORS_ORIGIN
40
- ? process.env.CORS_ORIGIN.split(',')
41
- : ['http://localhost:5173', 'http://localhost:3000'];
42
-
43
- const io = new Server(server, {
44
- cors: {
45
- origin: allowedOrigins,
46
- methods: ['GET', 'POST'],
47
- credentials: true
48
- },
49
- maxHttpBufferSize: 1e6, // 1MB max message size
50
- pingTimeout: 60000,
51
- pingInterval: 25000
52
- });
53
-
54
- const PORT = process.env.PORT || 3000;
55
-
56
- app.use(express.static(path.join(__dirname, 'public')));
57
-
58
- // Rooms state: track current playback time and paused state
59
- const rooms = new Map();
60
-
61
- // Track users in each room for better peer discovery
62
- const roomUsers = new Map(); // roomId -> Set of socket.ids
63
-
64
- // Room passwords (encrypted)
65
- const roomPasswords = new Map(); // roomId -> hashed password
66
-
67
- // Socket.IO rate limiting per socket
68
- const socketRateLimits = new Map(); // socketId -> { count, resetTime }
69
-
70
- // Track playlists for each room
71
- const roomPlaylists = new Map(); // roomId -> { playlist: [], currentIndex: 0 }
72
-
73
- // Security helper functions
74
- function sanitizeInput(input) {
75
- if (typeof input !== 'string') return '';
76
- return validator.escape(input.trim().substring(0, 500)); // Limit length and escape HTML
77
- }
78
-
79
- function validateRoomId(roomId) {
80
- return typeof roomId === 'string' &&
81
- /^[A-Z0-9]{8}$/.test(roomId) &&
82
- roomId.length <= 20;
83
- }
84
-
85
- function validateUsername(name) {
86
- return typeof name === 'string' &&
87
- name.trim().length >= 1 &&
88
- name.trim().length <= 50 &&
89
- !/<script|javascript:|on\w+=/i.test(name);
90
- }
91
-
92
- async function hashPassword(password) {
93
- return await bcrypt.hash(password, 10);
94
- }
95
-
96
- async function verifyPassword(password, hash) {
97
- return await bcrypt.compare(password, hash);
98
- }
99
-
100
- function checkSocketRateLimit(socketId, maxRequests = 50, windowMs = 60000) {
101
- const now = Date.now();
102
- const limit = socketRateLimits.get(socketId);
103
-
104
- if (!limit || now > limit.resetTime) {
105
- socketRateLimits.set(socketId, {
106
- count: 1,
107
- resetTime: now + windowMs
108
- });
109
- return true;
110
- }
111
-
112
- if (limit.count >= maxRequests) {
113
- return false;
114
- }
115
-
116
- limit.count++;
117
- return true;
118
- }
119
-
120
- io.on('connection', (socket) => {
121
- console.log('socket connected', socket.id);
122
-
123
- socket.on('join-room', ({ roomId, name }, cb) => {
124
- socket.join(roomId);
125
- socket.data.name = name || 'Anonymous';
126
- socket.data.roomId = roomId;
127
-
128
- // initialize room state
129
- if (!rooms.has(roomId)) {
130
- rooms.set(roomId, { time: 0, paused: true, timestamp: Date.now() });
131
- }
132
-
133
- // track users in room
134
- if (!roomUsers.has(roomId)) {
135
- roomUsers.set(roomId, new Set());
136
- }
137
- roomUsers.get(roomId).add(socket.id);
138
-
139
- const state = rooms.get(roomId);
140
- const existingUsers = Array.from(roomUsers.get(roomId))
141
- .filter(id => id !== socket.id)
142
- .map(id => {
143
- const sock = io.sockets.sockets.get(id);
144
- return { id, name: sock?.data?.name || 'Anonymous' };
145
- });
146
-
147
- // send current state and existing users to the new client
148
- cb && cb({ roomId, state, users: existingUsers });
149
-
150
- console.log(`User ${socket.id} (${name}) joined room ${roomId}. Room now has ${roomUsers.get(roomId).size} users.`);
151
-
152
- // notify others
153
- socket.to(roomId).emit('user-joined', { id: socket.id, name: socket.data.name });
154
- });
155
-
156
- socket.on('chat-message', ({ roomId, message }) => {
157
- const payload = {
158
- id: socket.id,
159
- socketId: socket.id,
160
- name: socket.data.name,
161
- message,
162
- ts: Date.now()
163
- };
164
- io.in(roomId).emit('chat-message', payload);
165
- });
166
-
167
- // Typing indicator
168
- socket.on('typing', ({ roomId, name }) => {
169
- socket.to(roomId).emit('user-typing', { name });
170
- });
171
-
172
- // Delete message
173
- socket.on('delete-message', ({ roomId, messageId }) => {
174
- io.in(roomId).emit('delete-message', { messageId });
175
- });
176
-
177
- // Emoji reactions
178
- socket.on('emoji-reaction', ({ roomId, emoji, from }) => {
179
- socket.to(roomId).emit('emoji-reaction', { emoji, from });
180
- });
181
-
182
- // User presence tracking
183
- socket.on('presence-change', ({ status }) => {
184
- const rooms = Array.from(socket.rooms).filter(r => r !== socket.id);
185
- rooms.forEach(roomId => {
186
- socket.to(roomId).emit('presence-update', { userId: socket.id, status });
187
- });
188
- });
189
-
190
- // playback control: play/pause/seek
191
- socket.on('play', ({ roomId, time }) => {
192
- const state = rooms.get(roomId) || { time: 0, paused: false, timestamp: Date.now() };
193
- state.time = time;
194
- state.paused = false;
195
- state.timestamp = Date.now();
196
- rooms.set(roomId, state);
197
- io.in(roomId).emit('play', { time, ts: state.timestamp, actor: socket.id });
198
- });
199
-
200
- socket.on('pause', ({ roomId, time }) => {
201
- const state = rooms.get(roomId) || { time: 0, paused: true, timestamp: Date.now() };
202
- state.time = time;
203
- state.paused = true;
204
- state.timestamp = Date.now();
205
- rooms.set(roomId, state);
206
- io.in(roomId).emit('pause', { time, ts: state.timestamp, actor: socket.id });
207
- });
208
-
209
- socket.on('seek', ({ roomId, time }) => {
210
- const state = rooms.get(roomId) || { time: 0, paused: true, timestamp: Date.now() };
211
- state.time = time;
212
- state.timestamp = Date.now();
213
- rooms.set(roomId, state);
214
- io.in(roomId).emit('seek', { time, ts: state.timestamp, actor: socket.id });
215
- });
216
-
217
- // WebRTC signaling for voice calls
218
- socket.on('webrtc-offer', ({ roomId, to, offer }) => {
219
- console.log(`WebRTC offer from ${socket.id} to ${to}`);
220
- io.to(to).emit('webrtc-offer', { from: socket.id, fromName: socket.data.name, offer });
221
- });
222
-
223
- socket.on('webrtc-answer', ({ roomId, to, answer }) => {
224
- console.log(`WebRTC answer from ${socket.id} to ${to}`);
225
- io.to(to).emit('webrtc-answer', { from: socket.id, fromName: socket.data.name, answer });
226
- });
227
-
228
- socket.on('webrtc-ice', ({ to, candidate }) => {
229
- console.log(`WebRTC ICE candidate from ${socket.id} to ${to}`);
230
- io.to(to).emit('webrtc-ice', { from: socket.id, candidate });
231
- });
232
-
233
- // Request list of users in room for WebRTC setup
234
- socket.on('request-room-users', ({ roomId }, cb) => {
235
- const users = roomUsers.get(roomId);
236
- if (!users) {
237
- cb && cb({ users: [] });
238
- return;
239
- }
240
-
241
- const userList = Array.from(users)
242
- .filter(id => id !== socket.id)
243
- .map(id => {
244
- const sock = io.sockets.sockets.get(id);
245
- return { id, name: sock?.data?.name || 'Anonymous' };
246
- });
247
-
248
- console.log(`User ${socket.id} requested room users. Found ${userList.length} other users.`);
249
- cb && cb({ users: userList });
250
- });
251
-
252
- // Notify when user starts/stops voice call
253
- socket.on('voice-call-started', ({ roomId }) => {
254
- console.log(`User ${socket.id} started voice call in room ${roomId}`);
255
- socket.to(roomId).emit('user-voice-active', { id: socket.id, name: socket.data.name });
256
- });
257
-
258
- socket.on('voice-call-stopped', ({ roomId }) => {
259
- console.log(`User ${socket.id} stopped voice call in room ${roomId}`);
260
- socket.to(roomId).emit('user-voice-inactive', { id: socket.id, name: socket.data.name });
261
- });
262
-
263
- // Playlist management
264
- socket.on('get-playlist', ({ roomId }, cb) => {
265
- const playlistData = roomPlaylists.get(roomId) || { playlist: [], currentIndex: 0 };
266
- cb && cb(playlistData);
267
- });
268
-
269
- socket.on('add-to-playlist', ({ roomId, video }) => {
270
- if (!roomPlaylists.has(roomId)) {
271
- roomPlaylists.set(roomId, { playlist: [], currentIndex: 0 });
272
- }
273
- const playlistData = roomPlaylists.get(roomId);
274
- playlistData.playlist.push(video);
275
-
276
- // Auto-play first video if this is the first one added
277
- const autoPlay = playlistData.playlist.length === 1;
278
-
279
- io.in(roomId).emit('playlist-updated', playlistData);
280
- console.log(`Video added to room ${roomId} playlist. Total: ${playlistData.playlist.length}`);
281
-
282
- // Auto-select first video
283
- if (autoPlay) {
284
- io.in(roomId).emit('current-video-changed', { index: 0, video: playlistData.playlist[0] });
285
- console.log(`Auto-playing first video in room ${roomId}`);
286
- }
287
- });
288
-
289
- socket.on('remove-from-playlist', ({ roomId, index }) => {
290
- const playlistData = roomPlaylists.get(roomId);
291
- if (!playlistData) return;
292
-
293
- if (index >= 0 && index < playlistData.playlist.length) {
294
- playlistData.playlist.splice(index, 1);
295
-
296
- // Adjust current index if needed
297
- if (playlistData.currentIndex >= playlistData.playlist.length) {
298
- playlistData.currentIndex = Math.max(0, playlistData.playlist.length - 1);
299
- }
300
-
301
- io.in(roomId).emit('playlist-updated', playlistData);
302
- console.log(`Video removed from room ${roomId} playlist at index ${index}`);
303
- }
304
- });
305
-
306
- socket.on('play-video', ({ roomId, index }) => {
307
- const playlistData = roomPlaylists.get(roomId);
308
- if (!playlistData) return;
309
-
310
- if (index >= 0 && index < playlistData.playlist.length) {
311
- playlistData.currentIndex = index;
312
- const video = playlistData.playlist[index];
313
- io.in(roomId).emit('current-video-changed', { index, video });
314
- console.log(`Room ${roomId} now playing video at index ${index}:`, video.title);
315
- }
316
- });
317
-
318
- socket.on('reorder-playlist', ({ roomId, fromIndex, toIndex }) => {
319
- const playlistData = roomPlaylists.get(roomId);
320
- if (!playlistData) return;
321
-
322
- if (fromIndex >= 0 && fromIndex < playlistData.playlist.length &&
323
- toIndex >= 0 && toIndex < playlistData.playlist.length) {
324
- const [video] = playlistData.playlist.splice(fromIndex, 1);
325
- playlistData.playlist.splice(toIndex, 0, video);
326
-
327
- // Update current index if needed
328
- if (playlistData.currentIndex === fromIndex) {
329
- playlistData.currentIndex = toIndex;
330
- } else if (fromIndex < playlistData.currentIndex && toIndex >= playlistData.currentIndex) {
331
- playlistData.currentIndex--;
332
- } else if (fromIndex > playlistData.currentIndex && toIndex <= playlistData.currentIndex) {
333
- playlistData.currentIndex++;
334
- }
335
-
336
- io.in(roomId).emit('playlist-updated', playlistData);
337
- console.log(`Playlist reordered in room ${roomId}: ${fromIndex} -> ${toIndex}`);
338
- }
339
- });
340
-
341
- socket.on('disconnecting', () => {
342
- const roomsJoined = Array.from(socket.rooms).filter(r => r !== socket.id);
343
- roomsJoined.forEach(roomId => {
344
- // remove from room users tracking
345
- if (roomUsers.has(roomId)) {
346
- roomUsers.get(roomId).delete(socket.id);
347
- if (roomUsers.get(roomId).size === 0) {
348
- roomUsers.delete(roomId);
349
- }
350
- }
351
- socket.to(roomId).emit('user-left', { id: socket.id, name: socket.data.name });
352
- });
353
- });
354
-
355
- socket.on('disconnect', () => {
356
- console.log('socket disconnected', socket.id);
357
- // cleanup any remaining room associations
358
- if (socket.data.roomId && roomUsers.has(socket.data.roomId)) {
359
- roomUsers.get(socket.data.roomId).delete(socket.id);
360
- }
361
- });
362
- });
363
-
364
- server.listen(PORT, () => {
365
- console.log(`Server listening on http://localhost:${PORT}`);
366
- });
 
 
 
 
 
 
 
 
 
 
1
+ const express = require('express');
2
+ const http = require('http');
3
+ const path = require('path');
4
+ const { Server } = require('socket.io');
5
+ const rateLimit = require('express-rate-limit');
6
+ const helmet = require('helmet');
7
+ const bcrypt = require('bcryptjs');
8
+ const validator = require('validator');
9
+ require('dotenv').config();
10
+
11
+ const app = express();
12
+ const server = http.createServer(app);
13
+
14
+ // Security middleware
15
+ app.use(helmet({
16
+ contentSecurityPolicy: {
17
+ directives: {
18
+ defaultSrc: ["'self'"],
19
+ scriptSrc: ["'self'", "'unsafe-inline'"],
20
+ styleSrc: ["'self'", "'unsafe-inline'"],
21
+ imgSrc: ["'self'", "data:", "https:"],
22
+ connectSrc: ["'self'", "ws:", "wss:"],
23
+ frameSrc: ["'self'", "https://www.youtube.com", "https://player.vimeo.com", "https://www.dailymotion.com"],
24
+ },
25
+ },
26
+ permissionsPolicy: {
27
+ features: {
28
+ camera: ["'self'"],
29
+ microphone: ["'self'"],
30
+ geolocation: ["'none'"],
31
+ payment: ["'none'"],
32
+ // Remove unrecognized experimental features
33
+ },
34
+ },
35
+ }));
36
+
37
+ // Rate limiting
38
+ const limiter = rateLimit({
39
+ windowMs: 15 * 60 * 1000, // 15 minutes
40
+ max: 100, // Limit each IP to 100 requests per windowMs
41
+ message: 'Too many requests from this IP, please try again later.'
42
+ });
43
+
44
+ app.use(limiter);
45
+ app.use(express.json({ limit: '10kb' })); // Limit payload size
46
+
47
+ // CORS configuration from environment variable
48
+ const allowedOrigins = process.env.CORS_ORIGIN
49
+ ? process.env.CORS_ORIGIN.split(',')
50
+ : ['http://localhost:5173', 'http://localhost:3000'];
51
+
52
+ const io = new Server(server, {
53
+ cors: {
54
+ origin: allowedOrigins,
55
+ methods: ['GET', 'POST'],
56
+ credentials: true
57
+ },
58
+ maxHttpBufferSize: 1e6, // 1MB max message size
59
+ pingTimeout: 60000,
60
+ pingInterval: 25000
61
+ });
62
+
63
+ const PORT = process.env.PORT || 3000;
64
+
65
+ app.use(express.static(path.join(__dirname, 'public')));
66
+
67
+ // Rooms state: track current playback time and paused state
68
+ const rooms = new Map();
69
+
70
+ // Track users in each room for better peer discovery
71
+ const roomUsers = new Map(); // roomId -> Set of socket.ids
72
+
73
+ // Room passwords (encrypted)
74
+ const roomPasswords = new Map(); // roomId -> hashed password
75
+
76
+ // Socket.IO rate limiting per socket
77
+ const socketRateLimits = new Map(); // socketId -> { count, resetTime }
78
+
79
+ // Track playlists for each room
80
+ const roomPlaylists = new Map(); // roomId -> { playlist: [], currentIndex: 0 }
81
+
82
+ // Security helper functions
83
+ function sanitizeInput(input) {
84
+ if (typeof input !== 'string') return '';
85
+ return validator.escape(input.trim().substring(0, 500)); // Limit length and escape HTML
86
+ }
87
+
88
+ function validateRoomId(roomId) {
89
+ return typeof roomId === 'string' &&
90
+ /^[A-Z0-9]{8}$/.test(roomId) &&
91
+ roomId.length <= 20;
92
+ }
93
+
94
+ function validateUsername(name) {
95
+ return typeof name === 'string' &&
96
+ name.trim().length >= 1 &&
97
+ name.trim().length <= 50 &&
98
+ !/<script|javascript:|on\w+=/i.test(name);
99
+ }
100
+
101
+ async function hashPassword(password) {
102
+ return await bcrypt.hash(password, 10);
103
+ }
104
+
105
+ async function verifyPassword(password, hash) {
106
+ return await bcrypt.compare(password, hash);
107
+ }
108
+
109
+ function checkSocketRateLimit(socketId, maxRequests = 50, windowMs = 60000) {
110
+ const now = Date.now();
111
+ const limit = socketRateLimits.get(socketId);
112
+
113
+ if (!limit || now > limit.resetTime) {
114
+ socketRateLimits.set(socketId, {
115
+ count: 1,
116
+ resetTime: now + windowMs
117
+ });
118
+ return true;
119
+ }
120
+
121
+ if (limit.count >= maxRequests) {
122
+ return false;
123
+ }
124
+
125
+ limit.count++;
126
+ return true;
127
+ }
128
+
129
+ io.on('connection', (socket) => {
130
+ console.log('socket connected', socket.id);
131
+
132
+ socket.on('join-room', ({ roomId, name }, cb) => {
133
+ socket.join(roomId);
134
+ socket.data.name = name || 'Anonymous';
135
+ socket.data.roomId = roomId;
136
+
137
+ // initialize room state
138
+ if (!rooms.has(roomId)) {
139
+ rooms.set(roomId, { time: 0, paused: true, timestamp: Date.now() });
140
+ }
141
+
142
+ // track users in room
143
+ if (!roomUsers.has(roomId)) {
144
+ roomUsers.set(roomId, new Set());
145
+ }
146
+ roomUsers.get(roomId).add(socket.id);
147
+
148
+ const state = rooms.get(roomId);
149
+ const existingUsers = Array.from(roomUsers.get(roomId))
150
+ .filter(id => id !== socket.id)
151
+ .map(id => {
152
+ const sock = io.sockets.sockets.get(id);
153
+ return { id, name: sock?.data?.name || 'Anonymous' };
154
+ });
155
+
156
+ // send current state and existing users to the new client
157
+ cb && cb({ roomId, state, users: existingUsers });
158
+
159
+ console.log(`User ${socket.id} (${name}) joined room ${roomId}. Room now has ${roomUsers.get(roomId).size} users.`);
160
+
161
+ // notify others
162
+ socket.to(roomId).emit('user-joined', { id: socket.id, name: socket.data.name });
163
+ });
164
+
165
+ socket.on('chat-message', ({ roomId, message }) => {
166
+ const payload = {
167
+ id: socket.id,
168
+ socketId: socket.id,
169
+ name: socket.data.name,
170
+ message,
171
+ ts: Date.now()
172
+ };
173
+ io.in(roomId).emit('chat-message', payload);
174
+ });
175
+
176
+ // Typing indicator
177
+ socket.on('typing', ({ roomId, name }) => {
178
+ socket.to(roomId).emit('user-typing', { name });
179
+ });
180
+
181
+ // Delete message
182
+ socket.on('delete-message', ({ roomId, messageId }) => {
183
+ io.in(roomId).emit('delete-message', { messageId });
184
+ });
185
+
186
+ // Emoji reactions
187
+ socket.on('emoji-reaction', ({ roomId, emoji, from }) => {
188
+ socket.to(roomId).emit('emoji-reaction', { emoji, from });
189
+ });
190
+
191
+ // User presence tracking
192
+ socket.on('presence-change', ({ status }) => {
193
+ const rooms = Array.from(socket.rooms).filter(r => r !== socket.id);
194
+ rooms.forEach(roomId => {
195
+ socket.to(roomId).emit('presence-update', { userId: socket.id, status });
196
+ });
197
+ });
198
+
199
+ // playback control: play/pause/seek
200
+ socket.on('play', ({ roomId, time }) => {
201
+ const state = rooms.get(roomId) || { time: 0, paused: false, timestamp: Date.now() };
202
+ state.time = time;
203
+ state.paused = false;
204
+ state.timestamp = Date.now();
205
+ rooms.set(roomId, state);
206
+ io.in(roomId).emit('play', { time, ts: state.timestamp, actor: socket.id });
207
+ });
208
+
209
+ socket.on('pause', ({ roomId, time }) => {
210
+ const state = rooms.get(roomId) || { time: 0, paused: true, timestamp: Date.now() };
211
+ state.time = time;
212
+ state.paused = true;
213
+ state.timestamp = Date.now();
214
+ rooms.set(roomId, state);
215
+ io.in(roomId).emit('pause', { time, ts: state.timestamp, actor: socket.id });
216
+ });
217
+
218
+ socket.on('seek', ({ roomId, time }) => {
219
+ const state = rooms.get(roomId) || { time: 0, paused: true, timestamp: Date.now() };
220
+ state.time = time;
221
+ state.timestamp = Date.now();
222
+ rooms.set(roomId, state);
223
+ io.in(roomId).emit('seek', { time, ts: state.timestamp, actor: socket.id });
224
+ });
225
+
226
+ // WebRTC signaling for voice calls
227
+ socket.on('webrtc-offer', ({ roomId, to, offer }) => {
228
+ console.log(`WebRTC offer from ${socket.id} to ${to}`);
229
+ io.to(to).emit('webrtc-offer', { from: socket.id, fromName: socket.data.name, offer });
230
+ });
231
+
232
+ socket.on('webrtc-answer', ({ roomId, to, answer }) => {
233
+ console.log(`WebRTC answer from ${socket.id} to ${to}`);
234
+ io.to(to).emit('webrtc-answer', { from: socket.id, fromName: socket.data.name, answer });
235
+ });
236
+
237
+ socket.on('webrtc-ice', ({ to, candidate }) => {
238
+ console.log(`WebRTC ICE candidate from ${socket.id} to ${to}`);
239
+ io.to(to).emit('webrtc-ice', { from: socket.id, candidate });
240
+ });
241
+
242
+ // Request list of users in room for WebRTC setup
243
+ socket.on('request-room-users', ({ roomId }, cb) => {
244
+ const users = roomUsers.get(roomId);
245
+ if (!users) {
246
+ cb && cb({ users: [] });
247
+ return;
248
+ }
249
+
250
+ const userList = Array.from(users)
251
+ .filter(id => id !== socket.id)
252
+ .map(id => {
253
+ const sock = io.sockets.sockets.get(id);
254
+ return { id, name: sock?.data?.name || 'Anonymous' };
255
+ });
256
+
257
+ console.log(`User ${socket.id} requested room users. Found ${userList.length} other users.`);
258
+ cb && cb({ users: userList });
259
+ });
260
+
261
+ // Notify when user starts/stops voice call
262
+ socket.on('voice-call-started', ({ roomId }) => {
263
+ console.log(`User ${socket.id} started voice call in room ${roomId}`);
264
+ socket.to(roomId).emit('user-voice-active', { id: socket.id, name: socket.data.name });
265
+ });
266
+
267
+ socket.on('voice-call-stopped', ({ roomId }) => {
268
+ console.log(`User ${socket.id} stopped voice call in room ${roomId}`);
269
+ socket.to(roomId).emit('user-voice-inactive', { id: socket.id, name: socket.data.name });
270
+ });
271
+
272
+ // Playlist management
273
+ socket.on('get-playlist', ({ roomId }, cb) => {
274
+ const playlistData = roomPlaylists.get(roomId) || { playlist: [], currentIndex: 0 };
275
+ cb && cb(playlistData);
276
+ });
277
+
278
+ socket.on('add-to-playlist', ({ roomId, video }) => {
279
+ if (!roomPlaylists.has(roomId)) {
280
+ roomPlaylists.set(roomId, { playlist: [], currentIndex: 0 });
281
+ }
282
+ const playlistData = roomPlaylists.get(roomId);
283
+ playlistData.playlist.push(video);
284
+
285
+ // Auto-play first video if this is the first one added
286
+ const autoPlay = playlistData.playlist.length === 1;
287
+
288
+ io.in(roomId).emit('playlist-updated', playlistData);
289
+ console.log(`Video added to room ${roomId} playlist. Total: ${playlistData.playlist.length}`);
290
+
291
+ // Auto-select first video
292
+ if (autoPlay) {
293
+ io.in(roomId).emit('current-video-changed', { index: 0, video: playlistData.playlist[0] });
294
+ console.log(`Auto-playing first video in room ${roomId}`);
295
+ }
296
+ });
297
+
298
+ socket.on('remove-from-playlist', ({ roomId, index }) => {
299
+ const playlistData = roomPlaylists.get(roomId);
300
+ if (!playlistData) return;
301
+
302
+ if (index >= 0 && index < playlistData.playlist.length) {
303
+ playlistData.playlist.splice(index, 1);
304
+
305
+ // Adjust current index if needed
306
+ if (playlistData.currentIndex >= playlistData.playlist.length) {
307
+ playlistData.currentIndex = Math.max(0, playlistData.playlist.length - 1);
308
+ }
309
+
310
+ io.in(roomId).emit('playlist-updated', playlistData);
311
+ console.log(`Video removed from room ${roomId} playlist at index ${index}`);
312
+ }
313
+ });
314
+
315
+ socket.on('play-video', ({ roomId, index }) => {
316
+ const playlistData = roomPlaylists.get(roomId);
317
+ if (!playlistData) return;
318
+
319
+ if (index >= 0 && index < playlistData.playlist.length) {
320
+ playlistData.currentIndex = index;
321
+ const video = playlistData.playlist[index];
322
+ io.in(roomId).emit('current-video-changed', { index, video });
323
+ console.log(`Room ${roomId} now playing video at index ${index}:`, video.title);
324
+ }
325
+ });
326
+
327
+ socket.on('reorder-playlist', ({ roomId, fromIndex, toIndex }) => {
328
+ const playlistData = roomPlaylists.get(roomId);
329
+ if (!playlistData) return;
330
+
331
+ if (fromIndex >= 0 && fromIndex < playlistData.playlist.length &&
332
+ toIndex >= 0 && toIndex < playlistData.playlist.length) {
333
+ const [video] = playlistData.playlist.splice(fromIndex, 1);
334
+ playlistData.playlist.splice(toIndex, 0, video);
335
+
336
+ // Update current index if needed
337
+ if (playlistData.currentIndex === fromIndex) {
338
+ playlistData.currentIndex = toIndex;
339
+ } else if (fromIndex < playlistData.currentIndex && toIndex >= playlistData.currentIndex) {
340
+ playlistData.currentIndex--;
341
+ } else if (fromIndex > playlistData.currentIndex && toIndex <= playlistData.currentIndex) {
342
+ playlistData.currentIndex++;
343
+ }
344
+
345
+ io.in(roomId).emit('playlist-updated', playlistData);
346
+ console.log(`Playlist reordered in room ${roomId}: ${fromIndex} -> ${toIndex}`);
347
+ }
348
+ });
349
+
350
+ socket.on('disconnecting', () => {
351
+ const roomsJoined = Array.from(socket.rooms).filter(r => r !== socket.id);
352
+ roomsJoined.forEach(roomId => {
353
+ // remove from room users tracking
354
+ if (roomUsers.has(roomId)) {
355
+ roomUsers.get(roomId).delete(socket.id);
356
+ if (roomUsers.get(roomId).size === 0) {
357
+ roomUsers.delete(roomId);
358
+ }
359
+ }
360
+ socket.to(roomId).emit('user-left', { id: socket.id, name: socket.data.name });
361
+ });
362
+ });
363
+
364
+ socket.on('disconnect', () => {
365
+ console.log('socket disconnected', socket.id);
366
+ // cleanup any remaining room associations
367
+ if (socket.data.roomId && roomUsers.has(socket.data.roomId)) {
368
+ roomUsers.get(socket.data.roomId).delete(socket.id);
369
+ }
370
+ });
371
+ });
372
+
373
+ server.listen(PORT, () => {
374
+ console.log(`Server listening on http://localhost:${PORT}`);
375
+ });
node_modules/.bin/mime CHANGED
@@ -1,3 +1,16 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:394b93eaaac25f18a20d7cdd80920ecca1fe43c8e5b37501389e644944c6e01f
3
- size 371
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -x "$basedir/node" ]; then
13
+ exec "$basedir/node" "$basedir/../mime/cli.js" "$@"
14
+ else
15
+ exec node "$basedir/../mime/cli.js" "$@"
16
+ fi
node_modules/.bin/mime.cmd CHANGED
@@ -1,3 +1,17 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:cd5ca2f059e780c0a4b1aa9cdd6edc7dc10413d30bf51ad537adbd428e5e7a16
3
- size 316
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @ECHO off
2
+ GOTO start
3
+ :find_dp0
4
+ SET dp0=%~dp0
5
+ EXIT /b
6
+ :start
7
+ SETLOCAL
8
+ CALL :find_dp0
9
+
10
+ IF EXIST "%dp0%\node.exe" (
11
+ SET "_prog=%dp0%\node.exe"
12
+ ) ELSE (
13
+ SET "_prog=node"
14
+ SET PATHEXT=%PATHEXT:;.JS;=;%
15
+ )
16
+
17
+ endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %*
node_modules/.bin/mime.ps1 CHANGED
@@ -1,3 +1,28 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:a43d8b7d57dbbb21f2f98c331970d011177fa1c6be327aa0dbb84c1ad01e9201
3
- size 769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env pwsh
2
+ $basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
3
+
4
+ $exe=""
5
+ if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
6
+ # Fix case when both the Windows and Linux builds of Node
7
+ # are installed in the same directory
8
+ $exe=".exe"
9
+ }
10
+ $ret=0
11
+ if (Test-Path "$basedir/node$exe") {
12
+ # Support pipeline input
13
+ if ($MyInvocation.ExpectingInput) {
14
+ $input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args
15
+ } else {
16
+ & "$basedir/node$exe" "$basedir/../mime/cli.js" $args
17
+ }
18
+ $ret=$LASTEXITCODE
19
+ } else {
20
+ # Support pipeline input
21
+ if ($MyInvocation.ExpectingInput) {
22
+ $input | & "node$exe" "$basedir/../mime/cli.js" $args
23
+ } else {
24
+ & "node$exe" "$basedir/../mime/cli.js" $args
25
+ }
26
+ $ret=$LASTEXITCODE
27
+ }
28
+ exit $ret
node_modules/.package-lock.json CHANGED
@@ -1,1144 +1,1144 @@
1
- {
2
- "name": "watch2gether-server",
3
- "version": "0.1.0",
4
- "lockfileVersion": 3,
5
- "requires": true,
6
- "packages": {
7
- "node_modules/@socket.io/component-emitter": {
8
- "version": "3.1.2",
9
- "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
10
- "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
11
- "license": "MIT"
12
- },
13
- "node_modules/@types/cors": {
14
- "version": "2.8.19",
15
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz",
16
- "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==",
17
- "license": "MIT",
18
- "dependencies": {
19
- "@types/node": "*"
20
- }
21
- },
22
- "node_modules/@types/node": {
23
- "version": "24.8.0",
24
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.8.0.tgz",
25
- "integrity": "sha512-5x08bUtU8hfboMTrJ7mEO4CpepS9yBwAqcL52y86SWNmbPX8LVbNs3EP4cNrIZgdjk2NAlP2ahNihozpoZIxSg==",
26
- "license": "MIT",
27
- "dependencies": {
28
- "undici-types": "~7.14.0"
29
- }
30
- },
31
- "node_modules/accepts": {
32
- "version": "1.3.8",
33
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
34
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
35
- "license": "MIT",
36
- "dependencies": {
37
- "mime-types": "~2.1.34",
38
- "negotiator": "0.6.3"
39
- },
40
- "engines": {
41
- "node": ">= 0.6"
42
- }
43
- },
44
- "node_modules/array-flatten": {
45
- "version": "1.1.1",
46
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
47
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
48
- "license": "MIT"
49
- },
50
- "node_modules/base64id": {
51
- "version": "2.0.0",
52
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
53
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
54
- "license": "MIT",
55
- "engines": {
56
- "node": "^4.5.0 || >= 5.9"
57
- }
58
- },
59
- "node_modules/bcryptjs": {
60
- "version": "3.0.2",
61
- "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.2.tgz",
62
- "integrity": "sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==",
63
- "license": "BSD-3-Clause",
64
- "bin": {
65
- "bcrypt": "bin/bcrypt"
66
- }
67
- },
68
- "node_modules/body-parser": {
69
- "version": "1.20.3",
70
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
71
- "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
72
- "license": "MIT",
73
- "dependencies": {
74
- "bytes": "3.1.2",
75
- "content-type": "~1.0.5",
76
- "debug": "2.6.9",
77
- "depd": "2.0.0",
78
- "destroy": "1.2.0",
79
- "http-errors": "2.0.0",
80
- "iconv-lite": "0.4.24",
81
- "on-finished": "2.4.1",
82
- "qs": "6.13.0",
83
- "raw-body": "2.5.2",
84
- "type-is": "~1.6.18",
85
- "unpipe": "1.0.0"
86
- },
87
- "engines": {
88
- "node": ">= 0.8",
89
- "npm": "1.2.8000 || >= 1.4.16"
90
- }
91
- },
92
- "node_modules/bytes": {
93
- "version": "3.1.2",
94
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
95
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
96
- "license": "MIT",
97
- "engines": {
98
- "node": ">= 0.8"
99
- }
100
- },
101
- "node_modules/call-bind-apply-helpers": {
102
- "version": "1.0.2",
103
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
104
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
105
- "license": "MIT",
106
- "dependencies": {
107
- "es-errors": "^1.3.0",
108
- "function-bind": "^1.1.2"
109
- },
110
- "engines": {
111
- "node": ">= 0.4"
112
- }
113
- },
114
- "node_modules/call-bound": {
115
- "version": "1.0.4",
116
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
117
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
118
- "license": "MIT",
119
- "dependencies": {
120
- "call-bind-apply-helpers": "^1.0.2",
121
- "get-intrinsic": "^1.3.0"
122
- },
123
- "engines": {
124
- "node": ">= 0.4"
125
- },
126
- "funding": {
127
- "url": "https://github.com/sponsors/ljharb"
128
- }
129
- },
130
- "node_modules/content-disposition": {
131
- "version": "0.5.4",
132
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
133
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
134
- "license": "MIT",
135
- "dependencies": {
136
- "safe-buffer": "5.2.1"
137
- },
138
- "engines": {
139
- "node": ">= 0.6"
140
- }
141
- },
142
- "node_modules/content-type": {
143
- "version": "1.0.5",
144
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
145
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
146
- "license": "MIT",
147
- "engines": {
148
- "node": ">= 0.6"
149
- }
150
- },
151
- "node_modules/cookie": {
152
- "version": "0.7.1",
153
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
154
- "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
155
- "license": "MIT",
156
- "engines": {
157
- "node": ">= 0.6"
158
- }
159
- },
160
- "node_modules/cookie-signature": {
161
- "version": "1.0.6",
162
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
163
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
164
- "license": "MIT"
165
- },
166
- "node_modules/cors": {
167
- "version": "2.8.5",
168
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
169
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
170
- "license": "MIT",
171
- "dependencies": {
172
- "object-assign": "^4",
173
- "vary": "^1"
174
- },
175
- "engines": {
176
- "node": ">= 0.10"
177
- }
178
- },
179
- "node_modules/debug": {
180
- "version": "2.6.9",
181
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
182
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
183
- "license": "MIT",
184
- "dependencies": {
185
- "ms": "2.0.0"
186
- }
187
- },
188
- "node_modules/depd": {
189
- "version": "2.0.0",
190
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
191
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
192
- "license": "MIT",
193
- "engines": {
194
- "node": ">= 0.8"
195
- }
196
- },
197
- "node_modules/destroy": {
198
- "version": "1.2.0",
199
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
200
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
201
- "license": "MIT",
202
- "engines": {
203
- "node": ">= 0.8",
204
- "npm": "1.2.8000 || >= 1.4.16"
205
- }
206
- },
207
- "node_modules/dotenv": {
208
- "version": "17.2.3",
209
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
210
- "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
211
- "license": "BSD-2-Clause",
212
- "engines": {
213
- "node": ">=12"
214
- },
215
- "funding": {
216
- "url": "https://dotenvx.com"
217
- }
218
- },
219
- "node_modules/dunder-proto": {
220
- "version": "1.0.1",
221
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
222
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
223
- "license": "MIT",
224
- "dependencies": {
225
- "call-bind-apply-helpers": "^1.0.1",
226
- "es-errors": "^1.3.0",
227
- "gopd": "^1.2.0"
228
- },
229
- "engines": {
230
- "node": ">= 0.4"
231
- }
232
- },
233
- "node_modules/ee-first": {
234
- "version": "1.1.1",
235
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
236
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
237
- "license": "MIT"
238
- },
239
- "node_modules/encodeurl": {
240
- "version": "2.0.0",
241
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
242
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
243
- "license": "MIT",
244
- "engines": {
245
- "node": ">= 0.8"
246
- }
247
- },
248
- "node_modules/engine.io": {
249
- "version": "6.6.4",
250
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz",
251
- "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==",
252
- "license": "MIT",
253
- "dependencies": {
254
- "@types/cors": "^2.8.12",
255
- "@types/node": ">=10.0.0",
256
- "accepts": "~1.3.4",
257
- "base64id": "2.0.0",
258
- "cookie": "~0.7.2",
259
- "cors": "~2.8.5",
260
- "debug": "~4.3.1",
261
- "engine.io-parser": "~5.2.1",
262
- "ws": "~8.17.1"
263
- },
264
- "engines": {
265
- "node": ">=10.2.0"
266
- }
267
- },
268
- "node_modules/engine.io-parser": {
269
- "version": "5.2.3",
270
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
271
- "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
272
- "license": "MIT",
273
- "engines": {
274
- "node": ">=10.0.0"
275
- }
276
- },
277
- "node_modules/engine.io/node_modules/cookie": {
278
- "version": "0.7.2",
279
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
280
- "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
281
- "license": "MIT",
282
- "engines": {
283
- "node": ">= 0.6"
284
- }
285
- },
286
- "node_modules/engine.io/node_modules/debug": {
287
- "version": "4.3.7",
288
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
289
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
290
- "license": "MIT",
291
- "dependencies": {
292
- "ms": "^2.1.3"
293
- },
294
- "engines": {
295
- "node": ">=6.0"
296
- },
297
- "peerDependenciesMeta": {
298
- "supports-color": {
299
- "optional": true
300
- }
301
- }
302
- },
303
- "node_modules/engine.io/node_modules/ms": {
304
- "version": "2.1.3",
305
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
306
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
307
- "license": "MIT"
308
- },
309
- "node_modules/es-define-property": {
310
- "version": "1.0.1",
311
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
312
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
313
- "license": "MIT",
314
- "engines": {
315
- "node": ">= 0.4"
316
- }
317
- },
318
- "node_modules/es-errors": {
319
- "version": "1.3.0",
320
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
321
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
322
- "license": "MIT",
323
- "engines": {
324
- "node": ">= 0.4"
325
- }
326
- },
327
- "node_modules/es-object-atoms": {
328
- "version": "1.1.1",
329
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
330
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
331
- "license": "MIT",
332
- "dependencies": {
333
- "es-errors": "^1.3.0"
334
- },
335
- "engines": {
336
- "node": ">= 0.4"
337
- }
338
- },
339
- "node_modules/escape-html": {
340
- "version": "1.0.3",
341
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
342
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
343
- "license": "MIT"
344
- },
345
- "node_modules/etag": {
346
- "version": "1.8.1",
347
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
348
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
349
- "license": "MIT",
350
- "engines": {
351
- "node": ">= 0.6"
352
- }
353
- },
354
- "node_modules/express": {
355
- "version": "4.21.2",
356
- "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
357
- "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
358
- "license": "MIT",
359
- "dependencies": {
360
- "accepts": "~1.3.8",
361
- "array-flatten": "1.1.1",
362
- "body-parser": "1.20.3",
363
- "content-disposition": "0.5.4",
364
- "content-type": "~1.0.4",
365
- "cookie": "0.7.1",
366
- "cookie-signature": "1.0.6",
367
- "debug": "2.6.9",
368
- "depd": "2.0.0",
369
- "encodeurl": "~2.0.0",
370
- "escape-html": "~1.0.3",
371
- "etag": "~1.8.1",
372
- "finalhandler": "1.3.1",
373
- "fresh": "0.5.2",
374
- "http-errors": "2.0.0",
375
- "merge-descriptors": "1.0.3",
376
- "methods": "~1.1.2",
377
- "on-finished": "2.4.1",
378
- "parseurl": "~1.3.3",
379
- "path-to-regexp": "0.1.12",
380
- "proxy-addr": "~2.0.7",
381
- "qs": "6.13.0",
382
- "range-parser": "~1.2.1",
383
- "safe-buffer": "5.2.1",
384
- "send": "0.19.0",
385
- "serve-static": "1.16.2",
386
- "setprototypeof": "1.2.0",
387
- "statuses": "2.0.1",
388
- "type-is": "~1.6.18",
389
- "utils-merge": "1.0.1",
390
- "vary": "~1.1.2"
391
- },
392
- "engines": {
393
- "node": ">= 0.10.0"
394
- },
395
- "funding": {
396
- "type": "opencollective",
397
- "url": "https://opencollective.com/express"
398
- }
399
- },
400
- "node_modules/express-rate-limit": {
401
- "version": "8.1.0",
402
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.1.0.tgz",
403
- "integrity": "sha512-4nLnATuKupnmwqiJc27b4dCFmB/T60ExgmtDD7waf4LdrbJ8CPZzZRHYErDYNhoz+ql8fUdYwM/opf90PoPAQA==",
404
- "license": "MIT",
405
- "dependencies": {
406
- "ip-address": "10.0.1"
407
- },
408
- "engines": {
409
- "node": ">= 16"
410
- },
411
- "funding": {
412
- "url": "https://github.com/sponsors/express-rate-limit"
413
- },
414
- "peerDependencies": {
415
- "express": ">= 4.11"
416
- }
417
- },
418
- "node_modules/finalhandler": {
419
- "version": "1.3.1",
420
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
421
- "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
422
- "license": "MIT",
423
- "dependencies": {
424
- "debug": "2.6.9",
425
- "encodeurl": "~2.0.0",
426
- "escape-html": "~1.0.3",
427
- "on-finished": "2.4.1",
428
- "parseurl": "~1.3.3",
429
- "statuses": "2.0.1",
430
- "unpipe": "~1.0.0"
431
- },
432
- "engines": {
433
- "node": ">= 0.8"
434
- }
435
- },
436
- "node_modules/forwarded": {
437
- "version": "0.2.0",
438
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
439
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
440
- "license": "MIT",
441
- "engines": {
442
- "node": ">= 0.6"
443
- }
444
- },
445
- "node_modules/fresh": {
446
- "version": "0.5.2",
447
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
448
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
449
- "license": "MIT",
450
- "engines": {
451
- "node": ">= 0.6"
452
- }
453
- },
454
- "node_modules/function-bind": {
455
- "version": "1.1.2",
456
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
457
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
458
- "license": "MIT",
459
- "funding": {
460
- "url": "https://github.com/sponsors/ljharb"
461
- }
462
- },
463
- "node_modules/get-intrinsic": {
464
- "version": "1.3.0",
465
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
466
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
467
- "license": "MIT",
468
- "dependencies": {
469
- "call-bind-apply-helpers": "^1.0.2",
470
- "es-define-property": "^1.0.1",
471
- "es-errors": "^1.3.0",
472
- "es-object-atoms": "^1.1.1",
473
- "function-bind": "^1.1.2",
474
- "get-proto": "^1.0.1",
475
- "gopd": "^1.2.0",
476
- "has-symbols": "^1.1.0",
477
- "hasown": "^2.0.2",
478
- "math-intrinsics": "^1.1.0"
479
- },
480
- "engines": {
481
- "node": ">= 0.4"
482
- },
483
- "funding": {
484
- "url": "https://github.com/sponsors/ljharb"
485
- }
486
- },
487
- "node_modules/get-proto": {
488
- "version": "1.0.1",
489
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
490
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
491
- "license": "MIT",
492
- "dependencies": {
493
- "dunder-proto": "^1.0.1",
494
- "es-object-atoms": "^1.0.0"
495
- },
496
- "engines": {
497
- "node": ">= 0.4"
498
- }
499
- },
500
- "node_modules/gopd": {
501
- "version": "1.2.0",
502
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
503
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
504
- "license": "MIT",
505
- "engines": {
506
- "node": ">= 0.4"
507
- },
508
- "funding": {
509
- "url": "https://github.com/sponsors/ljharb"
510
- }
511
- },
512
- "node_modules/has-symbols": {
513
- "version": "1.1.0",
514
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
515
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
516
- "license": "MIT",
517
- "engines": {
518
- "node": ">= 0.4"
519
- },
520
- "funding": {
521
- "url": "https://github.com/sponsors/ljharb"
522
- }
523
- },
524
- "node_modules/hasown": {
525
- "version": "2.0.2",
526
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
527
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
528
- "license": "MIT",
529
- "dependencies": {
530
- "function-bind": "^1.1.2"
531
- },
532
- "engines": {
533
- "node": ">= 0.4"
534
- }
535
- },
536
- "node_modules/helmet": {
537
- "version": "8.1.0",
538
- "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz",
539
- "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==",
540
- "license": "MIT",
541
- "engines": {
542
- "node": ">=18.0.0"
543
- }
544
- },
545
- "node_modules/http-errors": {
546
- "version": "2.0.0",
547
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
548
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
549
- "license": "MIT",
550
- "dependencies": {
551
- "depd": "2.0.0",
552
- "inherits": "2.0.4",
553
- "setprototypeof": "1.2.0",
554
- "statuses": "2.0.1",
555
- "toidentifier": "1.0.1"
556
- },
557
- "engines": {
558
- "node": ">= 0.8"
559
- }
560
- },
561
- "node_modules/iconv-lite": {
562
- "version": "0.4.24",
563
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
564
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
565
- "license": "MIT",
566
- "dependencies": {
567
- "safer-buffer": ">= 2.1.2 < 3"
568
- },
569
- "engines": {
570
- "node": ">=0.10.0"
571
- }
572
- },
573
- "node_modules/inherits": {
574
- "version": "2.0.4",
575
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
576
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
577
- "license": "ISC"
578
- },
579
- "node_modules/ip-address": {
580
- "version": "10.0.1",
581
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz",
582
- "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==",
583
- "license": "MIT",
584
- "engines": {
585
- "node": ">= 12"
586
- }
587
- },
588
- "node_modules/ipaddr.js": {
589
- "version": "1.9.1",
590
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
591
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
592
- "license": "MIT",
593
- "engines": {
594
- "node": ">= 0.10"
595
- }
596
- },
597
- "node_modules/math-intrinsics": {
598
- "version": "1.1.0",
599
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
600
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
601
- "license": "MIT",
602
- "engines": {
603
- "node": ">= 0.4"
604
- }
605
- },
606
- "node_modules/media-typer": {
607
- "version": "0.3.0",
608
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
609
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
610
- "license": "MIT",
611
- "engines": {
612
- "node": ">= 0.6"
613
- }
614
- },
615
- "node_modules/merge-descriptors": {
616
- "version": "1.0.3",
617
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
618
- "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
619
- "license": "MIT",
620
- "funding": {
621
- "url": "https://github.com/sponsors/sindresorhus"
622
- }
623
- },
624
- "node_modules/methods": {
625
- "version": "1.1.2",
626
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
627
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
628
- "license": "MIT",
629
- "engines": {
630
- "node": ">= 0.6"
631
- }
632
- },
633
- "node_modules/mime": {
634
- "version": "1.6.0",
635
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
636
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
637
- "license": "MIT",
638
- "bin": {
639
- "mime": "cli.js"
640
- },
641
- "engines": {
642
- "node": ">=4"
643
- }
644
- },
645
- "node_modules/mime-db": {
646
- "version": "1.52.0",
647
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
648
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
649
- "license": "MIT",
650
- "engines": {
651
- "node": ">= 0.6"
652
- }
653
- },
654
- "node_modules/mime-types": {
655
- "version": "2.1.35",
656
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
657
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
658
- "license": "MIT",
659
- "dependencies": {
660
- "mime-db": "1.52.0"
661
- },
662
- "engines": {
663
- "node": ">= 0.6"
664
- }
665
- },
666
- "node_modules/ms": {
667
- "version": "2.0.0",
668
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
669
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
670
- "license": "MIT"
671
- },
672
- "node_modules/negotiator": {
673
- "version": "0.6.3",
674
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
675
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
676
- "license": "MIT",
677
- "engines": {
678
- "node": ">= 0.6"
679
- }
680
- },
681
- "node_modules/object-assign": {
682
- "version": "4.1.1",
683
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
684
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
685
- "license": "MIT",
686
- "engines": {
687
- "node": ">=0.10.0"
688
- }
689
- },
690
- "node_modules/object-inspect": {
691
- "version": "1.13.4",
692
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
693
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
694
- "license": "MIT",
695
- "engines": {
696
- "node": ">= 0.4"
697
- },
698
- "funding": {
699
- "url": "https://github.com/sponsors/ljharb"
700
- }
701
- },
702
- "node_modules/on-finished": {
703
- "version": "2.4.1",
704
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
705
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
706
- "license": "MIT",
707
- "dependencies": {
708
- "ee-first": "1.1.1"
709
- },
710
- "engines": {
711
- "node": ">= 0.8"
712
- }
713
- },
714
- "node_modules/parseurl": {
715
- "version": "1.3.3",
716
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
717
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
718
- "license": "MIT",
719
- "engines": {
720
- "node": ">= 0.8"
721
- }
722
- },
723
- "node_modules/path-to-regexp": {
724
- "version": "0.1.12",
725
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
726
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
727
- "license": "MIT"
728
- },
729
- "node_modules/proxy-addr": {
730
- "version": "2.0.7",
731
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
732
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
733
- "license": "MIT",
734
- "dependencies": {
735
- "forwarded": "0.2.0",
736
- "ipaddr.js": "1.9.1"
737
- },
738
- "engines": {
739
- "node": ">= 0.10"
740
- }
741
- },
742
- "node_modules/qs": {
743
- "version": "6.13.0",
744
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
745
- "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
746
- "license": "BSD-3-Clause",
747
- "dependencies": {
748
- "side-channel": "^1.0.6"
749
- },
750
- "engines": {
751
- "node": ">=0.6"
752
- },
753
- "funding": {
754
- "url": "https://github.com/sponsors/ljharb"
755
- }
756
- },
757
- "node_modules/range-parser": {
758
- "version": "1.2.1",
759
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
760
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
761
- "license": "MIT",
762
- "engines": {
763
- "node": ">= 0.6"
764
- }
765
- },
766
- "node_modules/raw-body": {
767
- "version": "2.5.2",
768
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
769
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
770
- "license": "MIT",
771
- "dependencies": {
772
- "bytes": "3.1.2",
773
- "http-errors": "2.0.0",
774
- "iconv-lite": "0.4.24",
775
- "unpipe": "1.0.0"
776
- },
777
- "engines": {
778
- "node": ">= 0.8"
779
- }
780
- },
781
- "node_modules/safe-buffer": {
782
- "version": "5.2.1",
783
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
784
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
785
- "funding": [
786
- {
787
- "type": "github",
788
- "url": "https://github.com/sponsors/feross"
789
- },
790
- {
791
- "type": "patreon",
792
- "url": "https://www.patreon.com/feross"
793
- },
794
- {
795
- "type": "consulting",
796
- "url": "https://feross.org/support"
797
- }
798
- ],
799
- "license": "MIT"
800
- },
801
- "node_modules/safer-buffer": {
802
- "version": "2.1.2",
803
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
804
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
805
- "license": "MIT"
806
- },
807
- "node_modules/send": {
808
- "version": "0.19.0",
809
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
810
- "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
811
- "license": "MIT",
812
- "dependencies": {
813
- "debug": "2.6.9",
814
- "depd": "2.0.0",
815
- "destroy": "1.2.0",
816
- "encodeurl": "~1.0.2",
817
- "escape-html": "~1.0.3",
818
- "etag": "~1.8.1",
819
- "fresh": "0.5.2",
820
- "http-errors": "2.0.0",
821
- "mime": "1.6.0",
822
- "ms": "2.1.3",
823
- "on-finished": "2.4.1",
824
- "range-parser": "~1.2.1",
825
- "statuses": "2.0.1"
826
- },
827
- "engines": {
828
- "node": ">= 0.8.0"
829
- }
830
- },
831
- "node_modules/send/node_modules/encodeurl": {
832
- "version": "1.0.2",
833
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
834
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
835
- "license": "MIT",
836
- "engines": {
837
- "node": ">= 0.8"
838
- }
839
- },
840
- "node_modules/send/node_modules/ms": {
841
- "version": "2.1.3",
842
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
843
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
844
- "license": "MIT"
845
- },
846
- "node_modules/serve-static": {
847
- "version": "1.16.2",
848
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
849
- "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
850
- "license": "MIT",
851
- "dependencies": {
852
- "encodeurl": "~2.0.0",
853
- "escape-html": "~1.0.3",
854
- "parseurl": "~1.3.3",
855
- "send": "0.19.0"
856
- },
857
- "engines": {
858
- "node": ">= 0.8.0"
859
- }
860
- },
861
- "node_modules/setprototypeof": {
862
- "version": "1.2.0",
863
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
864
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
865
- "license": "ISC"
866
- },
867
- "node_modules/side-channel": {
868
- "version": "1.1.0",
869
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
870
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
871
- "license": "MIT",
872
- "dependencies": {
873
- "es-errors": "^1.3.0",
874
- "object-inspect": "^1.13.3",
875
- "side-channel-list": "^1.0.0",
876
- "side-channel-map": "^1.0.1",
877
- "side-channel-weakmap": "^1.0.2"
878
- },
879
- "engines": {
880
- "node": ">= 0.4"
881
- },
882
- "funding": {
883
- "url": "https://github.com/sponsors/ljharb"
884
- }
885
- },
886
- "node_modules/side-channel-list": {
887
- "version": "1.0.0",
888
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
889
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
890
- "license": "MIT",
891
- "dependencies": {
892
- "es-errors": "^1.3.0",
893
- "object-inspect": "^1.13.3"
894
- },
895
- "engines": {
896
- "node": ">= 0.4"
897
- },
898
- "funding": {
899
- "url": "https://github.com/sponsors/ljharb"
900
- }
901
- },
902
- "node_modules/side-channel-map": {
903
- "version": "1.0.1",
904
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
905
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
906
- "license": "MIT",
907
- "dependencies": {
908
- "call-bound": "^1.0.2",
909
- "es-errors": "^1.3.0",
910
- "get-intrinsic": "^1.2.5",
911
- "object-inspect": "^1.13.3"
912
- },
913
- "engines": {
914
- "node": ">= 0.4"
915
- },
916
- "funding": {
917
- "url": "https://github.com/sponsors/ljharb"
918
- }
919
- },
920
- "node_modules/side-channel-weakmap": {
921
- "version": "1.0.2",
922
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
923
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
924
- "license": "MIT",
925
- "dependencies": {
926
- "call-bound": "^1.0.2",
927
- "es-errors": "^1.3.0",
928
- "get-intrinsic": "^1.2.5",
929
- "object-inspect": "^1.13.3",
930
- "side-channel-map": "^1.0.1"
931
- },
932
- "engines": {
933
- "node": ">= 0.4"
934
- },
935
- "funding": {
936
- "url": "https://github.com/sponsors/ljharb"
937
- }
938
- },
939
- "node_modules/socket.io": {
940
- "version": "4.8.1",
941
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz",
942
- "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==",
943
- "license": "MIT",
944
- "dependencies": {
945
- "accepts": "~1.3.4",
946
- "base64id": "~2.0.0",
947
- "cors": "~2.8.5",
948
- "debug": "~4.3.2",
949
- "engine.io": "~6.6.0",
950
- "socket.io-adapter": "~2.5.2",
951
- "socket.io-parser": "~4.2.4"
952
- },
953
- "engines": {
954
- "node": ">=10.2.0"
955
- }
956
- },
957
- "node_modules/socket.io-adapter": {
958
- "version": "2.5.5",
959
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
960
- "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
961
- "license": "MIT",
962
- "dependencies": {
963
- "debug": "~4.3.4",
964
- "ws": "~8.17.1"
965
- }
966
- },
967
- "node_modules/socket.io-adapter/node_modules/debug": {
968
- "version": "4.3.7",
969
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
970
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
971
- "license": "MIT",
972
- "dependencies": {
973
- "ms": "^2.1.3"
974
- },
975
- "engines": {
976
- "node": ">=6.0"
977
- },
978
- "peerDependenciesMeta": {
979
- "supports-color": {
980
- "optional": true
981
- }
982
- }
983
- },
984
- "node_modules/socket.io-adapter/node_modules/ms": {
985
- "version": "2.1.3",
986
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
987
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
988
- "license": "MIT"
989
- },
990
- "node_modules/socket.io-parser": {
991
- "version": "4.2.4",
992
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
993
- "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
994
- "license": "MIT",
995
- "dependencies": {
996
- "@socket.io/component-emitter": "~3.1.0",
997
- "debug": "~4.3.1"
998
- },
999
- "engines": {
1000
- "node": ">=10.0.0"
1001
- }
1002
- },
1003
- "node_modules/socket.io-parser/node_modules/debug": {
1004
- "version": "4.3.7",
1005
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1006
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1007
- "license": "MIT",
1008
- "dependencies": {
1009
- "ms": "^2.1.3"
1010
- },
1011
- "engines": {
1012
- "node": ">=6.0"
1013
- },
1014
- "peerDependenciesMeta": {
1015
- "supports-color": {
1016
- "optional": true
1017
- }
1018
- }
1019
- },
1020
- "node_modules/socket.io-parser/node_modules/ms": {
1021
- "version": "2.1.3",
1022
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1023
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1024
- "license": "MIT"
1025
- },
1026
- "node_modules/socket.io/node_modules/debug": {
1027
- "version": "4.3.7",
1028
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1029
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1030
- "license": "MIT",
1031
- "dependencies": {
1032
- "ms": "^2.1.3"
1033
- },
1034
- "engines": {
1035
- "node": ">=6.0"
1036
- },
1037
- "peerDependenciesMeta": {
1038
- "supports-color": {
1039
- "optional": true
1040
- }
1041
- }
1042
- },
1043
- "node_modules/socket.io/node_modules/ms": {
1044
- "version": "2.1.3",
1045
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1046
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1047
- "license": "MIT"
1048
- },
1049
- "node_modules/statuses": {
1050
- "version": "2.0.1",
1051
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1052
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1053
- "license": "MIT",
1054
- "engines": {
1055
- "node": ">= 0.8"
1056
- }
1057
- },
1058
- "node_modules/toidentifier": {
1059
- "version": "1.0.1",
1060
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1061
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1062
- "license": "MIT",
1063
- "engines": {
1064
- "node": ">=0.6"
1065
- }
1066
- },
1067
- "node_modules/type-is": {
1068
- "version": "1.6.18",
1069
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1070
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1071
- "license": "MIT",
1072
- "dependencies": {
1073
- "media-typer": "0.3.0",
1074
- "mime-types": "~2.1.24"
1075
- },
1076
- "engines": {
1077
- "node": ">= 0.6"
1078
- }
1079
- },
1080
- "node_modules/undici-types": {
1081
- "version": "7.14.0",
1082
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz",
1083
- "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==",
1084
- "license": "MIT"
1085
- },
1086
- "node_modules/unpipe": {
1087
- "version": "1.0.0",
1088
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1089
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1090
- "license": "MIT",
1091
- "engines": {
1092
- "node": ">= 0.8"
1093
- }
1094
- },
1095
- "node_modules/utils-merge": {
1096
- "version": "1.0.1",
1097
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1098
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1099
- "license": "MIT",
1100
- "engines": {
1101
- "node": ">= 0.4.0"
1102
- }
1103
- },
1104
- "node_modules/validator": {
1105
- "version": "13.15.15",
1106
- "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz",
1107
- "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==",
1108
- "license": "MIT",
1109
- "engines": {
1110
- "node": ">= 0.10"
1111
- }
1112
- },
1113
- "node_modules/vary": {
1114
- "version": "1.1.2",
1115
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1116
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1117
- "license": "MIT",
1118
- "engines": {
1119
- "node": ">= 0.8"
1120
- }
1121
- },
1122
- "node_modules/ws": {
1123
- "version": "8.17.1",
1124
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
1125
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
1126
- "license": "MIT",
1127
- "engines": {
1128
- "node": ">=10.0.0"
1129
- },
1130
- "peerDependencies": {
1131
- "bufferutil": "^4.0.1",
1132
- "utf-8-validate": ">=5.0.2"
1133
- },
1134
- "peerDependenciesMeta": {
1135
- "bufferutil": {
1136
- "optional": true
1137
- },
1138
- "utf-8-validate": {
1139
- "optional": true
1140
- }
1141
- }
1142
- }
1143
- }
1144
- }
 
1
+ {
2
+ "name": "watch2gether-server",
3
+ "version": "0.1.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "node_modules/@socket.io/component-emitter": {
8
+ "version": "3.1.2",
9
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
10
+ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
11
+ "license": "MIT"
12
+ },
13
+ "node_modules/@types/cors": {
14
+ "version": "2.8.19",
15
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz",
16
+ "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==",
17
+ "license": "MIT",
18
+ "dependencies": {
19
+ "@types/node": "*"
20
+ }
21
+ },
22
+ "node_modules/@types/node": {
23
+ "version": "24.8.0",
24
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.8.0.tgz",
25
+ "integrity": "sha512-5x08bUtU8hfboMTrJ7mEO4CpepS9yBwAqcL52y86SWNmbPX8LVbNs3EP4cNrIZgdjk2NAlP2ahNihozpoZIxSg==",
26
+ "license": "MIT",
27
+ "dependencies": {
28
+ "undici-types": "~7.14.0"
29
+ }
30
+ },
31
+ "node_modules/accepts": {
32
+ "version": "1.3.8",
33
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
34
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
35
+ "license": "MIT",
36
+ "dependencies": {
37
+ "mime-types": "~2.1.34",
38
+ "negotiator": "0.6.3"
39
+ },
40
+ "engines": {
41
+ "node": ">= 0.6"
42
+ }
43
+ },
44
+ "node_modules/array-flatten": {
45
+ "version": "1.1.1",
46
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
47
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
48
+ "license": "MIT"
49
+ },
50
+ "node_modules/base64id": {
51
+ "version": "2.0.0",
52
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
53
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
54
+ "license": "MIT",
55
+ "engines": {
56
+ "node": "^4.5.0 || >= 5.9"
57
+ }
58
+ },
59
+ "node_modules/bcryptjs": {
60
+ "version": "3.0.2",
61
+ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.2.tgz",
62
+ "integrity": "sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==",
63
+ "license": "BSD-3-Clause",
64
+ "bin": {
65
+ "bcrypt": "bin/bcrypt"
66
+ }
67
+ },
68
+ "node_modules/body-parser": {
69
+ "version": "1.20.3",
70
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
71
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
72
+ "license": "MIT",
73
+ "dependencies": {
74
+ "bytes": "3.1.2",
75
+ "content-type": "~1.0.5",
76
+ "debug": "2.6.9",
77
+ "depd": "2.0.0",
78
+ "destroy": "1.2.0",
79
+ "http-errors": "2.0.0",
80
+ "iconv-lite": "0.4.24",
81
+ "on-finished": "2.4.1",
82
+ "qs": "6.13.0",
83
+ "raw-body": "2.5.2",
84
+ "type-is": "~1.6.18",
85
+ "unpipe": "1.0.0"
86
+ },
87
+ "engines": {
88
+ "node": ">= 0.8",
89
+ "npm": "1.2.8000 || >= 1.4.16"
90
+ }
91
+ },
92
+ "node_modules/bytes": {
93
+ "version": "3.1.2",
94
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
95
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
96
+ "license": "MIT",
97
+ "engines": {
98
+ "node": ">= 0.8"
99
+ }
100
+ },
101
+ "node_modules/call-bind-apply-helpers": {
102
+ "version": "1.0.2",
103
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
104
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
105
+ "license": "MIT",
106
+ "dependencies": {
107
+ "es-errors": "^1.3.0",
108
+ "function-bind": "^1.1.2"
109
+ },
110
+ "engines": {
111
+ "node": ">= 0.4"
112
+ }
113
+ },
114
+ "node_modules/call-bound": {
115
+ "version": "1.0.4",
116
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
117
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
118
+ "license": "MIT",
119
+ "dependencies": {
120
+ "call-bind-apply-helpers": "^1.0.2",
121
+ "get-intrinsic": "^1.3.0"
122
+ },
123
+ "engines": {
124
+ "node": ">= 0.4"
125
+ },
126
+ "funding": {
127
+ "url": "https://github.com/sponsors/ljharb"
128
+ }
129
+ },
130
+ "node_modules/content-disposition": {
131
+ "version": "0.5.4",
132
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
133
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
134
+ "license": "MIT",
135
+ "dependencies": {
136
+ "safe-buffer": "5.2.1"
137
+ },
138
+ "engines": {
139
+ "node": ">= 0.6"
140
+ }
141
+ },
142
+ "node_modules/content-type": {
143
+ "version": "1.0.5",
144
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
145
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
146
+ "license": "MIT",
147
+ "engines": {
148
+ "node": ">= 0.6"
149
+ }
150
+ },
151
+ "node_modules/cookie": {
152
+ "version": "0.7.1",
153
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
154
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
155
+ "license": "MIT",
156
+ "engines": {
157
+ "node": ">= 0.6"
158
+ }
159
+ },
160
+ "node_modules/cookie-signature": {
161
+ "version": "1.0.6",
162
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
163
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
164
+ "license": "MIT"
165
+ },
166
+ "node_modules/cors": {
167
+ "version": "2.8.5",
168
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
169
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
170
+ "license": "MIT",
171
+ "dependencies": {
172
+ "object-assign": "^4",
173
+ "vary": "^1"
174
+ },
175
+ "engines": {
176
+ "node": ">= 0.10"
177
+ }
178
+ },
179
+ "node_modules/debug": {
180
+ "version": "2.6.9",
181
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
182
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
183
+ "license": "MIT",
184
+ "dependencies": {
185
+ "ms": "2.0.0"
186
+ }
187
+ },
188
+ "node_modules/depd": {
189
+ "version": "2.0.0",
190
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
191
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
192
+ "license": "MIT",
193
+ "engines": {
194
+ "node": ">= 0.8"
195
+ }
196
+ },
197
+ "node_modules/destroy": {
198
+ "version": "1.2.0",
199
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
200
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
201
+ "license": "MIT",
202
+ "engines": {
203
+ "node": ">= 0.8",
204
+ "npm": "1.2.8000 || >= 1.4.16"
205
+ }
206
+ },
207
+ "node_modules/dotenv": {
208
+ "version": "17.2.3",
209
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
210
+ "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
211
+ "license": "BSD-2-Clause",
212
+ "engines": {
213
+ "node": ">=12"
214
+ },
215
+ "funding": {
216
+ "url": "https://dotenvx.com"
217
+ }
218
+ },
219
+ "node_modules/dunder-proto": {
220
+ "version": "1.0.1",
221
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
222
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
223
+ "license": "MIT",
224
+ "dependencies": {
225
+ "call-bind-apply-helpers": "^1.0.1",
226
+ "es-errors": "^1.3.0",
227
+ "gopd": "^1.2.0"
228
+ },
229
+ "engines": {
230
+ "node": ">= 0.4"
231
+ }
232
+ },
233
+ "node_modules/ee-first": {
234
+ "version": "1.1.1",
235
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
236
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
237
+ "license": "MIT"
238
+ },
239
+ "node_modules/encodeurl": {
240
+ "version": "2.0.0",
241
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
242
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
243
+ "license": "MIT",
244
+ "engines": {
245
+ "node": ">= 0.8"
246
+ }
247
+ },
248
+ "node_modules/engine.io": {
249
+ "version": "6.6.4",
250
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz",
251
+ "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==",
252
+ "license": "MIT",
253
+ "dependencies": {
254
+ "@types/cors": "^2.8.12",
255
+ "@types/node": ">=10.0.0",
256
+ "accepts": "~1.3.4",
257
+ "base64id": "2.0.0",
258
+ "cookie": "~0.7.2",
259
+ "cors": "~2.8.5",
260
+ "debug": "~4.3.1",
261
+ "engine.io-parser": "~5.2.1",
262
+ "ws": "~8.17.1"
263
+ },
264
+ "engines": {
265
+ "node": ">=10.2.0"
266
+ }
267
+ },
268
+ "node_modules/engine.io-parser": {
269
+ "version": "5.2.3",
270
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
271
+ "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
272
+ "license": "MIT",
273
+ "engines": {
274
+ "node": ">=10.0.0"
275
+ }
276
+ },
277
+ "node_modules/engine.io/node_modules/cookie": {
278
+ "version": "0.7.2",
279
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
280
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
281
+ "license": "MIT",
282
+ "engines": {
283
+ "node": ">= 0.6"
284
+ }
285
+ },
286
+ "node_modules/engine.io/node_modules/debug": {
287
+ "version": "4.3.7",
288
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
289
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
290
+ "license": "MIT",
291
+ "dependencies": {
292
+ "ms": "^2.1.3"
293
+ },
294
+ "engines": {
295
+ "node": ">=6.0"
296
+ },
297
+ "peerDependenciesMeta": {
298
+ "supports-color": {
299
+ "optional": true
300
+ }
301
+ }
302
+ },
303
+ "node_modules/engine.io/node_modules/ms": {
304
+ "version": "2.1.3",
305
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
306
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
307
+ "license": "MIT"
308
+ },
309
+ "node_modules/es-define-property": {
310
+ "version": "1.0.1",
311
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
312
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
313
+ "license": "MIT",
314
+ "engines": {
315
+ "node": ">= 0.4"
316
+ }
317
+ },
318
+ "node_modules/es-errors": {
319
+ "version": "1.3.0",
320
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
321
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
322
+ "license": "MIT",
323
+ "engines": {
324
+ "node": ">= 0.4"
325
+ }
326
+ },
327
+ "node_modules/es-object-atoms": {
328
+ "version": "1.1.1",
329
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
330
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
331
+ "license": "MIT",
332
+ "dependencies": {
333
+ "es-errors": "^1.3.0"
334
+ },
335
+ "engines": {
336
+ "node": ">= 0.4"
337
+ }
338
+ },
339
+ "node_modules/escape-html": {
340
+ "version": "1.0.3",
341
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
342
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
343
+ "license": "MIT"
344
+ },
345
+ "node_modules/etag": {
346
+ "version": "1.8.1",
347
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
348
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
349
+ "license": "MIT",
350
+ "engines": {
351
+ "node": ">= 0.6"
352
+ }
353
+ },
354
+ "node_modules/express": {
355
+ "version": "4.21.2",
356
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
357
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
358
+ "license": "MIT",
359
+ "dependencies": {
360
+ "accepts": "~1.3.8",
361
+ "array-flatten": "1.1.1",
362
+ "body-parser": "1.20.3",
363
+ "content-disposition": "0.5.4",
364
+ "content-type": "~1.0.4",
365
+ "cookie": "0.7.1",
366
+ "cookie-signature": "1.0.6",
367
+ "debug": "2.6.9",
368
+ "depd": "2.0.0",
369
+ "encodeurl": "~2.0.0",
370
+ "escape-html": "~1.0.3",
371
+ "etag": "~1.8.1",
372
+ "finalhandler": "1.3.1",
373
+ "fresh": "0.5.2",
374
+ "http-errors": "2.0.0",
375
+ "merge-descriptors": "1.0.3",
376
+ "methods": "~1.1.2",
377
+ "on-finished": "2.4.1",
378
+ "parseurl": "~1.3.3",
379
+ "path-to-regexp": "0.1.12",
380
+ "proxy-addr": "~2.0.7",
381
+ "qs": "6.13.0",
382
+ "range-parser": "~1.2.1",
383
+ "safe-buffer": "5.2.1",
384
+ "send": "0.19.0",
385
+ "serve-static": "1.16.2",
386
+ "setprototypeof": "1.2.0",
387
+ "statuses": "2.0.1",
388
+ "type-is": "~1.6.18",
389
+ "utils-merge": "1.0.1",
390
+ "vary": "~1.1.2"
391
+ },
392
+ "engines": {
393
+ "node": ">= 0.10.0"
394
+ },
395
+ "funding": {
396
+ "type": "opencollective",
397
+ "url": "https://opencollective.com/express"
398
+ }
399
+ },
400
+ "node_modules/express-rate-limit": {
401
+ "version": "8.1.0",
402
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.1.0.tgz",
403
+ "integrity": "sha512-4nLnATuKupnmwqiJc27b4dCFmB/T60ExgmtDD7waf4LdrbJ8CPZzZRHYErDYNhoz+ql8fUdYwM/opf90PoPAQA==",
404
+ "license": "MIT",
405
+ "dependencies": {
406
+ "ip-address": "10.0.1"
407
+ },
408
+ "engines": {
409
+ "node": ">= 16"
410
+ },
411
+ "funding": {
412
+ "url": "https://github.com/sponsors/express-rate-limit"
413
+ },
414
+ "peerDependencies": {
415
+ "express": ">= 4.11"
416
+ }
417
+ },
418
+ "node_modules/finalhandler": {
419
+ "version": "1.3.1",
420
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
421
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
422
+ "license": "MIT",
423
+ "dependencies": {
424
+ "debug": "2.6.9",
425
+ "encodeurl": "~2.0.0",
426
+ "escape-html": "~1.0.3",
427
+ "on-finished": "2.4.1",
428
+ "parseurl": "~1.3.3",
429
+ "statuses": "2.0.1",
430
+ "unpipe": "~1.0.0"
431
+ },
432
+ "engines": {
433
+ "node": ">= 0.8"
434
+ }
435
+ },
436
+ "node_modules/forwarded": {
437
+ "version": "0.2.0",
438
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
439
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
440
+ "license": "MIT",
441
+ "engines": {
442
+ "node": ">= 0.6"
443
+ }
444
+ },
445
+ "node_modules/fresh": {
446
+ "version": "0.5.2",
447
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
448
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
449
+ "license": "MIT",
450
+ "engines": {
451
+ "node": ">= 0.6"
452
+ }
453
+ },
454
+ "node_modules/function-bind": {
455
+ "version": "1.1.2",
456
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
457
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
458
+ "license": "MIT",
459
+ "funding": {
460
+ "url": "https://github.com/sponsors/ljharb"
461
+ }
462
+ },
463
+ "node_modules/get-intrinsic": {
464
+ "version": "1.3.0",
465
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
466
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
467
+ "license": "MIT",
468
+ "dependencies": {
469
+ "call-bind-apply-helpers": "^1.0.2",
470
+ "es-define-property": "^1.0.1",
471
+ "es-errors": "^1.3.0",
472
+ "es-object-atoms": "^1.1.1",
473
+ "function-bind": "^1.1.2",
474
+ "get-proto": "^1.0.1",
475
+ "gopd": "^1.2.0",
476
+ "has-symbols": "^1.1.0",
477
+ "hasown": "^2.0.2",
478
+ "math-intrinsics": "^1.1.0"
479
+ },
480
+ "engines": {
481
+ "node": ">= 0.4"
482
+ },
483
+ "funding": {
484
+ "url": "https://github.com/sponsors/ljharb"
485
+ }
486
+ },
487
+ "node_modules/get-proto": {
488
+ "version": "1.0.1",
489
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
490
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
491
+ "license": "MIT",
492
+ "dependencies": {
493
+ "dunder-proto": "^1.0.1",
494
+ "es-object-atoms": "^1.0.0"
495
+ },
496
+ "engines": {
497
+ "node": ">= 0.4"
498
+ }
499
+ },
500
+ "node_modules/gopd": {
501
+ "version": "1.2.0",
502
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
503
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
504
+ "license": "MIT",
505
+ "engines": {
506
+ "node": ">= 0.4"
507
+ },
508
+ "funding": {
509
+ "url": "https://github.com/sponsors/ljharb"
510
+ }
511
+ },
512
+ "node_modules/has-symbols": {
513
+ "version": "1.1.0",
514
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
515
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
516
+ "license": "MIT",
517
+ "engines": {
518
+ "node": ">= 0.4"
519
+ },
520
+ "funding": {
521
+ "url": "https://github.com/sponsors/ljharb"
522
+ }
523
+ },
524
+ "node_modules/hasown": {
525
+ "version": "2.0.2",
526
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
527
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
528
+ "license": "MIT",
529
+ "dependencies": {
530
+ "function-bind": "^1.1.2"
531
+ },
532
+ "engines": {
533
+ "node": ">= 0.4"
534
+ }
535
+ },
536
+ "node_modules/helmet": {
537
+ "version": "8.1.0",
538
+ "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz",
539
+ "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==",
540
+ "license": "MIT",
541
+ "engines": {
542
+ "node": ">=18.0.0"
543
+ }
544
+ },
545
+ "node_modules/http-errors": {
546
+ "version": "2.0.0",
547
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
548
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
549
+ "license": "MIT",
550
+ "dependencies": {
551
+ "depd": "2.0.0",
552
+ "inherits": "2.0.4",
553
+ "setprototypeof": "1.2.0",
554
+ "statuses": "2.0.1",
555
+ "toidentifier": "1.0.1"
556
+ },
557
+ "engines": {
558
+ "node": ">= 0.8"
559
+ }
560
+ },
561
+ "node_modules/iconv-lite": {
562
+ "version": "0.4.24",
563
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
564
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
565
+ "license": "MIT",
566
+ "dependencies": {
567
+ "safer-buffer": ">= 2.1.2 < 3"
568
+ },
569
+ "engines": {
570
+ "node": ">=0.10.0"
571
+ }
572
+ },
573
+ "node_modules/inherits": {
574
+ "version": "2.0.4",
575
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
576
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
577
+ "license": "ISC"
578
+ },
579
+ "node_modules/ip-address": {
580
+ "version": "10.0.1",
581
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz",
582
+ "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==",
583
+ "license": "MIT",
584
+ "engines": {
585
+ "node": ">= 12"
586
+ }
587
+ },
588
+ "node_modules/ipaddr.js": {
589
+ "version": "1.9.1",
590
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
591
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
592
+ "license": "MIT",
593
+ "engines": {
594
+ "node": ">= 0.10"
595
+ }
596
+ },
597
+ "node_modules/math-intrinsics": {
598
+ "version": "1.1.0",
599
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
600
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
601
+ "license": "MIT",
602
+ "engines": {
603
+ "node": ">= 0.4"
604
+ }
605
+ },
606
+ "node_modules/media-typer": {
607
+ "version": "0.3.0",
608
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
609
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
610
+ "license": "MIT",
611
+ "engines": {
612
+ "node": ">= 0.6"
613
+ }
614
+ },
615
+ "node_modules/merge-descriptors": {
616
+ "version": "1.0.3",
617
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
618
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
619
+ "license": "MIT",
620
+ "funding": {
621
+ "url": "https://github.com/sponsors/sindresorhus"
622
+ }
623
+ },
624
+ "node_modules/methods": {
625
+ "version": "1.1.2",
626
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
627
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
628
+ "license": "MIT",
629
+ "engines": {
630
+ "node": ">= 0.6"
631
+ }
632
+ },
633
+ "node_modules/mime": {
634
+ "version": "1.6.0",
635
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
636
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
637
+ "license": "MIT",
638
+ "bin": {
639
+ "mime": "cli.js"
640
+ },
641
+ "engines": {
642
+ "node": ">=4"
643
+ }
644
+ },
645
+ "node_modules/mime-db": {
646
+ "version": "1.52.0",
647
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
648
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
649
+ "license": "MIT",
650
+ "engines": {
651
+ "node": ">= 0.6"
652
+ }
653
+ },
654
+ "node_modules/mime-types": {
655
+ "version": "2.1.35",
656
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
657
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
658
+ "license": "MIT",
659
+ "dependencies": {
660
+ "mime-db": "1.52.0"
661
+ },
662
+ "engines": {
663
+ "node": ">= 0.6"
664
+ }
665
+ },
666
+ "node_modules/ms": {
667
+ "version": "2.0.0",
668
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
669
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
670
+ "license": "MIT"
671
+ },
672
+ "node_modules/negotiator": {
673
+ "version": "0.6.3",
674
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
675
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
676
+ "license": "MIT",
677
+ "engines": {
678
+ "node": ">= 0.6"
679
+ }
680
+ },
681
+ "node_modules/object-assign": {
682
+ "version": "4.1.1",
683
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
684
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
685
+ "license": "MIT",
686
+ "engines": {
687
+ "node": ">=0.10.0"
688
+ }
689
+ },
690
+ "node_modules/object-inspect": {
691
+ "version": "1.13.4",
692
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
693
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
694
+ "license": "MIT",
695
+ "engines": {
696
+ "node": ">= 0.4"
697
+ },
698
+ "funding": {
699
+ "url": "https://github.com/sponsors/ljharb"
700
+ }
701
+ },
702
+ "node_modules/on-finished": {
703
+ "version": "2.4.1",
704
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
705
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
706
+ "license": "MIT",
707
+ "dependencies": {
708
+ "ee-first": "1.1.1"
709
+ },
710
+ "engines": {
711
+ "node": ">= 0.8"
712
+ }
713
+ },
714
+ "node_modules/parseurl": {
715
+ "version": "1.3.3",
716
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
717
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
718
+ "license": "MIT",
719
+ "engines": {
720
+ "node": ">= 0.8"
721
+ }
722
+ },
723
+ "node_modules/path-to-regexp": {
724
+ "version": "0.1.12",
725
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
726
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
727
+ "license": "MIT"
728
+ },
729
+ "node_modules/proxy-addr": {
730
+ "version": "2.0.7",
731
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
732
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
733
+ "license": "MIT",
734
+ "dependencies": {
735
+ "forwarded": "0.2.0",
736
+ "ipaddr.js": "1.9.1"
737
+ },
738
+ "engines": {
739
+ "node": ">= 0.10"
740
+ }
741
+ },
742
+ "node_modules/qs": {
743
+ "version": "6.13.0",
744
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
745
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
746
+ "license": "BSD-3-Clause",
747
+ "dependencies": {
748
+ "side-channel": "^1.0.6"
749
+ },
750
+ "engines": {
751
+ "node": ">=0.6"
752
+ },
753
+ "funding": {
754
+ "url": "https://github.com/sponsors/ljharb"
755
+ }
756
+ },
757
+ "node_modules/range-parser": {
758
+ "version": "1.2.1",
759
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
760
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
761
+ "license": "MIT",
762
+ "engines": {
763
+ "node": ">= 0.6"
764
+ }
765
+ },
766
+ "node_modules/raw-body": {
767
+ "version": "2.5.2",
768
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
769
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
770
+ "license": "MIT",
771
+ "dependencies": {
772
+ "bytes": "3.1.2",
773
+ "http-errors": "2.0.0",
774
+ "iconv-lite": "0.4.24",
775
+ "unpipe": "1.0.0"
776
+ },
777
+ "engines": {
778
+ "node": ">= 0.8"
779
+ }
780
+ },
781
+ "node_modules/safe-buffer": {
782
+ "version": "5.2.1",
783
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
784
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
785
+ "funding": [
786
+ {
787
+ "type": "github",
788
+ "url": "https://github.com/sponsors/feross"
789
+ },
790
+ {
791
+ "type": "patreon",
792
+ "url": "https://www.patreon.com/feross"
793
+ },
794
+ {
795
+ "type": "consulting",
796
+ "url": "https://feross.org/support"
797
+ }
798
+ ],
799
+ "license": "MIT"
800
+ },
801
+ "node_modules/safer-buffer": {
802
+ "version": "2.1.2",
803
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
804
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
805
+ "license": "MIT"
806
+ },
807
+ "node_modules/send": {
808
+ "version": "0.19.0",
809
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
810
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
811
+ "license": "MIT",
812
+ "dependencies": {
813
+ "debug": "2.6.9",
814
+ "depd": "2.0.0",
815
+ "destroy": "1.2.0",
816
+ "encodeurl": "~1.0.2",
817
+ "escape-html": "~1.0.3",
818
+ "etag": "~1.8.1",
819
+ "fresh": "0.5.2",
820
+ "http-errors": "2.0.0",
821
+ "mime": "1.6.0",
822
+ "ms": "2.1.3",
823
+ "on-finished": "2.4.1",
824
+ "range-parser": "~1.2.1",
825
+ "statuses": "2.0.1"
826
+ },
827
+ "engines": {
828
+ "node": ">= 0.8.0"
829
+ }
830
+ },
831
+ "node_modules/send/node_modules/encodeurl": {
832
+ "version": "1.0.2",
833
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
834
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
835
+ "license": "MIT",
836
+ "engines": {
837
+ "node": ">= 0.8"
838
+ }
839
+ },
840
+ "node_modules/send/node_modules/ms": {
841
+ "version": "2.1.3",
842
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
843
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
844
+ "license": "MIT"
845
+ },
846
+ "node_modules/serve-static": {
847
+ "version": "1.16.2",
848
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
849
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
850
+ "license": "MIT",
851
+ "dependencies": {
852
+ "encodeurl": "~2.0.0",
853
+ "escape-html": "~1.0.3",
854
+ "parseurl": "~1.3.3",
855
+ "send": "0.19.0"
856
+ },
857
+ "engines": {
858
+ "node": ">= 0.8.0"
859
+ }
860
+ },
861
+ "node_modules/setprototypeof": {
862
+ "version": "1.2.0",
863
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
864
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
865
+ "license": "ISC"
866
+ },
867
+ "node_modules/side-channel": {
868
+ "version": "1.1.0",
869
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
870
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
871
+ "license": "MIT",
872
+ "dependencies": {
873
+ "es-errors": "^1.3.0",
874
+ "object-inspect": "^1.13.3",
875
+ "side-channel-list": "^1.0.0",
876
+ "side-channel-map": "^1.0.1",
877
+ "side-channel-weakmap": "^1.0.2"
878
+ },
879
+ "engines": {
880
+ "node": ">= 0.4"
881
+ },
882
+ "funding": {
883
+ "url": "https://github.com/sponsors/ljharb"
884
+ }
885
+ },
886
+ "node_modules/side-channel-list": {
887
+ "version": "1.0.0",
888
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
889
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
890
+ "license": "MIT",
891
+ "dependencies": {
892
+ "es-errors": "^1.3.0",
893
+ "object-inspect": "^1.13.3"
894
+ },
895
+ "engines": {
896
+ "node": ">= 0.4"
897
+ },
898
+ "funding": {
899
+ "url": "https://github.com/sponsors/ljharb"
900
+ }
901
+ },
902
+ "node_modules/side-channel-map": {
903
+ "version": "1.0.1",
904
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
905
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
906
+ "license": "MIT",
907
+ "dependencies": {
908
+ "call-bound": "^1.0.2",
909
+ "es-errors": "^1.3.0",
910
+ "get-intrinsic": "^1.2.5",
911
+ "object-inspect": "^1.13.3"
912
+ },
913
+ "engines": {
914
+ "node": ">= 0.4"
915
+ },
916
+ "funding": {
917
+ "url": "https://github.com/sponsors/ljharb"
918
+ }
919
+ },
920
+ "node_modules/side-channel-weakmap": {
921
+ "version": "1.0.2",
922
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
923
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
924
+ "license": "MIT",
925
+ "dependencies": {
926
+ "call-bound": "^1.0.2",
927
+ "es-errors": "^1.3.0",
928
+ "get-intrinsic": "^1.2.5",
929
+ "object-inspect": "^1.13.3",
930
+ "side-channel-map": "^1.0.1"
931
+ },
932
+ "engines": {
933
+ "node": ">= 0.4"
934
+ },
935
+ "funding": {
936
+ "url": "https://github.com/sponsors/ljharb"
937
+ }
938
+ },
939
+ "node_modules/socket.io": {
940
+ "version": "4.8.1",
941
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz",
942
+ "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==",
943
+ "license": "MIT",
944
+ "dependencies": {
945
+ "accepts": "~1.3.4",
946
+ "base64id": "~2.0.0",
947
+ "cors": "~2.8.5",
948
+ "debug": "~4.3.2",
949
+ "engine.io": "~6.6.0",
950
+ "socket.io-adapter": "~2.5.2",
951
+ "socket.io-parser": "~4.2.4"
952
+ },
953
+ "engines": {
954
+ "node": ">=10.2.0"
955
+ }
956
+ },
957
+ "node_modules/socket.io-adapter": {
958
+ "version": "2.5.5",
959
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
960
+ "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
961
+ "license": "MIT",
962
+ "dependencies": {
963
+ "debug": "~4.3.4",
964
+ "ws": "~8.17.1"
965
+ }
966
+ },
967
+ "node_modules/socket.io-adapter/node_modules/debug": {
968
+ "version": "4.3.7",
969
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
970
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
971
+ "license": "MIT",
972
+ "dependencies": {
973
+ "ms": "^2.1.3"
974
+ },
975
+ "engines": {
976
+ "node": ">=6.0"
977
+ },
978
+ "peerDependenciesMeta": {
979
+ "supports-color": {
980
+ "optional": true
981
+ }
982
+ }
983
+ },
984
+ "node_modules/socket.io-adapter/node_modules/ms": {
985
+ "version": "2.1.3",
986
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
987
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
988
+ "license": "MIT"
989
+ },
990
+ "node_modules/socket.io-parser": {
991
+ "version": "4.2.4",
992
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
993
+ "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
994
+ "license": "MIT",
995
+ "dependencies": {
996
+ "@socket.io/component-emitter": "~3.1.0",
997
+ "debug": "~4.3.1"
998
+ },
999
+ "engines": {
1000
+ "node": ">=10.0.0"
1001
+ }
1002
+ },
1003
+ "node_modules/socket.io-parser/node_modules/debug": {
1004
+ "version": "4.3.7",
1005
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1006
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1007
+ "license": "MIT",
1008
+ "dependencies": {
1009
+ "ms": "^2.1.3"
1010
+ },
1011
+ "engines": {
1012
+ "node": ">=6.0"
1013
+ },
1014
+ "peerDependenciesMeta": {
1015
+ "supports-color": {
1016
+ "optional": true
1017
+ }
1018
+ }
1019
+ },
1020
+ "node_modules/socket.io-parser/node_modules/ms": {
1021
+ "version": "2.1.3",
1022
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1023
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1024
+ "license": "MIT"
1025
+ },
1026
+ "node_modules/socket.io/node_modules/debug": {
1027
+ "version": "4.3.7",
1028
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1029
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1030
+ "license": "MIT",
1031
+ "dependencies": {
1032
+ "ms": "^2.1.3"
1033
+ },
1034
+ "engines": {
1035
+ "node": ">=6.0"
1036
+ },
1037
+ "peerDependenciesMeta": {
1038
+ "supports-color": {
1039
+ "optional": true
1040
+ }
1041
+ }
1042
+ },
1043
+ "node_modules/socket.io/node_modules/ms": {
1044
+ "version": "2.1.3",
1045
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1046
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1047
+ "license": "MIT"
1048
+ },
1049
+ "node_modules/statuses": {
1050
+ "version": "2.0.1",
1051
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1052
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1053
+ "license": "MIT",
1054
+ "engines": {
1055
+ "node": ">= 0.8"
1056
+ }
1057
+ },
1058
+ "node_modules/toidentifier": {
1059
+ "version": "1.0.1",
1060
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1061
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1062
+ "license": "MIT",
1063
+ "engines": {
1064
+ "node": ">=0.6"
1065
+ }
1066
+ },
1067
+ "node_modules/type-is": {
1068
+ "version": "1.6.18",
1069
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1070
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1071
+ "license": "MIT",
1072
+ "dependencies": {
1073
+ "media-typer": "0.3.0",
1074
+ "mime-types": "~2.1.24"
1075
+ },
1076
+ "engines": {
1077
+ "node": ">= 0.6"
1078
+ }
1079
+ },
1080
+ "node_modules/undici-types": {
1081
+ "version": "7.14.0",
1082
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz",
1083
+ "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==",
1084
+ "license": "MIT"
1085
+ },
1086
+ "node_modules/unpipe": {
1087
+ "version": "1.0.0",
1088
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1089
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1090
+ "license": "MIT",
1091
+ "engines": {
1092
+ "node": ">= 0.8"
1093
+ }
1094
+ },
1095
+ "node_modules/utils-merge": {
1096
+ "version": "1.0.1",
1097
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1098
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1099
+ "license": "MIT",
1100
+ "engines": {
1101
+ "node": ">= 0.4.0"
1102
+ }
1103
+ },
1104
+ "node_modules/validator": {
1105
+ "version": "13.15.15",
1106
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz",
1107
+ "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==",
1108
+ "license": "MIT",
1109
+ "engines": {
1110
+ "node": ">= 0.10"
1111
+ }
1112
+ },
1113
+ "node_modules/vary": {
1114
+ "version": "1.1.2",
1115
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1116
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1117
+ "license": "MIT",
1118
+ "engines": {
1119
+ "node": ">= 0.8"
1120
+ }
1121
+ },
1122
+ "node_modules/ws": {
1123
+ "version": "8.17.1",
1124
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
1125
+ "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
1126
+ "license": "MIT",
1127
+ "engines": {
1128
+ "node": ">=10.0.0"
1129
+ },
1130
+ "peerDependencies": {
1131
+ "bufferutil": "^4.0.1",
1132
+ "utf-8-validate": ">=5.0.2"
1133
+ },
1134
+ "peerDependenciesMeta": {
1135
+ "bufferutil": {
1136
+ "optional": true
1137
+ },
1138
+ "utf-8-validate": {
1139
+ "optional": true
1140
+ }
1141
+ }
1142
+ }
1143
+ }
1144
+ }
node_modules/@types/cors/README.md CHANGED
@@ -1,13 +1,13 @@
1
- # Installation
2
- > `npm install --save @types/cors`
3
-
4
- # Summary
5
- This package contains type definitions for cors (https://github.com/expressjs/cors/).
6
-
7
- # Details
8
- Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/cors.
9
- ## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/cors/index.d.ts)
10
- ````ts
11
  /// <reference types="node" />
12
 
13
  import { IncomingHttpHeaders } from "http";
@@ -64,12 +64,12 @@ declare function e<T extends e.CorsRequest = e.CorsRequest>(
64
  next: (err?: any) => any,
65
  ) => void;
66
  export = e;
67
-
68
- ````
69
-
70
- ### Additional Details
71
- * Last updated: Sat, 07 Jun 2025 02:15:25 GMT
72
- * Dependencies: [@types/node](https://npmjs.com/package/@types/node)
73
-
74
- # Credits
75
- These definitions were written by [Alan Plum](https://github.com/pluma), [Gaurav Sharma](https://github.com/gtpan77), and [Sebastian Beltran](https://github.com/bjohansebas).
 
1
+ # Installation
2
+ > `npm install --save @types/cors`
3
+
4
+ # Summary
5
+ This package contains type definitions for cors (https://github.com/expressjs/cors/).
6
+
7
+ # Details
8
+ Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/cors.
9
+ ## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/cors/index.d.ts)
10
+ ````ts
11
  /// <reference types="node" />
12
 
13
  import { IncomingHttpHeaders } from "http";
 
64
  next: (err?: any) => any,
65
  ) => void;
66
  export = e;
67
+
68
+ ````
69
+
70
+ ### Additional Details
71
+ * Last updated: Sat, 07 Jun 2025 02:15:25 GMT
72
+ * Dependencies: [@types/node](https://npmjs.com/package/@types/node)
73
+
74
+ # Credits
75
+ These definitions were written by [Alan Plum](https://github.com/pluma), [Gaurav Sharma](https://github.com/gtpan77), and [Sebastian Beltran](https://github.com/bjohansebas).
node_modules/@types/node/README.md CHANGED
@@ -1,15 +1,15 @@
1
- # Installation
2
- > `npm install --save @types/node`
3
-
4
- # Summary
5
- This package contains type definitions for node (https://nodejs.org/).
6
-
7
- # Details
8
- Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
9
-
10
- ### Additional Details
11
- * Last updated: Thu, 16 Oct 2025 12:02:25 GMT
12
- * Dependencies: [undici-types](https://npmjs.com/package/undici-types)
13
-
14
- # Credits
15
- These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [Alberto Schiabel](https://github.com/jkomyno), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [David Junger](https://github.com/touffy), [Mohsen Azimi](https://github.com/mohsen1), [Nikita Galkin](https://github.com/galkin), [Sebastian Silbermann](https://github.com/eps1lon), [Wilco Bakker](https://github.com/WilcoBakker), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), [Matteo Collina](https://github.com/mcollina), [Dmitry Semigradsky](https://github.com/Semigradsky), [René](https://github.com/Renegade334), and [Yagiz Nizipli](https://github.com/anonrig).
 
1
+ # Installation
2
+ > `npm install --save @types/node`
3
+
4
+ # Summary
5
+ This package contains type definitions for node (https://nodejs.org/).
6
+
7
+ # Details
8
+ Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
9
+
10
+ ### Additional Details
11
+ * Last updated: Thu, 16 Oct 2025 12:02:25 GMT
12
+ * Dependencies: [undici-types](https://npmjs.com/package/undici-types)
13
+
14
+ # Credits
15
+ These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [Alberto Schiabel](https://github.com/jkomyno), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [David Junger](https://github.com/touffy), [Mohsen Azimi](https://github.com/mohsen1), [Nikita Galkin](https://github.com/galkin), [Sebastian Silbermann](https://github.com/eps1lon), [Wilco Bakker](https://github.com/WilcoBakker), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), [Matteo Collina](https://github.com/mcollina), [Dmitry Semigradsky](https://github.com/Semigradsky), [René](https://github.com/Renegade334), and [Yagiz Nizipli](https://github.com/anonrig).
package-lock.json CHANGED
@@ -1,1158 +1,1158 @@
1
- {
2
- "name": "watch2gether-server",
3
- "version": "0.1.0",
4
- "lockfileVersion": 3,
5
- "requires": true,
6
- "packages": {
7
- "": {
8
- "name": "watch2gether-server",
9
- "version": "0.1.0",
10
- "dependencies": {
11
- "bcryptjs": "^3.0.2",
12
- "cors": "^2.8.5",
13
- "dotenv": "^17.2.3",
14
- "express": "^4.18.2",
15
- "express-rate-limit": "^8.1.0",
16
- "helmet": "^8.1.0",
17
- "socket.io": "^4.7.2",
18
- "validator": "^13.15.15"
19
- }
20
- },
21
- "node_modules/@socket.io/component-emitter": {
22
- "version": "3.1.2",
23
- "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
24
- "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
25
- "license": "MIT"
26
- },
27
- "node_modules/@types/cors": {
28
- "version": "2.8.19",
29
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz",
30
- "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==",
31
- "license": "MIT",
32
- "dependencies": {
33
- "@types/node": "*"
34
- }
35
- },
36
- "node_modules/@types/node": {
37
- "version": "24.8.0",
38
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.8.0.tgz",
39
- "integrity": "sha512-5x08bUtU8hfboMTrJ7mEO4CpepS9yBwAqcL52y86SWNmbPX8LVbNs3EP4cNrIZgdjk2NAlP2ahNihozpoZIxSg==",
40
- "license": "MIT",
41
- "dependencies": {
42
- "undici-types": "~7.14.0"
43
- }
44
- },
45
- "node_modules/accepts": {
46
- "version": "1.3.8",
47
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
48
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
49
- "license": "MIT",
50
- "dependencies": {
51
- "mime-types": "~2.1.34",
52
- "negotiator": "0.6.3"
53
- },
54
- "engines": {
55
- "node": ">= 0.6"
56
- }
57
- },
58
- "node_modules/array-flatten": {
59
- "version": "1.1.1",
60
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
61
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
62
- "license": "MIT"
63
- },
64
- "node_modules/base64id": {
65
- "version": "2.0.0",
66
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
67
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
68
- "license": "MIT",
69
- "engines": {
70
- "node": "^4.5.0 || >= 5.9"
71
- }
72
- },
73
- "node_modules/bcryptjs": {
74
- "version": "3.0.2",
75
- "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.2.tgz",
76
- "integrity": "sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==",
77
- "license": "BSD-3-Clause",
78
- "bin": {
79
- "bcrypt": "bin/bcrypt"
80
- }
81
- },
82
- "node_modules/body-parser": {
83
- "version": "1.20.3",
84
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
85
- "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
86
- "license": "MIT",
87
- "dependencies": {
88
- "bytes": "3.1.2",
89
- "content-type": "~1.0.5",
90
- "debug": "2.6.9",
91
- "depd": "2.0.0",
92
- "destroy": "1.2.0",
93
- "http-errors": "2.0.0",
94
- "iconv-lite": "0.4.24",
95
- "on-finished": "2.4.1",
96
- "qs": "6.13.0",
97
- "raw-body": "2.5.2",
98
- "type-is": "~1.6.18",
99
- "unpipe": "1.0.0"
100
- },
101
- "engines": {
102
- "node": ">= 0.8",
103
- "npm": "1.2.8000 || >= 1.4.16"
104
- }
105
- },
106
- "node_modules/bytes": {
107
- "version": "3.1.2",
108
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
109
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
110
- "license": "MIT",
111
- "engines": {
112
- "node": ">= 0.8"
113
- }
114
- },
115
- "node_modules/call-bind-apply-helpers": {
116
- "version": "1.0.2",
117
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
118
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
119
- "license": "MIT",
120
- "dependencies": {
121
- "es-errors": "^1.3.0",
122
- "function-bind": "^1.1.2"
123
- },
124
- "engines": {
125
- "node": ">= 0.4"
126
- }
127
- },
128
- "node_modules/call-bound": {
129
- "version": "1.0.4",
130
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
131
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
132
- "license": "MIT",
133
- "dependencies": {
134
- "call-bind-apply-helpers": "^1.0.2",
135
- "get-intrinsic": "^1.3.0"
136
- },
137
- "engines": {
138
- "node": ">= 0.4"
139
- },
140
- "funding": {
141
- "url": "https://github.com/sponsors/ljharb"
142
- }
143
- },
144
- "node_modules/content-disposition": {
145
- "version": "0.5.4",
146
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
147
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
148
- "license": "MIT",
149
- "dependencies": {
150
- "safe-buffer": "5.2.1"
151
- },
152
- "engines": {
153
- "node": ">= 0.6"
154
- }
155
- },
156
- "node_modules/content-type": {
157
- "version": "1.0.5",
158
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
159
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
160
- "license": "MIT",
161
- "engines": {
162
- "node": ">= 0.6"
163
- }
164
- },
165
- "node_modules/cookie": {
166
- "version": "0.7.1",
167
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
168
- "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
169
- "license": "MIT",
170
- "engines": {
171
- "node": ">= 0.6"
172
- }
173
- },
174
- "node_modules/cookie-signature": {
175
- "version": "1.0.6",
176
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
177
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
178
- "license": "MIT"
179
- },
180
- "node_modules/cors": {
181
- "version": "2.8.5",
182
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
183
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
184
- "license": "MIT",
185
- "dependencies": {
186
- "object-assign": "^4",
187
- "vary": "^1"
188
- },
189
- "engines": {
190
- "node": ">= 0.10"
191
- }
192
- },
193
- "node_modules/debug": {
194
- "version": "2.6.9",
195
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
196
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
197
- "license": "MIT",
198
- "dependencies": {
199
- "ms": "2.0.0"
200
- }
201
- },
202
- "node_modules/depd": {
203
- "version": "2.0.0",
204
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
205
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
206
- "license": "MIT",
207
- "engines": {
208
- "node": ">= 0.8"
209
- }
210
- },
211
- "node_modules/destroy": {
212
- "version": "1.2.0",
213
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
214
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
215
- "license": "MIT",
216
- "engines": {
217
- "node": ">= 0.8",
218
- "npm": "1.2.8000 || >= 1.4.16"
219
- }
220
- },
221
- "node_modules/dotenv": {
222
- "version": "17.2.3",
223
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
224
- "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
225
- "license": "BSD-2-Clause",
226
- "engines": {
227
- "node": ">=12"
228
- },
229
- "funding": {
230
- "url": "https://dotenvx.com"
231
- }
232
- },
233
- "node_modules/dunder-proto": {
234
- "version": "1.0.1",
235
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
236
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
237
- "license": "MIT",
238
- "dependencies": {
239
- "call-bind-apply-helpers": "^1.0.1",
240
- "es-errors": "^1.3.0",
241
- "gopd": "^1.2.0"
242
- },
243
- "engines": {
244
- "node": ">= 0.4"
245
- }
246
- },
247
- "node_modules/ee-first": {
248
- "version": "1.1.1",
249
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
250
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
251
- "license": "MIT"
252
- },
253
- "node_modules/encodeurl": {
254
- "version": "2.0.0",
255
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
256
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
257
- "license": "MIT",
258
- "engines": {
259
- "node": ">= 0.8"
260
- }
261
- },
262
- "node_modules/engine.io": {
263
- "version": "6.6.4",
264
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz",
265
- "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==",
266
- "license": "MIT",
267
- "dependencies": {
268
- "@types/cors": "^2.8.12",
269
- "@types/node": ">=10.0.0",
270
- "accepts": "~1.3.4",
271
- "base64id": "2.0.0",
272
- "cookie": "~0.7.2",
273
- "cors": "~2.8.5",
274
- "debug": "~4.3.1",
275
- "engine.io-parser": "~5.2.1",
276
- "ws": "~8.17.1"
277
- },
278
- "engines": {
279
- "node": ">=10.2.0"
280
- }
281
- },
282
- "node_modules/engine.io-parser": {
283
- "version": "5.2.3",
284
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
285
- "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
286
- "license": "MIT",
287
- "engines": {
288
- "node": ">=10.0.0"
289
- }
290
- },
291
- "node_modules/engine.io/node_modules/cookie": {
292
- "version": "0.7.2",
293
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
294
- "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
295
- "license": "MIT",
296
- "engines": {
297
- "node": ">= 0.6"
298
- }
299
- },
300
- "node_modules/engine.io/node_modules/debug": {
301
- "version": "4.3.7",
302
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
303
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
304
- "license": "MIT",
305
- "dependencies": {
306
- "ms": "^2.1.3"
307
- },
308
- "engines": {
309
- "node": ">=6.0"
310
- },
311
- "peerDependenciesMeta": {
312
- "supports-color": {
313
- "optional": true
314
- }
315
- }
316
- },
317
- "node_modules/engine.io/node_modules/ms": {
318
- "version": "2.1.3",
319
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
320
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
321
- "license": "MIT"
322
- },
323
- "node_modules/es-define-property": {
324
- "version": "1.0.1",
325
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
326
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
327
- "license": "MIT",
328
- "engines": {
329
- "node": ">= 0.4"
330
- }
331
- },
332
- "node_modules/es-errors": {
333
- "version": "1.3.0",
334
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
335
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
336
- "license": "MIT",
337
- "engines": {
338
- "node": ">= 0.4"
339
- }
340
- },
341
- "node_modules/es-object-atoms": {
342
- "version": "1.1.1",
343
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
344
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
345
- "license": "MIT",
346
- "dependencies": {
347
- "es-errors": "^1.3.0"
348
- },
349
- "engines": {
350
- "node": ">= 0.4"
351
- }
352
- },
353
- "node_modules/escape-html": {
354
- "version": "1.0.3",
355
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
356
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
357
- "license": "MIT"
358
- },
359
- "node_modules/etag": {
360
- "version": "1.8.1",
361
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
362
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
363
- "license": "MIT",
364
- "engines": {
365
- "node": ">= 0.6"
366
- }
367
- },
368
- "node_modules/express": {
369
- "version": "4.21.2",
370
- "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
371
- "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
372
- "license": "MIT",
373
- "dependencies": {
374
- "accepts": "~1.3.8",
375
- "array-flatten": "1.1.1",
376
- "body-parser": "1.20.3",
377
- "content-disposition": "0.5.4",
378
- "content-type": "~1.0.4",
379
- "cookie": "0.7.1",
380
- "cookie-signature": "1.0.6",
381
- "debug": "2.6.9",
382
- "depd": "2.0.0",
383
- "encodeurl": "~2.0.0",
384
- "escape-html": "~1.0.3",
385
- "etag": "~1.8.1",
386
- "finalhandler": "1.3.1",
387
- "fresh": "0.5.2",
388
- "http-errors": "2.0.0",
389
- "merge-descriptors": "1.0.3",
390
- "methods": "~1.1.2",
391
- "on-finished": "2.4.1",
392
- "parseurl": "~1.3.3",
393
- "path-to-regexp": "0.1.12",
394
- "proxy-addr": "~2.0.7",
395
- "qs": "6.13.0",
396
- "range-parser": "~1.2.1",
397
- "safe-buffer": "5.2.1",
398
- "send": "0.19.0",
399
- "serve-static": "1.16.2",
400
- "setprototypeof": "1.2.0",
401
- "statuses": "2.0.1",
402
- "type-is": "~1.6.18",
403
- "utils-merge": "1.0.1",
404
- "vary": "~1.1.2"
405
- },
406
- "engines": {
407
- "node": ">= 0.10.0"
408
- },
409
- "funding": {
410
- "type": "opencollective",
411
- "url": "https://opencollective.com/express"
412
- }
413
- },
414
- "node_modules/express-rate-limit": {
415
- "version": "8.1.0",
416
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.1.0.tgz",
417
- "integrity": "sha512-4nLnATuKupnmwqiJc27b4dCFmB/T60ExgmtDD7waf4LdrbJ8CPZzZRHYErDYNhoz+ql8fUdYwM/opf90PoPAQA==",
418
- "license": "MIT",
419
- "dependencies": {
420
- "ip-address": "10.0.1"
421
- },
422
- "engines": {
423
- "node": ">= 16"
424
- },
425
- "funding": {
426
- "url": "https://github.com/sponsors/express-rate-limit"
427
- },
428
- "peerDependencies": {
429
- "express": ">= 4.11"
430
- }
431
- },
432
- "node_modules/finalhandler": {
433
- "version": "1.3.1",
434
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
435
- "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
436
- "license": "MIT",
437
- "dependencies": {
438
- "debug": "2.6.9",
439
- "encodeurl": "~2.0.0",
440
- "escape-html": "~1.0.3",
441
- "on-finished": "2.4.1",
442
- "parseurl": "~1.3.3",
443
- "statuses": "2.0.1",
444
- "unpipe": "~1.0.0"
445
- },
446
- "engines": {
447
- "node": ">= 0.8"
448
- }
449
- },
450
- "node_modules/forwarded": {
451
- "version": "0.2.0",
452
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
453
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
454
- "license": "MIT",
455
- "engines": {
456
- "node": ">= 0.6"
457
- }
458
- },
459
- "node_modules/fresh": {
460
- "version": "0.5.2",
461
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
462
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
463
- "license": "MIT",
464
- "engines": {
465
- "node": ">= 0.6"
466
- }
467
- },
468
- "node_modules/function-bind": {
469
- "version": "1.1.2",
470
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
471
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
472
- "license": "MIT",
473
- "funding": {
474
- "url": "https://github.com/sponsors/ljharb"
475
- }
476
- },
477
- "node_modules/get-intrinsic": {
478
- "version": "1.3.0",
479
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
480
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
481
- "license": "MIT",
482
- "dependencies": {
483
- "call-bind-apply-helpers": "^1.0.2",
484
- "es-define-property": "^1.0.1",
485
- "es-errors": "^1.3.0",
486
- "es-object-atoms": "^1.1.1",
487
- "function-bind": "^1.1.2",
488
- "get-proto": "^1.0.1",
489
- "gopd": "^1.2.0",
490
- "has-symbols": "^1.1.0",
491
- "hasown": "^2.0.2",
492
- "math-intrinsics": "^1.1.0"
493
- },
494
- "engines": {
495
- "node": ">= 0.4"
496
- },
497
- "funding": {
498
- "url": "https://github.com/sponsors/ljharb"
499
- }
500
- },
501
- "node_modules/get-proto": {
502
- "version": "1.0.1",
503
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
504
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
505
- "license": "MIT",
506
- "dependencies": {
507
- "dunder-proto": "^1.0.1",
508
- "es-object-atoms": "^1.0.0"
509
- },
510
- "engines": {
511
- "node": ">= 0.4"
512
- }
513
- },
514
- "node_modules/gopd": {
515
- "version": "1.2.0",
516
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
517
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
518
- "license": "MIT",
519
- "engines": {
520
- "node": ">= 0.4"
521
- },
522
- "funding": {
523
- "url": "https://github.com/sponsors/ljharb"
524
- }
525
- },
526
- "node_modules/has-symbols": {
527
- "version": "1.1.0",
528
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
529
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
530
- "license": "MIT",
531
- "engines": {
532
- "node": ">= 0.4"
533
- },
534
- "funding": {
535
- "url": "https://github.com/sponsors/ljharb"
536
- }
537
- },
538
- "node_modules/hasown": {
539
- "version": "2.0.2",
540
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
541
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
542
- "license": "MIT",
543
- "dependencies": {
544
- "function-bind": "^1.1.2"
545
- },
546
- "engines": {
547
- "node": ">= 0.4"
548
- }
549
- },
550
- "node_modules/helmet": {
551
- "version": "8.1.0",
552
- "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz",
553
- "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==",
554
- "license": "MIT",
555
- "engines": {
556
- "node": ">=18.0.0"
557
- }
558
- },
559
- "node_modules/http-errors": {
560
- "version": "2.0.0",
561
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
562
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
563
- "license": "MIT",
564
- "dependencies": {
565
- "depd": "2.0.0",
566
- "inherits": "2.0.4",
567
- "setprototypeof": "1.2.0",
568
- "statuses": "2.0.1",
569
- "toidentifier": "1.0.1"
570
- },
571
- "engines": {
572
- "node": ">= 0.8"
573
- }
574
- },
575
- "node_modules/iconv-lite": {
576
- "version": "0.4.24",
577
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
578
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
579
- "license": "MIT",
580
- "dependencies": {
581
- "safer-buffer": ">= 2.1.2 < 3"
582
- },
583
- "engines": {
584
- "node": ">=0.10.0"
585
- }
586
- },
587
- "node_modules/inherits": {
588
- "version": "2.0.4",
589
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
590
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
591
- "license": "ISC"
592
- },
593
- "node_modules/ip-address": {
594
- "version": "10.0.1",
595
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz",
596
- "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==",
597
- "license": "MIT",
598
- "engines": {
599
- "node": ">= 12"
600
- }
601
- },
602
- "node_modules/ipaddr.js": {
603
- "version": "1.9.1",
604
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
605
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
606
- "license": "MIT",
607
- "engines": {
608
- "node": ">= 0.10"
609
- }
610
- },
611
- "node_modules/math-intrinsics": {
612
- "version": "1.1.0",
613
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
614
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
615
- "license": "MIT",
616
- "engines": {
617
- "node": ">= 0.4"
618
- }
619
- },
620
- "node_modules/media-typer": {
621
- "version": "0.3.0",
622
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
623
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
624
- "license": "MIT",
625
- "engines": {
626
- "node": ">= 0.6"
627
- }
628
- },
629
- "node_modules/merge-descriptors": {
630
- "version": "1.0.3",
631
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
632
- "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
633
- "license": "MIT",
634
- "funding": {
635
- "url": "https://github.com/sponsors/sindresorhus"
636
- }
637
- },
638
- "node_modules/methods": {
639
- "version": "1.1.2",
640
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
641
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
642
- "license": "MIT",
643
- "engines": {
644
- "node": ">= 0.6"
645
- }
646
- },
647
- "node_modules/mime": {
648
- "version": "1.6.0",
649
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
650
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
651
- "license": "MIT",
652
- "bin": {
653
- "mime": "cli.js"
654
- },
655
- "engines": {
656
- "node": ">=4"
657
- }
658
- },
659
- "node_modules/mime-db": {
660
- "version": "1.52.0",
661
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
662
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
663
- "license": "MIT",
664
- "engines": {
665
- "node": ">= 0.6"
666
- }
667
- },
668
- "node_modules/mime-types": {
669
- "version": "2.1.35",
670
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
671
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
672
- "license": "MIT",
673
- "dependencies": {
674
- "mime-db": "1.52.0"
675
- },
676
- "engines": {
677
- "node": ">= 0.6"
678
- }
679
- },
680
- "node_modules/ms": {
681
- "version": "2.0.0",
682
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
683
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
684
- "license": "MIT"
685
- },
686
- "node_modules/negotiator": {
687
- "version": "0.6.3",
688
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
689
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
690
- "license": "MIT",
691
- "engines": {
692
- "node": ">= 0.6"
693
- }
694
- },
695
- "node_modules/object-assign": {
696
- "version": "4.1.1",
697
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
698
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
699
- "license": "MIT",
700
- "engines": {
701
- "node": ">=0.10.0"
702
- }
703
- },
704
- "node_modules/object-inspect": {
705
- "version": "1.13.4",
706
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
707
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
708
- "license": "MIT",
709
- "engines": {
710
- "node": ">= 0.4"
711
- },
712
- "funding": {
713
- "url": "https://github.com/sponsors/ljharb"
714
- }
715
- },
716
- "node_modules/on-finished": {
717
- "version": "2.4.1",
718
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
719
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
720
- "license": "MIT",
721
- "dependencies": {
722
- "ee-first": "1.1.1"
723
- },
724
- "engines": {
725
- "node": ">= 0.8"
726
- }
727
- },
728
- "node_modules/parseurl": {
729
- "version": "1.3.3",
730
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
731
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
732
- "license": "MIT",
733
- "engines": {
734
- "node": ">= 0.8"
735
- }
736
- },
737
- "node_modules/path-to-regexp": {
738
- "version": "0.1.12",
739
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
740
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
741
- "license": "MIT"
742
- },
743
- "node_modules/proxy-addr": {
744
- "version": "2.0.7",
745
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
746
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
747
- "license": "MIT",
748
- "dependencies": {
749
- "forwarded": "0.2.0",
750
- "ipaddr.js": "1.9.1"
751
- },
752
- "engines": {
753
- "node": ">= 0.10"
754
- }
755
- },
756
- "node_modules/qs": {
757
- "version": "6.13.0",
758
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
759
- "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
760
- "license": "BSD-3-Clause",
761
- "dependencies": {
762
- "side-channel": "^1.0.6"
763
- },
764
- "engines": {
765
- "node": ">=0.6"
766
- },
767
- "funding": {
768
- "url": "https://github.com/sponsors/ljharb"
769
- }
770
- },
771
- "node_modules/range-parser": {
772
- "version": "1.2.1",
773
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
774
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
775
- "license": "MIT",
776
- "engines": {
777
- "node": ">= 0.6"
778
- }
779
- },
780
- "node_modules/raw-body": {
781
- "version": "2.5.2",
782
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
783
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
784
- "license": "MIT",
785
- "dependencies": {
786
- "bytes": "3.1.2",
787
- "http-errors": "2.0.0",
788
- "iconv-lite": "0.4.24",
789
- "unpipe": "1.0.0"
790
- },
791
- "engines": {
792
- "node": ">= 0.8"
793
- }
794
- },
795
- "node_modules/safe-buffer": {
796
- "version": "5.2.1",
797
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
798
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
799
- "funding": [
800
- {
801
- "type": "github",
802
- "url": "https://github.com/sponsors/feross"
803
- },
804
- {
805
- "type": "patreon",
806
- "url": "https://www.patreon.com/feross"
807
- },
808
- {
809
- "type": "consulting",
810
- "url": "https://feross.org/support"
811
- }
812
- ],
813
- "license": "MIT"
814
- },
815
- "node_modules/safer-buffer": {
816
- "version": "2.1.2",
817
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
818
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
819
- "license": "MIT"
820
- },
821
- "node_modules/send": {
822
- "version": "0.19.0",
823
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
824
- "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
825
- "license": "MIT",
826
- "dependencies": {
827
- "debug": "2.6.9",
828
- "depd": "2.0.0",
829
- "destroy": "1.2.0",
830
- "encodeurl": "~1.0.2",
831
- "escape-html": "~1.0.3",
832
- "etag": "~1.8.1",
833
- "fresh": "0.5.2",
834
- "http-errors": "2.0.0",
835
- "mime": "1.6.0",
836
- "ms": "2.1.3",
837
- "on-finished": "2.4.1",
838
- "range-parser": "~1.2.1",
839
- "statuses": "2.0.1"
840
- },
841
- "engines": {
842
- "node": ">= 0.8.0"
843
- }
844
- },
845
- "node_modules/send/node_modules/encodeurl": {
846
- "version": "1.0.2",
847
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
848
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
849
- "license": "MIT",
850
- "engines": {
851
- "node": ">= 0.8"
852
- }
853
- },
854
- "node_modules/send/node_modules/ms": {
855
- "version": "2.1.3",
856
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
857
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
858
- "license": "MIT"
859
- },
860
- "node_modules/serve-static": {
861
- "version": "1.16.2",
862
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
863
- "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
864
- "license": "MIT",
865
- "dependencies": {
866
- "encodeurl": "~2.0.0",
867
- "escape-html": "~1.0.3",
868
- "parseurl": "~1.3.3",
869
- "send": "0.19.0"
870
- },
871
- "engines": {
872
- "node": ">= 0.8.0"
873
- }
874
- },
875
- "node_modules/setprototypeof": {
876
- "version": "1.2.0",
877
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
878
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
879
- "license": "ISC"
880
- },
881
- "node_modules/side-channel": {
882
- "version": "1.1.0",
883
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
884
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
885
- "license": "MIT",
886
- "dependencies": {
887
- "es-errors": "^1.3.0",
888
- "object-inspect": "^1.13.3",
889
- "side-channel-list": "^1.0.0",
890
- "side-channel-map": "^1.0.1",
891
- "side-channel-weakmap": "^1.0.2"
892
- },
893
- "engines": {
894
- "node": ">= 0.4"
895
- },
896
- "funding": {
897
- "url": "https://github.com/sponsors/ljharb"
898
- }
899
- },
900
- "node_modules/side-channel-list": {
901
- "version": "1.0.0",
902
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
903
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
904
- "license": "MIT",
905
- "dependencies": {
906
- "es-errors": "^1.3.0",
907
- "object-inspect": "^1.13.3"
908
- },
909
- "engines": {
910
- "node": ">= 0.4"
911
- },
912
- "funding": {
913
- "url": "https://github.com/sponsors/ljharb"
914
- }
915
- },
916
- "node_modules/side-channel-map": {
917
- "version": "1.0.1",
918
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
919
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
920
- "license": "MIT",
921
- "dependencies": {
922
- "call-bound": "^1.0.2",
923
- "es-errors": "^1.3.0",
924
- "get-intrinsic": "^1.2.5",
925
- "object-inspect": "^1.13.3"
926
- },
927
- "engines": {
928
- "node": ">= 0.4"
929
- },
930
- "funding": {
931
- "url": "https://github.com/sponsors/ljharb"
932
- }
933
- },
934
- "node_modules/side-channel-weakmap": {
935
- "version": "1.0.2",
936
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
937
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
938
- "license": "MIT",
939
- "dependencies": {
940
- "call-bound": "^1.0.2",
941
- "es-errors": "^1.3.0",
942
- "get-intrinsic": "^1.2.5",
943
- "object-inspect": "^1.13.3",
944
- "side-channel-map": "^1.0.1"
945
- },
946
- "engines": {
947
- "node": ">= 0.4"
948
- },
949
- "funding": {
950
- "url": "https://github.com/sponsors/ljharb"
951
- }
952
- },
953
- "node_modules/socket.io": {
954
- "version": "4.8.1",
955
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz",
956
- "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==",
957
- "license": "MIT",
958
- "dependencies": {
959
- "accepts": "~1.3.4",
960
- "base64id": "~2.0.0",
961
- "cors": "~2.8.5",
962
- "debug": "~4.3.2",
963
- "engine.io": "~6.6.0",
964
- "socket.io-adapter": "~2.5.2",
965
- "socket.io-parser": "~4.2.4"
966
- },
967
- "engines": {
968
- "node": ">=10.2.0"
969
- }
970
- },
971
- "node_modules/socket.io-adapter": {
972
- "version": "2.5.5",
973
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
974
- "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
975
- "license": "MIT",
976
- "dependencies": {
977
- "debug": "~4.3.4",
978
- "ws": "~8.17.1"
979
- }
980
- },
981
- "node_modules/socket.io-adapter/node_modules/debug": {
982
- "version": "4.3.7",
983
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
984
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
985
- "license": "MIT",
986
- "dependencies": {
987
- "ms": "^2.1.3"
988
- },
989
- "engines": {
990
- "node": ">=6.0"
991
- },
992
- "peerDependenciesMeta": {
993
- "supports-color": {
994
- "optional": true
995
- }
996
- }
997
- },
998
- "node_modules/socket.io-adapter/node_modules/ms": {
999
- "version": "2.1.3",
1000
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1001
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1002
- "license": "MIT"
1003
- },
1004
- "node_modules/socket.io-parser": {
1005
- "version": "4.2.4",
1006
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
1007
- "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
1008
- "license": "MIT",
1009
- "dependencies": {
1010
- "@socket.io/component-emitter": "~3.1.0",
1011
- "debug": "~4.3.1"
1012
- },
1013
- "engines": {
1014
- "node": ">=10.0.0"
1015
- }
1016
- },
1017
- "node_modules/socket.io-parser/node_modules/debug": {
1018
- "version": "4.3.7",
1019
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1020
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1021
- "license": "MIT",
1022
- "dependencies": {
1023
- "ms": "^2.1.3"
1024
- },
1025
- "engines": {
1026
- "node": ">=6.0"
1027
- },
1028
- "peerDependenciesMeta": {
1029
- "supports-color": {
1030
- "optional": true
1031
- }
1032
- }
1033
- },
1034
- "node_modules/socket.io-parser/node_modules/ms": {
1035
- "version": "2.1.3",
1036
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1037
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1038
- "license": "MIT"
1039
- },
1040
- "node_modules/socket.io/node_modules/debug": {
1041
- "version": "4.3.7",
1042
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1043
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1044
- "license": "MIT",
1045
- "dependencies": {
1046
- "ms": "^2.1.3"
1047
- },
1048
- "engines": {
1049
- "node": ">=6.0"
1050
- },
1051
- "peerDependenciesMeta": {
1052
- "supports-color": {
1053
- "optional": true
1054
- }
1055
- }
1056
- },
1057
- "node_modules/socket.io/node_modules/ms": {
1058
- "version": "2.1.3",
1059
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1060
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1061
- "license": "MIT"
1062
- },
1063
- "node_modules/statuses": {
1064
- "version": "2.0.1",
1065
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1066
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1067
- "license": "MIT",
1068
- "engines": {
1069
- "node": ">= 0.8"
1070
- }
1071
- },
1072
- "node_modules/toidentifier": {
1073
- "version": "1.0.1",
1074
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1075
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1076
- "license": "MIT",
1077
- "engines": {
1078
- "node": ">=0.6"
1079
- }
1080
- },
1081
- "node_modules/type-is": {
1082
- "version": "1.6.18",
1083
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1084
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1085
- "license": "MIT",
1086
- "dependencies": {
1087
- "media-typer": "0.3.0",
1088
- "mime-types": "~2.1.24"
1089
- },
1090
- "engines": {
1091
- "node": ">= 0.6"
1092
- }
1093
- },
1094
- "node_modules/undici-types": {
1095
- "version": "7.14.0",
1096
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz",
1097
- "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==",
1098
- "license": "MIT"
1099
- },
1100
- "node_modules/unpipe": {
1101
- "version": "1.0.0",
1102
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1103
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1104
- "license": "MIT",
1105
- "engines": {
1106
- "node": ">= 0.8"
1107
- }
1108
- },
1109
- "node_modules/utils-merge": {
1110
- "version": "1.0.1",
1111
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1112
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1113
- "license": "MIT",
1114
- "engines": {
1115
- "node": ">= 0.4.0"
1116
- }
1117
- },
1118
- "node_modules/validator": {
1119
- "version": "13.15.15",
1120
- "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz",
1121
- "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==",
1122
- "license": "MIT",
1123
- "engines": {
1124
- "node": ">= 0.10"
1125
- }
1126
- },
1127
- "node_modules/vary": {
1128
- "version": "1.1.2",
1129
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1130
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1131
- "license": "MIT",
1132
- "engines": {
1133
- "node": ">= 0.8"
1134
- }
1135
- },
1136
- "node_modules/ws": {
1137
- "version": "8.17.1",
1138
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
1139
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
1140
- "license": "MIT",
1141
- "engines": {
1142
- "node": ">=10.0.0"
1143
- },
1144
- "peerDependencies": {
1145
- "bufferutil": "^4.0.1",
1146
- "utf-8-validate": ">=5.0.2"
1147
- },
1148
- "peerDependenciesMeta": {
1149
- "bufferutil": {
1150
- "optional": true
1151
- },
1152
- "utf-8-validate": {
1153
- "optional": true
1154
- }
1155
- }
1156
- }
1157
- }
1158
- }
 
1
+ {
2
+ "name": "watch2gether-server",
3
+ "version": "0.1.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "watch2gether-server",
9
+ "version": "0.1.0",
10
+ "dependencies": {
11
+ "bcryptjs": "^3.0.2",
12
+ "cors": "^2.8.5",
13
+ "dotenv": "^17.2.3",
14
+ "express": "^4.18.2",
15
+ "express-rate-limit": "^8.1.0",
16
+ "helmet": "^8.1.0",
17
+ "socket.io": "^4.7.2",
18
+ "validator": "^13.15.15"
19
+ }
20
+ },
21
+ "node_modules/@socket.io/component-emitter": {
22
+ "version": "3.1.2",
23
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
24
+ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
25
+ "license": "MIT"
26
+ },
27
+ "node_modules/@types/cors": {
28
+ "version": "2.8.19",
29
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz",
30
+ "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==",
31
+ "license": "MIT",
32
+ "dependencies": {
33
+ "@types/node": "*"
34
+ }
35
+ },
36
+ "node_modules/@types/node": {
37
+ "version": "24.8.0",
38
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.8.0.tgz",
39
+ "integrity": "sha512-5x08bUtU8hfboMTrJ7mEO4CpepS9yBwAqcL52y86SWNmbPX8LVbNs3EP4cNrIZgdjk2NAlP2ahNihozpoZIxSg==",
40
+ "license": "MIT",
41
+ "dependencies": {
42
+ "undici-types": "~7.14.0"
43
+ }
44
+ },
45
+ "node_modules/accepts": {
46
+ "version": "1.3.8",
47
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
48
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
49
+ "license": "MIT",
50
+ "dependencies": {
51
+ "mime-types": "~2.1.34",
52
+ "negotiator": "0.6.3"
53
+ },
54
+ "engines": {
55
+ "node": ">= 0.6"
56
+ }
57
+ },
58
+ "node_modules/array-flatten": {
59
+ "version": "1.1.1",
60
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
61
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
62
+ "license": "MIT"
63
+ },
64
+ "node_modules/base64id": {
65
+ "version": "2.0.0",
66
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
67
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
68
+ "license": "MIT",
69
+ "engines": {
70
+ "node": "^4.5.0 || >= 5.9"
71
+ }
72
+ },
73
+ "node_modules/bcryptjs": {
74
+ "version": "3.0.2",
75
+ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.2.tgz",
76
+ "integrity": "sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==",
77
+ "license": "BSD-3-Clause",
78
+ "bin": {
79
+ "bcrypt": "bin/bcrypt"
80
+ }
81
+ },
82
+ "node_modules/body-parser": {
83
+ "version": "1.20.3",
84
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
85
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
86
+ "license": "MIT",
87
+ "dependencies": {
88
+ "bytes": "3.1.2",
89
+ "content-type": "~1.0.5",
90
+ "debug": "2.6.9",
91
+ "depd": "2.0.0",
92
+ "destroy": "1.2.0",
93
+ "http-errors": "2.0.0",
94
+ "iconv-lite": "0.4.24",
95
+ "on-finished": "2.4.1",
96
+ "qs": "6.13.0",
97
+ "raw-body": "2.5.2",
98
+ "type-is": "~1.6.18",
99
+ "unpipe": "1.0.0"
100
+ },
101
+ "engines": {
102
+ "node": ">= 0.8",
103
+ "npm": "1.2.8000 || >= 1.4.16"
104
+ }
105
+ },
106
+ "node_modules/bytes": {
107
+ "version": "3.1.2",
108
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
109
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
110
+ "license": "MIT",
111
+ "engines": {
112
+ "node": ">= 0.8"
113
+ }
114
+ },
115
+ "node_modules/call-bind-apply-helpers": {
116
+ "version": "1.0.2",
117
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
118
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
119
+ "license": "MIT",
120
+ "dependencies": {
121
+ "es-errors": "^1.3.0",
122
+ "function-bind": "^1.1.2"
123
+ },
124
+ "engines": {
125
+ "node": ">= 0.4"
126
+ }
127
+ },
128
+ "node_modules/call-bound": {
129
+ "version": "1.0.4",
130
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
131
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
132
+ "license": "MIT",
133
+ "dependencies": {
134
+ "call-bind-apply-helpers": "^1.0.2",
135
+ "get-intrinsic": "^1.3.0"
136
+ },
137
+ "engines": {
138
+ "node": ">= 0.4"
139
+ },
140
+ "funding": {
141
+ "url": "https://github.com/sponsors/ljharb"
142
+ }
143
+ },
144
+ "node_modules/content-disposition": {
145
+ "version": "0.5.4",
146
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
147
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
148
+ "license": "MIT",
149
+ "dependencies": {
150
+ "safe-buffer": "5.2.1"
151
+ },
152
+ "engines": {
153
+ "node": ">= 0.6"
154
+ }
155
+ },
156
+ "node_modules/content-type": {
157
+ "version": "1.0.5",
158
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
159
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
160
+ "license": "MIT",
161
+ "engines": {
162
+ "node": ">= 0.6"
163
+ }
164
+ },
165
+ "node_modules/cookie": {
166
+ "version": "0.7.1",
167
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
168
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
169
+ "license": "MIT",
170
+ "engines": {
171
+ "node": ">= 0.6"
172
+ }
173
+ },
174
+ "node_modules/cookie-signature": {
175
+ "version": "1.0.6",
176
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
177
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
178
+ "license": "MIT"
179
+ },
180
+ "node_modules/cors": {
181
+ "version": "2.8.5",
182
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
183
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
184
+ "license": "MIT",
185
+ "dependencies": {
186
+ "object-assign": "^4",
187
+ "vary": "^1"
188
+ },
189
+ "engines": {
190
+ "node": ">= 0.10"
191
+ }
192
+ },
193
+ "node_modules/debug": {
194
+ "version": "2.6.9",
195
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
196
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
197
+ "license": "MIT",
198
+ "dependencies": {
199
+ "ms": "2.0.0"
200
+ }
201
+ },
202
+ "node_modules/depd": {
203
+ "version": "2.0.0",
204
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
205
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
206
+ "license": "MIT",
207
+ "engines": {
208
+ "node": ">= 0.8"
209
+ }
210
+ },
211
+ "node_modules/destroy": {
212
+ "version": "1.2.0",
213
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
214
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
215
+ "license": "MIT",
216
+ "engines": {
217
+ "node": ">= 0.8",
218
+ "npm": "1.2.8000 || >= 1.4.16"
219
+ }
220
+ },
221
+ "node_modules/dotenv": {
222
+ "version": "17.2.3",
223
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
224
+ "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
225
+ "license": "BSD-2-Clause",
226
+ "engines": {
227
+ "node": ">=12"
228
+ },
229
+ "funding": {
230
+ "url": "https://dotenvx.com"
231
+ }
232
+ },
233
+ "node_modules/dunder-proto": {
234
+ "version": "1.0.1",
235
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
236
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
237
+ "license": "MIT",
238
+ "dependencies": {
239
+ "call-bind-apply-helpers": "^1.0.1",
240
+ "es-errors": "^1.3.0",
241
+ "gopd": "^1.2.0"
242
+ },
243
+ "engines": {
244
+ "node": ">= 0.4"
245
+ }
246
+ },
247
+ "node_modules/ee-first": {
248
+ "version": "1.1.1",
249
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
250
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
251
+ "license": "MIT"
252
+ },
253
+ "node_modules/encodeurl": {
254
+ "version": "2.0.0",
255
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
256
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
257
+ "license": "MIT",
258
+ "engines": {
259
+ "node": ">= 0.8"
260
+ }
261
+ },
262
+ "node_modules/engine.io": {
263
+ "version": "6.6.4",
264
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz",
265
+ "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==",
266
+ "license": "MIT",
267
+ "dependencies": {
268
+ "@types/cors": "^2.8.12",
269
+ "@types/node": ">=10.0.0",
270
+ "accepts": "~1.3.4",
271
+ "base64id": "2.0.0",
272
+ "cookie": "~0.7.2",
273
+ "cors": "~2.8.5",
274
+ "debug": "~4.3.1",
275
+ "engine.io-parser": "~5.2.1",
276
+ "ws": "~8.17.1"
277
+ },
278
+ "engines": {
279
+ "node": ">=10.2.0"
280
+ }
281
+ },
282
+ "node_modules/engine.io-parser": {
283
+ "version": "5.2.3",
284
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
285
+ "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
286
+ "license": "MIT",
287
+ "engines": {
288
+ "node": ">=10.0.0"
289
+ }
290
+ },
291
+ "node_modules/engine.io/node_modules/cookie": {
292
+ "version": "0.7.2",
293
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
294
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
295
+ "license": "MIT",
296
+ "engines": {
297
+ "node": ">= 0.6"
298
+ }
299
+ },
300
+ "node_modules/engine.io/node_modules/debug": {
301
+ "version": "4.3.7",
302
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
303
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
304
+ "license": "MIT",
305
+ "dependencies": {
306
+ "ms": "^2.1.3"
307
+ },
308
+ "engines": {
309
+ "node": ">=6.0"
310
+ },
311
+ "peerDependenciesMeta": {
312
+ "supports-color": {
313
+ "optional": true
314
+ }
315
+ }
316
+ },
317
+ "node_modules/engine.io/node_modules/ms": {
318
+ "version": "2.1.3",
319
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
320
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
321
+ "license": "MIT"
322
+ },
323
+ "node_modules/es-define-property": {
324
+ "version": "1.0.1",
325
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
326
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
327
+ "license": "MIT",
328
+ "engines": {
329
+ "node": ">= 0.4"
330
+ }
331
+ },
332
+ "node_modules/es-errors": {
333
+ "version": "1.3.0",
334
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
335
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
336
+ "license": "MIT",
337
+ "engines": {
338
+ "node": ">= 0.4"
339
+ }
340
+ },
341
+ "node_modules/es-object-atoms": {
342
+ "version": "1.1.1",
343
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
344
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
345
+ "license": "MIT",
346
+ "dependencies": {
347
+ "es-errors": "^1.3.0"
348
+ },
349
+ "engines": {
350
+ "node": ">= 0.4"
351
+ }
352
+ },
353
+ "node_modules/escape-html": {
354
+ "version": "1.0.3",
355
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
356
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
357
+ "license": "MIT"
358
+ },
359
+ "node_modules/etag": {
360
+ "version": "1.8.1",
361
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
362
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
363
+ "license": "MIT",
364
+ "engines": {
365
+ "node": ">= 0.6"
366
+ }
367
+ },
368
+ "node_modules/express": {
369
+ "version": "4.21.2",
370
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
371
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
372
+ "license": "MIT",
373
+ "dependencies": {
374
+ "accepts": "~1.3.8",
375
+ "array-flatten": "1.1.1",
376
+ "body-parser": "1.20.3",
377
+ "content-disposition": "0.5.4",
378
+ "content-type": "~1.0.4",
379
+ "cookie": "0.7.1",
380
+ "cookie-signature": "1.0.6",
381
+ "debug": "2.6.9",
382
+ "depd": "2.0.0",
383
+ "encodeurl": "~2.0.0",
384
+ "escape-html": "~1.0.3",
385
+ "etag": "~1.8.1",
386
+ "finalhandler": "1.3.1",
387
+ "fresh": "0.5.2",
388
+ "http-errors": "2.0.0",
389
+ "merge-descriptors": "1.0.3",
390
+ "methods": "~1.1.2",
391
+ "on-finished": "2.4.1",
392
+ "parseurl": "~1.3.3",
393
+ "path-to-regexp": "0.1.12",
394
+ "proxy-addr": "~2.0.7",
395
+ "qs": "6.13.0",
396
+ "range-parser": "~1.2.1",
397
+ "safe-buffer": "5.2.1",
398
+ "send": "0.19.0",
399
+ "serve-static": "1.16.2",
400
+ "setprototypeof": "1.2.0",
401
+ "statuses": "2.0.1",
402
+ "type-is": "~1.6.18",
403
+ "utils-merge": "1.0.1",
404
+ "vary": "~1.1.2"
405
+ },
406
+ "engines": {
407
+ "node": ">= 0.10.0"
408
+ },
409
+ "funding": {
410
+ "type": "opencollective",
411
+ "url": "https://opencollective.com/express"
412
+ }
413
+ },
414
+ "node_modules/express-rate-limit": {
415
+ "version": "8.1.0",
416
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.1.0.tgz",
417
+ "integrity": "sha512-4nLnATuKupnmwqiJc27b4dCFmB/T60ExgmtDD7waf4LdrbJ8CPZzZRHYErDYNhoz+ql8fUdYwM/opf90PoPAQA==",
418
+ "license": "MIT",
419
+ "dependencies": {
420
+ "ip-address": "10.0.1"
421
+ },
422
+ "engines": {
423
+ "node": ">= 16"
424
+ },
425
+ "funding": {
426
+ "url": "https://github.com/sponsors/express-rate-limit"
427
+ },
428
+ "peerDependencies": {
429
+ "express": ">= 4.11"
430
+ }
431
+ },
432
+ "node_modules/finalhandler": {
433
+ "version": "1.3.1",
434
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
435
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
436
+ "license": "MIT",
437
+ "dependencies": {
438
+ "debug": "2.6.9",
439
+ "encodeurl": "~2.0.0",
440
+ "escape-html": "~1.0.3",
441
+ "on-finished": "2.4.1",
442
+ "parseurl": "~1.3.3",
443
+ "statuses": "2.0.1",
444
+ "unpipe": "~1.0.0"
445
+ },
446
+ "engines": {
447
+ "node": ">= 0.8"
448
+ }
449
+ },
450
+ "node_modules/forwarded": {
451
+ "version": "0.2.0",
452
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
453
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
454
+ "license": "MIT",
455
+ "engines": {
456
+ "node": ">= 0.6"
457
+ }
458
+ },
459
+ "node_modules/fresh": {
460
+ "version": "0.5.2",
461
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
462
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
463
+ "license": "MIT",
464
+ "engines": {
465
+ "node": ">= 0.6"
466
+ }
467
+ },
468
+ "node_modules/function-bind": {
469
+ "version": "1.1.2",
470
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
471
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
472
+ "license": "MIT",
473
+ "funding": {
474
+ "url": "https://github.com/sponsors/ljharb"
475
+ }
476
+ },
477
+ "node_modules/get-intrinsic": {
478
+ "version": "1.3.0",
479
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
480
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
481
+ "license": "MIT",
482
+ "dependencies": {
483
+ "call-bind-apply-helpers": "^1.0.2",
484
+ "es-define-property": "^1.0.1",
485
+ "es-errors": "^1.3.0",
486
+ "es-object-atoms": "^1.1.1",
487
+ "function-bind": "^1.1.2",
488
+ "get-proto": "^1.0.1",
489
+ "gopd": "^1.2.0",
490
+ "has-symbols": "^1.1.0",
491
+ "hasown": "^2.0.2",
492
+ "math-intrinsics": "^1.1.0"
493
+ },
494
+ "engines": {
495
+ "node": ">= 0.4"
496
+ },
497
+ "funding": {
498
+ "url": "https://github.com/sponsors/ljharb"
499
+ }
500
+ },
501
+ "node_modules/get-proto": {
502
+ "version": "1.0.1",
503
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
504
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
505
+ "license": "MIT",
506
+ "dependencies": {
507
+ "dunder-proto": "^1.0.1",
508
+ "es-object-atoms": "^1.0.0"
509
+ },
510
+ "engines": {
511
+ "node": ">= 0.4"
512
+ }
513
+ },
514
+ "node_modules/gopd": {
515
+ "version": "1.2.0",
516
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
517
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
518
+ "license": "MIT",
519
+ "engines": {
520
+ "node": ">= 0.4"
521
+ },
522
+ "funding": {
523
+ "url": "https://github.com/sponsors/ljharb"
524
+ }
525
+ },
526
+ "node_modules/has-symbols": {
527
+ "version": "1.1.0",
528
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
529
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
530
+ "license": "MIT",
531
+ "engines": {
532
+ "node": ">= 0.4"
533
+ },
534
+ "funding": {
535
+ "url": "https://github.com/sponsors/ljharb"
536
+ }
537
+ },
538
+ "node_modules/hasown": {
539
+ "version": "2.0.2",
540
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
541
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
542
+ "license": "MIT",
543
+ "dependencies": {
544
+ "function-bind": "^1.1.2"
545
+ },
546
+ "engines": {
547
+ "node": ">= 0.4"
548
+ }
549
+ },
550
+ "node_modules/helmet": {
551
+ "version": "8.1.0",
552
+ "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz",
553
+ "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==",
554
+ "license": "MIT",
555
+ "engines": {
556
+ "node": ">=18.0.0"
557
+ }
558
+ },
559
+ "node_modules/http-errors": {
560
+ "version": "2.0.0",
561
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
562
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
563
+ "license": "MIT",
564
+ "dependencies": {
565
+ "depd": "2.0.0",
566
+ "inherits": "2.0.4",
567
+ "setprototypeof": "1.2.0",
568
+ "statuses": "2.0.1",
569
+ "toidentifier": "1.0.1"
570
+ },
571
+ "engines": {
572
+ "node": ">= 0.8"
573
+ }
574
+ },
575
+ "node_modules/iconv-lite": {
576
+ "version": "0.4.24",
577
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
578
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
579
+ "license": "MIT",
580
+ "dependencies": {
581
+ "safer-buffer": ">= 2.1.2 < 3"
582
+ },
583
+ "engines": {
584
+ "node": ">=0.10.0"
585
+ }
586
+ },
587
+ "node_modules/inherits": {
588
+ "version": "2.0.4",
589
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
590
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
591
+ "license": "ISC"
592
+ },
593
+ "node_modules/ip-address": {
594
+ "version": "10.0.1",
595
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz",
596
+ "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==",
597
+ "license": "MIT",
598
+ "engines": {
599
+ "node": ">= 12"
600
+ }
601
+ },
602
+ "node_modules/ipaddr.js": {
603
+ "version": "1.9.1",
604
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
605
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
606
+ "license": "MIT",
607
+ "engines": {
608
+ "node": ">= 0.10"
609
+ }
610
+ },
611
+ "node_modules/math-intrinsics": {
612
+ "version": "1.1.0",
613
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
614
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
615
+ "license": "MIT",
616
+ "engines": {
617
+ "node": ">= 0.4"
618
+ }
619
+ },
620
+ "node_modules/media-typer": {
621
+ "version": "0.3.0",
622
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
623
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
624
+ "license": "MIT",
625
+ "engines": {
626
+ "node": ">= 0.6"
627
+ }
628
+ },
629
+ "node_modules/merge-descriptors": {
630
+ "version": "1.0.3",
631
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
632
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
633
+ "license": "MIT",
634
+ "funding": {
635
+ "url": "https://github.com/sponsors/sindresorhus"
636
+ }
637
+ },
638
+ "node_modules/methods": {
639
+ "version": "1.1.2",
640
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
641
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
642
+ "license": "MIT",
643
+ "engines": {
644
+ "node": ">= 0.6"
645
+ }
646
+ },
647
+ "node_modules/mime": {
648
+ "version": "1.6.0",
649
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
650
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
651
+ "license": "MIT",
652
+ "bin": {
653
+ "mime": "cli.js"
654
+ },
655
+ "engines": {
656
+ "node": ">=4"
657
+ }
658
+ },
659
+ "node_modules/mime-db": {
660
+ "version": "1.52.0",
661
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
662
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
663
+ "license": "MIT",
664
+ "engines": {
665
+ "node": ">= 0.6"
666
+ }
667
+ },
668
+ "node_modules/mime-types": {
669
+ "version": "2.1.35",
670
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
671
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
672
+ "license": "MIT",
673
+ "dependencies": {
674
+ "mime-db": "1.52.0"
675
+ },
676
+ "engines": {
677
+ "node": ">= 0.6"
678
+ }
679
+ },
680
+ "node_modules/ms": {
681
+ "version": "2.0.0",
682
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
683
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
684
+ "license": "MIT"
685
+ },
686
+ "node_modules/negotiator": {
687
+ "version": "0.6.3",
688
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
689
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
690
+ "license": "MIT",
691
+ "engines": {
692
+ "node": ">= 0.6"
693
+ }
694
+ },
695
+ "node_modules/object-assign": {
696
+ "version": "4.1.1",
697
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
698
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
699
+ "license": "MIT",
700
+ "engines": {
701
+ "node": ">=0.10.0"
702
+ }
703
+ },
704
+ "node_modules/object-inspect": {
705
+ "version": "1.13.4",
706
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
707
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
708
+ "license": "MIT",
709
+ "engines": {
710
+ "node": ">= 0.4"
711
+ },
712
+ "funding": {
713
+ "url": "https://github.com/sponsors/ljharb"
714
+ }
715
+ },
716
+ "node_modules/on-finished": {
717
+ "version": "2.4.1",
718
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
719
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
720
+ "license": "MIT",
721
+ "dependencies": {
722
+ "ee-first": "1.1.1"
723
+ },
724
+ "engines": {
725
+ "node": ">= 0.8"
726
+ }
727
+ },
728
+ "node_modules/parseurl": {
729
+ "version": "1.3.3",
730
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
731
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
732
+ "license": "MIT",
733
+ "engines": {
734
+ "node": ">= 0.8"
735
+ }
736
+ },
737
+ "node_modules/path-to-regexp": {
738
+ "version": "0.1.12",
739
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
740
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
741
+ "license": "MIT"
742
+ },
743
+ "node_modules/proxy-addr": {
744
+ "version": "2.0.7",
745
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
746
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
747
+ "license": "MIT",
748
+ "dependencies": {
749
+ "forwarded": "0.2.0",
750
+ "ipaddr.js": "1.9.1"
751
+ },
752
+ "engines": {
753
+ "node": ">= 0.10"
754
+ }
755
+ },
756
+ "node_modules/qs": {
757
+ "version": "6.13.0",
758
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
759
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
760
+ "license": "BSD-3-Clause",
761
+ "dependencies": {
762
+ "side-channel": "^1.0.6"
763
+ },
764
+ "engines": {
765
+ "node": ">=0.6"
766
+ },
767
+ "funding": {
768
+ "url": "https://github.com/sponsors/ljharb"
769
+ }
770
+ },
771
+ "node_modules/range-parser": {
772
+ "version": "1.2.1",
773
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
774
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
775
+ "license": "MIT",
776
+ "engines": {
777
+ "node": ">= 0.6"
778
+ }
779
+ },
780
+ "node_modules/raw-body": {
781
+ "version": "2.5.2",
782
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
783
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
784
+ "license": "MIT",
785
+ "dependencies": {
786
+ "bytes": "3.1.2",
787
+ "http-errors": "2.0.0",
788
+ "iconv-lite": "0.4.24",
789
+ "unpipe": "1.0.0"
790
+ },
791
+ "engines": {
792
+ "node": ">= 0.8"
793
+ }
794
+ },
795
+ "node_modules/safe-buffer": {
796
+ "version": "5.2.1",
797
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
798
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
799
+ "funding": [
800
+ {
801
+ "type": "github",
802
+ "url": "https://github.com/sponsors/feross"
803
+ },
804
+ {
805
+ "type": "patreon",
806
+ "url": "https://www.patreon.com/feross"
807
+ },
808
+ {
809
+ "type": "consulting",
810
+ "url": "https://feross.org/support"
811
+ }
812
+ ],
813
+ "license": "MIT"
814
+ },
815
+ "node_modules/safer-buffer": {
816
+ "version": "2.1.2",
817
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
818
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
819
+ "license": "MIT"
820
+ },
821
+ "node_modules/send": {
822
+ "version": "0.19.0",
823
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
824
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
825
+ "license": "MIT",
826
+ "dependencies": {
827
+ "debug": "2.6.9",
828
+ "depd": "2.0.0",
829
+ "destroy": "1.2.0",
830
+ "encodeurl": "~1.0.2",
831
+ "escape-html": "~1.0.3",
832
+ "etag": "~1.8.1",
833
+ "fresh": "0.5.2",
834
+ "http-errors": "2.0.0",
835
+ "mime": "1.6.0",
836
+ "ms": "2.1.3",
837
+ "on-finished": "2.4.1",
838
+ "range-parser": "~1.2.1",
839
+ "statuses": "2.0.1"
840
+ },
841
+ "engines": {
842
+ "node": ">= 0.8.0"
843
+ }
844
+ },
845
+ "node_modules/send/node_modules/encodeurl": {
846
+ "version": "1.0.2",
847
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
848
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
849
+ "license": "MIT",
850
+ "engines": {
851
+ "node": ">= 0.8"
852
+ }
853
+ },
854
+ "node_modules/send/node_modules/ms": {
855
+ "version": "2.1.3",
856
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
857
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
858
+ "license": "MIT"
859
+ },
860
+ "node_modules/serve-static": {
861
+ "version": "1.16.2",
862
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
863
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
864
+ "license": "MIT",
865
+ "dependencies": {
866
+ "encodeurl": "~2.0.0",
867
+ "escape-html": "~1.0.3",
868
+ "parseurl": "~1.3.3",
869
+ "send": "0.19.0"
870
+ },
871
+ "engines": {
872
+ "node": ">= 0.8.0"
873
+ }
874
+ },
875
+ "node_modules/setprototypeof": {
876
+ "version": "1.2.0",
877
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
878
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
879
+ "license": "ISC"
880
+ },
881
+ "node_modules/side-channel": {
882
+ "version": "1.1.0",
883
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
884
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
885
+ "license": "MIT",
886
+ "dependencies": {
887
+ "es-errors": "^1.3.0",
888
+ "object-inspect": "^1.13.3",
889
+ "side-channel-list": "^1.0.0",
890
+ "side-channel-map": "^1.0.1",
891
+ "side-channel-weakmap": "^1.0.2"
892
+ },
893
+ "engines": {
894
+ "node": ">= 0.4"
895
+ },
896
+ "funding": {
897
+ "url": "https://github.com/sponsors/ljharb"
898
+ }
899
+ },
900
+ "node_modules/side-channel-list": {
901
+ "version": "1.0.0",
902
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
903
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
904
+ "license": "MIT",
905
+ "dependencies": {
906
+ "es-errors": "^1.3.0",
907
+ "object-inspect": "^1.13.3"
908
+ },
909
+ "engines": {
910
+ "node": ">= 0.4"
911
+ },
912
+ "funding": {
913
+ "url": "https://github.com/sponsors/ljharb"
914
+ }
915
+ },
916
+ "node_modules/side-channel-map": {
917
+ "version": "1.0.1",
918
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
919
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
920
+ "license": "MIT",
921
+ "dependencies": {
922
+ "call-bound": "^1.0.2",
923
+ "es-errors": "^1.3.0",
924
+ "get-intrinsic": "^1.2.5",
925
+ "object-inspect": "^1.13.3"
926
+ },
927
+ "engines": {
928
+ "node": ">= 0.4"
929
+ },
930
+ "funding": {
931
+ "url": "https://github.com/sponsors/ljharb"
932
+ }
933
+ },
934
+ "node_modules/side-channel-weakmap": {
935
+ "version": "1.0.2",
936
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
937
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
938
+ "license": "MIT",
939
+ "dependencies": {
940
+ "call-bound": "^1.0.2",
941
+ "es-errors": "^1.3.0",
942
+ "get-intrinsic": "^1.2.5",
943
+ "object-inspect": "^1.13.3",
944
+ "side-channel-map": "^1.0.1"
945
+ },
946
+ "engines": {
947
+ "node": ">= 0.4"
948
+ },
949
+ "funding": {
950
+ "url": "https://github.com/sponsors/ljharb"
951
+ }
952
+ },
953
+ "node_modules/socket.io": {
954
+ "version": "4.8.1",
955
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz",
956
+ "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==",
957
+ "license": "MIT",
958
+ "dependencies": {
959
+ "accepts": "~1.3.4",
960
+ "base64id": "~2.0.0",
961
+ "cors": "~2.8.5",
962
+ "debug": "~4.3.2",
963
+ "engine.io": "~6.6.0",
964
+ "socket.io-adapter": "~2.5.2",
965
+ "socket.io-parser": "~4.2.4"
966
+ },
967
+ "engines": {
968
+ "node": ">=10.2.0"
969
+ }
970
+ },
971
+ "node_modules/socket.io-adapter": {
972
+ "version": "2.5.5",
973
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
974
+ "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
975
+ "license": "MIT",
976
+ "dependencies": {
977
+ "debug": "~4.3.4",
978
+ "ws": "~8.17.1"
979
+ }
980
+ },
981
+ "node_modules/socket.io-adapter/node_modules/debug": {
982
+ "version": "4.3.7",
983
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
984
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
985
+ "license": "MIT",
986
+ "dependencies": {
987
+ "ms": "^2.1.3"
988
+ },
989
+ "engines": {
990
+ "node": ">=6.0"
991
+ },
992
+ "peerDependenciesMeta": {
993
+ "supports-color": {
994
+ "optional": true
995
+ }
996
+ }
997
+ },
998
+ "node_modules/socket.io-adapter/node_modules/ms": {
999
+ "version": "2.1.3",
1000
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1001
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1002
+ "license": "MIT"
1003
+ },
1004
+ "node_modules/socket.io-parser": {
1005
+ "version": "4.2.4",
1006
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
1007
+ "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
1008
+ "license": "MIT",
1009
+ "dependencies": {
1010
+ "@socket.io/component-emitter": "~3.1.0",
1011
+ "debug": "~4.3.1"
1012
+ },
1013
+ "engines": {
1014
+ "node": ">=10.0.0"
1015
+ }
1016
+ },
1017
+ "node_modules/socket.io-parser/node_modules/debug": {
1018
+ "version": "4.3.7",
1019
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1020
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1021
+ "license": "MIT",
1022
+ "dependencies": {
1023
+ "ms": "^2.1.3"
1024
+ },
1025
+ "engines": {
1026
+ "node": ">=6.0"
1027
+ },
1028
+ "peerDependenciesMeta": {
1029
+ "supports-color": {
1030
+ "optional": true
1031
+ }
1032
+ }
1033
+ },
1034
+ "node_modules/socket.io-parser/node_modules/ms": {
1035
+ "version": "2.1.3",
1036
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1037
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1038
+ "license": "MIT"
1039
+ },
1040
+ "node_modules/socket.io/node_modules/debug": {
1041
+ "version": "4.3.7",
1042
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1043
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1044
+ "license": "MIT",
1045
+ "dependencies": {
1046
+ "ms": "^2.1.3"
1047
+ },
1048
+ "engines": {
1049
+ "node": ">=6.0"
1050
+ },
1051
+ "peerDependenciesMeta": {
1052
+ "supports-color": {
1053
+ "optional": true
1054
+ }
1055
+ }
1056
+ },
1057
+ "node_modules/socket.io/node_modules/ms": {
1058
+ "version": "2.1.3",
1059
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1060
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1061
+ "license": "MIT"
1062
+ },
1063
+ "node_modules/statuses": {
1064
+ "version": "2.0.1",
1065
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1066
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1067
+ "license": "MIT",
1068
+ "engines": {
1069
+ "node": ">= 0.8"
1070
+ }
1071
+ },
1072
+ "node_modules/toidentifier": {
1073
+ "version": "1.0.1",
1074
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1075
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1076
+ "license": "MIT",
1077
+ "engines": {
1078
+ "node": ">=0.6"
1079
+ }
1080
+ },
1081
+ "node_modules/type-is": {
1082
+ "version": "1.6.18",
1083
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1084
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1085
+ "license": "MIT",
1086
+ "dependencies": {
1087
+ "media-typer": "0.3.0",
1088
+ "mime-types": "~2.1.24"
1089
+ },
1090
+ "engines": {
1091
+ "node": ">= 0.6"
1092
+ }
1093
+ },
1094
+ "node_modules/undici-types": {
1095
+ "version": "7.14.0",
1096
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz",
1097
+ "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==",
1098
+ "license": "MIT"
1099
+ },
1100
+ "node_modules/unpipe": {
1101
+ "version": "1.0.0",
1102
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1103
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1104
+ "license": "MIT",
1105
+ "engines": {
1106
+ "node": ">= 0.8"
1107
+ }
1108
+ },
1109
+ "node_modules/utils-merge": {
1110
+ "version": "1.0.1",
1111
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1112
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1113
+ "license": "MIT",
1114
+ "engines": {
1115
+ "node": ">= 0.4.0"
1116
+ }
1117
+ },
1118
+ "node_modules/validator": {
1119
+ "version": "13.15.15",
1120
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz",
1121
+ "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==",
1122
+ "license": "MIT",
1123
+ "engines": {
1124
+ "node": ">= 0.10"
1125
+ }
1126
+ },
1127
+ "node_modules/vary": {
1128
+ "version": "1.1.2",
1129
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1130
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1131
+ "license": "MIT",
1132
+ "engines": {
1133
+ "node": ">= 0.8"
1134
+ }
1135
+ },
1136
+ "node_modules/ws": {
1137
+ "version": "8.17.1",
1138
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
1139
+ "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
1140
+ "license": "MIT",
1141
+ "engines": {
1142
+ "node": ">=10.0.0"
1143
+ },
1144
+ "peerDependencies": {
1145
+ "bufferutil": "^4.0.1",
1146
+ "utf-8-validate": ">=5.0.2"
1147
+ },
1148
+ "peerDependenciesMeta": {
1149
+ "bufferutil": {
1150
+ "optional": true
1151
+ },
1152
+ "utf-8-validate": {
1153
+ "optional": true
1154
+ }
1155
+ }
1156
+ }
1157
+ }
1158
+ }
package.json CHANGED
@@ -1,20 +1,20 @@
1
- {
2
- "name": "watch2gether-server",
3
- "version": "0.1.0",
4
- "private": true,
5
- "main": "index.js",
6
- "scripts": {
7
- "start": "node index.js",
8
- "dev": "node index.js"
9
- },
10
- "dependencies": {
11
- "bcryptjs": "^3.0.2",
12
- "cors": "^2.8.5",
13
- "dotenv": "^17.2.3",
14
- "express": "^4.18.2",
15
- "express-rate-limit": "^8.1.0",
16
- "helmet": "^8.1.0",
17
- "socket.io": "^4.7.2",
18
- "validator": "^13.15.15"
19
- }
20
- }
 
1
+ {
2
+ "name": "watch2gether-server",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "start": "node index.js",
8
+ "dev": "node index.js"
9
+ },
10
+ "dependencies": {
11
+ "bcryptjs": "^3.0.2",
12
+ "cors": "^2.8.5",
13
+ "dotenv": "^17.2.3",
14
+ "express": "^4.18.2",
15
+ "express-rate-limit": "^8.1.0",
16
+ "helmet": "^8.1.0",
17
+ "socket.io": "^4.7.2",
18
+ "validator": "^13.15.15"
19
+ }
20
+ }
public/README.md CHANGED
@@ -1,3 +1,3 @@
1
- Place any static assets here.
2
-
3
- To serve a sample video, add a file named `video.mp4` in this folder.
 
1
+ Place any static assets here.
2
+
3
+ To serve a sample video, add a file named `video.mp4` in this folder.
public/index.html CHANGED
@@ -1,16 +1,16 @@
1
- <!doctype html>
2
- <html>
3
-
4
- <head>
5
- <meta charset="utf-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Watch2Gether Server Public</title>
8
- </head>
9
-
10
- <body>
11
- <h3>Watch2Gether Server</h3>
12
- <p>This server hosts static assets (like a sample video) and Socket.IO endpoints.</p>
13
- <p>Place a video at <code>/public/video.mp4</code> to serve it.</p>
14
- </body>
15
-
16
  </html>
 
1
+ <!doctype html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta charset="utf-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Watch2Gether Server Public</title>
8
+ </head>
9
+
10
+ <body>
11
+ <h3>Watch2Gether Server</h3>
12
+ <p>This server hosts static assets (like a sample video) and Socket.IO endpoints.</p>
13
+ <p>Place a video at <code>/public/video.mp4</code> to serve it.</p>
14
+ </body>
15
+
16
  </html>