plsgivemeachane commited on
Commit
e05bace
·
1 Parent(s): 1912568

Initial commit

Browse files
Files changed (7) hide show
  1. .gitignore +3 -0
  2. Dockerfile +15 -0
  3. LICENSE +21 -0
  4. index.js +465 -0
  5. package-lock.json +1464 -0
  6. package.json +25 -0
  7. prisma/schema.prisma +20 -0
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ node_modules
2
+ # Keep environment variables out of version control
3
+ .env
Dockerfile ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM node:22-alpine
2
+
3
+ RUN mkdir -p /home/node/app && chown -R node:node /home/node/app
4
+
5
+ WORKDIR /home/node/app
6
+
7
+ USER node
8
+
9
+ COPY --chown=node:node . .
10
+
11
+ RUN npm install
12
+
13
+ EXPOSE 7860
14
+
15
+ CMD [ "node", "index.js" ]
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Lee Min Waan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
index.js ADDED
@@ -0,0 +1,465 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const express = require('express')
2
+ const bodyParser = require('body-parser');
3
+ const { sha } = require("sha256quanvn")
4
+ const { PrismaClient } = require('@prisma/client')
5
+ const multer = require('multer');
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+ const streamToBlob = require('stream-to-blob')
9
+ const statusMonitor = require('express-status-monitor')({
10
+ path: '/bee3hivestatuspagethatnoonewillrememberthisurl',
11
+ title: "Bee3Hive API Status"
12
+ });
13
+ const cors = require("cors")
14
+ const prisma = new PrismaClient()
15
+ const app = express()
16
+ const SALT = process.env.PRIVATE_KEY
17
+
18
+ const queueFileUpload = {}
19
+
20
+ const info = (message) => {
21
+ console.log(`<${new Date()}> [INFO] - ${message}`)
22
+ }
23
+ const warn = (message) => {
24
+ console.log(`<${new Date()}> [INFO] - ${message}`)
25
+ }
26
+
27
+ //* Sussy bigint thing
28
+ BigInt.prototype["toJSON"] = function () {
29
+ return this.toString();
30
+ };
31
+
32
+ //* Safe Base64 Encode
33
+ const safeb64 = (str) => {
34
+ return btoa(str).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_")
35
+ }
36
+
37
+ const generateJWT = async (id) => {
38
+ const header = {
39
+ "alg": "SHA256",
40
+ "typ": "JWT"
41
+ }
42
+
43
+ const payload = {
44
+ id: id,
45
+ exp: Date.now() + (3600000 * 24) // 1 days
46
+ }
47
+
48
+ await prisma.users.update({
49
+ where: {
50
+ id: payload.id
51
+ },
52
+ data: {
53
+ last_login: new Date()
54
+ }
55
+ })
56
+
57
+ const token = safeb64(JSON.stringify(header)) + "." + safeb64(JSON.stringify(payload));
58
+
59
+ const sig = sha(token + "." + SALT);
60
+
61
+ info("Generated new token for user: " + id)
62
+ // console.log("New Token generated: " + token + "." + sig)
63
+
64
+ return token + "." + safeb64(sig)
65
+ }
66
+
67
+ // Configure Multer storage
68
+ const storage = multer.diskStorage({
69
+ destination: (req, file, cb) => {
70
+ cb(null, 'uploads/');
71
+ },
72
+ filename: (req, file, cb) => {
73
+ cb(null, file.originalname);
74
+ }
75
+ });
76
+
77
+ if(!fs.existsSync('uploads')) {
78
+ fs.mkdirSync('uploads');
79
+ }
80
+
81
+ // Set file size limit to 10GB
82
+ const upload = multer({
83
+ storage: storage,
84
+ limits: { fileSize: 10 * 1024 * 1024 * 1024 } // 10GB
85
+ });
86
+
87
+
88
+ const MAIN_STORAGE = "quanvndzai";
89
+
90
+ const getRepo = (username) => {
91
+ return {
92
+ type: "dataset",
93
+ name: MAIN_STORAGE + "/" + username
94
+ }
95
+ };
96
+
97
+ app.use(cors({
98
+ origin: "*"
99
+ }))
100
+
101
+ app.use(bodyParser.json());
102
+
103
+ app.use(statusMonitor);
104
+
105
+ app.get('/bee3hivestatuspagethatnoonewillrememberthisurl', statusMonitor.pageRoute)
106
+
107
+
108
+ app.post("/auth/email/register", async (req, res) => {
109
+ let { username, email, password } = req.body;
110
+
111
+ if(!username || !email || !password) {
112
+ info("Missing required fields registration")
113
+ res.sendStatus(400)
114
+ return;
115
+ }
116
+
117
+ if(username.length < 6) {
118
+ info("Username: " + username + " is too short!")
119
+ res.sendStatus(400);
120
+ return;
121
+ }
122
+
123
+ username = username.trim();
124
+ password = password.trim();
125
+ email = email.trim();
126
+
127
+ // console.log(username, email, password)
128
+
129
+ if(["admin", "administrator", "root", "user", "anonymous", "guest"].includes(username)) {
130
+ warn("Username not allowed: " + username)
131
+ res.sendStatus(401)
132
+ return;
133
+ }
134
+
135
+ const record = await prisma.users.findUnique({
136
+ where: {
137
+ email: email
138
+ }
139
+ })
140
+
141
+ if(record) {
142
+ info("User already exists: " + username)
143
+ res.status(400).send({ error: "Username already exists" })
144
+ return;
145
+ }
146
+
147
+ try {
148
+
149
+ info("Creating user: " + email + " username: " + username + " password: " + sha(password) + " " + new Date())
150
+
151
+ const created = await prisma.users.create({
152
+ data: {
153
+ username: username,
154
+ email: email,
155
+ password_hash: sha(password),
156
+ last_login: new Date()
157
+ }
158
+ })
159
+
160
+ await createRepo({
161
+ repo: getRepo(username),
162
+ credentials: credentials,
163
+ private: true
164
+ })
165
+
166
+ info("User created: " + email + " username: " + username)
167
+ res.send({ token: await generateJWT(created.id) })
168
+ return;
169
+ } catch(e) {
170
+ warn("Error on creating users")
171
+ console.log(e)
172
+ res.sendStatus(500)
173
+ return
174
+ }
175
+ })
176
+
177
+ app.post("/auth/email/login", async (req, res) => {
178
+ const { email, password } = req.body
179
+
180
+ if(!email || !password) {
181
+ info("Missing required fields login")
182
+ res.sendStatus(400)
183
+ return
184
+ }
185
+
186
+ const record = await prisma.users.findUnique({
187
+ where: {
188
+ email: email
189
+ }
190
+ })
191
+
192
+ if(!record) {
193
+ info("User not found: " + email)
194
+ res.sendStatus(401)
195
+ return
196
+ }
197
+
198
+ if(record.password_hash != sha(password)) {
199
+ warn("Wrong password attempt: " + email)
200
+ res.sendStatus(401)
201
+ return;
202
+ }
203
+
204
+ info("User logged in: " + email)
205
+ res.send({ token: await generateJWT(record.id) })
206
+ })
207
+
208
+ app.use(async (req, res, next) => {
209
+ if(!req.headers.authorization) {
210
+ info("Authorization header not found")
211
+ res.sendStatus(401)
212
+ return;
213
+ }
214
+
215
+ let token;
216
+ try {
217
+ token = req.headers.authorization.slice(7); // Bearer token
218
+ } catch(e) {
219
+ warn("Parsing token fail")
220
+ console.log(e)
221
+ return;
222
+ }
223
+
224
+ if(!token) {
225
+ info("Token not found")
226
+ res.sendStatus(401)
227
+ return;
228
+ }
229
+
230
+ const [tokenHeader, tokenPayload, tokenSig] = token.split(".")
231
+
232
+ if(!tokenHeader || !tokenPayload || !tokenSig) {
233
+ info("Invalid token")
234
+ res.sendStatus(401)
235
+ return;
236
+ }
237
+
238
+ // console.log(tokenHeader, tokenPayload, tokenSig)
239
+
240
+ try {
241
+ // console.lo
242
+ const header = JSON.parse(Buffer.from(tokenHeader, "base64").toString());
243
+ const payload = JSON.parse(Buffer.from(tokenPayload, "base64").toString());
244
+ const token_sig = Buffer.from(tokenSig, "base64").toString();
245
+ const sig = sha(tokenHeader + "." + tokenPayload + "." + SALT);
246
+
247
+ // console.log(header, payload, token_sig, sig)
248
+
249
+ if(sig !== token_sig) {
250
+ warn("Invalid signature")
251
+ res.sendStatus(401)
252
+ return;
253
+ }
254
+
255
+ if(Date.now() > payload.exp) {
256
+ info("Token expired")
257
+ res.sendStatus(401)
258
+ return;
259
+ }
260
+
261
+ const record = await prisma.users.findUnique({
262
+ where: {
263
+ id: payload.id
264
+ }
265
+ })
266
+
267
+ if(!record) {
268
+ warn("Record not found")
269
+ res.sendStatus(500) // How?
270
+ return;
271
+ }
272
+
273
+ info("Authorized: " + record.id)
274
+
275
+ req.user = record
276
+ next()
277
+ return;
278
+ } catch (e) {
279
+ console.log(e)
280
+ res.sendStatus(401)
281
+ return;
282
+ }
283
+ })
284
+
285
+ app.post("/auth/me", async (req, res) => {
286
+ if(!Array.isArray(queueFileUpload[req.user.username])) {
287
+ queueFileUpload[req.user.username] = []
288
+ }
289
+ // User already authorize
290
+ res.send(req.user)
291
+ })
292
+
293
+ app.post("/auth/delete", async (req, res) => {
294
+ // User already authorize
295
+ const { password } = req.body;
296
+
297
+ if(!password) {
298
+ info("Missing password when deleting user")
299
+ res.sendStatus(400)
300
+ return;
301
+ }
302
+
303
+ // Check password
304
+ if(sha(password) != req.user.password_hash) {
305
+ res.sendStatus(401)
306
+ return;
307
+ }
308
+
309
+ // Delete User
310
+ try {
311
+ await prisma.users.delete({
312
+ where: {
313
+ id: req.user.id
314
+ }
315
+ })
316
+ res.sendStatus(200);
317
+ return;
318
+ } catch (e) {
319
+ warn("Error on deleting user")
320
+ console.log(e);
321
+ res.sendStatus(500);
322
+ return;
323
+ }
324
+ })
325
+
326
+ // app.post('/file/upload', upload.single('file'), async (req, res) => {
327
+ // const filePath = req.file.path;
328
+
329
+ // const file_path = req.body.filePath;
330
+ // const full_file_path = (file_path ? (file_path + "/") : "") + req.file.filename;
331
+ // const fileInfo = await fileExists({
332
+ // repo: getRepo(req.user.username),
333
+ // credentials: credentials,
334
+ // path: full_file_path,
335
+ // });
336
+
337
+ // if(fileInfo) {
338
+ // warn("Override file because file already exists: " + full_file_path)
339
+ // }
340
+
341
+ // try {
342
+
343
+ // if(!Array.isArray(queueFileUpload[req.user.username])) {
344
+ // queueFileUpload[req.user.username] = []
345
+ // }
346
+
347
+ // queueFileUpload[req.user.username].push({
348
+ // file_path: full_file_path,
349
+ // state: "Preparing"
350
+ // })
351
+ // // Upload the file to another backend
352
+ // for await (const progressEvent of await uploadFilesWithProgress({
353
+ // repo: getRepo(req.user.username),
354
+ // credentials: credentials,
355
+ // files: [
356
+ // {
357
+ // path: full_file_path,
358
+ // content: await streamToBlob(fs.createReadStream(filePath)),
359
+ // },
360
+ // ],
361
+ // })) {
362
+ // queueFileUpload[req.user.username].push({
363
+ // file_path: full_file_path,
364
+ // state: progressEvent.state
365
+ // })
366
+ // // if(progressEvent.event == "fileProgress") {
367
+ // // info(`Upload progress for ${progressEvent.path}: ${progressEvent.progress}`)
368
+ // // }
369
+ // };
370
+
371
+ // // Remove the file after upload
372
+ // fs.unlinkSync(filePath);
373
+
374
+ // for(let i = 0; i < queueFileUpload[req.user.username].length; i++) {
375
+ // if(queueFileUpload[req.user.username][i].file_path == full_file_path) {
376
+ // queueFileUpload[req.user.username].splice(i, 1)
377
+ // break
378
+ // }
379
+ // }
380
+
381
+ // info("File uploaded successfully: " + full_file_path)
382
+ // res.send('File uploaded successfully.');
383
+ // } catch (error) {
384
+ // // Fail to upload
385
+ // warn("File upload failed")
386
+ // console.log(error)
387
+ // res.status(500).send('File upload failed.');
388
+ // }
389
+ // })
390
+
391
+ // app.get("/file/status", async (req, res) => {
392
+ // res.send(queueFileUpload[req.user.username])
393
+ // })
394
+
395
+ // app.get("/file/list", async (req, res) => {
396
+ // const filePath = req.query.filePath;
397
+ // const recursive = req.query.recursive == "true";
398
+ // const files = []
399
+
400
+ // try{
401
+ // for await (const fileInfo of listFiles({
402
+ // repo: getRepo(req.user.username),
403
+ // credentials: credentials,
404
+ // path: (filePath ? (filePath + "/") : ""),
405
+ // recursive: recursive
406
+ // })) {
407
+ // files.push(fileInfo)
408
+ // }
409
+ // } catch (e) {
410
+ // info("No file found")
411
+ // console.log(e)
412
+ // }
413
+
414
+ // res.send(files)
415
+ // })
416
+
417
+ // app.post("/file/delete", async (req, res) => {
418
+ // const filePath = req.body.filePath;
419
+
420
+ // const fileInfo = await fileExists({
421
+ // repo: getRepo(req.user.username),
422
+ // credentials: credentials,
423
+ // path: (filePath ? (filePath + "/") : "")
424
+ // });
425
+
426
+ // if(!fileInfo) {
427
+ // warn("File not found: " + (filePath ? (filePath + "/") : ""))
428
+ // res.status(404).send("File not found.");
429
+ // return;
430
+ // }
431
+
432
+ // await deleteFile({
433
+ // repo: getRepo(req.user.username),
434
+ // credentials: credentials,
435
+ // path: (filePath ? (filePath + "/") : "")
436
+ // })
437
+
438
+ // info("File deleted: " + (filePath ? (filePath + "/") : ""))
439
+ // res.send("File deleted successfully.");
440
+ // })
441
+
442
+ // app.post("/file/getdownloadurl", async (req, res) => {
443
+ // const path = req.body.path;
444
+
445
+ // try {
446
+ // const downloadURL = await fileDownloadInfo({
447
+ // repo: getRepo(req.user.username),
448
+ // credentials: credentials,
449
+ // path: path,
450
+ // // raw: true
451
+ // })
452
+
453
+ // if(!downloadURL) {
454
+ // res.status(404).send("File not found")
455
+ // return;
456
+ // }
457
+
458
+ // res.send(downloadURL)
459
+ // } catch(e) {
460
+ // console.log(e);
461
+ // res.sendStatus(500)
462
+ // }
463
+ // })
464
+
465
+ app.listen(7860, () => info('Server started on port 7860'))
package-lock.json ADDED
@@ -0,0 +1,1464 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "beeserver",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "beeserver",
9
+ "version": "1.0.0",
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "@huggingface/hub": "^0.15.1",
13
+ "@prisma/client": "^5.18.0",
14
+ "cors": "^2.8.5",
15
+ "express": "^4.19.2",
16
+ "express-status-monitor": "^1.3.4",
17
+ "multer": "^1.4.5-lts.1",
18
+ "sha256quanvn": "^1.0.2",
19
+ "stream-to-blob": "^2.0.1"
20
+ },
21
+ "devDependencies": {
22
+ "prisma": "^5.18.0"
23
+ }
24
+ },
25
+ "node_modules/@huggingface/hub": {
26
+ "version": "0.15.1",
27
+ "resolved": "https://registry.npmjs.org/@huggingface/hub/-/hub-0.15.1.tgz",
28
+ "integrity": "sha512-uHb4aFkJDoGfLeRHfFTjkI36Z8IV6Z1c+KzhMDqUSC56opyr7Mn1Nsx7Rri/C7KDwROhQfBp/fOOqqjTzn6Cgg==",
29
+ "dependencies": {
30
+ "@huggingface/tasks": "^0.10.6",
31
+ "hash-wasm": "^4.9.0"
32
+ },
33
+ "engines": {
34
+ "node": ">=18"
35
+ }
36
+ },
37
+ "node_modules/@huggingface/tasks": {
38
+ "version": "0.10.22",
39
+ "resolved": "https://registry.npmjs.org/@huggingface/tasks/-/tasks-0.10.22.tgz",
40
+ "integrity": "sha512-sCtp+A6sq6NXoUU7NXuXWoVNNjKddk1GTQIh3cJ6illF8S4zmFoerCVRvFf19BdgICGvF+RVZiv9sGGK9KRDTg=="
41
+ },
42
+ "node_modules/@prisma/client": {
43
+ "version": "5.18.0",
44
+ "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.18.0.tgz",
45
+ "integrity": "sha512-BWivkLh+af1kqC89zCJYkHsRcyWsM8/JHpsDMM76DjP3ZdEquJhXa4IeX+HkWPnwJ5FanxEJFZZDTWiDs/Kvyw==",
46
+ "hasInstallScript": true,
47
+ "engines": {
48
+ "node": ">=16.13"
49
+ },
50
+ "peerDependencies": {
51
+ "prisma": "*"
52
+ },
53
+ "peerDependenciesMeta": {
54
+ "prisma": {
55
+ "optional": true
56
+ }
57
+ }
58
+ },
59
+ "node_modules/@prisma/debug": {
60
+ "version": "5.18.0",
61
+ "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.18.0.tgz",
62
+ "integrity": "sha512-f+ZvpTLidSo3LMJxQPVgAxdAjzv5OpzAo/eF8qZqbwvgi2F5cTOI9XCpdRzJYA0iGfajjwjOKKrVq64vkxEfUw==",
63
+ "devOptional": true
64
+ },
65
+ "node_modules/@prisma/engines": {
66
+ "version": "5.18.0",
67
+ "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.18.0.tgz",
68
+ "integrity": "sha512-ofmpGLeJ2q2P0wa/XaEgTnX/IsLnvSp/gZts0zjgLNdBhfuj2lowOOPmDcfKljLQUXMvAek3lw5T01kHmCG8rg==",
69
+ "devOptional": true,
70
+ "hasInstallScript": true,
71
+ "dependencies": {
72
+ "@prisma/debug": "5.18.0",
73
+ "@prisma/engines-version": "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169",
74
+ "@prisma/fetch-engine": "5.18.0",
75
+ "@prisma/get-platform": "5.18.0"
76
+ }
77
+ },
78
+ "node_modules/@prisma/engines-version": {
79
+ "version": "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169",
80
+ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169.tgz",
81
+ "integrity": "sha512-a/+LpJj8vYU3nmtkg+N3X51ddbt35yYrRe8wqHTJtYQt7l1f8kjIBcCs6sHJvodW/EK5XGvboOiwm47fmNrbgg==",
82
+ "devOptional": true
83
+ },
84
+ "node_modules/@prisma/fetch-engine": {
85
+ "version": "5.18.0",
86
+ "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.18.0.tgz",
87
+ "integrity": "sha512-I/3u0x2n31rGaAuBRx2YK4eB7R/1zCuayo2DGwSpGyrJWsZesrV7QVw7ND0/Suxeo/vLkJ5OwuBqHoCxvTHpOg==",
88
+ "devOptional": true,
89
+ "dependencies": {
90
+ "@prisma/debug": "5.18.0",
91
+ "@prisma/engines-version": "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169",
92
+ "@prisma/get-platform": "5.18.0"
93
+ }
94
+ },
95
+ "node_modules/@prisma/get-platform": {
96
+ "version": "5.18.0",
97
+ "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.18.0.tgz",
98
+ "integrity": "sha512-Tk+m7+uhqcKDgnMnFN0lRiH7Ewea0OEsZZs9pqXa7i3+7svS3FSCqDBCaM9x5fmhhkufiG0BtunJVDka+46DlA==",
99
+ "devOptional": true,
100
+ "dependencies": {
101
+ "@prisma/debug": "5.18.0"
102
+ }
103
+ },
104
+ "node_modules/accepts": {
105
+ "version": "1.3.8",
106
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
107
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
108
+ "dependencies": {
109
+ "mime-types": "~2.1.34",
110
+ "negotiator": "0.6.3"
111
+ },
112
+ "engines": {
113
+ "node": ">= 0.6"
114
+ }
115
+ },
116
+ "node_modules/after": {
117
+ "version": "0.8.2",
118
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
119
+ "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA=="
120
+ },
121
+ "node_modules/append-field": {
122
+ "version": "1.0.0",
123
+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
124
+ "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="
125
+ },
126
+ "node_modules/array-flatten": {
127
+ "version": "1.1.1",
128
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
129
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
130
+ },
131
+ "node_modules/arraybuffer.slice": {
132
+ "version": "0.0.7",
133
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
134
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
135
+ },
136
+ "node_modules/axios": {
137
+ "version": "0.26.0",
138
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz",
139
+ "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==",
140
+ "dependencies": {
141
+ "follow-redirects": "^1.14.8"
142
+ }
143
+ },
144
+ "node_modules/backo2": {
145
+ "version": "1.0.2",
146
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
147
+ "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA=="
148
+ },
149
+ "node_modules/base64-arraybuffer": {
150
+ "version": "0.1.4",
151
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
152
+ "integrity": "sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==",
153
+ "engines": {
154
+ "node": ">= 0.6.0"
155
+ }
156
+ },
157
+ "node_modules/base64id": {
158
+ "version": "2.0.0",
159
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
160
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
161
+ "engines": {
162
+ "node": "^4.5.0 || >= 5.9"
163
+ }
164
+ },
165
+ "node_modules/blob": {
166
+ "version": "0.0.5",
167
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
168
+ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
169
+ },
170
+ "node_modules/body-parser": {
171
+ "version": "1.20.2",
172
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
173
+ "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
174
+ "dependencies": {
175
+ "bytes": "3.1.2",
176
+ "content-type": "~1.0.5",
177
+ "debug": "2.6.9",
178
+ "depd": "2.0.0",
179
+ "destroy": "1.2.0",
180
+ "http-errors": "2.0.0",
181
+ "iconv-lite": "0.4.24",
182
+ "on-finished": "2.4.1",
183
+ "qs": "6.11.0",
184
+ "raw-body": "2.5.2",
185
+ "type-is": "~1.6.18",
186
+ "unpipe": "1.0.0"
187
+ },
188
+ "engines": {
189
+ "node": ">= 0.8",
190
+ "npm": "1.2.8000 || >= 1.4.16"
191
+ }
192
+ },
193
+ "node_modules/buffer-from": {
194
+ "version": "1.1.2",
195
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
196
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
197
+ },
198
+ "node_modules/busboy": {
199
+ "version": "1.6.0",
200
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
201
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
202
+ "dependencies": {
203
+ "streamsearch": "^1.1.0"
204
+ },
205
+ "engines": {
206
+ "node": ">=10.16.0"
207
+ }
208
+ },
209
+ "node_modules/bytes": {
210
+ "version": "3.1.2",
211
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
212
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
213
+ "engines": {
214
+ "node": ">= 0.8"
215
+ }
216
+ },
217
+ "node_modules/call-bind": {
218
+ "version": "1.0.7",
219
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
220
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
221
+ "dependencies": {
222
+ "es-define-property": "^1.0.0",
223
+ "es-errors": "^1.3.0",
224
+ "function-bind": "^1.1.2",
225
+ "get-intrinsic": "^1.2.4",
226
+ "set-function-length": "^1.2.1"
227
+ },
228
+ "engines": {
229
+ "node": ">= 0.4"
230
+ },
231
+ "funding": {
232
+ "url": "https://github.com/sponsors/ljharb"
233
+ }
234
+ },
235
+ "node_modules/component-bind": {
236
+ "version": "1.0.0",
237
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
238
+ "integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw=="
239
+ },
240
+ "node_modules/component-emitter": {
241
+ "version": "1.3.1",
242
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
243
+ "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
244
+ "funding": {
245
+ "url": "https://github.com/sponsors/sindresorhus"
246
+ }
247
+ },
248
+ "node_modules/component-inherit": {
249
+ "version": "0.0.3",
250
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
251
+ "integrity": "sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA=="
252
+ },
253
+ "node_modules/concat-stream": {
254
+ "version": "1.6.2",
255
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
256
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
257
+ "engines": [
258
+ "node >= 0.8"
259
+ ],
260
+ "dependencies": {
261
+ "buffer-from": "^1.0.0",
262
+ "inherits": "^2.0.3",
263
+ "readable-stream": "^2.2.2",
264
+ "typedarray": "^0.0.6"
265
+ }
266
+ },
267
+ "node_modules/content-disposition": {
268
+ "version": "0.5.4",
269
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
270
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
271
+ "dependencies": {
272
+ "safe-buffer": "5.2.1"
273
+ },
274
+ "engines": {
275
+ "node": ">= 0.6"
276
+ }
277
+ },
278
+ "node_modules/content-type": {
279
+ "version": "1.0.5",
280
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
281
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
282
+ "engines": {
283
+ "node": ">= 0.6"
284
+ }
285
+ },
286
+ "node_modules/cookie": {
287
+ "version": "0.6.0",
288
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
289
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
290
+ "engines": {
291
+ "node": ">= 0.6"
292
+ }
293
+ },
294
+ "node_modules/cookie-signature": {
295
+ "version": "1.0.6",
296
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
297
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
298
+ },
299
+ "node_modules/core-util-is": {
300
+ "version": "1.0.3",
301
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
302
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
303
+ },
304
+ "node_modules/cors": {
305
+ "version": "2.8.5",
306
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
307
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
308
+ "dependencies": {
309
+ "object-assign": "^4",
310
+ "vary": "^1"
311
+ },
312
+ "engines": {
313
+ "node": ">= 0.10"
314
+ }
315
+ },
316
+ "node_modules/debug": {
317
+ "version": "2.6.9",
318
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
319
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
320
+ "dependencies": {
321
+ "ms": "2.0.0"
322
+ }
323
+ },
324
+ "node_modules/define-data-property": {
325
+ "version": "1.1.4",
326
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
327
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
328
+ "dependencies": {
329
+ "es-define-property": "^1.0.0",
330
+ "es-errors": "^1.3.0",
331
+ "gopd": "^1.0.1"
332
+ },
333
+ "engines": {
334
+ "node": ">= 0.4"
335
+ },
336
+ "funding": {
337
+ "url": "https://github.com/sponsors/ljharb"
338
+ }
339
+ },
340
+ "node_modules/depd": {
341
+ "version": "2.0.0",
342
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
343
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
344
+ "engines": {
345
+ "node": ">= 0.8"
346
+ }
347
+ },
348
+ "node_modules/destroy": {
349
+ "version": "1.2.0",
350
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
351
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
352
+ "engines": {
353
+ "node": ">= 0.8",
354
+ "npm": "1.2.8000 || >= 1.4.16"
355
+ }
356
+ },
357
+ "node_modules/ee-first": {
358
+ "version": "1.1.1",
359
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
360
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
361
+ },
362
+ "node_modules/encodeurl": {
363
+ "version": "1.0.2",
364
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
365
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
366
+ "engines": {
367
+ "node": ">= 0.8"
368
+ }
369
+ },
370
+ "node_modules/engine.io": {
371
+ "version": "3.6.2",
372
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.6.2.tgz",
373
+ "integrity": "sha512-C4JjGQZLY3kWlIDx0BQNKizbrfpb7NahxDztGdN5jrPK2ghmXiNDN+E/t0JzDeNRZxPVaszxEng42Pmj27X/0w==",
374
+ "dependencies": {
375
+ "accepts": "~1.3.4",
376
+ "base64id": "2.0.0",
377
+ "cookie": "~0.4.1",
378
+ "debug": "~4.1.0",
379
+ "engine.io-parser": "~2.2.0",
380
+ "ws": "~7.5.10"
381
+ },
382
+ "engines": {
383
+ "node": ">=8.0.0"
384
+ }
385
+ },
386
+ "node_modules/engine.io-client": {
387
+ "version": "3.5.4",
388
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.4.tgz",
389
+ "integrity": "sha512-ydc8uuMMDxC5KCKNJN3zZKYJk2sgyTuTZQ7Aj1DJSsLKAcizA/PzWivw8fZMIjJVBo2CJOYzntv4FSjY/Lr//g==",
390
+ "dependencies": {
391
+ "component-emitter": "~1.3.0",
392
+ "component-inherit": "0.0.3",
393
+ "debug": "~3.1.0",
394
+ "engine.io-parser": "~2.2.0",
395
+ "has-cors": "1.1.0",
396
+ "indexof": "0.0.1",
397
+ "parseqs": "0.0.6",
398
+ "parseuri": "0.0.6",
399
+ "ws": "~7.5.10",
400
+ "xmlhttprequest-ssl": "~1.6.2",
401
+ "yeast": "0.1.2"
402
+ }
403
+ },
404
+ "node_modules/engine.io-client/node_modules/debug": {
405
+ "version": "3.1.0",
406
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
407
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
408
+ "dependencies": {
409
+ "ms": "2.0.0"
410
+ }
411
+ },
412
+ "node_modules/engine.io-parser": {
413
+ "version": "2.2.1",
414
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
415
+ "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
416
+ "dependencies": {
417
+ "after": "0.8.2",
418
+ "arraybuffer.slice": "~0.0.7",
419
+ "base64-arraybuffer": "0.1.4",
420
+ "blob": "0.0.5",
421
+ "has-binary2": "~1.0.2"
422
+ }
423
+ },
424
+ "node_modules/engine.io/node_modules/cookie": {
425
+ "version": "0.4.2",
426
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
427
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
428
+ "engines": {
429
+ "node": ">= 0.6"
430
+ }
431
+ },
432
+ "node_modules/engine.io/node_modules/debug": {
433
+ "version": "4.1.1",
434
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
435
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
436
+ "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
437
+ "dependencies": {
438
+ "ms": "^2.1.1"
439
+ }
440
+ },
441
+ "node_modules/engine.io/node_modules/ms": {
442
+ "version": "2.1.3",
443
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
444
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
445
+ },
446
+ "node_modules/es-define-property": {
447
+ "version": "1.0.0",
448
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
449
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
450
+ "dependencies": {
451
+ "get-intrinsic": "^1.2.4"
452
+ },
453
+ "engines": {
454
+ "node": ">= 0.4"
455
+ }
456
+ },
457
+ "node_modules/es-errors": {
458
+ "version": "1.3.0",
459
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
460
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
461
+ "engines": {
462
+ "node": ">= 0.4"
463
+ }
464
+ },
465
+ "node_modules/escape-html": {
466
+ "version": "1.0.3",
467
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
468
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
469
+ },
470
+ "node_modules/etag": {
471
+ "version": "1.8.1",
472
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
473
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
474
+ "engines": {
475
+ "node": ">= 0.6"
476
+ }
477
+ },
478
+ "node_modules/event-loop-stats": {
479
+ "version": "1.2.0",
480
+ "resolved": "https://registry.npmjs.org/event-loop-stats/-/event-loop-stats-1.2.0.tgz",
481
+ "integrity": "sha512-h/leAlXqoEf+D9w1dnFG0srR5vfIq59rLm9PHzcl3/GwFppd+UR46UMuLdp/mvJvuA+MjSd/dNShmuM2/dPFFw==",
482
+ "hasInstallScript": true,
483
+ "optional": true,
484
+ "dependencies": {
485
+ "nan": "^2.14.0"
486
+ },
487
+ "engines": {
488
+ "node": ">=4.0.0"
489
+ }
490
+ },
491
+ "node_modules/express": {
492
+ "version": "4.19.2",
493
+ "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
494
+ "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
495
+ "dependencies": {
496
+ "accepts": "~1.3.8",
497
+ "array-flatten": "1.1.1",
498
+ "body-parser": "1.20.2",
499
+ "content-disposition": "0.5.4",
500
+ "content-type": "~1.0.4",
501
+ "cookie": "0.6.0",
502
+ "cookie-signature": "1.0.6",
503
+ "debug": "2.6.9",
504
+ "depd": "2.0.0",
505
+ "encodeurl": "~1.0.2",
506
+ "escape-html": "~1.0.3",
507
+ "etag": "~1.8.1",
508
+ "finalhandler": "1.2.0",
509
+ "fresh": "0.5.2",
510
+ "http-errors": "2.0.0",
511
+ "merge-descriptors": "1.0.1",
512
+ "methods": "~1.1.2",
513
+ "on-finished": "2.4.1",
514
+ "parseurl": "~1.3.3",
515
+ "path-to-regexp": "0.1.7",
516
+ "proxy-addr": "~2.0.7",
517
+ "qs": "6.11.0",
518
+ "range-parser": "~1.2.1",
519
+ "safe-buffer": "5.2.1",
520
+ "send": "0.18.0",
521
+ "serve-static": "1.15.0",
522
+ "setprototypeof": "1.2.0",
523
+ "statuses": "2.0.1",
524
+ "type-is": "~1.6.18",
525
+ "utils-merge": "1.0.1",
526
+ "vary": "~1.1.2"
527
+ },
528
+ "engines": {
529
+ "node": ">= 0.10.0"
530
+ }
531
+ },
532
+ "node_modules/express-status-monitor": {
533
+ "version": "1.3.4",
534
+ "resolved": "https://registry.npmjs.org/express-status-monitor/-/express-status-monitor-1.3.4.tgz",
535
+ "integrity": "sha512-EyqHvgX57ujN4fqfUT+x6Bv2xwRyzQdv3AJvWQxcG+jK4TcF9vhrKVqGcE0T6bhT4rstpvOKRuxHBwC/Q6AXQg==",
536
+ "dependencies": {
537
+ "axios": "0.26.0",
538
+ "debug": "4.1.1",
539
+ "handlebars": "^4.7.7",
540
+ "on-headers": "1.0.2",
541
+ "pidusage": "2.0.18",
542
+ "socket.io": "^2.4.1"
543
+ },
544
+ "engines": {
545
+ "node": ">=8"
546
+ },
547
+ "funding": {
548
+ "type": "individual",
549
+ "url": "http://dynobase.com/buy"
550
+ },
551
+ "optionalDependencies": {
552
+ "event-loop-stats": "1.2.0"
553
+ }
554
+ },
555
+ "node_modules/express-status-monitor/node_modules/debug": {
556
+ "version": "4.1.1",
557
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
558
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
559
+ "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
560
+ "dependencies": {
561
+ "ms": "^2.1.1"
562
+ }
563
+ },
564
+ "node_modules/express-status-monitor/node_modules/ms": {
565
+ "version": "2.1.3",
566
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
567
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
568
+ },
569
+ "node_modules/finalhandler": {
570
+ "version": "1.2.0",
571
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
572
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
573
+ "dependencies": {
574
+ "debug": "2.6.9",
575
+ "encodeurl": "~1.0.2",
576
+ "escape-html": "~1.0.3",
577
+ "on-finished": "2.4.1",
578
+ "parseurl": "~1.3.3",
579
+ "statuses": "2.0.1",
580
+ "unpipe": "~1.0.0"
581
+ },
582
+ "engines": {
583
+ "node": ">= 0.8"
584
+ }
585
+ },
586
+ "node_modules/follow-redirects": {
587
+ "version": "1.15.6",
588
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
589
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
590
+ "funding": [
591
+ {
592
+ "type": "individual",
593
+ "url": "https://github.com/sponsors/RubenVerborgh"
594
+ }
595
+ ],
596
+ "engines": {
597
+ "node": ">=4.0"
598
+ },
599
+ "peerDependenciesMeta": {
600
+ "debug": {
601
+ "optional": true
602
+ }
603
+ }
604
+ },
605
+ "node_modules/forwarded": {
606
+ "version": "0.2.0",
607
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
608
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
609
+ "engines": {
610
+ "node": ">= 0.6"
611
+ }
612
+ },
613
+ "node_modules/fresh": {
614
+ "version": "0.5.2",
615
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
616
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
617
+ "engines": {
618
+ "node": ">= 0.6"
619
+ }
620
+ },
621
+ "node_modules/function-bind": {
622
+ "version": "1.1.2",
623
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
624
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
625
+ "funding": {
626
+ "url": "https://github.com/sponsors/ljharb"
627
+ }
628
+ },
629
+ "node_modules/get-intrinsic": {
630
+ "version": "1.2.4",
631
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
632
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
633
+ "dependencies": {
634
+ "es-errors": "^1.3.0",
635
+ "function-bind": "^1.1.2",
636
+ "has-proto": "^1.0.1",
637
+ "has-symbols": "^1.0.3",
638
+ "hasown": "^2.0.0"
639
+ },
640
+ "engines": {
641
+ "node": ">= 0.4"
642
+ },
643
+ "funding": {
644
+ "url": "https://github.com/sponsors/ljharb"
645
+ }
646
+ },
647
+ "node_modules/gopd": {
648
+ "version": "1.0.1",
649
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
650
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
651
+ "dependencies": {
652
+ "get-intrinsic": "^1.1.3"
653
+ },
654
+ "funding": {
655
+ "url": "https://github.com/sponsors/ljharb"
656
+ }
657
+ },
658
+ "node_modules/handlebars": {
659
+ "version": "4.7.8",
660
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
661
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
662
+ "dependencies": {
663
+ "minimist": "^1.2.5",
664
+ "neo-async": "^2.6.2",
665
+ "source-map": "^0.6.1",
666
+ "wordwrap": "^1.0.0"
667
+ },
668
+ "bin": {
669
+ "handlebars": "bin/handlebars"
670
+ },
671
+ "engines": {
672
+ "node": ">=0.4.7"
673
+ },
674
+ "optionalDependencies": {
675
+ "uglify-js": "^3.1.4"
676
+ }
677
+ },
678
+ "node_modules/has-binary2": {
679
+ "version": "1.0.3",
680
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
681
+ "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
682
+ "dependencies": {
683
+ "isarray": "2.0.1"
684
+ }
685
+ },
686
+ "node_modules/has-binary2/node_modules/isarray": {
687
+ "version": "2.0.1",
688
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
689
+ "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ=="
690
+ },
691
+ "node_modules/has-cors": {
692
+ "version": "1.1.0",
693
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
694
+ "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA=="
695
+ },
696
+ "node_modules/has-property-descriptors": {
697
+ "version": "1.0.2",
698
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
699
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
700
+ "dependencies": {
701
+ "es-define-property": "^1.0.0"
702
+ },
703
+ "funding": {
704
+ "url": "https://github.com/sponsors/ljharb"
705
+ }
706
+ },
707
+ "node_modules/has-proto": {
708
+ "version": "1.0.3",
709
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
710
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
711
+ "engines": {
712
+ "node": ">= 0.4"
713
+ },
714
+ "funding": {
715
+ "url": "https://github.com/sponsors/ljharb"
716
+ }
717
+ },
718
+ "node_modules/has-symbols": {
719
+ "version": "1.0.3",
720
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
721
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
722
+ "engines": {
723
+ "node": ">= 0.4"
724
+ },
725
+ "funding": {
726
+ "url": "https://github.com/sponsors/ljharb"
727
+ }
728
+ },
729
+ "node_modules/hash-wasm": {
730
+ "version": "4.11.0",
731
+ "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.11.0.tgz",
732
+ "integrity": "sha512-HVusNXlVqHe0fzIzdQOGolnFN6mX/fqcrSAOcTBXdvzrXVHwTz11vXeKRmkR5gTuwVpvHZEIyKoePDvuAR+XwQ=="
733
+ },
734
+ "node_modules/hasown": {
735
+ "version": "2.0.2",
736
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
737
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
738
+ "dependencies": {
739
+ "function-bind": "^1.1.2"
740
+ },
741
+ "engines": {
742
+ "node": ">= 0.4"
743
+ }
744
+ },
745
+ "node_modules/http-errors": {
746
+ "version": "2.0.0",
747
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
748
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
749
+ "dependencies": {
750
+ "depd": "2.0.0",
751
+ "inherits": "2.0.4",
752
+ "setprototypeof": "1.2.0",
753
+ "statuses": "2.0.1",
754
+ "toidentifier": "1.0.1"
755
+ },
756
+ "engines": {
757
+ "node": ">= 0.8"
758
+ }
759
+ },
760
+ "node_modules/iconv-lite": {
761
+ "version": "0.4.24",
762
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
763
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
764
+ "dependencies": {
765
+ "safer-buffer": ">= 2.1.2 < 3"
766
+ },
767
+ "engines": {
768
+ "node": ">=0.10.0"
769
+ }
770
+ },
771
+ "node_modules/indexof": {
772
+ "version": "0.0.1",
773
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
774
+ "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg=="
775
+ },
776
+ "node_modules/inherits": {
777
+ "version": "2.0.4",
778
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
779
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
780
+ },
781
+ "node_modules/ipaddr.js": {
782
+ "version": "1.9.1",
783
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
784
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
785
+ "engines": {
786
+ "node": ">= 0.10"
787
+ }
788
+ },
789
+ "node_modules/isarray": {
790
+ "version": "1.0.0",
791
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
792
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
793
+ },
794
+ "node_modules/media-typer": {
795
+ "version": "0.3.0",
796
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
797
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
798
+ "engines": {
799
+ "node": ">= 0.6"
800
+ }
801
+ },
802
+ "node_modules/merge-descriptors": {
803
+ "version": "1.0.1",
804
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
805
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
806
+ },
807
+ "node_modules/methods": {
808
+ "version": "1.1.2",
809
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
810
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
811
+ "engines": {
812
+ "node": ">= 0.6"
813
+ }
814
+ },
815
+ "node_modules/mime": {
816
+ "version": "1.6.0",
817
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
818
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
819
+ "bin": {
820
+ "mime": "cli.js"
821
+ },
822
+ "engines": {
823
+ "node": ">=4"
824
+ }
825
+ },
826
+ "node_modules/mime-db": {
827
+ "version": "1.52.0",
828
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
829
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
830
+ "engines": {
831
+ "node": ">= 0.6"
832
+ }
833
+ },
834
+ "node_modules/mime-types": {
835
+ "version": "2.1.35",
836
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
837
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
838
+ "dependencies": {
839
+ "mime-db": "1.52.0"
840
+ },
841
+ "engines": {
842
+ "node": ">= 0.6"
843
+ }
844
+ },
845
+ "node_modules/minimist": {
846
+ "version": "1.2.8",
847
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
848
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
849
+ "funding": {
850
+ "url": "https://github.com/sponsors/ljharb"
851
+ }
852
+ },
853
+ "node_modules/mkdirp": {
854
+ "version": "0.5.6",
855
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
856
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
857
+ "dependencies": {
858
+ "minimist": "^1.2.6"
859
+ },
860
+ "bin": {
861
+ "mkdirp": "bin/cmd.js"
862
+ }
863
+ },
864
+ "node_modules/ms": {
865
+ "version": "2.0.0",
866
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
867
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
868
+ },
869
+ "node_modules/multer": {
870
+ "version": "1.4.5-lts.1",
871
+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz",
872
+ "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==",
873
+ "dependencies": {
874
+ "append-field": "^1.0.0",
875
+ "busboy": "^1.0.0",
876
+ "concat-stream": "^1.5.2",
877
+ "mkdirp": "^0.5.4",
878
+ "object-assign": "^4.1.1",
879
+ "type-is": "^1.6.4",
880
+ "xtend": "^4.0.0"
881
+ },
882
+ "engines": {
883
+ "node": ">= 6.0.0"
884
+ }
885
+ },
886
+ "node_modules/nan": {
887
+ "version": "2.20.0",
888
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
889
+ "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==",
890
+ "optional": true
891
+ },
892
+ "node_modules/negotiator": {
893
+ "version": "0.6.3",
894
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
895
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
896
+ "engines": {
897
+ "node": ">= 0.6"
898
+ }
899
+ },
900
+ "node_modules/neo-async": {
901
+ "version": "2.6.2",
902
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
903
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
904
+ },
905
+ "node_modules/object-assign": {
906
+ "version": "4.1.1",
907
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
908
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
909
+ "engines": {
910
+ "node": ">=0.10.0"
911
+ }
912
+ },
913
+ "node_modules/object-inspect": {
914
+ "version": "1.13.2",
915
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
916
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
917
+ "engines": {
918
+ "node": ">= 0.4"
919
+ },
920
+ "funding": {
921
+ "url": "https://github.com/sponsors/ljharb"
922
+ }
923
+ },
924
+ "node_modules/on-finished": {
925
+ "version": "2.4.1",
926
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
927
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
928
+ "dependencies": {
929
+ "ee-first": "1.1.1"
930
+ },
931
+ "engines": {
932
+ "node": ">= 0.8"
933
+ }
934
+ },
935
+ "node_modules/on-headers": {
936
+ "version": "1.0.2",
937
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
938
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
939
+ "engines": {
940
+ "node": ">= 0.8"
941
+ }
942
+ },
943
+ "node_modules/parseqs": {
944
+ "version": "0.0.6",
945
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
946
+ "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
947
+ },
948
+ "node_modules/parseuri": {
949
+ "version": "0.0.6",
950
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
951
+ "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
952
+ },
953
+ "node_modules/parseurl": {
954
+ "version": "1.3.3",
955
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
956
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
957
+ "engines": {
958
+ "node": ">= 0.8"
959
+ }
960
+ },
961
+ "node_modules/path-to-regexp": {
962
+ "version": "0.1.7",
963
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
964
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
965
+ },
966
+ "node_modules/pidusage": {
967
+ "version": "2.0.18",
968
+ "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-2.0.18.tgz",
969
+ "integrity": "sha512-Y/VfKfh3poHjMEINxU+gJTeVOBjiThQeFAmzR7z56HSNiMx+etl+yBhk42nRPciPYt/VZl8DQLVXNC6P5vH11A==",
970
+ "dependencies": {
971
+ "safe-buffer": "^5.1.2"
972
+ },
973
+ "engines": {
974
+ "node": ">=8"
975
+ }
976
+ },
977
+ "node_modules/prisma": {
978
+ "version": "5.18.0",
979
+ "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.18.0.tgz",
980
+ "integrity": "sha512-+TrSIxZsh64OPOmaSgVPH7ALL9dfU0jceYaMJXsNrTkFHO7/3RANi5K2ZiPB1De9+KDxCWn7jvRq8y8pvk+o9g==",
981
+ "devOptional": true,
982
+ "hasInstallScript": true,
983
+ "dependencies": {
984
+ "@prisma/engines": "5.18.0"
985
+ },
986
+ "bin": {
987
+ "prisma": "build/index.js"
988
+ },
989
+ "engines": {
990
+ "node": ">=16.13"
991
+ }
992
+ },
993
+ "node_modules/process-nextick-args": {
994
+ "version": "2.0.1",
995
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
996
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
997
+ },
998
+ "node_modules/proxy-addr": {
999
+ "version": "2.0.7",
1000
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1001
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1002
+ "dependencies": {
1003
+ "forwarded": "0.2.0",
1004
+ "ipaddr.js": "1.9.1"
1005
+ },
1006
+ "engines": {
1007
+ "node": ">= 0.10"
1008
+ }
1009
+ },
1010
+ "node_modules/qs": {
1011
+ "version": "6.11.0",
1012
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
1013
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
1014
+ "dependencies": {
1015
+ "side-channel": "^1.0.4"
1016
+ },
1017
+ "engines": {
1018
+ "node": ">=0.6"
1019
+ },
1020
+ "funding": {
1021
+ "url": "https://github.com/sponsors/ljharb"
1022
+ }
1023
+ },
1024
+ "node_modules/range-parser": {
1025
+ "version": "1.2.1",
1026
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1027
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1028
+ "engines": {
1029
+ "node": ">= 0.6"
1030
+ }
1031
+ },
1032
+ "node_modules/raw-body": {
1033
+ "version": "2.5.2",
1034
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
1035
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
1036
+ "dependencies": {
1037
+ "bytes": "3.1.2",
1038
+ "http-errors": "2.0.0",
1039
+ "iconv-lite": "0.4.24",
1040
+ "unpipe": "1.0.0"
1041
+ },
1042
+ "engines": {
1043
+ "node": ">= 0.8"
1044
+ }
1045
+ },
1046
+ "node_modules/readable-stream": {
1047
+ "version": "2.3.8",
1048
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
1049
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
1050
+ "dependencies": {
1051
+ "core-util-is": "~1.0.0",
1052
+ "inherits": "~2.0.3",
1053
+ "isarray": "~1.0.0",
1054
+ "process-nextick-args": "~2.0.0",
1055
+ "safe-buffer": "~5.1.1",
1056
+ "string_decoder": "~1.1.1",
1057
+ "util-deprecate": "~1.0.1"
1058
+ }
1059
+ },
1060
+ "node_modules/readable-stream/node_modules/safe-buffer": {
1061
+ "version": "5.1.2",
1062
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1063
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1064
+ },
1065
+ "node_modules/safe-buffer": {
1066
+ "version": "5.2.1",
1067
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1068
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1069
+ "funding": [
1070
+ {
1071
+ "type": "github",
1072
+ "url": "https://github.com/sponsors/feross"
1073
+ },
1074
+ {
1075
+ "type": "patreon",
1076
+ "url": "https://www.patreon.com/feross"
1077
+ },
1078
+ {
1079
+ "type": "consulting",
1080
+ "url": "https://feross.org/support"
1081
+ }
1082
+ ]
1083
+ },
1084
+ "node_modules/safer-buffer": {
1085
+ "version": "2.1.2",
1086
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1087
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1088
+ },
1089
+ "node_modules/send": {
1090
+ "version": "0.18.0",
1091
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1092
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1093
+ "dependencies": {
1094
+ "debug": "2.6.9",
1095
+ "depd": "2.0.0",
1096
+ "destroy": "1.2.0",
1097
+ "encodeurl": "~1.0.2",
1098
+ "escape-html": "~1.0.3",
1099
+ "etag": "~1.8.1",
1100
+ "fresh": "0.5.2",
1101
+ "http-errors": "2.0.0",
1102
+ "mime": "1.6.0",
1103
+ "ms": "2.1.3",
1104
+ "on-finished": "2.4.1",
1105
+ "range-parser": "~1.2.1",
1106
+ "statuses": "2.0.1"
1107
+ },
1108
+ "engines": {
1109
+ "node": ">= 0.8.0"
1110
+ }
1111
+ },
1112
+ "node_modules/send/node_modules/ms": {
1113
+ "version": "2.1.3",
1114
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1115
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1116
+ },
1117
+ "node_modules/serve-static": {
1118
+ "version": "1.15.0",
1119
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1120
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1121
+ "dependencies": {
1122
+ "encodeurl": "~1.0.2",
1123
+ "escape-html": "~1.0.3",
1124
+ "parseurl": "~1.3.3",
1125
+ "send": "0.18.0"
1126
+ },
1127
+ "engines": {
1128
+ "node": ">= 0.8.0"
1129
+ }
1130
+ },
1131
+ "node_modules/set-function-length": {
1132
+ "version": "1.2.2",
1133
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
1134
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
1135
+ "dependencies": {
1136
+ "define-data-property": "^1.1.4",
1137
+ "es-errors": "^1.3.0",
1138
+ "function-bind": "^1.1.2",
1139
+ "get-intrinsic": "^1.2.4",
1140
+ "gopd": "^1.0.1",
1141
+ "has-property-descriptors": "^1.0.2"
1142
+ },
1143
+ "engines": {
1144
+ "node": ">= 0.4"
1145
+ }
1146
+ },
1147
+ "node_modules/setprototypeof": {
1148
+ "version": "1.2.0",
1149
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1150
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1151
+ },
1152
+ "node_modules/sha256quanvn": {
1153
+ "version": "1.0.2",
1154
+ "resolved": "https://registry.npmjs.org/sha256quanvn/-/sha256quanvn-1.0.2.tgz",
1155
+ "integrity": "sha512-q+tuFBIB52jChcBdIXv0xPwcNJ8wYbKUypNgCEOiPCjZeZ25NwbHfU3/NKjqv78PaARuqb7JlXvysFfjdd7nYA==",
1156
+ "dependencies": {
1157
+ "sha256quanvn": "^1.0.0"
1158
+ }
1159
+ },
1160
+ "node_modules/side-channel": {
1161
+ "version": "1.0.6",
1162
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
1163
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
1164
+ "dependencies": {
1165
+ "call-bind": "^1.0.7",
1166
+ "es-errors": "^1.3.0",
1167
+ "get-intrinsic": "^1.2.4",
1168
+ "object-inspect": "^1.13.1"
1169
+ },
1170
+ "engines": {
1171
+ "node": ">= 0.4"
1172
+ },
1173
+ "funding": {
1174
+ "url": "https://github.com/sponsors/ljharb"
1175
+ }
1176
+ },
1177
+ "node_modules/socket.io": {
1178
+ "version": "2.5.1",
1179
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.5.1.tgz",
1180
+ "integrity": "sha512-eaTE4tBKRD6RFoetquMbxgvcpvoDtRyIlkIMI/SMK2bsKvbENTsDeeu4GJ/z9c90yOWxB7b/eC+yKLPbHnH6bA==",
1181
+ "dependencies": {
1182
+ "debug": "~4.1.0",
1183
+ "engine.io": "~3.6.0",
1184
+ "has-binary2": "~1.0.2",
1185
+ "socket.io-adapter": "~1.1.0",
1186
+ "socket.io-client": "2.5.0",
1187
+ "socket.io-parser": "~3.4.0"
1188
+ }
1189
+ },
1190
+ "node_modules/socket.io-adapter": {
1191
+ "version": "1.1.2",
1192
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
1193
+ "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
1194
+ },
1195
+ "node_modules/socket.io-client": {
1196
+ "version": "2.5.0",
1197
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.5.0.tgz",
1198
+ "integrity": "sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw==",
1199
+ "dependencies": {
1200
+ "backo2": "1.0.2",
1201
+ "component-bind": "1.0.0",
1202
+ "component-emitter": "~1.3.0",
1203
+ "debug": "~3.1.0",
1204
+ "engine.io-client": "~3.5.0",
1205
+ "has-binary2": "~1.0.2",
1206
+ "indexof": "0.0.1",
1207
+ "parseqs": "0.0.6",
1208
+ "parseuri": "0.0.6",
1209
+ "socket.io-parser": "~3.3.0",
1210
+ "to-array": "0.1.4"
1211
+ }
1212
+ },
1213
+ "node_modules/socket.io-client/node_modules/debug": {
1214
+ "version": "3.1.0",
1215
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
1216
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
1217
+ "dependencies": {
1218
+ "ms": "2.0.0"
1219
+ }
1220
+ },
1221
+ "node_modules/socket.io-client/node_modules/isarray": {
1222
+ "version": "2.0.1",
1223
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
1224
+ "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ=="
1225
+ },
1226
+ "node_modules/socket.io-client/node_modules/socket.io-parser": {
1227
+ "version": "3.3.4",
1228
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.4.tgz",
1229
+ "integrity": "sha512-z/pFQB3x+EZldRRzORYW1vwVO8m/3ILkswtnpoeU6Ve3cbMWkmHEWDAVJn4QJtchiiFTo5j7UG2QvwxvaA9vow==",
1230
+ "dependencies": {
1231
+ "component-emitter": "~1.3.0",
1232
+ "debug": "~3.1.0",
1233
+ "isarray": "2.0.1"
1234
+ }
1235
+ },
1236
+ "node_modules/socket.io-parser": {
1237
+ "version": "3.4.3",
1238
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.3.tgz",
1239
+ "integrity": "sha512-1rE4dZN3kCI/E5wixd393hmbqa78vVpkKmnEJhLeWoS/C5hbFYAbcSfnWoaVH43u9ToUVtzKjguxEZq+1XZfCQ==",
1240
+ "dependencies": {
1241
+ "component-emitter": "1.2.1",
1242
+ "debug": "~4.1.0",
1243
+ "isarray": "2.0.1"
1244
+ },
1245
+ "engines": {
1246
+ "node": ">=10.0.0"
1247
+ }
1248
+ },
1249
+ "node_modules/socket.io-parser/node_modules/component-emitter": {
1250
+ "version": "1.2.1",
1251
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
1252
+ "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA=="
1253
+ },
1254
+ "node_modules/socket.io-parser/node_modules/debug": {
1255
+ "version": "4.1.1",
1256
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
1257
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
1258
+ "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
1259
+ "dependencies": {
1260
+ "ms": "^2.1.1"
1261
+ }
1262
+ },
1263
+ "node_modules/socket.io-parser/node_modules/isarray": {
1264
+ "version": "2.0.1",
1265
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
1266
+ "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ=="
1267
+ },
1268
+ "node_modules/socket.io-parser/node_modules/ms": {
1269
+ "version": "2.1.3",
1270
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1271
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1272
+ },
1273
+ "node_modules/socket.io/node_modules/debug": {
1274
+ "version": "4.1.1",
1275
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
1276
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
1277
+ "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
1278
+ "dependencies": {
1279
+ "ms": "^2.1.1"
1280
+ }
1281
+ },
1282
+ "node_modules/socket.io/node_modules/ms": {
1283
+ "version": "2.1.3",
1284
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1285
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1286
+ },
1287
+ "node_modules/source-map": {
1288
+ "version": "0.6.1",
1289
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1290
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1291
+ "engines": {
1292
+ "node": ">=0.10.0"
1293
+ }
1294
+ },
1295
+ "node_modules/statuses": {
1296
+ "version": "2.0.1",
1297
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1298
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1299
+ "engines": {
1300
+ "node": ">= 0.8"
1301
+ }
1302
+ },
1303
+ "node_modules/stream-to-blob": {
1304
+ "version": "2.0.1",
1305
+ "resolved": "https://registry.npmjs.org/stream-to-blob/-/stream-to-blob-2.0.1.tgz",
1306
+ "integrity": "sha512-GXlqXt3svqwIVWoICenix5Poxi4KbCF0BdXXUbpU1X4vq1V8wmjiEIU3aFJzCGNFpKxfbnG0uoowS3nKUgSPYg==",
1307
+ "funding": [
1308
+ {
1309
+ "type": "github",
1310
+ "url": "https://github.com/sponsors/feross"
1311
+ },
1312
+ {
1313
+ "type": "patreon",
1314
+ "url": "https://www.patreon.com/feross"
1315
+ },
1316
+ {
1317
+ "type": "consulting",
1318
+ "url": "https://feross.org/support"
1319
+ }
1320
+ ],
1321
+ "engines": {
1322
+ "node": ">=8"
1323
+ }
1324
+ },
1325
+ "node_modules/streamsearch": {
1326
+ "version": "1.1.0",
1327
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
1328
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
1329
+ "engines": {
1330
+ "node": ">=10.0.0"
1331
+ }
1332
+ },
1333
+ "node_modules/string_decoder": {
1334
+ "version": "1.1.1",
1335
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1336
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1337
+ "dependencies": {
1338
+ "safe-buffer": "~5.1.0"
1339
+ }
1340
+ },
1341
+ "node_modules/string_decoder/node_modules/safe-buffer": {
1342
+ "version": "5.1.2",
1343
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1344
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1345
+ },
1346
+ "node_modules/to-array": {
1347
+ "version": "0.1.4",
1348
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
1349
+ "integrity": "sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A=="
1350
+ },
1351
+ "node_modules/toidentifier": {
1352
+ "version": "1.0.1",
1353
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1354
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1355
+ "engines": {
1356
+ "node": ">=0.6"
1357
+ }
1358
+ },
1359
+ "node_modules/type-is": {
1360
+ "version": "1.6.18",
1361
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1362
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1363
+ "dependencies": {
1364
+ "media-typer": "0.3.0",
1365
+ "mime-types": "~2.1.24"
1366
+ },
1367
+ "engines": {
1368
+ "node": ">= 0.6"
1369
+ }
1370
+ },
1371
+ "node_modules/typedarray": {
1372
+ "version": "0.0.6",
1373
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
1374
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
1375
+ },
1376
+ "node_modules/uglify-js": {
1377
+ "version": "3.19.2",
1378
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.2.tgz",
1379
+ "integrity": "sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==",
1380
+ "optional": true,
1381
+ "bin": {
1382
+ "uglifyjs": "bin/uglifyjs"
1383
+ },
1384
+ "engines": {
1385
+ "node": ">=0.8.0"
1386
+ }
1387
+ },
1388
+ "node_modules/unpipe": {
1389
+ "version": "1.0.0",
1390
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1391
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1392
+ "engines": {
1393
+ "node": ">= 0.8"
1394
+ }
1395
+ },
1396
+ "node_modules/util-deprecate": {
1397
+ "version": "1.0.2",
1398
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1399
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
1400
+ },
1401
+ "node_modules/utils-merge": {
1402
+ "version": "1.0.1",
1403
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1404
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1405
+ "engines": {
1406
+ "node": ">= 0.4.0"
1407
+ }
1408
+ },
1409
+ "node_modules/vary": {
1410
+ "version": "1.1.2",
1411
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1412
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1413
+ "engines": {
1414
+ "node": ">= 0.8"
1415
+ }
1416
+ },
1417
+ "node_modules/wordwrap": {
1418
+ "version": "1.0.0",
1419
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
1420
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
1421
+ },
1422
+ "node_modules/ws": {
1423
+ "version": "7.5.10",
1424
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
1425
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
1426
+ "engines": {
1427
+ "node": ">=8.3.0"
1428
+ },
1429
+ "peerDependencies": {
1430
+ "bufferutil": "^4.0.1",
1431
+ "utf-8-validate": "^5.0.2"
1432
+ },
1433
+ "peerDependenciesMeta": {
1434
+ "bufferutil": {
1435
+ "optional": true
1436
+ },
1437
+ "utf-8-validate": {
1438
+ "optional": true
1439
+ }
1440
+ }
1441
+ },
1442
+ "node_modules/xmlhttprequest-ssl": {
1443
+ "version": "1.6.3",
1444
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
1445
+ "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==",
1446
+ "engines": {
1447
+ "node": ">=0.4.0"
1448
+ }
1449
+ },
1450
+ "node_modules/xtend": {
1451
+ "version": "4.0.2",
1452
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
1453
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
1454
+ "engines": {
1455
+ "node": ">=0.4"
1456
+ }
1457
+ },
1458
+ "node_modules/yeast": {
1459
+ "version": "0.1.2",
1460
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
1461
+ "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg=="
1462
+ }
1463
+ }
1464
+ }
package.json ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "beeserver",
3
+ "version": "1.0.0",
4
+ "main": "index.js",
5
+ "scripts": {
6
+ "start": "node ."
7
+ },
8
+ "keywords": [],
9
+ "author": "",
10
+ "license": "ISC",
11
+ "description": "",
12
+ "dependencies": {
13
+ "@huggingface/hub": "^0.15.1",
14
+ "@prisma/client": "^5.18.0",
15
+ "cors": "^2.8.5",
16
+ "express": "^4.19.2",
17
+ "express-status-monitor": "^1.3.4",
18
+ "multer": "^1.4.5-lts.1",
19
+ "sha256quanvn": "^1.0.2",
20
+ "stream-to-blob": "^2.0.1"
21
+ },
22
+ "devDependencies": {
23
+ "prisma": "^5.18.0"
24
+ }
25
+ }
prisma/schema.prisma ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ generator client {
2
+ provider = "prisma-client-js"
3
+ }
4
+
5
+ datasource db {
6
+ provider = "postgresql"
7
+ url = env("DATABASE_URL")
8
+ }
9
+
10
+ /// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
11
+ /// This model contains row level security and requires additional setup for migrations. Visit https://pris.ly/d/row-level-security for more info.
12
+ model Users {
13
+ id BigInt @id @default(autoincrement())
14
+ created_at DateTime @default(now()) @db.Timestamptz(6)
15
+ username String @unique
16
+ password_hash String
17
+ email String? @unique
18
+ phone String?
19
+ last_login DateTime? @db.Time(6)
20
+ }