Jeongmin Seo

Merge branches

Showing 59 changed files with 0 additions and 8031 deletions
File mode changed
1 -# Logs
2 -logs
3 -*.log
4 -npm-debug.log*
5 -yarn-debug.log*
6 -yarn-error.log*
7 -lerna-debug.log*
8 -.pnpm-debug.log*
9 -
10 -# Diagnostic reports (https://nodejs.org/api/report.html)
11 -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 -
13 -# Runtime data
14 -pids
15 -*.pid
16 -*.seed
17 -*.pid.lock
18 -
19 -# Directory for instrumented libs generated by jscoverage/JSCover
20 -lib-cov
21 -
22 -# Coverage directory used by tools like istanbul
23 -coverage
24 -*.lcov
25 -
26 -# nyc test coverage
27 -.nyc_output
28 -
29 -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 -.grunt
31 -
32 -# Bower dependency directory (https://bower.io/)
33 -bower_components
34 -
35 -# node-waf configuration
36 -.lock-wscript
37 -
38 -# Compiled binary addons (https://nodejs.org/api/addons.html)
39 -build/Release
40 -
41 -# Dependency directories
42 -**node_modules/
43 -jspm_packages/
44 -
45 -# Snowpack dependency directory (https://snowpack.dev/)
46 -web_modules/
47 -
48 -# TypeScript cache
49 -*.tsbuildinfo
50 -
51 -# Optional npm cache directory
52 -.npm
53 -
54 -# Optional eslint cache
55 -.eslintcache
56 -
57 -# Microbundle cache
58 -.rpt2_cache/
59 -.rts2_cache_cjs/
60 -.rts2_cache_es/
61 -.rts2_cache_umd/
62 -
63 -# Optional REPL history
64 -.node_repl_history
65 -
66 -# Output of 'npm pack'
67 -*.tgz
68 -
69 -# Yarn Integrity file
70 -.yarn-integrity
71 -
72 -# dotenv environment variables file
73 -.env
74 -.env.test
75 -.env.production
76 -
77 -# parcel-bundler cache (https://parceljs.org/)
78 -.cache
79 -.parcel-cache
80 -
81 -# Next.js build output
82 -.next
83 -out
84 -
85 -# Nuxt.js build / generate output
86 -.nuxt
87 -dist
88 -
89 -# Gatsby files
90 -.cache/
91 -# Comment in the public line in if your project uses Gatsby and not Next.js
92 -# https://nextjs.org/blog/next-9-1#public-directory-support
93 -# public
94 -
95 -# vuepress build output
96 -.vuepress/dist
97 -
98 -# Serverless directories
99 -.serverless/
100 -
101 -# FuseBox cache
102 -.fusebox/
103 -
104 -# DynamoDB Local files
105 -.dynamodb/
106 -
107 -# TernJS port file
108 -.tern-port
109 -
110 -# Stores VSCode versions used for testing VSCode extensions
111 -.vscode-test
112 -
113 -# yarn v2
114 -.yarn/cache
115 -.yarn/unplugged
116 -.yarn/build-state.yml
117 -.yarn/install-state.gz
118 -.pnp.*
119 -
120 -#보안관련
121 -.package-lock.json
...\ No newline at end of file ...\ No newline at end of file
1 -const express = require("express");
2 -const http = require("http");
3 -const app = express();
4 -const path = require("path")
5 -const server = http.createServer(app);
6 -const socketIO = require("socket.io")
7 -const moment = require("moment")
8 -
9 -
10 -const io = socketIO(server);
11 -
12 -app.use(express.static(path.join(__dirname, "src")))
13 -const PORT = process.env.PORT || 3000;
14 -
15 -io.on('connection', (socket) => {
16 - socket.on("chatting", (data)=>{
17 - const { name, msg } = data;
18 - io.emit("chatting", {
19 - name,
20 - msg,
21 - time: moment(new Date()).format("h:ss A")
22 - })
23 - })
24 -});
25 -
26 -server.listen(PORT, ()=>console.log(`server is running ${PORT}`))
...\ No newline at end of file ...\ No newline at end of file
1 -{
2 - "name": "chat",
3 - "version": "1.0.0",
4 - "lockfileVersion": 2,
5 - "requires": true,
6 - "packages": {
7 - "": {
8 - "name": "chat",
9 - "version": "1.0.0",
10 - "license": "ISC",
11 - "dependencies": {
12 - "dayjs": "^1.11.2",
13 - "express": "^4.18.1",
14 - "moment": "^2.29.3",
15 - "socket.io": "^4.5.1"
16 - }
17 - },
18 - "node_modules/@types/component-emitter": {
19 - "version": "1.2.11",
20 - "license": "MIT"
21 - },
22 - "node_modules/@types/cookie": {
23 - "version": "0.4.1",
24 - "license": "MIT"
25 - },
26 - "node_modules/@types/cors": {
27 - "version": "2.8.12",
28 - "license": "MIT"
29 - },
30 - "node_modules/@types/node": {
31 - "version": "17.0.39",
32 - "license": "MIT"
33 - },
34 - "node_modules/accepts": {
35 - "version": "1.3.8",
36 - "license": "MIT",
37 - "dependencies": {
38 - "mime-types": "~2.1.34",
39 - "negotiator": "0.6.3"
40 - },
41 - "engines": {
42 - "node": ">= 0.6"
43 - }
44 - },
45 - "node_modules/array-flatten": {
46 - "version": "1.1.1",
47 - "license": "MIT"
48 - },
49 - "node_modules/base64id": {
50 - "version": "2.0.0",
51 - "license": "MIT",
52 - "engines": {
53 - "node": "^4.5.0 || >= 5.9"
54 - }
55 - },
56 - "node_modules/body-parser": {
57 - "version": "1.20.0",
58 - "license": "MIT",
59 - "dependencies": {
60 - "bytes": "3.1.2",
61 - "content-type": "~1.0.4",
62 - "debug": "2.6.9",
63 - "depd": "2.0.0",
64 - "destroy": "1.2.0",
65 - "http-errors": "2.0.0",
66 - "iconv-lite": "0.4.24",
67 - "on-finished": "2.4.1",
68 - "qs": "6.10.3",
69 - "raw-body": "2.5.1",
70 - "type-is": "~1.6.18",
71 - "unpipe": "1.0.0"
72 - },
73 - "engines": {
74 - "node": ">= 0.8",
75 - "npm": "1.2.8000 || >= 1.4.16"
76 - }
77 - },
78 - "node_modules/bytes": {
79 - "version": "3.1.2",
80 - "license": "MIT",
81 - "engines": {
82 - "node": ">= 0.8"
83 - }
84 - },
85 - "node_modules/call-bind": {
86 - "version": "1.0.2",
87 - "license": "MIT",
88 - "dependencies": {
89 - "function-bind": "^1.1.1",
90 - "get-intrinsic": "^1.0.2"
91 - },
92 - "funding": {
93 - "url": "https://github.com/sponsors/ljharb"
94 - }
95 - },
96 - "node_modules/component-emitter": {
97 - "version": "1.3.0",
98 - "license": "MIT"
99 - },
100 - "node_modules/content-disposition": {
101 - "version": "0.5.4",
102 - "license": "MIT",
103 - "dependencies": {
104 - "safe-buffer": "5.2.1"
105 - },
106 - "engines": {
107 - "node": ">= 0.6"
108 - }
109 - },
110 - "node_modules/content-type": {
111 - "version": "1.0.4",
112 - "license": "MIT",
113 - "engines": {
114 - "node": ">= 0.6"
115 - }
116 - },
117 - "node_modules/cookie": {
118 - "version": "0.5.0",
119 - "license": "MIT",
120 - "engines": {
121 - "node": ">= 0.6"
122 - }
123 - },
124 - "node_modules/cookie-signature": {
125 - "version": "1.0.6",
126 - "license": "MIT"
127 - },
128 - "node_modules/cors": {
129 - "version": "2.8.5",
130 - "license": "MIT",
131 - "dependencies": {
132 - "object-assign": "^4",
133 - "vary": "^1"
134 - },
135 - "engines": {
136 - "node": ">= 0.10"
137 - }
138 - },
139 - "node_modules/dayjs": {
140 - "version": "1.11.2",
141 - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz",
142 - "integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw=="
143 - },
144 - "node_modules/debug": {
145 - "version": "2.6.9",
146 - "license": "MIT",
147 - "dependencies": {
148 - "ms": "2.0.0"
149 - }
150 - },
151 - "node_modules/depd": {
152 - "version": "2.0.0",
153 - "license": "MIT",
154 - "engines": {
155 - "node": ">= 0.8"
156 - }
157 - },
158 - "node_modules/destroy": {
159 - "version": "1.2.0",
160 - "license": "MIT",
161 - "engines": {
162 - "node": ">= 0.8",
163 - "npm": "1.2.8000 || >= 1.4.16"
164 - }
165 - },
166 - "node_modules/ee-first": {
167 - "version": "1.1.1",
168 - "license": "MIT"
169 - },
170 - "node_modules/encodeurl": {
171 - "version": "1.0.2",
172 - "license": "MIT",
173 - "engines": {
174 - "node": ">= 0.8"
175 - }
176 - },
177 - "node_modules/engine.io": {
178 - "version": "6.2.0",
179 - "license": "MIT",
180 - "dependencies": {
181 - "@types/cookie": "^0.4.1",
182 - "@types/cors": "^2.8.12",
183 - "@types/node": ">=10.0.0",
184 - "accepts": "~1.3.4",
185 - "base64id": "2.0.0",
186 - "cookie": "~0.4.1",
187 - "cors": "~2.8.5",
188 - "debug": "~4.3.1",
189 - "engine.io-parser": "~5.0.3",
190 - "ws": "~8.2.3"
191 - },
192 - "engines": {
193 - "node": ">=10.0.0"
194 - }
195 - },
196 - "node_modules/engine.io-parser": {
197 - "version": "5.0.4",
198 - "license": "MIT",
199 - "engines": {
200 - "node": ">=10.0.0"
201 - }
202 - },
203 - "node_modules/engine.io/node_modules/cookie": {
204 - "version": "0.4.2",
205 - "license": "MIT",
206 - "engines": {
207 - "node": ">= 0.6"
208 - }
209 - },
210 - "node_modules/engine.io/node_modules/debug": {
211 - "version": "4.3.4",
212 - "license": "MIT",
213 - "dependencies": {
214 - "ms": "2.1.2"
215 - },
216 - "engines": {
217 - "node": ">=6.0"
218 - },
219 - "peerDependenciesMeta": {
220 - "supports-color": {
221 - "optional": true
222 - }
223 - }
224 - },
225 - "node_modules/engine.io/node_modules/ms": {
226 - "version": "2.1.2",
227 - "license": "MIT"
228 - },
229 - "node_modules/escape-html": {
230 - "version": "1.0.3",
231 - "license": "MIT"
232 - },
233 - "node_modules/etag": {
234 - "version": "1.8.1",
235 - "license": "MIT",
236 - "engines": {
237 - "node": ">= 0.6"
238 - }
239 - },
240 - "node_modules/express": {
241 - "version": "4.18.1",
242 - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
243 - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
244 - "dependencies": {
245 - "accepts": "~1.3.8",
246 - "array-flatten": "1.1.1",
247 - "body-parser": "1.20.0",
248 - "content-disposition": "0.5.4",
249 - "content-type": "~1.0.4",
250 - "cookie": "0.5.0",
251 - "cookie-signature": "1.0.6",
252 - "debug": "2.6.9",
253 - "depd": "2.0.0",
254 - "encodeurl": "~1.0.2",
255 - "escape-html": "~1.0.3",
256 - "etag": "~1.8.1",
257 - "finalhandler": "1.2.0",
258 - "fresh": "0.5.2",
259 - "http-errors": "2.0.0",
260 - "merge-descriptors": "1.0.1",
261 - "methods": "~1.1.2",
262 - "on-finished": "2.4.1",
263 - "parseurl": "~1.3.3",
264 - "path-to-regexp": "0.1.7",
265 - "proxy-addr": "~2.0.7",
266 - "qs": "6.10.3",
267 - "range-parser": "~1.2.1",
268 - "safe-buffer": "5.2.1",
269 - "send": "0.18.0",
270 - "serve-static": "1.15.0",
271 - "setprototypeof": "1.2.0",
272 - "statuses": "2.0.1",
273 - "type-is": "~1.6.18",
274 - "utils-merge": "1.0.1",
275 - "vary": "~1.1.2"
276 - },
277 - "engines": {
278 - "node": ">= 0.10.0"
279 - }
280 - },
281 - "node_modules/finalhandler": {
282 - "version": "1.2.0",
283 - "license": "MIT",
284 - "dependencies": {
285 - "debug": "2.6.9",
286 - "encodeurl": "~1.0.2",
287 - "escape-html": "~1.0.3",
288 - "on-finished": "2.4.1",
289 - "parseurl": "~1.3.3",
290 - "statuses": "2.0.1",
291 - "unpipe": "~1.0.0"
292 - },
293 - "engines": {
294 - "node": ">= 0.8"
295 - }
296 - },
297 - "node_modules/forwarded": {
298 - "version": "0.2.0",
299 - "license": "MIT",
300 - "engines": {
301 - "node": ">= 0.6"
302 - }
303 - },
304 - "node_modules/fresh": {
305 - "version": "0.5.2",
306 - "license": "MIT",
307 - "engines": {
308 - "node": ">= 0.6"
309 - }
310 - },
311 - "node_modules/function-bind": {
312 - "version": "1.1.1",
313 - "license": "MIT"
314 - },
315 - "node_modules/get-intrinsic": {
316 - "version": "1.1.1",
317 - "license": "MIT",
318 - "dependencies": {
319 - "function-bind": "^1.1.1",
320 - "has": "^1.0.3",
321 - "has-symbols": "^1.0.1"
322 - },
323 - "funding": {
324 - "url": "https://github.com/sponsors/ljharb"
325 - }
326 - },
327 - "node_modules/has": {
328 - "version": "1.0.3",
329 - "license": "MIT",
330 - "dependencies": {
331 - "function-bind": "^1.1.1"
332 - },
333 - "engines": {
334 - "node": ">= 0.4.0"
335 - }
336 - },
337 - "node_modules/has-symbols": {
338 - "version": "1.0.3",
339 - "license": "MIT",
340 - "engines": {
341 - "node": ">= 0.4"
342 - },
343 - "funding": {
344 - "url": "https://github.com/sponsors/ljharb"
345 - }
346 - },
347 - "node_modules/http-errors": {
348 - "version": "2.0.0",
349 - "license": "MIT",
350 - "dependencies": {
351 - "depd": "2.0.0",
352 - "inherits": "2.0.4",
353 - "setprototypeof": "1.2.0",
354 - "statuses": "2.0.1",
355 - "toidentifier": "1.0.1"
356 - },
357 - "engines": {
358 - "node": ">= 0.8"
359 - }
360 - },
361 - "node_modules/iconv-lite": {
362 - "version": "0.4.24",
363 - "license": "MIT",
364 - "dependencies": {
365 - "safer-buffer": ">= 2.1.2 < 3"
366 - },
367 - "engines": {
368 - "node": ">=0.10.0"
369 - }
370 - },
371 - "node_modules/inherits": {
372 - "version": "2.0.4",
373 - "license": "ISC"
374 - },
375 - "node_modules/ipaddr.js": {
376 - "version": "1.9.1",
377 - "license": "MIT",
378 - "engines": {
379 - "node": ">= 0.10"
380 - }
381 - },
382 - "node_modules/media-typer": {
383 - "version": "0.3.0",
384 - "license": "MIT",
385 - "engines": {
386 - "node": ">= 0.6"
387 - }
388 - },
389 - "node_modules/merge-descriptors": {
390 - "version": "1.0.1",
391 - "license": "MIT"
392 - },
393 - "node_modules/methods": {
394 - "version": "1.1.2",
395 - "license": "MIT",
396 - "engines": {
397 - "node": ">= 0.6"
398 - }
399 - },
400 - "node_modules/mime": {
401 - "version": "1.6.0",
402 - "license": "MIT",
403 - "bin": {
404 - "mime": "cli.js"
405 - },
406 - "engines": {
407 - "node": ">=4"
408 - }
409 - },
410 - "node_modules/mime-db": {
411 - "version": "1.52.0",
412 - "license": "MIT",
413 - "engines": {
414 - "node": ">= 0.6"
415 - }
416 - },
417 - "node_modules/mime-types": {
418 - "version": "2.1.35",
419 - "license": "MIT",
420 - "dependencies": {
421 - "mime-db": "1.52.0"
422 - },
423 - "engines": {
424 - "node": ">= 0.6"
425 - }
426 - },
427 - "node_modules/moment": {
428 - "version": "2.29.3",
429 - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz",
430 - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==",
431 - "engines": {
432 - "node": "*"
433 - }
434 - },
435 - "node_modules/ms": {
436 - "version": "2.0.0",
437 - "license": "MIT"
438 - },
439 - "node_modules/negotiator": {
440 - "version": "0.6.3",
441 - "license": "MIT",
442 - "engines": {
443 - "node": ">= 0.6"
444 - }
445 - },
446 - "node_modules/object-assign": {
447 - "version": "4.1.1",
448 - "license": "MIT",
449 - "engines": {
450 - "node": ">=0.10.0"
451 - }
452 - },
453 - "node_modules/object-inspect": {
454 - "version": "1.12.2",
455 - "license": "MIT",
456 - "funding": {
457 - "url": "https://github.com/sponsors/ljharb"
458 - }
459 - },
460 - "node_modules/on-finished": {
461 - "version": "2.4.1",
462 - "license": "MIT",
463 - "dependencies": {
464 - "ee-first": "1.1.1"
465 - },
466 - "engines": {
467 - "node": ">= 0.8"
468 - }
469 - },
470 - "node_modules/parseurl": {
471 - "version": "1.3.3",
472 - "license": "MIT",
473 - "engines": {
474 - "node": ">= 0.8"
475 - }
476 - },
477 - "node_modules/path-to-regexp": {
478 - "version": "0.1.7",
479 - "license": "MIT"
480 - },
481 - "node_modules/proxy-addr": {
482 - "version": "2.0.7",
483 - "license": "MIT",
484 - "dependencies": {
485 - "forwarded": "0.2.0",
486 - "ipaddr.js": "1.9.1"
487 - },
488 - "engines": {
489 - "node": ">= 0.10"
490 - }
491 - },
492 - "node_modules/qs": {
493 - "version": "6.10.3",
494 - "license": "BSD-3-Clause",
495 - "dependencies": {
496 - "side-channel": "^1.0.4"
497 - },
498 - "engines": {
499 - "node": ">=0.6"
500 - },
501 - "funding": {
502 - "url": "https://github.com/sponsors/ljharb"
503 - }
504 - },
505 - "node_modules/range-parser": {
506 - "version": "1.2.1",
507 - "license": "MIT",
508 - "engines": {
509 - "node": ">= 0.6"
510 - }
511 - },
512 - "node_modules/raw-body": {
513 - "version": "2.5.1",
514 - "license": "MIT",
515 - "dependencies": {
516 - "bytes": "3.1.2",
517 - "http-errors": "2.0.0",
518 - "iconv-lite": "0.4.24",
519 - "unpipe": "1.0.0"
520 - },
521 - "engines": {
522 - "node": ">= 0.8"
523 - }
524 - },
525 - "node_modules/safe-buffer": {
526 - "version": "5.2.1",
527 - "funding": [
528 - {
529 - "type": "github",
530 - "url": "https://github.com/sponsors/feross"
531 - },
532 - {
533 - "type": "patreon",
534 - "url": "https://www.patreon.com/feross"
535 - },
536 - {
537 - "type": "consulting",
538 - "url": "https://feross.org/support"
539 - }
540 - ],
541 - "license": "MIT"
542 - },
543 - "node_modules/safer-buffer": {
544 - "version": "2.1.2",
545 - "license": "MIT"
546 - },
547 - "node_modules/send": {
548 - "version": "0.18.0",
549 - "license": "MIT",
550 - "dependencies": {
551 - "debug": "2.6.9",
552 - "depd": "2.0.0",
553 - "destroy": "1.2.0",
554 - "encodeurl": "~1.0.2",
555 - "escape-html": "~1.0.3",
556 - "etag": "~1.8.1",
557 - "fresh": "0.5.2",
558 - "http-errors": "2.0.0",
559 - "mime": "1.6.0",
560 - "ms": "2.1.3",
561 - "on-finished": "2.4.1",
562 - "range-parser": "~1.2.1",
563 - "statuses": "2.0.1"
564 - },
565 - "engines": {
566 - "node": ">= 0.8.0"
567 - }
568 - },
569 - "node_modules/send/node_modules/ms": {
570 - "version": "2.1.3",
571 - "license": "MIT"
572 - },
573 - "node_modules/serve-static": {
574 - "version": "1.15.0",
575 - "license": "MIT",
576 - "dependencies": {
577 - "encodeurl": "~1.0.2",
578 - "escape-html": "~1.0.3",
579 - "parseurl": "~1.3.3",
580 - "send": "0.18.0"
581 - },
582 - "engines": {
583 - "node": ">= 0.8.0"
584 - }
585 - },
586 - "node_modules/setprototypeof": {
587 - "version": "1.2.0",
588 - "license": "ISC"
589 - },
590 - "node_modules/side-channel": {
591 - "version": "1.0.4",
592 - "license": "MIT",
593 - "dependencies": {
594 - "call-bind": "^1.0.0",
595 - "get-intrinsic": "^1.0.2",
596 - "object-inspect": "^1.9.0"
597 - },
598 - "funding": {
599 - "url": "https://github.com/sponsors/ljharb"
600 - }
601 - },
602 - "node_modules/socket.io": {
603 - "version": "4.5.1",
604 - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz",
605 - "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==",
606 - "dependencies": {
607 - "accepts": "~1.3.4",
608 - "base64id": "~2.0.0",
609 - "debug": "~4.3.2",
610 - "engine.io": "~6.2.0",
611 - "socket.io-adapter": "~2.4.0",
612 - "socket.io-parser": "~4.0.4"
613 - },
614 - "engines": {
615 - "node": ">=10.0.0"
616 - }
617 - },
618 - "node_modules/socket.io-adapter": {
619 - "version": "2.4.0",
620 - "license": "MIT"
621 - },
622 - "node_modules/socket.io-parser": {
623 - "version": "4.0.4",
624 - "license": "MIT",
625 - "dependencies": {
626 - "@types/component-emitter": "^1.2.10",
627 - "component-emitter": "~1.3.0",
628 - "debug": "~4.3.1"
629 - },
630 - "engines": {
631 - "node": ">=10.0.0"
632 - }
633 - },
634 - "node_modules/socket.io-parser/node_modules/debug": {
635 - "version": "4.3.4",
636 - "license": "MIT",
637 - "dependencies": {
638 - "ms": "2.1.2"
639 - },
640 - "engines": {
641 - "node": ">=6.0"
642 - },
643 - "peerDependenciesMeta": {
644 - "supports-color": {
645 - "optional": true
646 - }
647 - }
648 - },
649 - "node_modules/socket.io-parser/node_modules/ms": {
650 - "version": "2.1.2",
651 - "license": "MIT"
652 - },
653 - "node_modules/socket.io/node_modules/debug": {
654 - "version": "4.3.4",
655 - "license": "MIT",
656 - "dependencies": {
657 - "ms": "2.1.2"
658 - },
659 - "engines": {
660 - "node": ">=6.0"
661 - },
662 - "peerDependenciesMeta": {
663 - "supports-color": {
664 - "optional": true
665 - }
666 - }
667 - },
668 - "node_modules/socket.io/node_modules/ms": {
669 - "version": "2.1.2",
670 - "license": "MIT"
671 - },
672 - "node_modules/statuses": {
673 - "version": "2.0.1",
674 - "license": "MIT",
675 - "engines": {
676 - "node": ">= 0.8"
677 - }
678 - },
679 - "node_modules/toidentifier": {
680 - "version": "1.0.1",
681 - "license": "MIT",
682 - "engines": {
683 - "node": ">=0.6"
684 - }
685 - },
686 - "node_modules/type-is": {
687 - "version": "1.6.18",
688 - "license": "MIT",
689 - "dependencies": {
690 - "media-typer": "0.3.0",
691 - "mime-types": "~2.1.24"
692 - },
693 - "engines": {
694 - "node": ">= 0.6"
695 - }
696 - },
697 - "node_modules/unpipe": {
698 - "version": "1.0.0",
699 - "license": "MIT",
700 - "engines": {
701 - "node": ">= 0.8"
702 - }
703 - },
704 - "node_modules/utils-merge": {
705 - "version": "1.0.1",
706 - "license": "MIT",
707 - "engines": {
708 - "node": ">= 0.4.0"
709 - }
710 - },
711 - "node_modules/vary": {
712 - "version": "1.1.2",
713 - "license": "MIT",
714 - "engines": {
715 - "node": ">= 0.8"
716 - }
717 - },
718 - "node_modules/ws": {
719 - "version": "8.2.3",
720 - "license": "MIT",
721 - "engines": {
722 - "node": ">=10.0.0"
723 - },
724 - "peerDependencies": {
725 - "bufferutil": "^4.0.1",
726 - "utf-8-validate": "^5.0.2"
727 - },
728 - "peerDependenciesMeta": {
729 - "bufferutil": {
730 - "optional": true
731 - },
732 - "utf-8-validate": {
733 - "optional": true
734 - }
735 - }
736 - }
737 - },
738 - "dependencies": {
739 - "@types/component-emitter": {
740 - "version": "1.2.11"
741 - },
742 - "@types/cookie": {
743 - "version": "0.4.1"
744 - },
745 - "@types/cors": {
746 - "version": "2.8.12"
747 - },
748 - "@types/node": {
749 - "version": "17.0.39"
750 - },
751 - "accepts": {
752 - "version": "1.3.8",
753 - "requires": {
754 - "mime-types": "~2.1.34",
755 - "negotiator": "0.6.3"
756 - }
757 - },
758 - "array-flatten": {
759 - "version": "1.1.1"
760 - },
761 - "base64id": {
762 - "version": "2.0.0"
763 - },
764 - "body-parser": {
765 - "version": "1.20.0",
766 - "requires": {
767 - "bytes": "3.1.2",
768 - "content-type": "~1.0.4",
769 - "debug": "2.6.9",
770 - "depd": "2.0.0",
771 - "destroy": "1.2.0",
772 - "http-errors": "2.0.0",
773 - "iconv-lite": "0.4.24",
774 - "on-finished": "2.4.1",
775 - "qs": "6.10.3",
776 - "raw-body": "2.5.1",
777 - "type-is": "~1.6.18",
778 - "unpipe": "1.0.0"
779 - }
780 - },
781 - "bytes": {
782 - "version": "3.1.2"
783 - },
784 - "call-bind": {
785 - "version": "1.0.2",
786 - "requires": {
787 - "function-bind": "^1.1.1",
788 - "get-intrinsic": "^1.0.2"
789 - }
790 - },
791 - "component-emitter": {
792 - "version": "1.3.0"
793 - },
794 - "content-disposition": {
795 - "version": "0.5.4",
796 - "requires": {
797 - "safe-buffer": "5.2.1"
798 - }
799 - },
800 - "content-type": {
801 - "version": "1.0.4"
802 - },
803 - "cookie": {
804 - "version": "0.5.0"
805 - },
806 - "cookie-signature": {
807 - "version": "1.0.6"
808 - },
809 - "cors": {
810 - "version": "2.8.5",
811 - "requires": {
812 - "object-assign": "^4",
813 - "vary": "^1"
814 - }
815 - },
816 - "dayjs": {
817 - "version": "1.11.2",
818 - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz",
819 - "integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw=="
820 - },
821 - "debug": {
822 - "version": "2.6.9",
823 - "requires": {
824 - "ms": "2.0.0"
825 - }
826 - },
827 - "depd": {
828 - "version": "2.0.0"
829 - },
830 - "destroy": {
831 - "version": "1.2.0"
832 - },
833 - "ee-first": {
834 - "version": "1.1.1"
835 - },
836 - "encodeurl": {
837 - "version": "1.0.2"
838 - },
839 - "engine.io": {
840 - "version": "6.2.0",
841 - "requires": {
842 - "@types/cookie": "^0.4.1",
843 - "@types/cors": "^2.8.12",
844 - "@types/node": ">=10.0.0",
845 - "accepts": "~1.3.4",
846 - "base64id": "2.0.0",
847 - "cookie": "~0.4.1",
848 - "cors": "~2.8.5",
849 - "debug": "~4.3.1",
850 - "engine.io-parser": "~5.0.3",
851 - "ws": "~8.2.3"
852 - },
853 - "dependencies": {
854 - "cookie": {
855 - "version": "0.4.2"
856 - },
857 - "debug": {
858 - "version": "4.3.4",
859 - "requires": {
860 - "ms": "2.1.2"
861 - }
862 - },
863 - "ms": {
864 - "version": "2.1.2"
865 - }
866 - }
867 - },
868 - "engine.io-parser": {
869 - "version": "5.0.4"
870 - },
871 - "escape-html": {
872 - "version": "1.0.3"
873 - },
874 - "etag": {
875 - "version": "1.8.1"
876 - },
877 - "express": {
878 - "version": "4.18.1",
879 - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
880 - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
881 - "requires": {
882 - "accepts": "~1.3.8",
883 - "array-flatten": "1.1.1",
884 - "body-parser": "1.20.0",
885 - "content-disposition": "0.5.4",
886 - "content-type": "~1.0.4",
887 - "cookie": "0.5.0",
888 - "cookie-signature": "1.0.6",
889 - "debug": "2.6.9",
890 - "depd": "2.0.0",
891 - "encodeurl": "~1.0.2",
892 - "escape-html": "~1.0.3",
893 - "etag": "~1.8.1",
894 - "finalhandler": "1.2.0",
895 - "fresh": "0.5.2",
896 - "http-errors": "2.0.0",
897 - "merge-descriptors": "1.0.1",
898 - "methods": "~1.1.2",
899 - "on-finished": "2.4.1",
900 - "parseurl": "~1.3.3",
901 - "path-to-regexp": "0.1.7",
902 - "proxy-addr": "~2.0.7",
903 - "qs": "6.10.3",
904 - "range-parser": "~1.2.1",
905 - "safe-buffer": "5.2.1",
906 - "send": "0.18.0",
907 - "serve-static": "1.15.0",
908 - "setprototypeof": "1.2.0",
909 - "statuses": "2.0.1",
910 - "type-is": "~1.6.18",
911 - "utils-merge": "1.0.1",
912 - "vary": "~1.1.2"
913 - }
914 - },
915 - "finalhandler": {
916 - "version": "1.2.0",
917 - "requires": {
918 - "debug": "2.6.9",
919 - "encodeurl": "~1.0.2",
920 - "escape-html": "~1.0.3",
921 - "on-finished": "2.4.1",
922 - "parseurl": "~1.3.3",
923 - "statuses": "2.0.1",
924 - "unpipe": "~1.0.0"
925 - }
926 - },
927 - "forwarded": {
928 - "version": "0.2.0"
929 - },
930 - "fresh": {
931 - "version": "0.5.2"
932 - },
933 - "function-bind": {
934 - "version": "1.1.1"
935 - },
936 - "get-intrinsic": {
937 - "version": "1.1.1",
938 - "requires": {
939 - "function-bind": "^1.1.1",
940 - "has": "^1.0.3",
941 - "has-symbols": "^1.0.1"
942 - }
943 - },
944 - "has": {
945 - "version": "1.0.3",
946 - "requires": {
947 - "function-bind": "^1.1.1"
948 - }
949 - },
950 - "has-symbols": {
951 - "version": "1.0.3"
952 - },
953 - "http-errors": {
954 - "version": "2.0.0",
955 - "requires": {
956 - "depd": "2.0.0",
957 - "inherits": "2.0.4",
958 - "setprototypeof": "1.2.0",
959 - "statuses": "2.0.1",
960 - "toidentifier": "1.0.1"
961 - }
962 - },
963 - "iconv-lite": {
964 - "version": "0.4.24",
965 - "requires": {
966 - "safer-buffer": ">= 2.1.2 < 3"
967 - }
968 - },
969 - "inherits": {
970 - "version": "2.0.4"
971 - },
972 - "ipaddr.js": {
973 - "version": "1.9.1"
974 - },
975 - "media-typer": {
976 - "version": "0.3.0"
977 - },
978 - "merge-descriptors": {
979 - "version": "1.0.1"
980 - },
981 - "methods": {
982 - "version": "1.1.2"
983 - },
984 - "mime": {
985 - "version": "1.6.0"
986 - },
987 - "mime-db": {
988 - "version": "1.52.0"
989 - },
990 - "mime-types": {
991 - "version": "2.1.35",
992 - "requires": {
993 - "mime-db": "1.52.0"
994 - }
995 - },
996 - "moment": {
997 - "version": "2.29.3",
998 - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz",
999 - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw=="
1000 - },
1001 - "ms": {
1002 - "version": "2.0.0"
1003 - },
1004 - "negotiator": {
1005 - "version": "0.6.3"
1006 - },
1007 - "object-assign": {
1008 - "version": "4.1.1"
1009 - },
1010 - "object-inspect": {
1011 - "version": "1.12.2"
1012 - },
1013 - "on-finished": {
1014 - "version": "2.4.1",
1015 - "requires": {
1016 - "ee-first": "1.1.1"
1017 - }
1018 - },
1019 - "parseurl": {
1020 - "version": "1.3.3"
1021 - },
1022 - "path-to-regexp": {
1023 - "version": "0.1.7"
1024 - },
1025 - "proxy-addr": {
1026 - "version": "2.0.7",
1027 - "requires": {
1028 - "forwarded": "0.2.0",
1029 - "ipaddr.js": "1.9.1"
1030 - }
1031 - },
1032 - "qs": {
1033 - "version": "6.10.3",
1034 - "requires": {
1035 - "side-channel": "^1.0.4"
1036 - }
1037 - },
1038 - "range-parser": {
1039 - "version": "1.2.1"
1040 - },
1041 - "raw-body": {
1042 - "version": "2.5.1",
1043 - "requires": {
1044 - "bytes": "3.1.2",
1045 - "http-errors": "2.0.0",
1046 - "iconv-lite": "0.4.24",
1047 - "unpipe": "1.0.0"
1048 - }
1049 - },
1050 - "safe-buffer": {
1051 - "version": "5.2.1"
1052 - },
1053 - "safer-buffer": {
1054 - "version": "2.1.2"
1055 - },
1056 - "send": {
1057 - "version": "0.18.0",
1058 - "requires": {
1059 - "debug": "2.6.9",
1060 - "depd": "2.0.0",
1061 - "destroy": "1.2.0",
1062 - "encodeurl": "~1.0.2",
1063 - "escape-html": "~1.0.3",
1064 - "etag": "~1.8.1",
1065 - "fresh": "0.5.2",
1066 - "http-errors": "2.0.0",
1067 - "mime": "1.6.0",
1068 - "ms": "2.1.3",
1069 - "on-finished": "2.4.1",
1070 - "range-parser": "~1.2.1",
1071 - "statuses": "2.0.1"
1072 - },
1073 - "dependencies": {
1074 - "ms": {
1075 - "version": "2.1.3"
1076 - }
1077 - }
1078 - },
1079 - "serve-static": {
1080 - "version": "1.15.0",
1081 - "requires": {
1082 - "encodeurl": "~1.0.2",
1083 - "escape-html": "~1.0.3",
1084 - "parseurl": "~1.3.3",
1085 - "send": "0.18.0"
1086 - }
1087 - },
1088 - "setprototypeof": {
1089 - "version": "1.2.0"
1090 - },
1091 - "side-channel": {
1092 - "version": "1.0.4",
1093 - "requires": {
1094 - "call-bind": "^1.0.0",
1095 - "get-intrinsic": "^1.0.2",
1096 - "object-inspect": "^1.9.0"
1097 - }
1098 - },
1099 - "socket.io": {
1100 - "version": "4.5.1",
1101 - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz",
1102 - "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==",
1103 - "requires": {
1104 - "accepts": "~1.3.4",
1105 - "base64id": "~2.0.0",
1106 - "debug": "~4.3.2",
1107 - "engine.io": "~6.2.0",
1108 - "socket.io-adapter": "~2.4.0",
1109 - "socket.io-parser": "~4.0.4"
1110 - },
1111 - "dependencies": {
1112 - "debug": {
1113 - "version": "4.3.4",
1114 - "requires": {
1115 - "ms": "2.1.2"
1116 - }
1117 - },
1118 - "ms": {
1119 - "version": "2.1.2"
1120 - }
1121 - }
1122 - },
1123 - "socket.io-adapter": {
1124 - "version": "2.4.0"
1125 - },
1126 - "socket.io-parser": {
1127 - "version": "4.0.4",
1128 - "requires": {
1129 - "@types/component-emitter": "^1.2.10",
1130 - "component-emitter": "~1.3.0",
1131 - "debug": "~4.3.1"
1132 - },
1133 - "dependencies": {
1134 - "debug": {
1135 - "version": "4.3.4",
1136 - "requires": {
1137 - "ms": "2.1.2"
1138 - }
1139 - },
1140 - "ms": {
1141 - "version": "2.1.2"
1142 - }
1143 - }
1144 - },
1145 - "statuses": {
1146 - "version": "2.0.1"
1147 - },
1148 - "toidentifier": {
1149 - "version": "1.0.1"
1150 - },
1151 - "type-is": {
1152 - "version": "1.6.18",
1153 - "requires": {
1154 - "media-typer": "0.3.0",
1155 - "mime-types": "~2.1.24"
1156 - }
1157 - },
1158 - "unpipe": {
1159 - "version": "1.0.0"
1160 - },
1161 - "utils-merge": {
1162 - "version": "1.0.1"
1163 - },
1164 - "vary": {
1165 - "version": "1.1.2"
1166 - },
1167 - "ws": {
1168 - "version": "8.2.3",
1169 - "requires": {}
1170 - }
1171 - }
1172 -}
1 -{
2 - "name": "chat",
3 - "version": "1.0.0",
4 - "description": "",
5 - "main": "index.js",
6 - "scripts": {
7 - "start": "nodemon ./app.js",
8 - "test": "echo \"Error: no test specified\" && exit 1"
9 - },
10 - "keywords": [],
11 - "author": "",
12 - "license": "ISC",
13 - "dependencies": {
14 - "dayjs": "^1.11.2",
15 - "express": "^4.18.1",
16 - "moment": "^2.29.3",
17 - "socket.io": "^4.5.1"
18 - }
19 -}
1 -* {
2 - margin: 0;
3 - padding: 0;
4 -}
5 -
6 -html, body {
7 - height : 100%;
8 -}
9 -
10 -.wrapper {
11 - height : 100%;
12 - width: 100%;
13 - display: flex;
14 - flex-direction: column;
15 - overflow: hidden;
16 -}
17 -
18 -.user-container {
19 - background: rebeccapurple;
20 - flex: 1;
21 - display: flex;
22 - justify-content: flex-start;
23 - align-items: center;
24 - padding: 0.5rem;
25 -}
26 -
27 -.user-container .nickname {
28 - font-size : 14px;
29 - margin-right : 1.5rem;
30 - margin-left : 1rem;
31 - color:#fff;
32 -}
33 -
34 -.user-container input {
35 - border-radius: 3px;
36 - border: none;
37 - height: 80%;
38 -}
39 -
40 -.display-container {
41 - background: #D2D2FF;
42 - flex : 12;
43 - overflow-y:scroll;
44 -}
45 -
46 -.input-container {
47 - flex:1;
48 - display:flex;
49 - justify-content: stretch;
50 - align-items: stretch;
51 -}
52 -
53 -.input-container span {
54 - display: flex;
55 - justify-content: flex-start;
56 - align-items:center;
57 - padding: 0.3rem;
58 - width: 100%;
59 -}
60 -
61 -.chatting-input {
62 - font-size:12px;
63 - height:100%;
64 - flex:8;
65 - border:none;
66 -}
67 -
68 -.send-button {
69 - flex:1;
70 - background: rebeccapurple;
71 - color:#fff;
72 - border:none;
73 - height:100%;
74 - border-radius:3px;
75 -}
76 -
77 -.chatting-list li {
78 - width:50%;
79 - padding:0.3rem;
80 - display:flex;
81 - justify-content: flex-start;
82 - align-items:flex-end;
83 - margin-top:0.5rem;
84 -}
85 -
86 -.profile {
87 - display: flex;
88 - flex-direction: column;
89 - align-items: center;
90 - justify-content: center;
91 - flex: 1;
92 -}
93 -
94 -.profile .user {
95 - font-size: 10px;
96 - margin-bottom: 0.3rem;
97 -}
98 -
99 -.profile .image {
100 - border-radius: 50%;
101 - object-fit: cover;
102 - width: 50px;
103 - height: 50px;
104 -}
105 -
106 -.message {
107 - border-radius: 5px;
108 - padding: 0.5rem;
109 - font-size: 12px;
110 - margin: 0 5px;
111 - flex: 10;
112 -}
113 -
114 -.time {
115 - font-size: 10px;
116 - margin: 0 5px;
117 -}
118 -
119 -.sent {
120 - flex-direction: row-reverse;
121 - float: right;
122 -}
123 -
124 -.sent .message {
125 - background: #9986EE;
126 - color: #fff;
127 -}
128 -
129 -.received .message {
130 - background: #fff;
131 -}
...\ No newline at end of file ...\ No newline at end of file
1 -<!DOCTYPE html>
2 -<html lang="en">
3 -<head>
4 - <meta charset="UTF-8">
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 - <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 - <title>Document</title>
8 - <link rel="stylesheet" href="css/style.css">
9 -</head>
10 -<body>
11 - <div class="wrapper">
12 - <div class="user-container">
13 - <lable class="nickname" for="nickname">닉네임설정</lable>
14 - <input type="text" id="nickname">
15 - </div>
16 - <div class="display-container">
17 - <ul class="chatting-list">
18 -
19 - </ul>
20 - </div>
21 - <div class="input-container">
22 - <span>
23 - <input type="text" class="chatting-input">
24 - <button class="send-button">전송</button>
25 - </span>
26 - </div>
27 - </div>
28 -
29 - <script src="/socket.io/socket.io.js"></script>
30 - <script src="js/chat.js"></script>
31 -</body>
32 -</html>
...\ No newline at end of file ...\ No newline at end of file
1 -"use strict"
2 -//const socket = io.connect("http://localhost:3000/", {transports:['websocket']});
3 -const socket = io();
4 -
5 -const nickname = document.querySelector("#nickname")
6 -const chatlist = document.querySelector(".chatting-list")
7 -const chatInput = document.querySelector(".chatting-input")
8 -const sendButton = document.querySelector(".send-button")
9 -const displayContainer = document.querySelector(".display-container")
10 -
11 -chatInput.addEventListener("keypress", (event)=> {
12 - if(event.keyCode === 13) {
13 - send()
14 - }
15 -})
16 -
17 -function send() {
18 - const param = {
19 - name: nickname.value,
20 - msg: chatInput.value
21 - }
22 - socket.emit("chatting", param)
23 -}
24 -
25 -sendButton.addEventListener("click", send)
26 -
27 -socket.on("chatting", (data)=>{
28 - console.log(data)
29 - const {name, msg, time} = data;
30 - const item = new LiModel(name, msg, time);
31 - item.makeLi()
32 - displayContainer.scrollTo(0, displayContainer.scrollHeight)
33 -})
34 -
35 -//console.log(socket);
36 -
37 -function LiModel(name, msg, time) {
38 - this.name = name;
39 - this.msg = msg;
40 - this.time = time;
41 -
42 - this.makeLi = ()=>{
43 - const li = document.createElement("li");
44 - li.classList.add(nickname.value === this.name ? "sent":"received")
45 - const dom = `<span class="profile">
46 - <span class="user">${this.name}</span>
47 - <img class="image" src="https://placeimg.com/50/50/any" alt="any">
48 - </span>
49 - <span class="message">${this.msg}</span>
50 - <span class="time">${this.time}</span>`;
51 -
52 - li.innerHTML = dom;
53 - chatlist.appendChild(li)
54 - }
55 -}
...\ No newline at end of file ...\ No newline at end of file
1 -{
2 - "name": "chat",
3 - "version": "1.0.0",
4 - "lockfileVersion": 2,
5 - "requires": true,
6 - "packages": {
7 - "": {
8 - "name": "chat",
9 - "version": "1.0.0",
10 - "license": "ISC",
11 - "dependencies": {
12 - "express": "^4.18.1",
13 - "moment": "^2.29.3",
14 - "socket.io": "^4.5.1"
15 - }
16 - },
17 - "node_modules/@types/component-emitter": {
18 - "version": "1.2.11",
19 - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
20 - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
21 - },
22 - "node_modules/@types/cookie": {
23 - "version": "0.4.1",
24 - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
25 - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
26 - },
27 - "node_modules/@types/cors": {
28 - "version": "2.8.12",
29 - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
30 - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
31 - },
32 - "node_modules/@types/node": {
33 - "version": "17.0.39",
34 - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.39.tgz",
35 - "integrity": "sha512-JDU3YLlnPK3WDao6/DlXLOgSNpG13ct+CwIO17V8q0/9fWJyeMJJ/VyZ1lv8kDprihvZMydzVwf0tQOqGiY2Nw=="
36 - },
37 - "node_modules/accepts": {
38 - "version": "1.3.8",
39 - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
40 - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
41 - "dependencies": {
42 - "mime-types": "~2.1.34",
43 - "negotiator": "0.6.3"
44 - },
45 - "engines": {
46 - "node": ">= 0.6"
47 - }
48 - },
49 - "node_modules/array-flatten": {
50 - "version": "1.1.1",
51 - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
52 - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
53 - },
54 - "node_modules/base64id": {
55 - "version": "2.0.0",
56 - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
57 - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
58 - "engines": {
59 - "node": "^4.5.0 || >= 5.9"
60 - }
61 - },
62 - "node_modules/body-parser": {
63 - "version": "1.20.0",
64 - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
65 - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
66 - "dependencies": {
67 - "bytes": "3.1.2",
68 - "content-type": "~1.0.4",
69 - "debug": "2.6.9",
70 - "depd": "2.0.0",
71 - "destroy": "1.2.0",
72 - "http-errors": "2.0.0",
73 - "iconv-lite": "0.4.24",
74 - "on-finished": "2.4.1",
75 - "qs": "6.10.3",
76 - "raw-body": "2.5.1",
77 - "type-is": "~1.6.18",
78 - "unpipe": "1.0.0"
79 - },
80 - "engines": {
81 - "node": ">= 0.8",
82 - "npm": "1.2.8000 || >= 1.4.16"
83 - }
84 - },
85 - "node_modules/bytes": {
86 - "version": "3.1.2",
87 - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
88 - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
89 - "engines": {
90 - "node": ">= 0.8"
91 - }
92 - },
93 - "node_modules/call-bind": {
94 - "version": "1.0.2",
95 - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
96 - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
97 - "dependencies": {
98 - "function-bind": "^1.1.1",
99 - "get-intrinsic": "^1.0.2"
100 - },
101 - "funding": {
102 - "url": "https://github.com/sponsors/ljharb"
103 - }
104 - },
105 - "node_modules/component-emitter": {
106 - "version": "1.3.0",
107 - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
108 - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
109 - },
110 - "node_modules/content-disposition": {
111 - "version": "0.5.4",
112 - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
113 - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
114 - "dependencies": {
115 - "safe-buffer": "5.2.1"
116 - },
117 - "engines": {
118 - "node": ">= 0.6"
119 - }
120 - },
121 - "node_modules/content-type": {
122 - "version": "1.0.4",
123 - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
124 - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
125 - "engines": {
126 - "node": ">= 0.6"
127 - }
128 - },
129 - "node_modules/cookie": {
130 - "version": "0.5.0",
131 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
132 - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
133 - "engines": {
134 - "node": ">= 0.6"
135 - }
136 - },
137 - "node_modules/cookie-signature": {
138 - "version": "1.0.6",
139 - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
140 - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
141 - },
142 - "node_modules/cors": {
143 - "version": "2.8.5",
144 - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
145 - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
146 - "dependencies": {
147 - "object-assign": "^4",
148 - "vary": "^1"
149 - },
150 - "engines": {
151 - "node": ">= 0.10"
152 - }
153 - },
154 - "node_modules/debug": {
155 - "version": "2.6.9",
156 - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
157 - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
158 - "dependencies": {
159 - "ms": "2.0.0"
160 - }
161 - },
162 - "node_modules/depd": {
163 - "version": "2.0.0",
164 - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
165 - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
166 - "engines": {
167 - "node": ">= 0.8"
168 - }
169 - },
170 - "node_modules/destroy": {
171 - "version": "1.2.0",
172 - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
173 - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
174 - "engines": {
175 - "node": ">= 0.8",
176 - "npm": "1.2.8000 || >= 1.4.16"
177 - }
178 - },
179 - "node_modules/ee-first": {
180 - "version": "1.1.1",
181 - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
182 - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
183 - },
184 - "node_modules/encodeurl": {
185 - "version": "1.0.2",
186 - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
187 - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
188 - "engines": {
189 - "node": ">= 0.8"
190 - }
191 - },
192 - "node_modules/engine.io": {
193 - "version": "6.2.0",
194 - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
195 - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
196 - "dependencies": {
197 - "@types/cookie": "^0.4.1",
198 - "@types/cors": "^2.8.12",
199 - "@types/node": ">=10.0.0",
200 - "accepts": "~1.3.4",
201 - "base64id": "2.0.0",
202 - "cookie": "~0.4.1",
203 - "cors": "~2.8.5",
204 - "debug": "~4.3.1",
205 - "engine.io-parser": "~5.0.3",
206 - "ws": "~8.2.3"
207 - },
208 - "engines": {
209 - "node": ">=10.0.0"
210 - }
211 - },
212 - "node_modules/engine.io-parser": {
213 - "version": "5.0.4",
214 - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
215 - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
216 - "engines": {
217 - "node": ">=10.0.0"
218 - }
219 - },
220 - "node_modules/engine.io/node_modules/cookie": {
221 - "version": "0.4.2",
222 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
223 - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
224 - "engines": {
225 - "node": ">= 0.6"
226 - }
227 - },
228 - "node_modules/engine.io/node_modules/debug": {
229 - "version": "4.3.4",
230 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
231 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
232 - "dependencies": {
233 - "ms": "2.1.2"
234 - },
235 - "engines": {
236 - "node": ">=6.0"
237 - },
238 - "peerDependenciesMeta": {
239 - "supports-color": {
240 - "optional": true
241 - }
242 - }
243 - },
244 - "node_modules/engine.io/node_modules/ms": {
245 - "version": "2.1.2",
246 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
247 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
248 - },
249 - "node_modules/escape-html": {
250 - "version": "1.0.3",
251 - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
252 - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
253 - },
254 - "node_modules/etag": {
255 - "version": "1.8.1",
256 - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
257 - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
258 - "engines": {
259 - "node": ">= 0.6"
260 - }
261 - },
262 - "node_modules/express": {
263 - "version": "4.18.1",
264 - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
265 - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
266 - "dependencies": {
267 - "accepts": "~1.3.8",
268 - "array-flatten": "1.1.1",
269 - "body-parser": "1.20.0",
270 - "content-disposition": "0.5.4",
271 - "content-type": "~1.0.4",
272 - "cookie": "0.5.0",
273 - "cookie-signature": "1.0.6",
274 - "debug": "2.6.9",
275 - "depd": "2.0.0",
276 - "encodeurl": "~1.0.2",
277 - "escape-html": "~1.0.3",
278 - "etag": "~1.8.1",
279 - "finalhandler": "1.2.0",
280 - "fresh": "0.5.2",
281 - "http-errors": "2.0.0",
282 - "merge-descriptors": "1.0.1",
283 - "methods": "~1.1.2",
284 - "on-finished": "2.4.1",
285 - "parseurl": "~1.3.3",
286 - "path-to-regexp": "0.1.7",
287 - "proxy-addr": "~2.0.7",
288 - "qs": "6.10.3",
289 - "range-parser": "~1.2.1",
290 - "safe-buffer": "5.2.1",
291 - "send": "0.18.0",
292 - "serve-static": "1.15.0",
293 - "setprototypeof": "1.2.0",
294 - "statuses": "2.0.1",
295 - "type-is": "~1.6.18",
296 - "utils-merge": "1.0.1",
297 - "vary": "~1.1.2"
298 - },
299 - "engines": {
300 - "node": ">= 0.10.0"
301 - }
302 - },
303 - "node_modules/finalhandler": {
304 - "version": "1.2.0",
305 - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
306 - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
307 - "dependencies": {
308 - "debug": "2.6.9",
309 - "encodeurl": "~1.0.2",
310 - "escape-html": "~1.0.3",
311 - "on-finished": "2.4.1",
312 - "parseurl": "~1.3.3",
313 - "statuses": "2.0.1",
314 - "unpipe": "~1.0.0"
315 - },
316 - "engines": {
317 - "node": ">= 0.8"
318 - }
319 - },
320 - "node_modules/forwarded": {
321 - "version": "0.2.0",
322 - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
323 - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
324 - "engines": {
325 - "node": ">= 0.6"
326 - }
327 - },
328 - "node_modules/fresh": {
329 - "version": "0.5.2",
330 - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
331 - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
332 - "engines": {
333 - "node": ">= 0.6"
334 - }
335 - },
336 - "node_modules/function-bind": {
337 - "version": "1.1.1",
338 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
339 - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
340 - },
341 - "node_modules/get-intrinsic": {
342 - "version": "1.1.1",
343 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
344 - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
345 - "dependencies": {
346 - "function-bind": "^1.1.1",
347 - "has": "^1.0.3",
348 - "has-symbols": "^1.0.1"
349 - },
350 - "funding": {
351 - "url": "https://github.com/sponsors/ljharb"
352 - }
353 - },
354 - "node_modules/has": {
355 - "version": "1.0.3",
356 - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
357 - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
358 - "dependencies": {
359 - "function-bind": "^1.1.1"
360 - },
361 - "engines": {
362 - "node": ">= 0.4.0"
363 - }
364 - },
365 - "node_modules/has-symbols": {
366 - "version": "1.0.3",
367 - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
368 - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
369 - "engines": {
370 - "node": ">= 0.4"
371 - },
372 - "funding": {
373 - "url": "https://github.com/sponsors/ljharb"
374 - }
375 - },
376 - "node_modules/http-errors": {
377 - "version": "2.0.0",
378 - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
379 - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
380 - "dependencies": {
381 - "depd": "2.0.0",
382 - "inherits": "2.0.4",
383 - "setprototypeof": "1.2.0",
384 - "statuses": "2.0.1",
385 - "toidentifier": "1.0.1"
386 - },
387 - "engines": {
388 - "node": ">= 0.8"
389 - }
390 - },
391 - "node_modules/iconv-lite": {
392 - "version": "0.4.24",
393 - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
394 - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
395 - "dependencies": {
396 - "safer-buffer": ">= 2.1.2 < 3"
397 - },
398 - "engines": {
399 - "node": ">=0.10.0"
400 - }
401 - },
402 - "node_modules/inherits": {
403 - "version": "2.0.4",
404 - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
405 - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
406 - },
407 - "node_modules/ipaddr.js": {
408 - "version": "1.9.1",
409 - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
410 - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
411 - "engines": {
412 - "node": ">= 0.10"
413 - }
414 - },
415 - "node_modules/media-typer": {
416 - "version": "0.3.0",
417 - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
418 - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
419 - "engines": {
420 - "node": ">= 0.6"
421 - }
422 - },
423 - "node_modules/merge-descriptors": {
424 - "version": "1.0.1",
425 - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
426 - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
427 - },
428 - "node_modules/methods": {
429 - "version": "1.1.2",
430 - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
431 - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
432 - "engines": {
433 - "node": ">= 0.6"
434 - }
435 - },
436 - "node_modules/mime": {
437 - "version": "1.6.0",
438 - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
439 - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
440 - "bin": {
441 - "mime": "cli.js"
442 - },
443 - "engines": {
444 - "node": ">=4"
445 - }
446 - },
447 - "node_modules/mime-db": {
448 - "version": "1.52.0",
449 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
450 - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
451 - "engines": {
452 - "node": ">= 0.6"
453 - }
454 - },
455 - "node_modules/mime-types": {
456 - "version": "2.1.35",
457 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
458 - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
459 - "dependencies": {
460 - "mime-db": "1.52.0"
461 - },
462 - "engines": {
463 - "node": ">= 0.6"
464 - }
465 - },
466 - "node_modules/moment": {
467 - "version": "2.29.3",
468 - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz",
469 - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==",
470 - "engines": {
471 - "node": "*"
472 - }
473 - },
474 - "node_modules/ms": {
475 - "version": "2.0.0",
476 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
477 - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
478 - },
479 - "node_modules/negotiator": {
480 - "version": "0.6.3",
481 - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
482 - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
483 - "engines": {
484 - "node": ">= 0.6"
485 - }
486 - },
487 - "node_modules/object-assign": {
488 - "version": "4.1.1",
489 - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
490 - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
491 - "engines": {
492 - "node": ">=0.10.0"
493 - }
494 - },
495 - "node_modules/object-inspect": {
496 - "version": "1.12.2",
497 - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
498 - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
499 - "funding": {
500 - "url": "https://github.com/sponsors/ljharb"
501 - }
502 - },
503 - "node_modules/on-finished": {
504 - "version": "2.4.1",
505 - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
506 - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
507 - "dependencies": {
508 - "ee-first": "1.1.1"
509 - },
510 - "engines": {
511 - "node": ">= 0.8"
512 - }
513 - },
514 - "node_modules/parseurl": {
515 - "version": "1.3.3",
516 - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
517 - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
518 - "engines": {
519 - "node": ">= 0.8"
520 - }
521 - },
522 - "node_modules/path-to-regexp": {
523 - "version": "0.1.7",
524 - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
525 - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
526 - },
527 - "node_modules/proxy-addr": {
528 - "version": "2.0.7",
529 - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
530 - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
531 - "dependencies": {
532 - "forwarded": "0.2.0",
533 - "ipaddr.js": "1.9.1"
534 - },
535 - "engines": {
536 - "node": ">= 0.10"
537 - }
538 - },
539 - "node_modules/qs": {
540 - "version": "6.10.3",
541 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
542 - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
543 - "dependencies": {
544 - "side-channel": "^1.0.4"
545 - },
546 - "engines": {
547 - "node": ">=0.6"
548 - },
549 - "funding": {
550 - "url": "https://github.com/sponsors/ljharb"
551 - }
552 - },
553 - "node_modules/range-parser": {
554 - "version": "1.2.1",
555 - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
556 - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
557 - "engines": {
558 - "node": ">= 0.6"
559 - }
560 - },
561 - "node_modules/raw-body": {
562 - "version": "2.5.1",
563 - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
564 - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
565 - "dependencies": {
566 - "bytes": "3.1.2",
567 - "http-errors": "2.0.0",
568 - "iconv-lite": "0.4.24",
569 - "unpipe": "1.0.0"
570 - },
571 - "engines": {
572 - "node": ">= 0.8"
573 - }
574 - },
575 - "node_modules/safe-buffer": {
576 - "version": "5.2.1",
577 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
578 - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
579 - "funding": [
580 - {
581 - "type": "github",
582 - "url": "https://github.com/sponsors/feross"
583 - },
584 - {
585 - "type": "patreon",
586 - "url": "https://www.patreon.com/feross"
587 - },
588 - {
589 - "type": "consulting",
590 - "url": "https://feross.org/support"
591 - }
592 - ]
593 - },
594 - "node_modules/safer-buffer": {
595 - "version": "2.1.2",
596 - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
597 - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
598 - },
599 - "node_modules/send": {
600 - "version": "0.18.0",
601 - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
602 - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
603 - "dependencies": {
604 - "debug": "2.6.9",
605 - "depd": "2.0.0",
606 - "destroy": "1.2.0",
607 - "encodeurl": "~1.0.2",
608 - "escape-html": "~1.0.3",
609 - "etag": "~1.8.1",
610 - "fresh": "0.5.2",
611 - "http-errors": "2.0.0",
612 - "mime": "1.6.0",
613 - "ms": "2.1.3",
614 - "on-finished": "2.4.1",
615 - "range-parser": "~1.2.1",
616 - "statuses": "2.0.1"
617 - },
618 - "engines": {
619 - "node": ">= 0.8.0"
620 - }
621 - },
622 - "node_modules/send/node_modules/ms": {
623 - "version": "2.1.3",
624 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
625 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
626 - },
627 - "node_modules/serve-static": {
628 - "version": "1.15.0",
629 - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
630 - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
631 - "dependencies": {
632 - "encodeurl": "~1.0.2",
633 - "escape-html": "~1.0.3",
634 - "parseurl": "~1.3.3",
635 - "send": "0.18.0"
636 - },
637 - "engines": {
638 - "node": ">= 0.8.0"
639 - }
640 - },
641 - "node_modules/setprototypeof": {
642 - "version": "1.2.0",
643 - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
644 - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
645 - },
646 - "node_modules/side-channel": {
647 - "version": "1.0.4",
648 - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
649 - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
650 - "dependencies": {
651 - "call-bind": "^1.0.0",
652 - "get-intrinsic": "^1.0.2",
653 - "object-inspect": "^1.9.0"
654 - },
655 - "funding": {
656 - "url": "https://github.com/sponsors/ljharb"
657 - }
658 - },
659 - "node_modules/socket.io": {
660 - "version": "4.5.1",
661 - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz",
662 - "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==",
663 - "dependencies": {
664 - "accepts": "~1.3.4",
665 - "base64id": "~2.0.0",
666 - "debug": "~4.3.2",
667 - "engine.io": "~6.2.0",
668 - "socket.io-adapter": "~2.4.0",
669 - "socket.io-parser": "~4.0.4"
670 - },
671 - "engines": {
672 - "node": ">=10.0.0"
673 - }
674 - },
675 - "node_modules/socket.io-adapter": {
676 - "version": "2.4.0",
677 - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
678 - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
679 - },
680 - "node_modules/socket.io-parser": {
681 - "version": "4.0.4",
682 - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
683 - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
684 - "dependencies": {
685 - "@types/component-emitter": "^1.2.10",
686 - "component-emitter": "~1.3.0",
687 - "debug": "~4.3.1"
688 - },
689 - "engines": {
690 - "node": ">=10.0.0"
691 - }
692 - },
693 - "node_modules/socket.io-parser/node_modules/debug": {
694 - "version": "4.3.4",
695 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
696 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
697 - "dependencies": {
698 - "ms": "2.1.2"
699 - },
700 - "engines": {
701 - "node": ">=6.0"
702 - },
703 - "peerDependenciesMeta": {
704 - "supports-color": {
705 - "optional": true
706 - }
707 - }
708 - },
709 - "node_modules/socket.io-parser/node_modules/ms": {
710 - "version": "2.1.2",
711 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
712 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
713 - },
714 - "node_modules/socket.io/node_modules/debug": {
715 - "version": "4.3.4",
716 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
717 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
718 - "dependencies": {
719 - "ms": "2.1.2"
720 - },
721 - "engines": {
722 - "node": ">=6.0"
723 - },
724 - "peerDependenciesMeta": {
725 - "supports-color": {
726 - "optional": true
727 - }
728 - }
729 - },
730 - "node_modules/socket.io/node_modules/ms": {
731 - "version": "2.1.2",
732 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
733 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
734 - },
735 - "node_modules/statuses": {
736 - "version": "2.0.1",
737 - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
738 - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
739 - "engines": {
740 - "node": ">= 0.8"
741 - }
742 - },
743 - "node_modules/toidentifier": {
744 - "version": "1.0.1",
745 - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
746 - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
747 - "engines": {
748 - "node": ">=0.6"
749 - }
750 - },
751 - "node_modules/type-is": {
752 - "version": "1.6.18",
753 - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
754 - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
755 - "dependencies": {
756 - "media-typer": "0.3.0",
757 - "mime-types": "~2.1.24"
758 - },
759 - "engines": {
760 - "node": ">= 0.6"
761 - }
762 - },
763 - "node_modules/unpipe": {
764 - "version": "1.0.0",
765 - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
766 - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
767 - "engines": {
768 - "node": ">= 0.8"
769 - }
770 - },
771 - "node_modules/utils-merge": {
772 - "version": "1.0.1",
773 - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
774 - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
775 - "engines": {
776 - "node": ">= 0.4.0"
777 - }
778 - },
779 - "node_modules/vary": {
780 - "version": "1.1.2",
781 - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
782 - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
783 - "engines": {
784 - "node": ">= 0.8"
785 - }
786 - },
787 - "node_modules/ws": {
788 - "version": "8.2.3",
789 - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
790 - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
791 - "engines": {
792 - "node": ">=10.0.0"
793 - },
794 - "peerDependencies": {
795 - "bufferutil": "^4.0.1",
796 - "utf-8-validate": "^5.0.2"
797 - },
798 - "peerDependenciesMeta": {
799 - "bufferutil": {
800 - "optional": true
801 - },
802 - "utf-8-validate": {
803 - "optional": true
804 - }
805 - }
806 - }
807 - },
808 - "dependencies": {
809 - "@types/component-emitter": {
810 - "version": "1.2.11",
811 - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
812 - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
813 - },
814 - "@types/cookie": {
815 - "version": "0.4.1",
816 - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
817 - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
818 - },
819 - "@types/cors": {
820 - "version": "2.8.12",
821 - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
822 - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
823 - },
824 - "@types/node": {
825 - "version": "17.0.39",
826 - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.39.tgz",
827 - "integrity": "sha512-JDU3YLlnPK3WDao6/DlXLOgSNpG13ct+CwIO17V8q0/9fWJyeMJJ/VyZ1lv8kDprihvZMydzVwf0tQOqGiY2Nw=="
828 - },
829 - "accepts": {
830 - "version": "1.3.8",
831 - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
832 - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
833 - "requires": {
834 - "mime-types": "~2.1.34",
835 - "negotiator": "0.6.3"
836 - }
837 - },
838 - "array-flatten": {
839 - "version": "1.1.1",
840 - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
841 - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
842 - },
843 - "base64id": {
844 - "version": "2.0.0",
845 - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
846 - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
847 - },
848 - "body-parser": {
849 - "version": "1.20.0",
850 - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
851 - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
852 - "requires": {
853 - "bytes": "3.1.2",
854 - "content-type": "~1.0.4",
855 - "debug": "2.6.9",
856 - "depd": "2.0.0",
857 - "destroy": "1.2.0",
858 - "http-errors": "2.0.0",
859 - "iconv-lite": "0.4.24",
860 - "on-finished": "2.4.1",
861 - "qs": "6.10.3",
862 - "raw-body": "2.5.1",
863 - "type-is": "~1.6.18",
864 - "unpipe": "1.0.0"
865 - }
866 - },
867 - "bytes": {
868 - "version": "3.1.2",
869 - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
870 - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
871 - },
872 - "call-bind": {
873 - "version": "1.0.2",
874 - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
875 - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
876 - "requires": {
877 - "function-bind": "^1.1.1",
878 - "get-intrinsic": "^1.0.2"
879 - }
880 - },
881 - "component-emitter": {
882 - "version": "1.3.0",
883 - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
884 - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
885 - },
886 - "content-disposition": {
887 - "version": "0.5.4",
888 - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
889 - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
890 - "requires": {
891 - "safe-buffer": "5.2.1"
892 - }
893 - },
894 - "content-type": {
895 - "version": "1.0.4",
896 - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
897 - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
898 - },
899 - "cookie": {
900 - "version": "0.5.0",
901 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
902 - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
903 - },
904 - "cookie-signature": {
905 - "version": "1.0.6",
906 - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
907 - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
908 - },
909 - "cors": {
910 - "version": "2.8.5",
911 - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
912 - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
913 - "requires": {
914 - "object-assign": "^4",
915 - "vary": "^1"
916 - }
917 - },
918 - "debug": {
919 - "version": "2.6.9",
920 - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
921 - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
922 - "requires": {
923 - "ms": "2.0.0"
924 - }
925 - },
926 - "depd": {
927 - "version": "2.0.0",
928 - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
929 - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
930 - },
931 - "destroy": {
932 - "version": "1.2.0",
933 - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
934 - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
935 - },
936 - "ee-first": {
937 - "version": "1.1.1",
938 - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
939 - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
940 - },
941 - "encodeurl": {
942 - "version": "1.0.2",
943 - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
944 - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
945 - },
946 - "engine.io": {
947 - "version": "6.2.0",
948 - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
949 - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
950 - "requires": {
951 - "@types/cookie": "^0.4.1",
952 - "@types/cors": "^2.8.12",
953 - "@types/node": ">=10.0.0",
954 - "accepts": "~1.3.4",
955 - "base64id": "2.0.0",
956 - "cookie": "~0.4.1",
957 - "cors": "~2.8.5",
958 - "debug": "~4.3.1",
959 - "engine.io-parser": "~5.0.3",
960 - "ws": "~8.2.3"
961 - },
962 - "dependencies": {
963 - "cookie": {
964 - "version": "0.4.2",
965 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
966 - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
967 - },
968 - "debug": {
969 - "version": "4.3.4",
970 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
971 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
972 - "requires": {
973 - "ms": "2.1.2"
974 - }
975 - },
976 - "ms": {
977 - "version": "2.1.2",
978 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
979 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
980 - }
981 - }
982 - },
983 - "engine.io-parser": {
984 - "version": "5.0.4",
985 - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
986 - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg=="
987 - },
988 - "escape-html": {
989 - "version": "1.0.3",
990 - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
991 - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
992 - },
993 - "etag": {
994 - "version": "1.8.1",
995 - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
996 - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
997 - },
998 - "express": {
999 - "version": "4.18.1",
1000 - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
1001 - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
1002 - "requires": {
1003 - "accepts": "~1.3.8",
1004 - "array-flatten": "1.1.1",
1005 - "body-parser": "1.20.0",
1006 - "content-disposition": "0.5.4",
1007 - "content-type": "~1.0.4",
1008 - "cookie": "0.5.0",
1009 - "cookie-signature": "1.0.6",
1010 - "debug": "2.6.9",
1011 - "depd": "2.0.0",
1012 - "encodeurl": "~1.0.2",
1013 - "escape-html": "~1.0.3",
1014 - "etag": "~1.8.1",
1015 - "finalhandler": "1.2.0",
1016 - "fresh": "0.5.2",
1017 - "http-errors": "2.0.0",
1018 - "merge-descriptors": "1.0.1",
1019 - "methods": "~1.1.2",
1020 - "on-finished": "2.4.1",
1021 - "parseurl": "~1.3.3",
1022 - "path-to-regexp": "0.1.7",
1023 - "proxy-addr": "~2.0.7",
1024 - "qs": "6.10.3",
1025 - "range-parser": "~1.2.1",
1026 - "safe-buffer": "5.2.1",
1027 - "send": "0.18.0",
1028 - "serve-static": "1.15.0",
1029 - "setprototypeof": "1.2.0",
1030 - "statuses": "2.0.1",
1031 - "type-is": "~1.6.18",
1032 - "utils-merge": "1.0.1",
1033 - "vary": "~1.1.2"
1034 - }
1035 - },
1036 - "finalhandler": {
1037 - "version": "1.2.0",
1038 - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
1039 - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
1040 - "requires": {
1041 - "debug": "2.6.9",
1042 - "encodeurl": "~1.0.2",
1043 - "escape-html": "~1.0.3",
1044 - "on-finished": "2.4.1",
1045 - "parseurl": "~1.3.3",
1046 - "statuses": "2.0.1",
1047 - "unpipe": "~1.0.0"
1048 - }
1049 - },
1050 - "forwarded": {
1051 - "version": "0.2.0",
1052 - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
1053 - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
1054 - },
1055 - "fresh": {
1056 - "version": "0.5.2",
1057 - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1058 - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
1059 - },
1060 - "function-bind": {
1061 - "version": "1.1.1",
1062 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1063 - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
1064 - },
1065 - "get-intrinsic": {
1066 - "version": "1.1.1",
1067 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
1068 - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
1069 - "requires": {
1070 - "function-bind": "^1.1.1",
1071 - "has": "^1.0.3",
1072 - "has-symbols": "^1.0.1"
1073 - }
1074 - },
1075 - "has": {
1076 - "version": "1.0.3",
1077 - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1078 - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1079 - "requires": {
1080 - "function-bind": "^1.1.1"
1081 - }
1082 - },
1083 - "has-symbols": {
1084 - "version": "1.0.3",
1085 - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1086 - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
1087 - },
1088 - "http-errors": {
1089 - "version": "2.0.0",
1090 - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
1091 - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
1092 - "requires": {
1093 - "depd": "2.0.0",
1094 - "inherits": "2.0.4",
1095 - "setprototypeof": "1.2.0",
1096 - "statuses": "2.0.1",
1097 - "toidentifier": "1.0.1"
1098 - }
1099 - },
1100 - "iconv-lite": {
1101 - "version": "0.4.24",
1102 - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1103 - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1104 - "requires": {
1105 - "safer-buffer": ">= 2.1.2 < 3"
1106 - }
1107 - },
1108 - "inherits": {
1109 - "version": "2.0.4",
1110 - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1111 - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1112 - },
1113 - "ipaddr.js": {
1114 - "version": "1.9.1",
1115 - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1116 - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1117 - },
1118 - "media-typer": {
1119 - "version": "0.3.0",
1120 - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1121 - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
1122 - },
1123 - "merge-descriptors": {
1124 - "version": "1.0.1",
1125 - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1126 - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
1127 - },
1128 - "methods": {
1129 - "version": "1.1.2",
1130 - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1131 - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
1132 - },
1133 - "mime": {
1134 - "version": "1.6.0",
1135 - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1136 - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1137 - },
1138 - "mime-db": {
1139 - "version": "1.52.0",
1140 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1141 - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
1142 - },
1143 - "mime-types": {
1144 - "version": "2.1.35",
1145 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1146 - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1147 - "requires": {
1148 - "mime-db": "1.52.0"
1149 - }
1150 - },
1151 - "moment": {
1152 - "version": "2.29.3",
1153 - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz",
1154 - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw=="
1155 - },
1156 - "ms": {
1157 - "version": "2.0.0",
1158 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1159 - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1160 - },
1161 - "negotiator": {
1162 - "version": "0.6.3",
1163 - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1164 - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
1165 - },
1166 - "object-assign": {
1167 - "version": "4.1.1",
1168 - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1169 - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
1170 - },
1171 - "object-inspect": {
1172 - "version": "1.12.2",
1173 - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
1174 - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
1175 - },
1176 - "on-finished": {
1177 - "version": "2.4.1",
1178 - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1179 - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1180 - "requires": {
1181 - "ee-first": "1.1.1"
1182 - }
1183 - },
1184 - "parseurl": {
1185 - "version": "1.3.3",
1186 - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1187 - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1188 - },
1189 - "path-to-regexp": {
1190 - "version": "0.1.7",
1191 - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1192 - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
1193 - },
1194 - "proxy-addr": {
1195 - "version": "2.0.7",
1196 - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1197 - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1198 - "requires": {
1199 - "forwarded": "0.2.0",
1200 - "ipaddr.js": "1.9.1"
1201 - }
1202 - },
1203 - "qs": {
1204 - "version": "6.10.3",
1205 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
1206 - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
1207 - "requires": {
1208 - "side-channel": "^1.0.4"
1209 - }
1210 - },
1211 - "range-parser": {
1212 - "version": "1.2.1",
1213 - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1214 - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1215 - },
1216 - "raw-body": {
1217 - "version": "2.5.1",
1218 - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
1219 - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
1220 - "requires": {
1221 - "bytes": "3.1.2",
1222 - "http-errors": "2.0.0",
1223 - "iconv-lite": "0.4.24",
1224 - "unpipe": "1.0.0"
1225 - }
1226 - },
1227 - "safe-buffer": {
1228 - "version": "5.2.1",
1229 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1230 - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1231 - },
1232 - "safer-buffer": {
1233 - "version": "2.1.2",
1234 - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1235 - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1236 - },
1237 - "send": {
1238 - "version": "0.18.0",
1239 - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1240 - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1241 - "requires": {
1242 - "debug": "2.6.9",
1243 - "depd": "2.0.0",
1244 - "destroy": "1.2.0",
1245 - "encodeurl": "~1.0.2",
1246 - "escape-html": "~1.0.3",
1247 - "etag": "~1.8.1",
1248 - "fresh": "0.5.2",
1249 - "http-errors": "2.0.0",
1250 - "mime": "1.6.0",
1251 - "ms": "2.1.3",
1252 - "on-finished": "2.4.1",
1253 - "range-parser": "~1.2.1",
1254 - "statuses": "2.0.1"
1255 - },
1256 - "dependencies": {
1257 - "ms": {
1258 - "version": "2.1.3",
1259 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1260 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1261 - }
1262 - }
1263 - },
1264 - "serve-static": {
1265 - "version": "1.15.0",
1266 - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1267 - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1268 - "requires": {
1269 - "encodeurl": "~1.0.2",
1270 - "escape-html": "~1.0.3",
1271 - "parseurl": "~1.3.3",
1272 - "send": "0.18.0"
1273 - }
1274 - },
1275 - "setprototypeof": {
1276 - "version": "1.2.0",
1277 - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1278 - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1279 - },
1280 - "side-channel": {
1281 - "version": "1.0.4",
1282 - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1283 - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1284 - "requires": {
1285 - "call-bind": "^1.0.0",
1286 - "get-intrinsic": "^1.0.2",
1287 - "object-inspect": "^1.9.0"
1288 - }
1289 - },
1290 - "socket.io": {
1291 - "version": "4.5.1",
1292 - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz",
1293 - "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==",
1294 - "requires": {
1295 - "accepts": "~1.3.4",
1296 - "base64id": "~2.0.0",
1297 - "debug": "~4.3.2",
1298 - "engine.io": "~6.2.0",
1299 - "socket.io-adapter": "~2.4.0",
1300 - "socket.io-parser": "~4.0.4"
1301 - },
1302 - "dependencies": {
1303 - "debug": {
1304 - "version": "4.3.4",
1305 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1306 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1307 - "requires": {
1308 - "ms": "2.1.2"
1309 - }
1310 - },
1311 - "ms": {
1312 - "version": "2.1.2",
1313 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1314 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1315 - }
1316 - }
1317 - },
1318 - "socket.io-adapter": {
1319 - "version": "2.4.0",
1320 - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
1321 - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
1322 - },
1323 - "socket.io-parser": {
1324 - "version": "4.0.4",
1325 - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
1326 - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
1327 - "requires": {
1328 - "@types/component-emitter": "^1.2.10",
1329 - "component-emitter": "~1.3.0",
1330 - "debug": "~4.3.1"
1331 - },
1332 - "dependencies": {
1333 - "debug": {
1334 - "version": "4.3.4",
1335 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1336 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1337 - "requires": {
1338 - "ms": "2.1.2"
1339 - }
1340 - },
1341 - "ms": {
1342 - "version": "2.1.2",
1343 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1344 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1345 - }
1346 - }
1347 - },
1348 - "statuses": {
1349 - "version": "2.0.1",
1350 - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1351 - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
1352 - },
1353 - "toidentifier": {
1354 - "version": "1.0.1",
1355 - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1356 - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
1357 - },
1358 - "type-is": {
1359 - "version": "1.6.18",
1360 - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1361 - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1362 - "requires": {
1363 - "media-typer": "0.3.0",
1364 - "mime-types": "~2.1.24"
1365 - }
1366 - },
1367 - "unpipe": {
1368 - "version": "1.0.0",
1369 - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1370 - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1371 - },
1372 - "utils-merge": {
1373 - "version": "1.0.1",
1374 - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1375 - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1376 - },
1377 - "vary": {
1378 - "version": "1.1.2",
1379 - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1380 - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1381 - },
1382 - "ws": {
1383 - "version": "8.2.3",
1384 - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
1385 - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
1386 - "requires": {}
1387 - }
1388 - }
1389 -}
1 -<!DOCTYPE html>
2 -<html lang="en">
3 - <head>
4 - <meta charset="UTF-8" />
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 - <title>맛집지도</title>
8 - <meta name="author" content="양주미" />
9 - <meta name="description" content="맛집지도 서비스" />
10 - <meta
11 - name="keywords"
12 - content="맛집지도, 맛집추천, 실시간채팅"
13 - />
14 - <link rel="stylesheet" href="style.css" />
15 - </head>
16 -
17 - <body>
18 - <nav>
19 - <div class="inner">
20 - <div class="nav-container">
21 - <h1 class="nav-title">맛집지도</h1>
22 - <button class="nav-contact">Contact</button>
23 - </div>
24 - </div>
25 - </nav>
26 -
27 - <main>
28 - <section id="category">
29 - <div class="inner">
30 - <div class="category-container">
31 - <h2 class="category-title">💜맛집지도 카테고리를 선택해보세요💜</h2>
32 - <div class="category-list">
33 - <button class="category-item" id="korea">한식🍚</button
34 - ><button class="category-item" id="china">중식🍜</button
35 - ><button class="category-item" id="japan">일식🍙</button
36 - ><button class="category-item" id="america">양식🍝</button
37 - ><button class="category-item" id="wheat">분식🍭</button
38 - ><button class="category-item" id="meat">구이🍖</button
39 - ><button class="category-item" id="sushi">회/초밥🍣</button
40 - ><button class="category-item" id="etc">기타🍴</button>
41 - </div>
42 - </div>
43 - </div>
44 - </section>
45 - <!-- 카테고리 -->
46 - <div id="map" class="inner"></div>
47 -
48 - <!-- 카카오지도 -->
49 - </main>
50 -
51 - <script
52 - type="text/javascript"
53 - src="//dapi.kakao.com/v2/maps/sdk.js?appkey=2263ae9eb197ad864a94eb1ed7b912c9&libraries=services">
54 -</script>
55 -
56 - <script src="script.js"></script>
57 - </body>
58 -</html>
...\ No newline at end of file ...\ No newline at end of file
1 -# Logs
2 -logs
3 -*.log
4 -npm-debug.log*
5 -yarn-debug.log*
6 -yarn-error.log*
7 -lerna-debug.log*
8 -.pnpm-debug.log*
9 -
10 -# Diagnostic reports (https://nodejs.org/api/report.html)
11 -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 -
13 -# Runtime data
14 -pids
15 -*.pid
16 -*.seed
17 -*.pid.lock
18 -
19 -# Directory for instrumented libs generated by jscoverage/JSCover
20 -lib-cov
21 -
22 -# Coverage directory used by tools like istanbul
23 -coverage
24 -*.lcov
25 -
26 -# nyc test coverage
27 -.nyc_output
28 -
29 -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 -.grunt
31 -
32 -# Bower dependency directory (https://bower.io/)
33 -bower_components
34 -
35 -# node-waf configuration
36 -.lock-wscript
37 -
38 -# Compiled binary addons (https://nodejs.org/api/addons.html)
39 -build/Release
40 -
41 -# Dependency directories
42 -**node_modules/
43 -jspm_packages/
44 -
45 -# Snowpack dependency directory (https://snowpack.dev/)
46 -web_modules/
47 -
48 -# TypeScript cache
49 -*.tsbuildinfo
50 -
51 -# Optional npm cache directory
52 -.npm
53 -
54 -# Optional eslint cache
55 -.eslintcache
56 -
57 -# Microbundle cache
58 -.rpt2_cache/
59 -.rts2_cache_cjs/
60 -.rts2_cache_es/
61 -.rts2_cache_umd/
62 -
63 -# Optional REPL history
64 -.node_repl_history
65 -
66 -# Output of 'npm pack'
67 -*.tgz
68 -
69 -# Yarn Integrity file
70 -.yarn-integrity
71 -
72 -# dotenv environment variables file
73 -.env
74 -.env.test
75 -.env.production
76 -
77 -# parcel-bundler cache (https://parceljs.org/)
78 -.cache
79 -.parcel-cache
80 -
81 -# Next.js build output
82 -.next
83 -out
84 -
85 -# Nuxt.js build / generate output
86 -.nuxt
87 -dist
88 -
89 -# Gatsby files
90 -.cache/
91 -# Comment in the public line in if your project uses Gatsby and not Next.js
92 -# https://nextjs.org/blog/next-9-1#public-directory-support
93 -# public
94 -
95 -# vuepress build output
96 -.vuepress/dist
97 -
98 -# Serverless directories
99 -.serverless/
100 -
101 -# FuseBox cache
102 -.fusebox/
103 -
104 -# DynamoDB Local files
105 -.dynamodb/
106 -
107 -# TernJS port file
108 -.tern-port
109 -
110 -# Stores VSCode versions used for testing VSCode extensions
111 -.vscode-test
112 -
113 -# yarn v2
114 -.yarn/cache
115 -.yarn/unplugged
116 -.yarn/build-state.yml
117 -.yarn/install-state.gz
118 -.pnp.*
...\ No newline at end of file ...\ No newline at end of file
1 -"use strict";
2 -//모듈
3 -const express = require("express");
4 -const bodyParser = require("body-parser");
5 -//환경변수 (운영체제간 gap 없애고자)
6 -const dotenv = require("dotenv");
7 -dotenv.config();
8 -const app = express();
9 -//라우팅
10 -const home = require("./src/routes/home");
11 -// 앱 세팅
12 -app.set("views", "./src/views");
13 -app.set("view engine", "ejs");
14 -app.use(express.static(`${__dirname}/src/public`));
15 -app.use(bodyParser.json());
16 -//url통해 전달되는 데이터에 한글, 공백 등의 문자 오류 해결
17 -app.use(bodyParser.urlencoded({extended: true}));
18 -
19 -app.use("/", home); //미들웨어 등록해주는 method
20 -
21 -module.exports = app;
...\ No newline at end of file ...\ No newline at end of file
1 -"use strict";
2 -
3 -const app = require("../app");
4 -const PORT = process.env.PORT || 3000;
5 -
6 -app.listen(PORT, () => {
7 - console.log("서버 가동");
8 -});
...\ No newline at end of file ...\ No newline at end of file
1 -{
2 - "name": "login",
3 - "version": "1.0.0",
4 - "lockfileVersion": 1,
5 - "requires": true,
6 - "dependencies": {
7 - "accepts": {
8 - "version": "1.3.8",
9 - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
10 - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
11 - "requires": {
12 - "mime-types": "~2.1.34",
13 - "negotiator": "0.6.3"
14 - }
15 - },
16 - "ansi-styles": {
17 - "version": "4.3.0",
18 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
19 - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
20 - "requires": {
21 - "color-convert": "^2.0.1"
22 - }
23 - },
24 - "array-flatten": {
25 - "version": "1.1.1",
26 - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
27 - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
28 - },
29 - "async": {
30 - "version": "3.2.3",
31 - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
32 - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
33 - },
34 - "balanced-match": {
35 - "version": "1.0.2",
36 - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
37 - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
38 - },
39 - "bignumber.js": {
40 - "version": "9.0.0",
41 - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
42 - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
43 - },
44 - "body-parser": {
45 - "version": "1.20.0",
46 - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
47 - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
48 - "requires": {
49 - "bytes": "3.1.2",
50 - "content-type": "~1.0.4",
51 - "debug": "2.6.9",
52 - "depd": "2.0.0",
53 - "destroy": "1.2.0",
54 - "http-errors": "2.0.0",
55 - "iconv-lite": "0.4.24",
56 - "on-finished": "2.4.1",
57 - "qs": "6.10.3",
58 - "raw-body": "2.5.1",
59 - "type-is": "~1.6.18",
60 - "unpipe": "1.0.0"
61 - }
62 - },
63 - "brace-expansion": {
64 - "version": "2.0.1",
65 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
66 - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
67 - "requires": {
68 - "balanced-match": "^1.0.0"
69 - }
70 - },
71 - "bytes": {
72 - "version": "3.1.2",
73 - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
74 - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
75 - },
76 - "call-bind": {
77 - "version": "1.0.2",
78 - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
79 - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
80 - "requires": {
81 - "function-bind": "^1.1.1",
82 - "get-intrinsic": "^1.0.2"
83 - }
84 - },
85 - "chalk": {
86 - "version": "4.1.2",
87 - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
88 - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
89 - "requires": {
90 - "ansi-styles": "^4.1.0",
91 - "supports-color": "^7.1.0"
92 - }
93 - },
94 - "color-convert": {
95 - "version": "2.0.1",
96 - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
97 - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
98 - "requires": {
99 - "color-name": "~1.1.4"
100 - }
101 - },
102 - "color-name": {
103 - "version": "1.1.4",
104 - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
105 - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
106 - },
107 - "concat-map": {
108 - "version": "0.0.1",
109 - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
110 - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
111 - },
112 - "content-disposition": {
113 - "version": "0.5.4",
114 - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
115 - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
116 - "requires": {
117 - "safe-buffer": "5.2.1"
118 - }
119 - },
120 - "content-type": {
121 - "version": "1.0.4",
122 - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
123 - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
124 - },
125 - "cookie": {
126 - "version": "0.5.0",
127 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
128 - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
129 - },
130 - "cookie-signature": {
131 - "version": "1.0.6",
132 - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
133 - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
134 - },
135 - "core-util-is": {
136 - "version": "1.0.3",
137 - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
138 - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
139 - },
140 - "debug": {
141 - "version": "2.6.9",
142 - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
143 - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
144 - "requires": {
145 - "ms": "2.0.0"
146 - }
147 - },
148 - "depd": {
149 - "version": "2.0.0",
150 - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
151 - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
152 - },
153 - "destroy": {
154 - "version": "1.2.0",
155 - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
156 - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
157 - },
158 - "dotenv": {
159 - "version": "16.0.1",
160 - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz",
161 - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ=="
162 - },
163 - "ee-first": {
164 - "version": "1.1.1",
165 - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
166 - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
167 - },
168 - "ejs": {
169 - "version": "3.1.8",
170 - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz",
171 - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==",
172 - "requires": {
173 - "jake": "^10.8.5"
174 - }
175 - },
176 - "encodeurl": {
177 - "version": "1.0.2",
178 - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
179 - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
180 - },
181 - "escape-html": {
182 - "version": "1.0.3",
183 - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
184 - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
185 - },
186 - "etag": {
187 - "version": "1.8.1",
188 - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
189 - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
190 - },
191 - "express": {
192 - "version": "4.18.1",
193 - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
194 - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
195 - "requires": {
196 - "accepts": "~1.3.8",
197 - "array-flatten": "1.1.1",
198 - "body-parser": "1.20.0",
199 - "content-disposition": "0.5.4",
200 - "content-type": "~1.0.4",
201 - "cookie": "0.5.0",
202 - "cookie-signature": "1.0.6",
203 - "debug": "2.6.9",
204 - "depd": "2.0.0",
205 - "encodeurl": "~1.0.2",
206 - "escape-html": "~1.0.3",
207 - "etag": "~1.8.1",
208 - "finalhandler": "1.2.0",
209 - "fresh": "0.5.2",
210 - "http-errors": "2.0.0",
211 - "merge-descriptors": "1.0.1",
212 - "methods": "~1.1.2",
213 - "on-finished": "2.4.1",
214 - "parseurl": "~1.3.3",
215 - "path-to-regexp": "0.1.7",
216 - "proxy-addr": "~2.0.7",
217 - "qs": "6.10.3",
218 - "range-parser": "~1.2.1",
219 - "safe-buffer": "5.2.1",
220 - "send": "0.18.0",
221 - "serve-static": "1.15.0",
222 - "setprototypeof": "1.2.0",
223 - "statuses": "2.0.1",
224 - "type-is": "~1.6.18",
225 - "utils-merge": "1.0.1",
226 - "vary": "~1.1.2"
227 - }
228 - },
229 - "filelist": {
230 - "version": "1.0.4",
231 - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
232 - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
233 - "requires": {
234 - "minimatch": "^5.0.1"
235 - },
236 - "dependencies": {
237 - "minimatch": {
238 - "version": "5.1.0",
239 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
240 - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
241 - "requires": {
242 - "brace-expansion": "^2.0.1"
243 - }
244 - }
245 - }
246 - },
247 - "finalhandler": {
248 - "version": "1.2.0",
249 - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
250 - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
251 - "requires": {
252 - "debug": "2.6.9",
253 - "encodeurl": "~1.0.2",
254 - "escape-html": "~1.0.3",
255 - "on-finished": "2.4.1",
256 - "parseurl": "~1.3.3",
257 - "statuses": "2.0.1",
258 - "unpipe": "~1.0.0"
259 - }
260 - },
261 - "forwarded": {
262 - "version": "0.2.0",
263 - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
264 - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
265 - },
266 - "fresh": {
267 - "version": "0.5.2",
268 - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
269 - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
270 - },
271 - "function-bind": {
272 - "version": "1.1.1",
273 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
274 - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
275 - },
276 - "get-intrinsic": {
277 - "version": "1.1.1",
278 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
279 - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
280 - "requires": {
281 - "function-bind": "^1.1.1",
282 - "has": "^1.0.3",
283 - "has-symbols": "^1.0.1"
284 - }
285 - },
286 - "has": {
287 - "version": "1.0.3",
288 - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
289 - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
290 - "requires": {
291 - "function-bind": "^1.1.1"
292 - }
293 - },
294 - "has-flag": {
295 - "version": "4.0.0",
296 - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
297 - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
298 - },
299 - "has-symbols": {
300 - "version": "1.0.3",
301 - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
302 - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
303 - },
304 - "http-errors": {
305 - "version": "2.0.0",
306 - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
307 - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
308 - "requires": {
309 - "depd": "2.0.0",
310 - "inherits": "2.0.4",
311 - "setprototypeof": "1.2.0",
312 - "statuses": "2.0.1",
313 - "toidentifier": "1.0.1"
314 - }
315 - },
316 - "iconv-lite": {
317 - "version": "0.4.24",
318 - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
319 - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
320 - "requires": {
321 - "safer-buffer": ">= 2.1.2 < 3"
322 - }
323 - },
324 - "inherits": {
325 - "version": "2.0.4",
326 - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
327 - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
328 - },
329 - "ipaddr.js": {
330 - "version": "1.9.1",
331 - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
332 - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
333 - },
334 - "isarray": {
335 - "version": "1.0.0",
336 - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
337 - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
338 - },
339 - "jake": {
340 - "version": "10.8.5",
341 - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz",
342 - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==",
343 - "requires": {
344 - "async": "^3.2.3",
345 - "chalk": "^4.0.2",
346 - "filelist": "^1.0.1",
347 - "minimatch": "^3.0.4"
348 - }
349 - },
350 - "media-typer": {
351 - "version": "0.3.0",
352 - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
353 - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
354 - },
355 - "merge-descriptors": {
356 - "version": "1.0.1",
357 - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
358 - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
359 - },
360 - "methods": {
361 - "version": "1.1.2",
362 - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
363 - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
364 - },
365 - "mime": {
366 - "version": "1.6.0",
367 - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
368 - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
369 - },
370 - "mime-db": {
371 - "version": "1.52.0",
372 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
373 - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
374 - },
375 - "mime-types": {
376 - "version": "2.1.35",
377 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
378 - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
379 - "requires": {
380 - "mime-db": "1.52.0"
381 - }
382 - },
383 - "minimatch": {
384 - "version": "3.1.2",
385 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
386 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
387 - "requires": {
388 - "brace-expansion": "^1.1.7"
389 - },
390 - "dependencies": {
391 - "brace-expansion": {
392 - "version": "1.1.11",
393 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
394 - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
395 - "requires": {
396 - "balanced-match": "^1.0.0",
397 - "concat-map": "0.0.1"
398 - }
399 - }
400 - }
401 - },
402 - "ms": {
403 - "version": "2.0.0",
404 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
405 - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
406 - },
407 - "mysql": {
408 - "version": "2.18.1",
409 - "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
410 - "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
411 - "requires": {
412 - "bignumber.js": "9.0.0",
413 - "readable-stream": "2.3.7",
414 - "safe-buffer": "5.1.2",
415 - "sqlstring": "2.3.1"
416 - },
417 - "dependencies": {
418 - "safe-buffer": {
419 - "version": "5.1.2",
420 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
421 - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
422 - }
423 - }
424 - },
425 - "negotiator": {
426 - "version": "0.6.3",
427 - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
428 - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
429 - },
430 - "object-inspect": {
431 - "version": "1.12.2",
432 - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
433 - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
434 - },
435 - "on-finished": {
436 - "version": "2.4.1",
437 - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
438 - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
439 - "requires": {
440 - "ee-first": "1.1.1"
441 - }
442 - },
443 - "parseurl": {
444 - "version": "1.3.3",
445 - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
446 - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
447 - },
448 - "path-to-regexp": {
449 - "version": "0.1.7",
450 - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
451 - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
452 - },
453 - "process-nextick-args": {
454 - "version": "2.0.1",
455 - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
456 - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
457 - },
458 - "proxy-addr": {
459 - "version": "2.0.7",
460 - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
461 - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
462 - "requires": {
463 - "forwarded": "0.2.0",
464 - "ipaddr.js": "1.9.1"
465 - }
466 - },
467 - "qs": {
468 - "version": "6.10.3",
469 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
470 - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
471 - "requires": {
472 - "side-channel": "^1.0.4"
473 - }
474 - },
475 - "range-parser": {
476 - "version": "1.2.1",
477 - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
478 - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
479 - },
480 - "raw-body": {
481 - "version": "2.5.1",
482 - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
483 - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
484 - "requires": {
485 - "bytes": "3.1.2",
486 - "http-errors": "2.0.0",
487 - "iconv-lite": "0.4.24",
488 - "unpipe": "1.0.0"
489 - }
490 - },
491 - "readable-stream": {
492 - "version": "2.3.7",
493 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
494 - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
495 - "requires": {
496 - "core-util-is": "~1.0.0",
497 - "inherits": "~2.0.3",
498 - "isarray": "~1.0.0",
499 - "process-nextick-args": "~2.0.0",
500 - "safe-buffer": "~5.1.1",
501 - "string_decoder": "~1.1.1",
502 - "util-deprecate": "~1.0.1"
503 - },
504 - "dependencies": {
505 - "safe-buffer": {
506 - "version": "5.1.2",
507 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
508 - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
509 - }
510 - }
511 - },
512 - "safe-buffer": {
513 - "version": "5.2.1",
514 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
515 - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
516 - },
517 - "safer-buffer": {
518 - "version": "2.1.2",
519 - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
520 - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
521 - },
522 - "send": {
523 - "version": "0.18.0",
524 - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
525 - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
526 - "requires": {
527 - "debug": "2.6.9",
528 - "depd": "2.0.0",
529 - "destroy": "1.2.0",
530 - "encodeurl": "~1.0.2",
531 - "escape-html": "~1.0.3",
532 - "etag": "~1.8.1",
533 - "fresh": "0.5.2",
534 - "http-errors": "2.0.0",
535 - "mime": "1.6.0",
536 - "ms": "2.1.3",
537 - "on-finished": "2.4.1",
538 - "range-parser": "~1.2.1",
539 - "statuses": "2.0.1"
540 - },
541 - "dependencies": {
542 - "ms": {
543 - "version": "2.1.3",
544 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
545 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
546 - }
547 - }
548 - },
549 - "serve-static": {
550 - "version": "1.15.0",
551 - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
552 - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
553 - "requires": {
554 - "encodeurl": "~1.0.2",
555 - "escape-html": "~1.0.3",
556 - "parseurl": "~1.3.3",
557 - "send": "0.18.0"
558 - }
559 - },
560 - "setprototypeof": {
561 - "version": "1.2.0",
562 - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
563 - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
564 - },
565 - "side-channel": {
566 - "version": "1.0.4",
567 - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
568 - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
569 - "requires": {
570 - "call-bind": "^1.0.0",
571 - "get-intrinsic": "^1.0.2",
572 - "object-inspect": "^1.9.0"
573 - }
574 - },
575 - "sqlstring": {
576 - "version": "2.3.1",
577 - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
578 - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
579 - },
580 - "statuses": {
581 - "version": "2.0.1",
582 - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
583 - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
584 - },
585 - "string_decoder": {
586 - "version": "1.1.1",
587 - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
588 - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
589 - "requires": {
590 - "safe-buffer": "~5.1.0"
591 - },
592 - "dependencies": {
593 - "safe-buffer": {
594 - "version": "5.1.2",
595 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
596 - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
597 - }
598 - }
599 - },
600 - "supports-color": {
601 - "version": "7.2.0",
602 - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
603 - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
604 - "requires": {
605 - "has-flag": "^4.0.0"
606 - }
607 - },
608 - "toidentifier": {
609 - "version": "1.0.1",
610 - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
611 - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
612 - },
613 - "type-is": {
614 - "version": "1.6.18",
615 - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
616 - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
617 - "requires": {
618 - "media-typer": "0.3.0",
619 - "mime-types": "~2.1.24"
620 - }
621 - },
622 - "unpipe": {
623 - "version": "1.0.0",
624 - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
625 - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
626 - },
627 - "util-deprecate": {
628 - "version": "1.0.2",
629 - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
630 - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
631 - },
632 - "utils-merge": {
633 - "version": "1.0.1",
634 - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
635 - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
636 - },
637 - "vary": {
638 - "version": "1.1.2",
639 - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
640 - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
641 - }
642 - }
643 -}
1 -{
2 - "name": "login",
3 - "version": "1.0.0",
4 - "main": "app.js",
5 - "bin": {
6 - "login": "www.js"
7 - },
8 - "dependencies": {
9 - "body-parser": "^1.20.0",
10 - "dotenv": "^16.0.1",
11 - "ejs": "^3.1.8",
12 - "express": "^4.18.1",
13 - "mysql": "^2.18.1"
14 - },
15 - "devDependencies": {},
16 - "scripts": {
17 - "start": "nodemon ./bin/www.js",
18 - "test": "echo \"Error: no test specified\" && exit 1"
19 - },
20 - "author": "",
21 - "license": "ISC",
22 - "keywords": [],
23 - "description": ""
24 -}
1 -const mysql = require("mysql");
2 -
3 -const db = mysql.createConnection({
4 - host: process.env.DB_HOST,
5 - user: process.env.DB_USER,
6 - password: process.env.DB_PASSWORD,
7 - database: process.env.DB_DATABASE,
8 -});
9 -
10 -db.connect();
11 -
12 -module.exports = db;
...\ No newline at end of file ...\ No newline at end of file
1 -'use strict';
2 -//for DB manipulate
3 -const UserStorage = require("./UserStorage");
4 -
5 -class User {
6 - constructor(body) {
7 - this.body = body;
8 - }
9 -
10 - async login() {
11 - const client = this.body;
12 - try {
13 -
14 - const {id, password} = await UserStorage.getUserInfo(client.id);
15 - // console.log(id, password);
16 -
17 - if (id) {
18 - if (id === client.id && password === client.password) {
19 - return { success: true};
20 - }
21 - return { success : false, msg: "비밀번호가 틀렸습니다."};
22 - }
23 - return {success: false, msg: "존재하지 않는 아이디입니다."};
24 - } catch (err) {
25 - return {success: false, msg: err};
26 - }
27 - }
28 -
29 - async register() {
30 - const client = this.body;
31 - try {
32 - const response = await UserStorage.save(client);
33 - // console.log(response);
34 - return response;
35 - } catch (err) {
36 -
37 - return {success: false, msg : err};
38 - }
39 - }
40 -}
41 -
42 -module.exports = User;
...\ No newline at end of file ...\ No newline at end of file
1 -'use strict';
2 -//for DB CRUD
3 -const db = require("../config/db");
4 -
5 -
6 -class UserStorage {
7 - // static getUsers(isAll, ...fields) {
8 - // }
9 -
10 - static getUserInfo(id) {
11 - return new Promise((resolve, reject) => {
12 - const query = "SELECT * FROM users WHERE id = ?;";
13 - db.query(query, [id], (err, data) => {
14 - if (err) reject(`${err}`);
15 - // console.log(data[0]);
16 - resolve(data[0]);
17 - });
18 - });
19 - }
20 -
21 - static async save(userInfo) {
22 - return new Promise((resolve, reject) => {
23 - const query = "INSERT INTO users(id, name, password) VALUES(?, ?, ?);";
24 - db.query(
25 - query,
26 - [userInfo.id, userInfo.name, userInfo.password],
27 - (err, data) => {
28 - if (err) reject(`${err}`);
29 - // console.log(data[0]);
30 - resolve({ success: true});
31 - }
32 - );
33 - });
34 - }
35 -}
36 -
37 -module.exports = UserStorage;
...\ No newline at end of file ...\ No newline at end of file
1 -@import url(https://fonts.googleapis.com/css?family=Roboto:300);
2 -
3 -.login-page {
4 - width: 360px;
5 - padding: 12% 0 0;
6 - margin: auto;
7 -}
8 -.form {
9 - position: relative;
10 - z-index: 1;
11 - background: #FFFFFF;
12 - max-width: 360px;
13 - margin: 0 auto 100px;
14 - padding: 45px;
15 - text-align: center;
16 - box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
17 -}
18 -.form input {
19 - font-family: "Roboto", sans-serif;
20 - outline: 0;
21 - background: #f2f2f2;
22 - width: 100%;
23 - border: 0;
24 - margin: 0 0 15px;
25 - padding: 15px;
26 - box-sizing: border-box;
27 - font-size: 14px;
28 -}
29 -.form #button {
30 - font-family: "Roboto", sans-serif;
31 - text-transform: uppercase;
32 - outline: 0;
33 - background: rebeccapurple;
34 - width: 89%;
35 - border: 0;
36 - margin: 0 auto;
37 - padding: 15px;
38 - color: #FFFFFF;
39 - font-size: 14px;
40 - -webkit-transition: all 0.3 ease;
41 - transition: all 0.3 ease;
42 - cursor: pointer;
43 -}
44 -.form #button:hover,.form #button:active,.form #button:focus {
45 - background: rebeccapurple;
46 -}
47 -.form .message {
48 - margin: 15px 0 0;
49 - color: #b3b3b3;
50 - font-size: 12px;
51 -}
52 -.form .message a {
53 - color: rebeccapurple;
54 - text-decoration: none;
55 -}
56 -.form .register-form {
57 - display: none;
58 -}
59 -.container {
60 - position: relative;
61 - z-index: 1;
62 - max-width: 300px;
63 - margin: 0 auto;
64 -}
65 -.container:before, .container:after {
66 - content: "";
67 - display: block;
68 - clear: both;
69 -}
70 -.container .info {
71 - margin: 50px auto;
72 - text-align: center;
73 -}
74 -.container .info h1 {
75 - margin: 0 0 15px;
76 - padding: 0;
77 - font-size: 36px;
78 - font-weight: 300;
79 - color: #1a1a1a;
80 -}
81 -.container .info span {
82 - color: #4d4d4d;
83 - font-size: 12px;
84 -}
85 -.container .info span a {
86 - color: #000000;
87 - text-decoration: none;
88 -}
89 -.container .info span .fa {
90 - color: #EF3B3A;
91 -}
92 -
93 -/* #id::placeholder #password::placeholder {
94 - color: black;
95 - font-style: italic;
96 - font-weight: bold;
97 -} */
98 -
99 -body {
100 - background: rebeccapurple; /* fallback for old browsers */
101 - /* background: rebeccapurple; */
102 - background: linear-gradient(90deg, rebeccapurple 0%, rebeccapurple 0%);
103 - font-family: "Roboto", sans-serif;
104 - -webkit-font-smoothing: antialiased;
105 - -moz-osx-font-smoothing: grayscale;
106 -}
107 -
108 -/* Copyright (c) 2022 by Aigars Silkalns (https://codepen.io/colorlib/pen/rxddKy) */
...\ No newline at end of file ...\ No newline at end of file
1 -@import url(https://fonts.googleapis.com/css?family=Roboto:300);
2 -
3 -.login-page {
4 - width: 360px;
5 - padding: 8% 0 0;
6 - margin: auto;
7 -}
8 -.form {
9 - position: relative;
10 - z-index: 1;
11 - background: #FFFFFF;
12 - max-width: 360px;
13 - margin: 0 auto 100px;
14 - padding: 45px;
15 - text-align: center;
16 - box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
17 -}
18 -.form input {
19 - font-family: "Roboto", sans-serif;
20 - outline: 0;
21 - background: #f2f2f2;
22 - width: 100%;
23 - border: 0;
24 - margin: 0 0 15px;
25 - padding: 15px;
26 - box-sizing: border-box;
27 - font-size: 14px;
28 -}
29 -.form #button {
30 - font-family: "Roboto", sans-serif;
31 - text-transform: uppercase;
32 - outline: 0;
33 - background: rebeccapurple;
34 - width: 89%;
35 - border: 0;
36 - margin: 0 auto;
37 - padding: 15px;
38 - color: #FFFFFF;
39 - font-size: 14px;
40 - -webkit-transition: all 0.3 ease;
41 - transition: all 0.3 ease;
42 - cursor: pointer;
43 -}
44 -.form #button:hover,.form #button:active,.form #button:focus {
45 - background: rebeccapurple;
46 -}
47 -.form .message {
48 - margin: 15px 0 0;
49 - color: #b3b3b3;
50 - font-size: 12px;
51 -}
52 -.form .message a {
53 - color: rebeccapurple;
54 - text-decoration: none;
55 -}
56 -.form .register-form {
57 - display: none;
58 -}
59 -.container {
60 - position: relative;
61 - z-index: 1;
62 - max-width: 300px;
63 - margin: 0 auto;
64 -}
65 -.container:before, .container:after {
66 - content: "";
67 - display: block;
68 - clear: both;
69 -}
70 -.container .info {
71 - margin: 50px auto;
72 - text-align: center;
73 -}
74 -.container .info h1 {
75 - margin: 0 0 15px;
76 - padding: 0;
77 - font-size: 36px;
78 - font-weight: 300;
79 - color: #1a1a1a;
80 -}
81 -.container .info span {
82 - color: #4d4d4d;
83 - font-size: 12px;
84 -}
85 -.container .info span a {
86 - color: #000000;
87 - text-decoration: none;
88 -}
89 -.container .info span .fa {
90 - color: #EF3B3A;
91 -}
92 -
93 -/* #id::placeholder #password::placeholder {
94 - color: black;
95 - font-style: italic;
96 - font-weight: bold;
97 -} */
98 -
99 -body {
100 - background: rebeccapurple; /* fallback for old browsers */
101 - /* background: rebeccapurple; */
102 - background: linear-gradient(90deg, rebeccapurple 0%, rebeccapurple 0%);
103 - font-family: "Roboto", sans-serif;
104 - -webkit-font-smoothing: antialiased;
105 - -moz-osx-font-smoothing: grayscale;
106 -}
107 -
108 -/* Copyright (c) 2022 by Aigars Silkalns (https://codepen.io/colorlib/pen/rxddKy) */
...\ No newline at end of file ...\ No newline at end of file
1 -'use strict';
2 -
3 -const id = document.querySelector("#id"),
4 - password = document.querySelector("#password"),
5 - loginBtn = document.querySelector("#button");
6 -
7 -loginBtn.addEventListener("click", login);
8 -
9 -function login() {
10 - const req = {
11 - id : id.value,
12 - password : password.value,
13 - };
14 -
15 - fetch("/login", {
16 - method: "POST",
17 - headers: {
18 - "Content-Type": "application/json"
19 - },
20 - body: JSON.stringify(req),
21 - })
22 - .then((res) => res.json())
23 - .then((res) => {
24 - if (res.success) {
25 - //성공하면 이동
26 - location.href = "/";
27 - } else {
28 - alert(res.msg);
29 - }
30 - })
31 - .catch((err) => {
32 - console.error("로그인 중 에러 발생");
33 - });
34 -}
...\ No newline at end of file ...\ No newline at end of file
1 -'use strict';
2 -
3 -const id = document.querySelector("#id"),
4 - name = document.querySelector("#name"),
5 - password = document.querySelector("#password"),
6 - confirmPassword = document.querySelector("#confirm-password"),
7 - registerBtn = document.querySelector("#button");
8 -
9 -registerBtn.addEventListener("click", register);
10 -
11 -function register() {
12 - if(!id.value) {
13 - return alert("아이디를 입력해주세요.")
14 - }
15 -
16 - if(!name.value) {
17 - return alert("이름을 입력해주세요.")
18 - }
19 - if(!password.value) {
20 - return alert("비밀번호를 입력해주세요.")
21 - }
22 - if(!confirmPassword.value) {
23 - return alert("비밀번호를 확인해주세요.")
24 - }
25 - if (password.value !== confirmPassword.value) {
26 - return alert("비밀번호가 일치하지 않습니다.")
27 - }
28 -
29 - const req = {
30 - id : id.value,
31 - name : name.value,
32 - password : password.value,
33 - };
34 -
35 - fetch("/register", {
36 - method: "POST",
37 - headers: {
38 - "Content-Type": "application/json"
39 - },
40 - body: JSON.stringify(req),
41 - })
42 - .then((res) => res.json())
43 - .then((res) => {
44 - if (res.success) {
45 - //성공하면 이동
46 - location.href = "/login";
47 - } else {
48 - alert(res.msg);
49 - }
50 - })
51 - .catch((err) => {
52 - console.error("회원가입 중 에러 발생");
53 - });
54 -}
...\ No newline at end of file ...\ No newline at end of file
1 -"use strict";
2 -
3 -const User = require("../../models/User");
4 -
5 -const output = {
6 - hello: (req, res) => {
7 - res.render("home/index");
8 - },
9 -
10 - login: (req, res) => {
11 - res.render("home/login");
12 - },
13 -
14 - register: (req, res) => {
15 - res.render("home/register");
16 - }
17 -};
18 -
19 -const process = {
20 - login: async (req, res) => {
21 - const user = new User(req.body);
22 - const response = await user.login();
23 - return res.json(response);
24 - },
25 -
26 - register: async (req, res) => {
27 - const user = new User(req.body);
28 - const response = await user.register();
29 - return res.json(response);
30 - },
31 - // const id = req.body.id,
32 - // password = req.body.password;
33 - // const users = UserStorage.getUsers("id", "password");
34 - // // console.log(UserStorage.getUsers("id", "password","name"));
35 - // const response = {};
36 -
37 - // if (users.id.includes(id)) {
38 - // const idx = users.id.indexOf(id);
39 - // if (users.password[idx] === password) {
40 - // response.success = true;
41 - // return res.json(response);
42 - // }
43 - // }
44 -
45 - // response.success = false;
46 - // response.msg = "로그인에 실패하였습니다."
47 - // return res.json(response);
48 -};
49 -
50 -module.exports = {
51 - output,
52 - process,
53 -};
...\ No newline at end of file ...\ No newline at end of file
1 -"use strict";
2 -
3 -const express = require("express");
4 -const router = express.Router();
5 -
6 -const ctrl = require("./home.ctrl");
7 -
8 -router.get("/", ctrl.output.hello);
9 -router.get("/login", ctrl.output.login);
10 -router.get("/register", ctrl.output.register);
11 -
12 -router.post("/login", ctrl.process.login);
13 -router.post("/register", ctrl.process.register);
14 -
15 -module.exports = router;
...\ No newline at end of file ...\ No newline at end of file
1 -<!DOCTYPE html>
2 -<html lang="ko">
3 - <head>
4 - <meta charset="UTF-8" />
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 - <title>Document</title>
8 - </head>
9 - <body>
10 - 여기는 루트입니다.
11 - </body>
12 -</html>
1 -<!DOCTYPE html>
2 -<html lang="ko">
3 - <head>
4 - <meta charset="UTF-8" />
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 - <link rel="stylesheet" href="/css/home/login.css" />
8 - <script src="/js/home/login.js" defer></script>
9 - <title>Document</title>
10 - </head>
11 - <body>
12 - <div class="login-page">
13 - <div class="form">
14 - <!-- <form class="register-form">
15 - <input type="text" placeholder="name" />
16 - <input type="password" placeholder="password" />
17 - <input type="text" placeholder="email address" />
18 - <button>create</button>
19 - <p class="message">Already registered? <a href="#">Sign In</a></p>
20 - </form> -->
21 - <form class="login-form">
22 - <input id="id" type="text" placeholder="아이디" />
23 - <input id="password" type="password" placeholder="비밀번호" />
24 - <p id="button">LOGIN</p>
25 - <p class="message">
26 - 계정이 없으신가요? <a href="/register">회원가입</a>
27 - </p>
28 - </form>
29 - </div>
30 - </div>
31 - </body>
32 -</html>
33 -
34 -<!-- Copyright (c) 2022 by Aigars Silkalns (https://codepen.io/colorlib/pen/rxddKy) -->
1 -<!DOCTYPE html>
2 -<html lang="ko">
3 - <head>
4 - <meta charset="UTF-8" />
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 - <link rel="stylesheet" href="/css/home/register.css" />
8 - <script src="/js/home/register.js" defer></script>
9 - <title>Document</title>
10 - </head>
11 - <body>
12 - <div class="login-page">
13 - <div class="form">
14 - <!-- <form class="register-form">
15 - <input type="text" placeholder="name" />
16 - <input type="password" placeholder="password" />
17 - <input type="text" placeholder="email address" />
18 - <button>create</button>
19 - <p class="message">Already registered? <a href="#">Sign In</a></p>
20 - </form> -->
21 - <form class="login-form">
22 - <input id="id" type="text" placeholder="아이디" />
23 - <input id="name" type="text" placeholder="이름" />
24 - <input id="password" type="password" placeholder="비밀번호" />
25 - <input
26 - id="confirm-password"
27 - type="password"
28 - placeholder="비밀번호 확인"
29 - />
30 - <p id="button">SIGN UP</p>
31 - <p class="message">계정이 있으신가요? <a href="/login">로그인</a></p>
32 - </form>
33 - </div>
34 - </div>
35 - </body>
36 -</html>
37 -
38 -<!-- Copyright (c) 2022 by Aigars Silkalns (https://codepen.io/colorlib/pen/rxddKy) -->
1 -{
2 - "lockfileVersion": 1
3 -}
1 -# Logs
2 -logs
3 -*.log
4 -npm-debug.log*
5 -yarn-debug.log*
6 -yarn-error.log*
7 -lerna-debug.log*
8 -.pnpm-debug.log*
9 -app/log/*
10 -# Diagnostic reports (https://nodejs.org/api/report.html)
11 -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 -
13 -# Runtime data
14 -pids
15 -*.pid
16 -*.seed
17 -*.pid.lock
18 -
19 -# Directory for instrumented libs generated by jscoverage/JSCover
20 -lib-cov
21 -
22 -# Coverage directory used by tools like istanbul
23 -coverage
24 -*.lcov
25 -
26 -# nyc test coverage
27 -.nyc_output
28 -
29 -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 -.grunt
31 -
32 -# Bower dependency directory (https://bower.io/)
33 -bower_components
34 -
35 -# node-waf configuration
36 -.lock-wscript
37 -
38 -# Compiled binary addons (https://nodejs.org/api/addons.html)
39 -build/Release
40 -
41 -# Dependency directories
42 -**node_modules/
43 -jspm_packages/
44 -
45 -# Snowpack dependency directory (https://snowpack.dev/)
46 -web_modules/
47 -
48 -# TypeScript cache
49 -*.tsbuildinfo
50 -
51 -# Optional npm cache directory
52 -.npm
53 -
54 -# Optional eslint cache
55 -.eslintcache
56 -
57 -# Microbundle cache
58 -.rpt2_cache/
59 -.rts2_cache_cjs/
60 -.rts2_cache_es/
61 -.rts2_cache_umd/
62 -
63 -# Optional REPL history
64 -.node_repl_history
65 -
66 -# Output of 'npm pack'
67 -*.tgz
68 -
69 -# Yarn Integrity file
70 -.yarn-integrity
71 -
72 -# dotenv environment variables file
73 -.env
74 -.env.test
75 -.env.production
76 -
77 -# parcel-bundler cache (https://parceljs.org/)
78 -.cache
79 -.parcel-cache
80 -
81 -# Next.js build output
82 -.next
83 -out
84 -
85 -# Nuxt.js build / generate output
86 -.nuxt
87 -dist
88 -
89 -# Gatsby files
90 -.cache/
91 -# Comment in the public line in if your project uses Gatsby and not Next.js
92 -# https://nextjs.org/blog/next-9-1#public-directory-support
93 -# public
94 -
95 -# vuepress build output
96 -.vuepress/dist
97 -
98 -# Serverless directories
99 -.serverless/
100 -
101 -# FuseBox cache
102 -.fusebox/
103 -
104 -# DynamoDB Local files
105 -.dynamodb/
106 -
107 -# TernJS port file
108 -.tern-port
109 -
110 -# Stores VSCode versions used for testing VSCode extensions
111 -.vscode-test
112 -
113 -# yarn v2
114 -.yarn/cache
115 -.yarn/unplugged
116 -.yarn/build-state.yml
117 -.yarn/install-state.gz
118 -<<<<<<< HEAD
119 -.pnp.*
120 -=======
121 -.pnp.*
122 -
123 -.package-lock.json
124 ->>>>>>> release_v0.2.0
1 -"use strict";
2 -//모듈
3 -const express = require("express");
4 -const bodyParser = require("body-parser");
5 -//환경변수 (운영체제간 gap 없애고자)
6 -const dotenv = require("dotenv");
7 -dotenv.config();
8 -<<<<<<< HEAD
9 -
10 -const compression = require("compression");
11 -const methodOverride = require("method-override");
12 -var cors = require("cors");
13 -const { logger } = require("./src/config/winston");
14 -//app이라는 express 객체 생성
15 -const app = express();
16 -//라우팅
17 -const home = require("./src/routes/home");
18 -
19 -const port = 3000;
20 -
21 -const jwtMiddleware = require("./src/config/jwtMiddleware");
22 -=======
23 -const compression = require("compression");
24 -const methodOverride = require("method-override");
25 -const path = require("path")
26 -const socketIO = require("socket.io")
27 -const moment = require("moment")
28 -const http = require("http");
29 -const app = express();
30 -const server = http.createServer(app);
31 -
32 -var cors = require("cors");
33 -const { logger } = require("./src/config/winston");
34 -//app이라는 express 객체 생성
35 -//라우팅
36 -const home = require("./src/routes/home");
37 -const port = 3000;
38 -const jwtMiddleware = require("./src/config/jwtMiddleware");
39 -const io = socketIO(server);
40 ->>>>>>> release_v0.2.0
41 -
42 -// 앱 세팅
43 -app.set("views", "./src/views");
44 -app.set("view engine", "ejs");
45 -app.use(express.static(`${__dirname}/src/public`));
46 -<<<<<<< HEAD
47 -app.use(bodyParser.json());
48 -//url통해 전달되는 데이터에 한글, 공백 등의 문자 오류 해결
49 -app.use(bodyParser.urlencoded({extended: true}));
50 -=======
51 -app.use(express.static(path.join(__dirname, "src")))
52 -
53 -app.use(bodyParser.json());
54 -//url통해 전달되는 데이터에 한글, 공백 등의 문자 오류 해결
55 -app.use(bodyParser.urlencoded({extended: true}));
56 -
57 ->>>>>>> release_v0.2.0
58 -app.use(compression()); // HTTP 요청을 압축 및 해제
59 -app.use(express.json());
60 -app.use(express.urlencoded({ extended: true }));
61 -app.use(methodOverride());
62 -app.use(cors());
63 -// app.use("/restaurants", require("../app/src/routes/home/restaurant.route"));
64 -<<<<<<< HEAD
65 -require("../app/src/routes/home/restaurant.route")(app);
66 -
67 -app.use("/", home); //미들웨어 등록해주는 method
68 -=======
69 -// require("../app/src/routes/home/restaurant.route")(app);
70 -
71 -app.use("/", home); //미들웨어 등록해주는 method
72 -
73 -io.on('connection', (socket) => {
74 - socket.on("chatting", (data)=>{
75 - const { name, msg } = data;
76 - io.emit("chatting", {
77 - name,
78 - msg,
79 - time : moment(new Date()).format("h:ss A")})
80 - })
81 -});
82 -
83 ->>>>>>> release_v0.2.0
84 -logger.info(`${process.env.NODE_ENV} - API Server Start At Port ${port}`);
85 -
86 -module.exports = app;
...\ No newline at end of file ...\ No newline at end of file
1 -"use strict";
2 -
3 -const app = require("../app");
4 -const PORT = process.env.PORT || 3000;
5 -
6 -app.listen(PORT, () => {
7 - console.log("서버 가동");
8 -});
1 -{
2 - "name": "login",
3 - "version": "1.0.0",
4 - "lockfileVersion": 1,
5 - "requires": true,
6 - "dependencies": {
7 - "@colors/colors": {
8 - "version": "1.5.0",
9 - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
10 - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="
11 - },
12 - "@dabh/diagnostics": {
13 - "version": "2.0.3",
14 - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
15 - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==",
16 - "requires": {
17 - "colorspace": "1.1.x",
18 - "enabled": "2.0.x",
19 - "kuler": "^2.0.0"
20 - }
21 - },
22 -<<<<<<< HEAD
23 -=======
24 - "@types/component-emitter": {
25 - "version": "1.2.11",
26 - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
27 - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
28 - },
29 - "@types/cookie": {
30 - "version": "0.4.1",
31 - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
32 - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
33 - },
34 - "@types/cors": {
35 - "version": "2.8.12",
36 - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
37 - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
38 - },
39 ->>>>>>> release_v0.2.0
40 - "@types/mysql": {
41 - "version": "2.15.21",
42 - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.21.tgz",
43 - "integrity": "sha512-NPotx5CVful7yB+qZbWtXL2fA4e7aEHkihHLjklc6ID8aq7bhguHgeIoC1EmSNTAuCgI6ZXrjt2ZSaXnYX0EUg==",
44 - "requires": {
45 - "@types/node": "*"
46 - }
47 - },
48 - "@types/node": {
49 - "version": "17.0.41",
50 - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.41.tgz",
51 - "integrity": "sha512-xA6drNNeqb5YyV5fO3OAEsnXLfO7uF0whiOfPTz5AeDo8KeZFmODKnvwPymMNO8qE/an8pVY/O50tig2SQCrGw=="
52 - },
53 - "accepts": {
54 - "version": "1.3.8",
55 - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
56 - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
57 - "requires": {
58 - "mime-types": "~2.1.34",
59 - "negotiator": "0.6.3"
60 - }
61 - },
62 - "ajv": {
63 - "version": "6.12.6",
64 - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
65 - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
66 - "requires": {
67 - "fast-deep-equal": "^3.1.1",
68 - "fast-json-stable-stringify": "^2.0.0",
69 - "json-schema-traverse": "^0.4.1",
70 - "uri-js": "^4.2.2"
71 - }
72 - },
73 - "ansi-styles": {
74 - "version": "4.3.0",
75 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
76 - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
77 - "requires": {
78 - "color-convert": "^2.0.1"
79 - }
80 - },
81 - "array-flatten": {
82 - "version": "1.1.1",
83 - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
84 - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
85 - },
86 - "asn1": {
87 - "version": "0.2.6",
88 - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
89 - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
90 - "requires": {
91 - "safer-buffer": "~2.1.0"
92 - }
93 - },
94 - "assert-plus": {
95 - "version": "1.0.0",
96 - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
97 - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
98 - },
99 - "async": {
100 - "version": "3.2.3",
101 - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
102 - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
103 - },
104 - "asynckit": {
105 - "version": "0.4.0",
106 - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
107 - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
108 - },
109 - "aws-sign2": {
110 - "version": "0.7.0",
111 - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
112 - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
113 - },
114 - "aws4": {
115 - "version": "1.11.0",
116 - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
117 - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
118 - },
119 - "balanced-match": {
120 - "version": "1.0.2",
121 - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
122 - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
123 - },
124 -<<<<<<< HEAD
125 -=======
126 - "base64id": {
127 - "version": "2.0.0",
128 - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
129 - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
130 - },
131 ->>>>>>> release_v0.2.0
132 - "bcrypt-pbkdf": {
133 - "version": "1.0.2",
134 - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
135 - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
136 - "requires": {
137 - "tweetnacl": "^0.14.3"
138 - }
139 - },
140 - "bignumber.js": {
141 - "version": "9.0.0",
142 - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
143 - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
144 - },
145 - "body-parser": {
146 - "version": "1.20.0",
147 - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
148 - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
149 - "requires": {
150 - "bytes": "3.1.2",
151 - "content-type": "~1.0.4",
152 - "debug": "2.6.9",
153 - "depd": "2.0.0",
154 - "destroy": "1.2.0",
155 - "http-errors": "2.0.0",
156 - "iconv-lite": "0.4.24",
157 - "on-finished": "2.4.1",
158 - "qs": "6.10.3",
159 - "raw-body": "2.5.1",
160 - "type-is": "~1.6.18",
161 - "unpipe": "1.0.0"
162 - }
163 - },
164 - "brace-expansion": {
165 - "version": "2.0.1",
166 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
167 - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
168 - "requires": {
169 - "balanced-match": "^1.0.0"
170 - }
171 - },
172 - "buffer-equal-constant-time": {
173 - "version": "1.0.1",
174 - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
175 - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
176 - },
177 - "bytes": {
178 - "version": "3.1.2",
179 - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
180 - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
181 - },
182 - "call-bind": {
183 - "version": "1.0.2",
184 - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
185 - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
186 - "requires": {
187 - "function-bind": "^1.1.1",
188 - "get-intrinsic": "^1.0.2"
189 - }
190 - },
191 - "caseless": {
192 - "version": "0.12.0",
193 - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
194 - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
195 - },
196 - "chalk": {
197 - "version": "4.1.2",
198 - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
199 - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
200 - "requires": {
201 - "ansi-styles": "^4.1.0",
202 - "supports-color": "^7.1.0"
203 - }
204 - },
205 - "color": {
206 - "version": "3.2.1",
207 - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
208 - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
209 - "requires": {
210 - "color-convert": "^1.9.3",
211 - "color-string": "^1.6.0"
212 - },
213 - "dependencies": {
214 - "color-convert": {
215 - "version": "1.9.3",
216 - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
217 - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
218 - "requires": {
219 - "color-name": "1.1.3"
220 - }
221 - },
222 - "color-name": {
223 - "version": "1.1.3",
224 - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
225 - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
226 - }
227 - }
228 - },
229 - "color-convert": {
230 - "version": "2.0.1",
231 - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
232 - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
233 - "requires": {
234 - "color-name": "~1.1.4"
235 - }
236 - },
237 - "color-name": {
238 - "version": "1.1.4",
239 - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
240 - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
241 - },
242 - "color-string": {
243 - "version": "1.9.1",
244 - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
245 - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
246 - "requires": {
247 - "color-name": "^1.0.0",
248 - "simple-swizzle": "^0.2.2"
249 - }
250 - },
251 - "colorspace": {
252 - "version": "1.1.4",
253 - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
254 - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
255 - "requires": {
256 - "color": "^3.1.3",
257 - "text-hex": "1.0.x"
258 - }
259 - },
260 - "combined-stream": {
261 - "version": "1.0.8",
262 - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
263 - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
264 - "requires": {
265 - "delayed-stream": "~1.0.0"
266 - }
267 - },
268 -<<<<<<< HEAD
269 -=======
270 - "component-emitter": {
271 - "version": "1.3.0",
272 - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
273 - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
274 - },
275 ->>>>>>> release_v0.2.0
276 - "compressible": {
277 - "version": "2.0.18",
278 - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
279 - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
280 - "requires": {
281 - "mime-db": ">= 1.43.0 < 2"
282 - }
283 - },
284 - "compression": {
285 - "version": "1.7.4",
286 - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
287 - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
288 - "requires": {
289 - "accepts": "~1.3.5",
290 - "bytes": "3.0.0",
291 - "compressible": "~2.0.16",
292 - "debug": "2.6.9",
293 - "on-headers": "~1.0.2",
294 - "safe-buffer": "5.1.2",
295 - "vary": "~1.1.2"
296 - },
297 - "dependencies": {
298 - "bytes": {
299 - "version": "3.0.0",
300 - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
301 - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw=="
302 - },
303 - "safe-buffer": {
304 - "version": "5.1.2",
305 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
306 - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
307 - }
308 - }
309 - },
310 - "concat-map": {
311 - "version": "0.0.1",
312 - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
313 - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
314 - },
315 - "content-disposition": {
316 - "version": "0.5.4",
317 - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
318 - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
319 - "requires": {
320 - "safe-buffer": "5.2.1"
321 - }
322 - },
323 - "content-type": {
324 - "version": "1.0.4",
325 - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
326 - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
327 - },
328 - "cookie": {
329 - "version": "0.5.0",
330 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
331 - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
332 - },
333 - "cookie-signature": {
334 - "version": "1.0.6",
335 - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
336 - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
337 - },
338 - "core-util-is": {
339 - "version": "1.0.3",
340 - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
341 - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
342 - },
343 - "cors": {
344 - "version": "2.8.5",
345 - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
346 - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
347 - "requires": {
348 - "object-assign": "^4",
349 - "vary": "^1"
350 - }
351 - },
352 - "crypto": {
353 - "version": "1.0.1",
354 - "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz",
355 - "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig=="
356 - },
357 - "dashdash": {
358 - "version": "1.14.1",
359 - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
360 - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
361 - "requires": {
362 - "assert-plus": "^1.0.0"
363 - }
364 - },
365 - "dateformat": {
366 - "version": "4.6.3",
367 - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
368 - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="
369 - },
370 - "debug": {
371 - "version": "2.6.9",
372 - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
373 - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
374 - "requires": {
375 - "ms": "2.0.0"
376 - }
377 - },
378 - "delayed-stream": {
379 - "version": "1.0.0",
380 - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
381 - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
382 - },
383 - "denque": {
384 - "version": "1.5.1",
385 - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
386 - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw=="
387 - },
388 - "depd": {
389 - "version": "2.0.0",
390 - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
391 - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
392 - },
393 - "destroy": {
394 - "version": "1.2.0",
395 - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
396 - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
397 - },
398 - "dotenv": {
399 - "version": "16.0.1",
400 - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz",
401 - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ=="
402 - },
403 - "ecc-jsbn": {
404 - "version": "0.1.2",
405 - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
406 - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
407 - "requires": {
408 - "jsbn": "~0.1.0",
409 - "safer-buffer": "^2.1.0"
410 - }
411 - },
412 - "ecdsa-sig-formatter": {
413 - "version": "1.0.11",
414 - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
415 - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
416 - "requires": {
417 - "safe-buffer": "^5.0.1"
418 - }
419 - },
420 - "ee-first": {
421 - "version": "1.1.1",
422 - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
423 - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
424 - },
425 - "ejs": {
426 - "version": "3.1.8",
427 - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz",
428 - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==",
429 - "requires": {
430 - "jake": "^10.8.5"
431 - }
432 - },
433 - "enabled": {
434 - "version": "2.0.0",
435 - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
436 - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
437 - },
438 - "encodeurl": {
439 - "version": "1.0.2",
440 - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
441 - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
442 - },
443 -<<<<<<< HEAD
444 -=======
445 - "engine.io": {
446 - "version": "6.2.0",
447 - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
448 - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
449 - "requires": {
450 - "@types/cookie": "^0.4.1",
451 - "@types/cors": "^2.8.12",
452 - "@types/node": ">=10.0.0",
453 - "accepts": "~1.3.4",
454 - "base64id": "2.0.0",
455 - "cookie": "~0.4.1",
456 - "cors": "~2.8.5",
457 - "debug": "~4.3.1",
458 - "engine.io-parser": "~5.0.3",
459 - "ws": "~8.2.3"
460 - },
461 - "dependencies": {
462 - "cookie": {
463 - "version": "0.4.2",
464 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
465 - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
466 - },
467 - "debug": {
468 - "version": "4.3.4",
469 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
470 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
471 - "requires": {
472 - "ms": "2.1.2"
473 - }
474 - },
475 - "ms": {
476 - "version": "2.1.2",
477 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
478 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
479 - }
480 - }
481 - },
482 - "engine.io-parser": {
483 - "version": "5.0.4",
484 - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
485 - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg=="
486 - },
487 ->>>>>>> release_v0.2.0
488 - "escape-html": {
489 - "version": "1.0.3",
490 - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
491 - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
492 - },
493 - "etag": {
494 - "version": "1.8.1",
495 - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
496 - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
497 - },
498 - "express": {
499 - "version": "4.18.1",
500 - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
501 - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
502 - "requires": {
503 - "accepts": "~1.3.8",
504 - "array-flatten": "1.1.1",
505 - "body-parser": "1.20.0",
506 - "content-disposition": "0.5.4",
507 - "content-type": "~1.0.4",
508 - "cookie": "0.5.0",
509 - "cookie-signature": "1.0.6",
510 - "debug": "2.6.9",
511 - "depd": "2.0.0",
512 - "encodeurl": "~1.0.2",
513 - "escape-html": "~1.0.3",
514 - "etag": "~1.8.1",
515 - "finalhandler": "1.2.0",
516 - "fresh": "0.5.2",
517 - "http-errors": "2.0.0",
518 - "merge-descriptors": "1.0.1",
519 - "methods": "~1.1.2",
520 - "on-finished": "2.4.1",
521 - "parseurl": "~1.3.3",
522 - "path-to-regexp": "0.1.7",
523 - "proxy-addr": "~2.0.7",
524 - "qs": "6.10.3",
525 - "range-parser": "~1.2.1",
526 - "safe-buffer": "5.2.1",
527 - "send": "0.18.0",
528 - "serve-static": "1.15.0",
529 - "setprototypeof": "1.2.0",
530 - "statuses": "2.0.1",
531 - "type-is": "~1.6.18",
532 - "utils-merge": "1.0.1",
533 - "vary": "~1.1.2"
534 - }
535 - },
536 - "extend": {
537 - "version": "3.0.2",
538 - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
539 - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
540 - },
541 - "extsprintf": {
542 - "version": "1.3.0",
543 - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
544 - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
545 - },
546 - "fast-deep-equal": {
547 - "version": "3.1.3",
548 - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
549 - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
550 - },
551 - "fast-json-stable-stringify": {
552 - "version": "2.1.0",
553 - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
554 - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
555 - },
556 - "fecha": {
557 - "version": "4.2.3",
558 - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
559 - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw=="
560 - },
561 - "file-stream-rotator": {
562 - "version": "0.6.1",
563 - "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz",
564 - "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==",
565 - "requires": {
566 - "moment": "^2.29.1"
567 - }
568 - },
569 - "filelist": {
570 - "version": "1.0.4",
571 - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
572 - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
573 - "requires": {
574 - "minimatch": "^5.0.1"
575 - },
576 - "dependencies": {
577 - "minimatch": {
578 - "version": "5.1.0",
579 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
580 - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
581 - "requires": {
582 - "brace-expansion": "^2.0.1"
583 - }
584 - }
585 - }
586 - },
587 - "finalhandler": {
588 - "version": "1.2.0",
589 - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
590 - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
591 - "requires": {
592 - "debug": "2.6.9",
593 - "encodeurl": "~1.0.2",
594 - "escape-html": "~1.0.3",
595 - "on-finished": "2.4.1",
596 - "parseurl": "~1.3.3",
597 - "statuses": "2.0.1",
598 - "unpipe": "~1.0.0"
599 - }
600 - },
601 - "fn.name": {
602 - "version": "1.1.0",
603 - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
604 - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
605 - },
606 - "forever-agent": {
607 - "version": "0.6.1",
608 - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
609 - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
610 - },
611 - "form-data": {
612 - "version": "2.3.3",
613 - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
614 - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
615 - "requires": {
616 - "asynckit": "^0.4.0",
617 - "combined-stream": "^1.0.6",
618 - "mime-types": "^2.1.12"
619 - }
620 - },
621 - "forwarded": {
622 - "version": "0.2.0",
623 - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
624 - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
625 - },
626 - "fresh": {
627 - "version": "0.5.2",
628 - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
629 - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
630 - },
631 - "function-bind": {
632 - "version": "1.1.1",
633 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
634 - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
635 - },
636 - "generate-function": {
637 - "version": "2.3.1",
638 - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
639 - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
640 - "requires": {
641 - "is-property": "^1.0.2"
642 - }
643 - },
644 - "get-intrinsic": {
645 - "version": "1.1.1",
646 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
647 - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
648 - "requires": {
649 - "function-bind": "^1.1.1",
650 - "has": "^1.0.3",
651 - "has-symbols": "^1.0.1"
652 - }
653 - },
654 - "getpass": {
655 - "version": "0.1.7",
656 - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
657 - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
658 - "requires": {
659 - "assert-plus": "^1.0.0"
660 - }
661 - },
662 - "har-schema": {
663 - "version": "2.0.0",
664 - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
665 - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
666 - },
667 - "har-validator": {
668 - "version": "5.1.5",
669 - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
670 - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
671 - "requires": {
672 - "ajv": "^6.12.3",
673 - "har-schema": "^2.0.0"
674 - }
675 - },
676 - "has": {
677 - "version": "1.0.3",
678 - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
679 - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
680 - "requires": {
681 - "function-bind": "^1.1.1"
682 - }
683 - },
684 - "has-flag": {
685 - "version": "4.0.0",
686 - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
687 - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
688 - },
689 - "has-symbols": {
690 - "version": "1.0.3",
691 - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
692 - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
693 - },
694 - "http-errors": {
695 - "version": "2.0.0",
696 - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
697 - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
698 - "requires": {
699 - "depd": "2.0.0",
700 - "inherits": "2.0.4",
701 - "setprototypeof": "1.2.0",
702 - "statuses": "2.0.1",
703 - "toidentifier": "1.0.1"
704 - }
705 - },
706 - "http-signature": {
707 - "version": "1.2.0",
708 - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
709 - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
710 - "requires": {
711 - "assert-plus": "^1.0.0",
712 - "jsprim": "^1.2.2",
713 - "sshpk": "^1.7.0"
714 - }
715 - },
716 - "iconv-lite": {
717 - "version": "0.4.24",
718 - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
719 - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
720 - "requires": {
721 - "safer-buffer": ">= 2.1.2 < 3"
722 - }
723 - },
724 - "inherits": {
725 - "version": "2.0.4",
726 - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
727 - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
728 - },
729 - "ipaddr.js": {
730 - "version": "1.9.1",
731 - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
732 - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
733 - },
734 - "is-arrayish": {
735 - "version": "0.3.2",
736 - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
737 - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
738 - },
739 - "is-property": {
740 - "version": "1.0.2",
741 - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
742 - "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
743 - },
744 - "is-stream": {
745 - "version": "2.0.1",
746 - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
747 - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
748 - },
749 - "is-typedarray": {
750 - "version": "1.0.0",
751 - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
752 - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
753 - },
754 - "isarray": {
755 - "version": "1.0.0",
756 - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
757 - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
758 - },
759 - "isstream": {
760 - "version": "0.1.2",
761 - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
762 - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
763 - },
764 - "jake": {
765 - "version": "10.8.5",
766 - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz",
767 - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==",
768 - "requires": {
769 - "async": "^3.2.3",
770 - "chalk": "^4.0.2",
771 - "filelist": "^1.0.1",
772 - "minimatch": "^3.0.4"
773 - }
774 - },
775 - "jsbn": {
776 - "version": "0.1.1",
777 - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
778 - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
779 - },
780 - "json-schema": {
781 - "version": "0.4.0",
782 - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
783 - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
784 - },
785 - "json-schema-traverse": {
786 - "version": "0.4.1",
787 - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
788 - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
789 - },
790 - "json-stringify-safe": {
791 - "version": "5.0.1",
792 - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
793 - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
794 - },
795 - "jsonwebtoken": {
796 - "version": "8.5.1",
797 - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
798 - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
799 - "requires": {
800 - "jws": "^3.2.2",
801 - "lodash.includes": "^4.3.0",
802 - "lodash.isboolean": "^3.0.3",
803 - "lodash.isinteger": "^4.0.4",
804 - "lodash.isnumber": "^3.0.3",
805 - "lodash.isplainobject": "^4.0.6",
806 - "lodash.isstring": "^4.0.1",
807 - "lodash.once": "^4.0.0",
808 - "ms": "^2.1.1",
809 - "semver": "^5.6.0"
810 - },
811 - "dependencies": {
812 - "ms": {
813 - "version": "2.1.3",
814 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
815 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
816 - }
817 - }
818 - },
819 - "jsprim": {
820 - "version": "1.4.2",
821 - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
822 - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
823 - "requires": {
824 - "assert-plus": "1.0.0",
825 - "extsprintf": "1.3.0",
826 - "json-schema": "0.4.0",
827 - "verror": "1.10.0"
828 - }
829 - },
830 - "jwa": {
831 - "version": "1.4.1",
832 - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
833 - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
834 - "requires": {
835 - "buffer-equal-constant-time": "1.0.1",
836 - "ecdsa-sig-formatter": "1.0.11",
837 - "safe-buffer": "^5.0.1"
838 - }
839 - },
840 - "jws": {
841 - "version": "3.2.2",
842 - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
843 - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
844 - "requires": {
845 - "jwa": "^1.4.1",
846 - "safe-buffer": "^5.0.1"
847 - }
848 - },
849 - "kuler": {
850 - "version": "2.0.0",
851 - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
852 - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
853 - },
854 - "lodash.includes": {
855 - "version": "4.3.0",
856 - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
857 - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
858 - },
859 - "lodash.isboolean": {
860 - "version": "3.0.3",
861 - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
862 - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
863 - },
864 - "lodash.isinteger": {
865 - "version": "4.0.4",
866 - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
867 - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
868 - },
869 - "lodash.isnumber": {
870 - "version": "3.0.3",
871 - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
872 - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
873 - },
874 - "lodash.isplainobject": {
875 - "version": "4.0.6",
876 - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
877 - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
878 - },
879 - "lodash.isstring": {
880 - "version": "4.0.1",
881 - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
882 - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
883 - },
884 - "lodash.once": {
885 - "version": "4.1.1",
886 - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
887 - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
888 - },
889 - "logform": {
890 - "version": "2.4.0",
891 - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz",
892 - "integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==",
893 - "requires": {
894 - "@colors/colors": "1.5.0",
895 - "fecha": "^4.2.0",
896 - "ms": "^2.1.1",
897 - "safe-stable-stringify": "^2.3.1",
898 - "triple-beam": "^1.3.0"
899 - },
900 - "dependencies": {
901 - "ms": {
902 - "version": "2.1.3",
903 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
904 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
905 - }
906 - }
907 - },
908 - "long": {
909 - "version": "4.0.0",
910 - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
911 - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
912 - },
913 - "lru-cache": {
914 - "version": "6.0.0",
915 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
916 - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
917 - "requires": {
918 - "yallist": "^4.0.0"
919 - }
920 - },
921 - "media-typer": {
922 - "version": "0.3.0",
923 - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
924 - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
925 - },
926 - "merge-descriptors": {
927 - "version": "1.0.1",
928 - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
929 - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
930 - },
931 - "method-override": {
932 - "version": "3.0.0",
933 - "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz",
934 - "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==",
935 - "requires": {
936 - "debug": "3.1.0",
937 - "methods": "~1.1.2",
938 - "parseurl": "~1.3.2",
939 - "vary": "~1.1.2"
940 - },
941 - "dependencies": {
942 - "debug": {
943 - "version": "3.1.0",
944 - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
945 - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
946 - "requires": {
947 - "ms": "2.0.0"
948 - }
949 - }
950 - }
951 - },
952 - "methods": {
953 - "version": "1.1.2",
954 - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
955 - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
956 - },
957 - "mime": {
958 - "version": "1.6.0",
959 - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
960 - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
961 - },
962 - "mime-db": {
963 - "version": "1.52.0",
964 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
965 - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
966 - },
967 - "mime-types": {
968 - "version": "2.1.35",
969 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
970 - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
971 - "requires": {
972 - "mime-db": "1.52.0"
973 - }
974 - },
975 - "minimatch": {
976 - "version": "3.1.2",
977 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
978 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
979 - "requires": {
980 - "brace-expansion": "^1.1.7"
981 - },
982 - "dependencies": {
983 - "brace-expansion": {
984 - "version": "1.1.11",
985 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
986 - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
987 - "requires": {
988 - "balanced-match": "^1.0.0",
989 - "concat-map": "0.0.1"
990 - }
991 - }
992 - }
993 - },
994 - "moment": {
995 - "version": "2.29.3",
996 - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz",
997 - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw=="
998 - },
999 - "ms": {
1000 - "version": "2.0.0",
1001 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1002 - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1003 - },
1004 - "mysql": {
1005 - "version": "2.18.1",
1006 - "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
1007 - "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
1008 - "requires": {
1009 - "bignumber.js": "9.0.0",
1010 - "readable-stream": "2.3.7",
1011 - "safe-buffer": "5.1.2",
1012 - "sqlstring": "2.3.1"
1013 - },
1014 - "dependencies": {
1015 - "safe-buffer": {
1016 - "version": "5.1.2",
1017 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1018 - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1019 - }
1020 - }
1021 - },
1022 - "mysql2": {
1023 - "version": "2.2.0",
1024 - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.2.0.tgz",
1025 - "integrity": "sha512-3DvnvXihGiFrq6oaMjGN+gR/oreZA5cA1bI7/yBAvReo2W2I6cHd8vfX/9mk9FQEebubxqB/4VAlIJTlnYUEEg==",
1026 - "requires": {
1027 - "@types/mysql": "^2.15.7",
1028 - "denque": "^1.4.1",
1029 - "generate-function": "^2.3.1",
1030 - "iconv-lite": "^0.6.2",
1031 - "long": "^4.0.0",
1032 - "lru-cache": "^6.0.0",
1033 - "named-placeholders": "^1.1.2",
1034 - "seq-queue": "^0.0.5",
1035 - "sqlstring": "^2.3.2"
1036 - },
1037 - "dependencies": {
1038 - "iconv-lite": {
1039 - "version": "0.6.3",
1040 - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
1041 - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
1042 - "requires": {
1043 - "safer-buffer": ">= 2.1.2 < 3.0.0"
1044 - }
1045 - },
1046 - "sqlstring": {
1047 - "version": "2.3.3",
1048 - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
1049 - "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="
1050 - }
1051 - }
1052 - },
1053 - "named-placeholders": {
1054 - "version": "1.1.2",
1055 - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz",
1056 - "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==",
1057 - "requires": {
1058 - "lru-cache": "^4.1.3"
1059 - },
1060 - "dependencies": {
1061 - "lru-cache": {
1062 - "version": "4.1.5",
1063 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
1064 - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
1065 - "requires": {
1066 - "pseudomap": "^1.0.2",
1067 - "yallist": "^2.1.2"
1068 - }
1069 - },
1070 - "yallist": {
1071 - "version": "2.1.2",
1072 - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
1073 - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
1074 - }
1075 - }
1076 - },
1077 - "negotiator": {
1078 - "version": "0.6.3",
1079 - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1080 - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
1081 - },
1082 - "oauth-sign": {
1083 - "version": "0.9.0",
1084 - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
1085 - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
1086 - },
1087 - "object-assign": {
1088 - "version": "4.1.1",
1089 - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1090 - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
1091 - },
1092 - "object-hash": {
1093 - "version": "2.2.0",
1094 - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
1095 - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
1096 - },
1097 - "object-inspect": {
1098 - "version": "1.12.2",
1099 - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
1100 - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
1101 - },
1102 - "on-finished": {
1103 - "version": "2.4.1",
1104 - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1105 - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1106 - "requires": {
1107 - "ee-first": "1.1.1"
1108 - }
1109 - },
1110 - "on-headers": {
1111 - "version": "1.0.2",
1112 - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
1113 - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
1114 - },
1115 - "one-time": {
1116 - "version": "1.0.0",
1117 - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
1118 - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
1119 - "requires": {
1120 - "fn.name": "1.x.x"
1121 - }
1122 - },
1123 - "parseurl": {
1124 - "version": "1.3.3",
1125 - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1126 - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1127 - },
1128 - "path-to-regexp": {
1129 - "version": "0.1.7",
1130 - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1131 - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
1132 - },
1133 - "performance-now": {
1134 - "version": "2.1.0",
1135 - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
1136 - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
1137 - },
1138 - "process-nextick-args": {
1139 - "version": "2.0.1",
1140 - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
1141 - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
1142 - },
1143 - "proxy-addr": {
1144 - "version": "2.0.7",
1145 - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1146 - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1147 - "requires": {
1148 - "forwarded": "0.2.0",
1149 - "ipaddr.js": "1.9.1"
1150 - }
1151 - },
1152 - "pseudomap": {
1153 - "version": "1.0.2",
1154 - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
1155 - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
1156 - },
1157 - "psl": {
1158 - "version": "1.8.0",
1159 - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
1160 - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
1161 - },
1162 - "punycode": {
1163 - "version": "2.1.1",
1164 - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1165 - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
1166 - },
1167 - "qs": {
1168 - "version": "6.10.3",
1169 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
1170 - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
1171 - "requires": {
1172 - "side-channel": "^1.0.4"
1173 - }
1174 - },
1175 - "range-parser": {
1176 - "version": "1.2.1",
1177 - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1178 - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1179 - },
1180 - "raw-body": {
1181 - "version": "2.5.1",
1182 - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
1183 - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
1184 - "requires": {
1185 - "bytes": "3.1.2",
1186 - "http-errors": "2.0.0",
1187 - "iconv-lite": "0.4.24",
1188 - "unpipe": "1.0.0"
1189 - }
1190 - },
1191 - "readable-stream": {
1192 - "version": "2.3.7",
1193 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
1194 - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
1195 - "requires": {
1196 - "core-util-is": "~1.0.0",
1197 - "inherits": "~2.0.3",
1198 - "isarray": "~1.0.0",
1199 - "process-nextick-args": "~2.0.0",
1200 - "safe-buffer": "~5.1.1",
1201 - "string_decoder": "~1.1.1",
1202 - "util-deprecate": "~1.0.1"
1203 - },
1204 - "dependencies": {
1205 - "safe-buffer": {
1206 - "version": "5.1.2",
1207 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1208 - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1209 - }
1210 - }
1211 - },
1212 - "regex-email": {
1213 - "version": "1.0.2",
1214 - "resolved": "https://registry.npmjs.org/regex-email/-/regex-email-1.0.2.tgz",
1215 - "integrity": "sha1-1nKFy9FvML5e+vaEF1wVPwy8gSE="
1216 - },
1217 - "request": {
1218 - "version": "2.88.2",
1219 - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
1220 - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
1221 - "requires": {
1222 - "aws-sign2": "~0.7.0",
1223 - "aws4": "^1.8.0",
1224 - "caseless": "~0.12.0",
1225 - "combined-stream": "~1.0.6",
1226 - "extend": "~3.0.2",
1227 - "forever-agent": "~0.6.1",
1228 - "form-data": "~2.3.2",
1229 - "har-validator": "~5.1.3",
1230 - "http-signature": "~1.2.0",
1231 - "is-typedarray": "~1.0.0",
1232 - "isstream": "~0.1.2",
1233 - "json-stringify-safe": "~5.0.1",
1234 - "mime-types": "~2.1.19",
1235 - "oauth-sign": "~0.9.0",
1236 - "performance-now": "^2.1.0",
1237 - "qs": "~6.5.2",
1238 - "safe-buffer": "^5.1.2",
1239 - "tough-cookie": "~2.5.0",
1240 - "tunnel-agent": "^0.6.0",
1241 - "uuid": "^3.3.2"
1242 - },
1243 - "dependencies": {
1244 - "qs": {
1245 - "version": "6.5.3",
1246 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
1247 - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
1248 - }
1249 - }
1250 - },
1251 - "safe-buffer": {
1252 - "version": "5.2.1",
1253 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1254 - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1255 - },
1256 - "safe-stable-stringify": {
1257 - "version": "2.3.1",
1258 - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz",
1259 - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg=="
1260 - },
1261 - "safer-buffer": {
1262 - "version": "2.1.2",
1263 - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1264 - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1265 - },
1266 - "semver": {
1267 - "version": "5.7.1",
1268 - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1269 - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
1270 - },
1271 - "send": {
1272 - "version": "0.18.0",
1273 - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1274 - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1275 - "requires": {
1276 - "debug": "2.6.9",
1277 - "depd": "2.0.0",
1278 - "destroy": "1.2.0",
1279 - "encodeurl": "~1.0.2",
1280 - "escape-html": "~1.0.3",
1281 - "etag": "~1.8.1",
1282 - "fresh": "0.5.2",
1283 - "http-errors": "2.0.0",
1284 - "mime": "1.6.0",
1285 - "ms": "2.1.3",
1286 - "on-finished": "2.4.1",
1287 - "range-parser": "~1.2.1",
1288 - "statuses": "2.0.1"
1289 - },
1290 - "dependencies": {
1291 - "ms": {
1292 - "version": "2.1.3",
1293 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1294 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1295 - }
1296 - }
1297 - },
1298 - "seq-queue": {
1299 - "version": "0.0.5",
1300 - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
1301 - "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4="
1302 - },
1303 - "serve-static": {
1304 - "version": "1.15.0",
1305 - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1306 - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1307 - "requires": {
1308 - "encodeurl": "~1.0.2",
1309 - "escape-html": "~1.0.3",
1310 - "parseurl": "~1.3.3",
1311 - "send": "0.18.0"
1312 - }
1313 - },
1314 - "setprototypeof": {
1315 - "version": "1.2.0",
1316 - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1317 - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1318 - },
1319 - "side-channel": {
1320 - "version": "1.0.4",
1321 - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1322 - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1323 - "requires": {
1324 - "call-bind": "^1.0.0",
1325 - "get-intrinsic": "^1.0.2",
1326 - "object-inspect": "^1.9.0"
1327 - }
1328 - },
1329 - "simple-swizzle": {
1330 - "version": "0.2.2",
1331 - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
1332 - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
1333 - "requires": {
1334 - "is-arrayish": "^0.3.1"
1335 - }
1336 - },
1337 -<<<<<<< HEAD
1338 -=======
1339 - "socket.io": {
1340 - "version": "4.5.1",
1341 - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz",
1342 - "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==",
1343 - "requires": {
1344 - "accepts": "~1.3.4",
1345 - "base64id": "~2.0.0",
1346 - "debug": "~4.3.2",
1347 - "engine.io": "~6.2.0",
1348 - "socket.io-adapter": "~2.4.0",
1349 - "socket.io-parser": "~4.0.4"
1350 - },
1351 - "dependencies": {
1352 - "debug": {
1353 - "version": "4.3.4",
1354 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1355 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1356 - "requires": {
1357 - "ms": "2.1.2"
1358 - }
1359 - },
1360 - "ms": {
1361 - "version": "2.1.2",
1362 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1363 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1364 - }
1365 - }
1366 - },
1367 - "socket.io-adapter": {
1368 - "version": "2.4.0",
1369 - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
1370 - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
1371 - },
1372 - "socket.io-parser": {
1373 - "version": "4.0.4",
1374 - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
1375 - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
1376 - "requires": {
1377 - "@types/component-emitter": "^1.2.10",
1378 - "component-emitter": "~1.3.0",
1379 - "debug": "~4.3.1"
1380 - },
1381 - "dependencies": {
1382 - "debug": {
1383 - "version": "4.3.4",
1384 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1385 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1386 - "requires": {
1387 - "ms": "2.1.2"
1388 - }
1389 - },
1390 - "ms": {
1391 - "version": "2.1.2",
1392 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1393 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1394 - }
1395 - }
1396 - },
1397 ->>>>>>> release_v0.2.0
1398 - "sqlstring": {
1399 - "version": "2.3.1",
1400 - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
1401 - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
1402 - },
1403 - "sshpk": {
1404 - "version": "1.17.0",
1405 - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
1406 - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
1407 - "requires": {
1408 - "asn1": "~0.2.3",
1409 - "assert-plus": "^1.0.0",
1410 - "bcrypt-pbkdf": "^1.0.0",
1411 - "dashdash": "^1.12.0",
1412 - "ecc-jsbn": "~0.1.1",
1413 - "getpass": "^0.1.1",
1414 - "jsbn": "~0.1.0",
1415 - "safer-buffer": "^2.0.2",
1416 - "tweetnacl": "~0.14.0"
1417 - }
1418 - },
1419 - "stack-trace": {
1420 - "version": "0.0.10",
1421 - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
1422 - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
1423 - },
1424 - "statuses": {
1425 - "version": "2.0.1",
1426 - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1427 - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
1428 - },
1429 - "string_decoder": {
1430 - "version": "1.1.1",
1431 - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1432 - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1433 - "requires": {
1434 - "safe-buffer": "~5.1.0"
1435 - },
1436 - "dependencies": {
1437 - "safe-buffer": {
1438 - "version": "5.1.2",
1439 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1440 - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1441 - }
1442 - }
1443 - },
1444 - "supports-color": {
1445 - "version": "7.2.0",
1446 - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1447 - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1448 - "requires": {
1449 - "has-flag": "^4.0.0"
1450 - }
1451 - },
1452 - "text-hex": {
1453 - "version": "1.0.0",
1454 - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
1455 - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
1456 - },
1457 - "toidentifier": {
1458 - "version": "1.0.1",
1459 - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1460 - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
1461 - },
1462 - "tough-cookie": {
1463 - "version": "2.5.0",
1464 - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
1465 - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
1466 - "requires": {
1467 - "psl": "^1.1.28",
1468 - "punycode": "^2.1.1"
1469 - }
1470 - },
1471 - "triple-beam": {
1472 - "version": "1.3.0",
1473 - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
1474 - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
1475 - },
1476 - "tunnel-agent": {
1477 - "version": "0.6.0",
1478 - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1479 - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1480 - "requires": {
1481 - "safe-buffer": "^5.0.1"
1482 - }
1483 - },
1484 - "tweetnacl": {
1485 - "version": "0.14.5",
1486 - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1487 - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
1488 - },
1489 - "type-is": {
1490 - "version": "1.6.18",
1491 - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1492 - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1493 - "requires": {
1494 - "media-typer": "0.3.0",
1495 - "mime-types": "~2.1.24"
1496 - }
1497 - },
1498 - "unpipe": {
1499 - "version": "1.0.0",
1500 - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1501 - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1502 - },
1503 - "uri-js": {
1504 - "version": "4.4.1",
1505 - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
1506 - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
1507 - "requires": {
1508 - "punycode": "^2.1.0"
1509 - }
1510 - },
1511 - "util-deprecate": {
1512 - "version": "1.0.2",
1513 - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1514 - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1515 - },
1516 - "utils-merge": {
1517 - "version": "1.0.1",
1518 - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1519 - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1520 - },
1521 - "uuid": {
1522 - "version": "3.4.0",
1523 - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
1524 - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
1525 - },
1526 - "vary": {
1527 - "version": "1.1.2",
1528 - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1529 - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1530 - },
1531 - "verror": {
1532 - "version": "1.10.0",
1533 - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1534 - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1535 - "requires": {
1536 - "assert-plus": "^1.0.0",
1537 - "core-util-is": "1.0.2",
1538 - "extsprintf": "^1.2.0"
1539 - },
1540 - "dependencies": {
1541 - "core-util-is": {
1542 - "version": "1.0.2",
1543 - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
1544 - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
1545 - }
1546 - }
1547 - },
1548 - "winston": {
1549 - "version": "3.7.2",
1550 - "resolved": "https://registry.npmjs.org/winston/-/winston-3.7.2.tgz",
1551 - "integrity": "sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng==",
1552 - "requires": {
1553 - "@dabh/diagnostics": "^2.0.2",
1554 - "async": "^3.2.3",
1555 - "is-stream": "^2.0.0",
1556 - "logform": "^2.4.0",
1557 - "one-time": "^1.0.0",
1558 - "readable-stream": "^3.4.0",
1559 - "safe-stable-stringify": "^2.3.1",
1560 - "stack-trace": "0.0.x",
1561 - "triple-beam": "^1.3.0",
1562 - "winston-transport": "^4.5.0"
1563 - },
1564 - "dependencies": {
1565 - "readable-stream": {
1566 - "version": "3.6.0",
1567 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1568 - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1569 - "requires": {
1570 - "inherits": "^2.0.3",
1571 - "string_decoder": "^1.1.1",
1572 - "util-deprecate": "^1.0.1"
1573 - }
1574 - }
1575 - }
1576 - },
1577 - "winston-daily-rotate-file": {
1578 - "version": "4.7.1",
1579 - "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-4.7.1.tgz",
1580 - "integrity": "sha512-7LGPiYGBPNyGHLn9z33i96zx/bd71pjBn9tqQzO3I4Tayv94WPmBNwKC7CO1wPHdP9uvu+Md/1nr6VSH9h0iaA==",
1581 - "requires": {
1582 - "file-stream-rotator": "^0.6.1",
1583 - "object-hash": "^2.0.1",
1584 - "triple-beam": "^1.3.0",
1585 - "winston-transport": "^4.4.0"
1586 - }
1587 - },
1588 - "winston-transport": {
1589 - "version": "4.5.0",
1590 - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz",
1591 - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==",
1592 - "requires": {
1593 - "logform": "^2.3.2",
1594 - "readable-stream": "^3.6.0",
1595 - "triple-beam": "^1.3.0"
1596 - },
1597 - "dependencies": {
1598 - "readable-stream": {
1599 - "version": "3.6.0",
1600 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1601 - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1602 - "requires": {
1603 - "inherits": "^2.0.3",
1604 - "string_decoder": "^1.1.1",
1605 - "util-deprecate": "^1.0.1"
1606 - }
1607 - }
1608 - }
1609 - },
1610 -<<<<<<< HEAD
1611 -=======
1612 - "ws": {
1613 - "version": "8.2.3",
1614 - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
1615 - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA=="
1616 - },
1617 ->>>>>>> release_v0.2.0
1618 - "yallist": {
1619 - "version": "4.0.0",
1620 - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1621 - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
1622 - }
1623 - }
1624 -}
1 -{
2 - "name": "login",
3 - "version": "1.0.0",
4 - "main": "app.js",
5 - "bin": {
6 - "login": "www.js"
7 - },
8 - "dependencies": {
9 - "body-parser": "^1.20.0",
10 - "compression": "^1.7.4",
11 - "cors": "^2.8.5",
12 - "crypto": "^1.0.1",
13 - "dateformat": "^4.3.1",
14 - "dotenv": "^16.0.1",
15 - "ejs": "^3.1.8",
16 - "express": "^4.18.1",
17 - "jsonwebtoken": "^8.5.1",
18 - "method-override": "^3.0.0",
19 -<<<<<<< HEAD
20 -=======
21 - "moment": "^2.29.3",
22 ->>>>>>> release_v0.2.0
23 - "mysql": "^2.18.1",
24 - "mysql2": "^2.2.0",
25 - "regex-email": "^1.0.2",
26 - "request": "^2.88.2",
27 -<<<<<<< HEAD
28 -=======
29 - "socket.io": "^4.5.1",
30 ->>>>>>> release_v0.2.0
31 - "winston": "^3.2.1",
32 - "winston-daily-rotate-file": "^4.2.1"
33 - },
34 - "devDependencies": {},
35 - "scripts": {
36 - "start": "nodemon ./bin/www.js",
37 - "test": "echo \"Error: no test specified\" && exit 1",
38 - "dev": "NODE_ENV=development node index.js",
39 - "prod": "NODE_ENV=production node index.js"
40 - },
41 - "author": "Jeongmin Seo, Jumi Yang",
42 -<<<<<<< HEAD
43 - "license": "ISC",
44 -=======
45 - "license": "MIT",
46 ->>>>>>> release_v0.2.0
47 - "keywords": [],
48 - "description": "Node.js API Server"
49 -}
1 -// const mysql = require("mysql");
2 -const { logger } = require("./winston");
3 -const mysql2 = require("mysql2/promise");
4 -
5 -// const db = mysql.createConnection({
6 -// host: process.env.DB_HOST,
7 -// user: process.env.DB_USER,
8 -// password: process.env.DB_PASSWORD,
9 -// database: process.env.DB_DATABASE, //schema
10 -// });
11 -
12 -const pool = mysql2.createPool({
13 - host: process.env.DB_HOST,
14 - user: process.env.DB_USER,
15 - password: process.env.DB_PASSWORD,
16 - database: process.env.DB_DATABASE, //schema
17 - connectionLimit: 10000,
18 - multipleStatements: true,
19 -});
20 -
21 -// db.connect();
22 -
23 -module.exports = {
24 - pool: pool,
25 -};
26 -
27 -
...\ No newline at end of file ...\ No newline at end of file
1 -const jwt = require("jsonwebtoken");
2 -const secret_config = require("./db");
3 -const jwtMiddleware = function (req, res, next) {
4 - // read the token from header or url
5 - const token = req.headers["x-access-token"] || req.query.token;
6 - // token does not exist
7 - if (!token) {
8 - return res.status(403).json({
9 - isSuccess: false,
10 - code: 403,
11 - message: "로그인이 되어 있지 않습니다.",
12 - });
13 - }
14 -
15 - try {
16 - const verifiedToken = jwt.verify(token, secret_config.jwtsecret);
17 - req.verifiedToken = verifiedToken;
18 - next();
19 - } catch {
20 - res.status(403).json({
21 - isSuccess: false,
22 - code: 403,
23 - message: "검증 실패",
24 - });
25 - }
26 -};
27 -
28 -module.exports = jwtMiddleware;
1 -const { createLogger, format, transports } = require('winston');
2 -require('winston-daily-rotate-file');
3 -const fs = require('fs');
4 -
5 -const env = process.env.NODE_ENV || 'development';
6 -const logDir = 'log';
7 -
8 -// https://lovemewithoutall.github.io/it/winston-example/
9 -// Create the log directory if it does not exist
10 -if (!fs.existsSync(logDir)) {
11 - fs.mkdirSync(logDir)
12 -}
13 -
14 -const dailyRotateFileTransport = new transports.DailyRotateFile({
15 - level: 'debug',
16 - filename: `${logDir}/%DATE%-smart-push.log`,
17 - datePattern: 'YYYY-MM-DD',
18 - zippedArchive: true,
19 - maxSize: '20m',
20 - maxFiles: '14d'
21 -});
22 -
23 -const logger = createLogger({
24 - level: env === 'development' ? 'debug' : 'info',
25 - format: format.combine(
26 - format.timestamp({
27 - format: 'YYYY-MM-DD HH:mm:ss'
28 - }),
29 - format.json()
30 - ),
31 - transports: [
32 - new transports.Console({
33 - level: 'info',
34 - format: format.combine(
35 - format.colorize(),
36 - format.printf(
37 - info => `${info.timestamp} ${info.level}: ${info.message}`
38 - )
39 - )
40 - }),
41 - dailyRotateFileTransport
42 - ]
43 -});
44 -
45 -module.exports = {
46 - logger: logger
47 -};
...\ No newline at end of file ...\ No newline at end of file
1 -'use strict';
2 -//for DB manipulate
3 -const RestaurantStorage = require("./RestaurantStorage");
4 -
5 -const {pool} = require("../config/db");
6 -const { logger } = require("../config/winston");
7 -const jwt = require("jsonwebtoken");
8 -
9 -exports.readRestaurants = async function (req,res) {
10 - const {category} = req.query;
11 -
12 - if (category) {
13 - const validCategory = ["한식", "중식", "일식", "양식", "분식", "구이", "회/초밥", "기타",];
14 -
15 - if (!validCategory.includes(category)) {
16 - return res.send({
17 - isSuccess: false,
18 - code: 400,
19 - message: "유효한 카테고리가 아닙니다.",
20 - });
21 - }
22 - }
23 -
24 - try {
25 - const connection = await pool.getConnection(async (conn) => conn);
26 - try {
27 - //mysql접속 관련 부분 정의하는 함수
28 - //es6 비구조할당
29 - const [rows] = await RestaurantStorage.selectRestaurants(connection, category);
30 -
31 - return res.send({
32 - result: rows,
33 - isSuccess: true,
34 - code: 200, // 요청 성공시 200번대 코드를 뿌려주고, 실패시 400번대 코드
35 - message: "식당 목록 요청 성공",
36 - });
37 - } catch (err) {
38 - logger.error(`readRestaurants Query error\n: ${JSON.stringify(err)}`);
39 - return false;
40 - } finally {
41 - connection.release();
42 - }
43 - } catch (err) {
44 - logger.error(`readRestaurants DB Connection error\n: ${JSON.stringify(err)}`);
45 - return false;
46 - }
47 -}
...\ No newline at end of file ...\ No newline at end of file
1 -'use strict';
2 -//for DB CRUD
3 -// const db = require("../config/db");
4 -const { pool } = require("../config/db");
5 -
6 -exports.selectRestaurants = async function (connection, category) {
7 -
8 - const selectAllRestaurantsQuery = `select title, address, category from restaurants where status='A';`;
9 - const selectCategorizedRestaurantsQuery = `select title, address, category from restaurants where status='A' and category=?;`;
10 -
11 - const Params = [category];
12 -
13 - const Query = category ? selectCategorizedRestaurantsQuery : selectAllRestaurantsQuery;
14 -
15 - const rows = await connection.query(Query, Params);
16 -
17 - return rows;
18 -
19 -}
...\ No newline at end of file ...\ No newline at end of file
1 -'use strict';
2 -//for DB manipulate
3 -const UserStorage = require("./UserStorage");
4 -const {pool} = require("../config/db");
5 -const { logger } = require("../config/winston");
6 -const jwt = require("jsonwebtoken");
7 -
8 -class User {
9 - constructor(body) {
10 - this.body = body;
11 - }
12 -
13 - async login() {
14 - const client = this.body;
15 -<<<<<<< HEAD
16 -
17 - try {
18 - try {
19 - const {id, password} = await UserStorage.getUserInfo(connection, client.id);
20 - // console.log(id, password);
21 -
22 - if (id) {
23 - if (id === client.id && password === client.password) {
24 - return { success: true};
25 - }
26 - return { success : false, msg: "비밀번호가 틀렸습니다."};
27 - }
28 - return {success: false, msg: "존재하지 않는 아이디입니다."};
29 - } catch (err) {
30 - return {success: false, msg: err};
31 - } finally {
32 - connection.release();
33 - }
34 - } catch (err) {
35 - logger.error(`login DB Connection error\n: ${JSON.stringify(err)}`);
36 - return false;
37 - }
38 - }
39 -
40 -=======
41 -
42 - try {
43 - const connection = await pool.getConnection(async (conn) => conn);
44 - try {
45 - const { id, password } = await UserStorage.getUserInfo(
46 - connection,
47 - client.id
48 - );
49 - if (id) {
50 - if (id === client.id && password === client.password) {
51 - return { success: true };
52 - }
53 - return { success: false, msg: "비밀번호가 틀렸습니다." };
54 - }
55 - return { success: false, msg: "존재하지 않는 아이디입니다." };
56 - } catch (err) {
57 - return { success: false, msg: err };
58 - } finally {
59 - connection.release();
60 - }
61 - } catch (err) {
62 - logger.error(`login DB Connection error\n: ${JSON.stringify(err)}`);
63 - return false;
64 - }
65 - }
66 -
67 ->>>>>>> release_v0.2.0
68 - async register() {
69 - const client = this.body;
70 - try {
71 - const connection = await pool.getConnection(async (conn) => conn);
72 - // console.log(client);
73 - try {
74 - const response = await UserStorage.save(connection, client);
75 - // console.log("테스트2 : ", response);
76 - return response;
77 - } catch (err) {
78 - console.log(err);
79 - return {success: false, msg : err};
80 - } finally {
81 - connection.release();
82 - }
83 - } catch (err) {
84 - logger.error(`usersaving DB Connection error\n: ${JSON.stringify(err)}`);
85 - return false;
86 - }
87 - }
88 -}
89 -module.exports = User;
1 -'use strict';
2 -
3 -const { pool } = require("../config/db");
4 -
5 - //for DB CRUD
6 -
7 -
8 -class UserStorage {
9 - constructor(body) {
10 - this.body = body;
11 - // this.connection = await pool.getConnection(async (conn) => conn);
12 - }
13 -
14 - // static getUsers(isAll, ...fields) {}
15 - static async getUserInfo(connection, id) {
16 -<<<<<<< HEAD
17 - return new Promise((resolve, reject) => {
18 - const query = "SELECT * FROM users WHERE id = ?;";
19 - connection.query(query, [id], (err, data) => {
20 - if (err) reject(`${err}`);
21 - // console.log(data[0]);
22 - resolve(data[0]);
23 - pool.releaseConnection(conn);
24 - });
25 - });
26 - }
27 -=======
28 - const query = `SELECT * FROM users WHERE id = '${id}';`;
29 - console.log(query);
30 - let [row] = await connection.query(query);
31 - console.log(row[0]);
32 - return row[0];
33 - // , [id], (err, data) => {
34 - // console.log("44444444");
35 - // if (err) reject(`${err}`);
36 - // resolve(data[0]);
37 - // pool.releaseConnection(conn);
38 - // });
39 - }
40 ->>>>>>> release_v0.2.0
41 -
42 - static async save (connection, userInfo) {
43 - const query = "INSERT INTO users(id, name, password) VALUES(?, ?, ?);";
44 - try {
45 - const [rows] = await connection.query({
46 - sql: query,
47 - timeout: 30000,
48 - values: [userInfo.id, userInfo.name, userInfo.password]
49 - });
50 - // console.log(fields);
51 - if (rows.affectedRows) {
52 - return {success: true};
53 - } else {
54 - return {success: false};
55 - }
56 - } catch (error) {
57 - console.log(error);
58 - }
59 - }
60 -
61 -}
62 -// static getUserInfo(id) {
63 -// return new Promise((resolve, reject) => {
64 -// const query = "SELECT * FROM users WHERE id = ?;";
65 -// pool.query(query, [id], (err, data) => {
66 -// if (err) reject(`${err}`);
67 -// // console.log(data[0]);
68 -// resolve(data[0]);
69 -// });
70 -// });
71 -// }
72 -
73 -module.exports = UserStorage;
...\ No newline at end of file ...\ No newline at end of file
1 -* {
2 - margin: 0;
3 - padding: 0;
4 -}
5 -
6 -html, body {
7 - height : 100%;
8 -}
9 -
10 -.wrapper {
11 - height : 100%;
12 - width: 100%;
13 - display: flex;
14 - flex-direction: column;
15 - overflow: hidden;
16 -}
17 -
18 -.user-container {
19 - background: rebeccapurple;
20 - flex: 1;
21 - display: flex;
22 - justify-content: flex-start;
23 - align-items: center;
24 - padding: 0.5rem;
25 -}
26 -
27 -.user-container .nickname {
28 - font-size : 14px;
29 - margin-right : 1.5rem;
30 - margin-left : 1rem;
31 - color:#fff;
32 -}
33 -
34 -.user-container input {
35 - border-radius: 3px;
36 - border: none;
37 - height: 80%;
38 -}
39 -
40 -.display-container {
41 - background: #D2D2FF;
42 - flex : 12;
43 - overflow-y:scroll;
44 -}
45 -
46 -.input-container {
47 - flex:1;
48 - display:flex;
49 - justify-content: stretch;
50 - align-items: stretch;
51 -}
52 -
53 -.input-container span {
54 - display: flex;
55 - justify-content: flex-start;
56 - align-items:center;
57 - padding: 0.3rem;
58 - width: 100%;
59 -}
60 -
61 -.chatting-input {
62 - font-size:12px;
63 - height:100%;
64 - flex:8;
65 - border:none;
66 -}
67 -
68 -.send-button {
69 - flex:1;
70 - background: rebeccapurple;
71 - color:#fff;
72 - border:none;
73 - height:100%;
74 - border-radius:3px;
75 -}
76 -
77 -.chatting-list li {
78 - width:50%;
79 - padding:0.3rem;
80 - display:flex;
81 - justify-content: flex-start;
82 - align-items:flex-end;
83 - margin-top:0.5rem;
84 -}
85 -
86 -.profile {
87 - display: flex;
88 - flex-direction: column;
89 - align-items: center;
90 - justify-content: center;
91 - flex: 1;
92 -}
93 -
94 -.profile .user {
95 - font-size: 10px;
96 - margin-bottom: 0.3rem;
97 -}
98 -
99 -.profile .image {
100 - border-radius: 50%;
101 - object-fit: cover;
102 - width: 50px;
103 - height: 50px;
104 -}
105 -
106 -.message {
107 - border-radius: 5px;
108 - padding: 0.5rem;
109 - font-size: 12px;
110 - margin: 0 5px;
111 - flex: 10;
112 -}
113 -
114 -.time {
115 - font-size: 10px;
116 - margin: 0 5px;
117 -}
118 -
119 -.sent {
120 - flex-direction: row-reverse;
121 - float: right;
122 -}
123 -
124 -.sent .message {
125 - background: #9986EE;
126 - color: #fff;
127 -}
128 -
129 -.received .message {
130 - background: #fff;
131 -}
...\ No newline at end of file ...\ No newline at end of file
1 -@font-face {
2 - font-family: 'Noto Sans KR', sans-serif;
3 - src: url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@700&display=swap');
4 - font-weight: normal;
5 - font-style: normal;
6 - }
7 -
8 - * {
9 - padding: 0;
10 - margin: 0;
11 - box-sizing: border-box;
12 - }
13 -
14 - html {
15 - font-size: 10px;
16 - font-family: 'Noto Sans KR', sans-serif;
17 - }
18 -
19 - nav {
20 - /* background-color: #e69a06; */
21 - }
22 -
23 - .nav-container {
24 - padding: 1rem 0;
25 - display: flex;
26 - flex-direction: row;
27 - justify-content: space-between;
28 - align-items: center;
29 - }
30 -
31 - .nav-title {
32 - font-size: 2.5rem;
33 - color :rebeccapurple;
34 - }
35 -
36 - .nav-contact {
37 - font-size: 1.5rem;
38 - border: 0;
39 - background: none;
40 - cursor: pointer;
41 - font-family: inherit;
42 - color :lightslategray;
43 -<<<<<<< HEAD
44 - margin-right: 30px;
45 -=======
46 - margin-right: 0px;
47 ->>>>>>> release_v0.2.0
48 - }
49 -
50 - .category-title {
51 - font-size: 2rem;
52 - padding : 0 30%;
53 - }
54 -
55 - .category-list {
56 - padding: 15px 1rem;
57 - }
58 -
59 - .category-item {
60 - width: 24%;
61 - height: 5rem;
62 - background: none;
63 - border: none;
64 - font-family: inherit;
65 - font-size: 1.6rem;
66 - }
67 -
68 - .category-item:hover {
69 - color: #e69a06;
70 - cursor: pointer;
71 - }
72 -
73 - .inner {
74 - padding: 0 1.5rem;
75 - }
76 -
77 - @media all and (min-width: 1024px) {
78 - .inner {
79 - max-width: 1024px;
80 - margin: 0 auto;
81 - }
82 - }
83 -
84 - /* 카카오맵 CSS */
85 -
86 - body {
87 - height: 100vh;
88 - }
89 -
90 - nav {
91 - height: 59px;
92 - }
93 -
94 - main {
95 - padding-top: 1.5rem;
96 - height: calc(100% - 59px);
97 - display: flex;
98 - flex-direction: column;
99 - }
100 -
101 - #map {
102 - flex-grow: 1;
103 - width: 100%;
104 - height: 100%;
105 - }
...\ No newline at end of file ...\ No newline at end of file
1 -@import url(https://fonts.googleapis.com/css?family=Roboto:300);
2 -
3 -.login-page {
4 - width: 360px;
5 - padding: 12% 0 0;
6 - margin: auto;
7 -}
8 -.form {
9 - position: relative;
10 - z-index: 1;
11 - background: #FFFFFF;
12 - max-width: 360px;
13 - margin: 0 auto 100px;
14 - padding: 45px;
15 - text-align: center;
16 - box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
17 -}
18 -.form input {
19 - font-family: "Roboto", sans-serif;
20 - outline: 0;
21 - background: #f2f2f2;
22 - width: 100%;
23 - border: 0;
24 - margin: 0 0 15px;
25 - padding: 15px;
26 - box-sizing: border-box;
27 - font-size: 14px;
28 -}
29 -.form #button {
30 - font-family: "Roboto", sans-serif;
31 - text-transform: uppercase;
32 - outline: 0;
33 - background: rebeccapurple;
34 - width: 89%;
35 - border: 0;
36 - margin: 0 auto;
37 - padding: 15px;
38 - color: #FFFFFF;
39 - font-size: 14px;
40 - -webkit-transition: all 0.3 ease;
41 - transition: all 0.3 ease;
42 - cursor: pointer;
43 -}
44 -.form #button:hover,.form #button:active,.form #button:focus {
45 - background: rebeccapurple;
46 -}
47 -.form .message {
48 - margin: 15px 0 0;
49 - color: #b3b3b3;
50 - font-size: 12px;
51 -}
52 -.form .message a {
53 - color: rebeccapurple;
54 - text-decoration: none;
55 -}
56 -.form .register-form {
57 - display: none;
58 -}
59 -.container {
60 - position: relative;
61 - z-index: 1;
62 - max-width: 300px;
63 - margin: 0 auto;
64 -}
65 -.container:before, .container:after {
66 - content: "";
67 - display: block;
68 - clear: both;
69 -}
70 -.container .info {
71 - margin: 50px auto;
72 - text-align: center;
73 -}
74 -.container .info h1 {
75 - margin: 0 0 15px;
76 - padding: 0;
77 - font-size: 36px;
78 - font-weight: 300;
79 - color: #1a1a1a;
80 -}
81 -.container .info span {
82 - color: #4d4d4d;
83 - font-size: 12px;
84 -}
85 -.container .info span a {
86 - color: #000000;
87 - text-decoration: none;
88 -}
89 -.container .info span .fa {
90 - color: #EF3B3A;
91 -}
92 -
93 -/* #id::placeholder #password::placeholder {
94 - color: black;
95 - font-style: italic;
96 - font-weight: bold;
97 -} */
98 -
99 -body {
100 - background: rebeccapurple; /* fallback for old browsers */
101 - /* background: rebeccapurple; */
102 - background: linear-gradient(90deg, rebeccapurple 0%, rebeccapurple 0%);
103 - font-family: "Roboto", sans-serif;
104 - -webkit-font-smoothing: antialiased;
105 - -moz-osx-font-smoothing: grayscale;
106 -}
107 -
108 -/* Copyright (c) 2022 by Aigars Silkalns (https://codepen.io/colorlib/pen/rxddKy) */
...\ No newline at end of file ...\ No newline at end of file
1 -/*인포윈도우 설정*/
2 -.infowindow {
3 - width : 25rem;
4 - border : 1px solid black;
5 - border-radius: 5px;
6 - background-color : white;
7 -}
8 -
9 -.infowindow-title {
10 -<<<<<<< HEAD
11 - font-size: 3rem;
12 -}
13 -
14 -.infowindow-address {
15 - font-size: 1.6rem;
16 -}
17 -
18 -.infowindow-btn {
19 - font-size: 1.6rem;
20 -=======
21 - font-size: 15px;
22 - color: rebeccapurple;
23 - font-weight: 600;
24 -}
25 -
26 -.infowindow-address {
27 - font-size: 8px;
28 -}
29 -
30 -.infowindow-btn {
31 - font-size: 8px;
32 ->>>>>>> release_v0.2.0
33 -}
...\ No newline at end of file ...\ No newline at end of file
1 -@import url(https://fonts.googleapis.com/css?family=Roboto:300);
2 -
3 -.login-page {
4 - width: 360px;
5 - padding: 8% 0 0;
6 - margin: auto;
7 -}
8 -.form {
9 - position: relative;
10 - z-index: 1;
11 - background: #FFFFFF;
12 - max-width: 360px;
13 - margin: 0 auto 100px;
14 - padding: 45px;
15 - text-align: center;
16 - box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
17 -}
18 -.form input {
19 - font-family: "Roboto", sans-serif;
20 - outline: 0;
21 - background: #f2f2f2;
22 - width: 100%;
23 - border: 0;
24 - margin: 0 0 15px;
25 - padding: 15px;
26 - box-sizing: border-box;
27 - font-size: 14px;
28 -}
29 -.form #button {
30 - font-family: "Roboto", sans-serif;
31 - text-transform: uppercase;
32 - outline: 0;
33 - background: rebeccapurple;
34 - width: 89%;
35 - border: 0;
36 - margin: 0 auto;
37 - padding: 15px;
38 - color: #FFFFFF;
39 - font-size: 14px;
40 - -webkit-transition: all 0.3 ease;
41 - transition: all 0.3 ease;
42 - cursor: pointer;
43 -}
44 -.form #button:hover,.form #button:active,.form #button:focus {
45 - background: rebeccapurple;
46 -}
47 -.form .message {
48 - margin: 15px 0 0;
49 - color: #b3b3b3;
50 - font-size: 12px;
51 -}
52 -.form .message a {
53 - color: rebeccapurple;
54 - text-decoration: none;
55 -}
56 -.form .register-form {
57 - display: none;
58 -}
59 -.container {
60 - position: relative;
61 - z-index: 1;
62 - max-width: 300px;
63 - margin: 0 auto;
64 -}
65 -.container:before, .container:after {
66 - content: "";
67 - display: block;
68 - clear: both;
69 -}
70 -.container .info {
71 - margin: 50px auto;
72 - text-align: center;
73 -}
74 -.container .info h1 {
75 - margin: 0 0 15px;
76 - padding: 0;
77 - font-size: 36px;
78 - font-weight: 300;
79 - color: #1a1a1a;
80 -}
81 -.container .info span {
82 - color: #4d4d4d;
83 - font-size: 12px;
84 -}
85 -.container .info span a {
86 - color: #000000;
87 - text-decoration: none;
88 -}
89 -.container .info span .fa {
90 - color: #EF3B3A;
91 -}
92 -
93 -/* #id::placeholder #password::placeholder {
94 - color: black;
95 - font-style: italic;
96 - font-weight: bold;
97 -} */
98 -
99 -body {
100 - background: rebeccapurple; /* fallback for old browsers */
101 - /* background: rebeccapurple; */
102 - background: linear-gradient(90deg, rebeccapurple 0%, rebeccapurple 0%);
103 - font-family: "Roboto", sans-serif;
104 - -webkit-font-smoothing: antialiased;
105 - -moz-osx-font-smoothing: grayscale;
106 -}
107 -
108 -/* Copyright (c) 2022 by Aigars Silkalns (https://codepen.io/colorlib/pen/rxddKy) */
...\ No newline at end of file ...\ No newline at end of file
1 -/*********************************************************************************
2 - * 1. 지도 생성 및 확대 축소 컨트롤러
3 - */
4 -
5 - var container = document.getElementById('map'); //지도를 담을 영역의 DOM 레퍼런스
6 - var options = { //지도를 생성할 때 필요한 기본 옵션
7 -<<<<<<< HEAD
8 - center: new kakao.maps.LatLng(37.54, 126.96), //지도의 중심좌표.
9 - level: 7 //지도의 레벨(확대, 축소 정도)
10 -=======
11 - center: new kakao.maps.LatLng(37.248, 127.08), //지도의 중심좌표.
12 - level: 4 //지도의 레벨(확대, 축소 정도)
13 ->>>>>>> release_v0.2.0
14 - };
15 -
16 - var map = new kakao.maps.Map(container, options); //지도 생성 및 객체 리턴
17 -
18 - // 확대 축소 컨트롤러
19 - var zoomControl = new kakao.maps.ZoomControl();
20 - map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);
21 -
22 - /******************************************************************************
23 - * 2. 데이터 준비하기(제목, 주소, 카테고리)
24 - */
25 -
26 -<<<<<<< HEAD
27 -const dataSet = [
28 - {
29 - title: "희락돈까스",
30 - address: "서울 영등포구 양산로 210",
31 - category: "양식",
32 - },
33 - {
34 - title: "즉석우동짜장",
35 - address: "서울 영등포구 대방천로 260",
36 - category: "한식",
37 - },
38 - {
39 - title: "아카사카",
40 - address: "서울 서초구 서초대로74길 23",
41 - category: "일식",
42 - }
43 -];
44 -
45 -// async function getDataSet(category) {
46 -// let qs = category;
47 -// if(!qs) {
48 -// qs = "";
49 -// }
50 -
51 -// const dataSet = await axios({
52 -// method: "get", // http method
53 -// url: `http://localhost:3000/restaurants?category=${qs}`,
54 -// headers: {},
55 -// data: {},
56 -// });
57 -
58 -// return dataSet.data.result;
59 -// }
60 -
61 -// getDataSet();
62 -=======
63 -// const dataSet = [
64 -// {
65 -// title: "희락돈까스",
66 -// address: "서울 영등포구 양산로 210",
67 -// category: "양식",
68 -// },
69 -// {
70 -// title: "즉석우동짜장",
71 -// address: "서울 영등포구 대방천로 260",
72 -// category: "한식",
73 -// },
74 -// {
75 -// title: "아카사카",
76 -// address: "서울 서초구 서초대로74길 23",
77 -// category: "일식",
78 -// }
79 -// ];
80 -
81 - async function getDataSet(category) {
82 - let qs = category;
83 - if(!qs) {
84 - qs = "";
85 - }
86 -
87 - const dataSet = await axios({
88 - method: "get", // http method
89 - url: `http://localhost:3000/restaurants?category=${qs}`,
90 - headers: {},
91 - data: {},
92 - });
93 - // console.log(dataSet);
94 -
95 - return dataSet.data.result;
96 -}
97 -
98 -// }
99 -
100 - getDataSet();
101 ->>>>>>> release_v0.2.0
102 -
103 - /******************************************************************************
104 - * 3. 여러개 마커찍기
105 - */
106 -
107 - // 주소-좌표 변환 객체를 생성합니다
108 - var geocoder = new kakao.maps.services.Geocoder();
109 -
110 - function getCoordsByAddress(address) {
111 - return new Promise((resolve, reject) => {
112 - // 주소로 좌표를 검색합니다
113 - geocoder.addressSearch(address, function (result, status) {
114 - // 정상적으로 검색이 완료됐으면
115 - if (status === kakao.maps.services.Status.OK) {
116 - var coords = new kakao.maps.LatLng(result[0].y, result[0].x);
117 - return resolve(coords);
118 - }
119 - reject(new Error("getCoordsByAddress Error: not valid Address"));
120 - });
121 - });
122 - }
123 -
124 -<<<<<<< HEAD
125 - setMap(dataSet);
126 -=======
127 -// setMap(dataSet);
128 ->>>>>>> release_v0.2.0
129 -
130 - /*
131 - *************************************************************
132 - 4. 마커에 인포윈도우 붙이기
133 - */
134 -
135 - function getContent(data) {
136 - // 인포윈도우 가공하기
137 - return `
138 - <div class="infowindow">
139 - <div class="infowindow-body">
140 - <h5 class="infowindow-title">${data.title}</h5>
141 - <p class="infowindow-address">${data.address}</p>
142 - <a href='/chat' class="infowindow-btn" target="_blank">채팅방이동</a>
143 - </div>
144 - </div>
145 - `;
146 - }
147 -
148 - async function setMap(dataSet) {
149 - for (var i = 0; i < dataSet.length; i++) {
150 - // 마커를 생성합니다
151 - let coords = await getCoordsByAddress(dataSet[i].address);
152 - var marker = new kakao.maps.Marker({
153 - map: map, // 마커를 표시할 지도
154 - position: coords,
155 - });
156 -
157 - markerArray.push(marker);
158 -
159 - // 마커에 표시할 인포윈도우를 생성합니다
160 - var infowindow = new kakao.maps.InfoWindow({
161 - content: getContent(dataSet[i]),// 인포윈도우에 표시할 내용
162 - });
163 -
164 - infowindowArray.push(infowindow);
165 -
166 - // 마커에 mouseover 이벤트와 mouseout 이벤트를 등록합니다
167 - // 이벤트 리스너로는 클로저를 만들어 등록합니다
168 - // for문에서 클로저를 만들어 주지 않으면 마지막 마커에만 이벤트가 등록됩니다
169 - kakao.maps.event.addListener(marker, 'click', makeOverListener(map, marker, infowindow, coords));
170 - kakao.maps.event.addListener(map, 'click', makeOutListener(infowindow));
171 - }
172 - }
173 -
174 - // 인포윈도우를 표시하는 클로저를 만드는 함수입니다
175 - function makeOverListener(map, marker, infowindow, coords) {
176 - return function() {
177 - // 1. 클릭시 다른 인포윈도우 닫기
178 - closeInfoWindow();
179 - infowindow.open(map, marker);
180 - // 2. 클릭한 곳으로 지도 중심 옮기기
181 - map.panTo(coords);
182 - };
183 - }
184 -
185 - let infowindowArray = [];
186 - function closeInfoWindow() {
187 - for (let infowindow of infowindowArray) {
188 - infowindow.close();
189 - }
190 - }
191 -
192 - // 인포윈도우를 닫는 클로저를 만드는 함수입니다
193 - function makeOutListener(infowindow) {
194 - return function() {
195 - infowindow.close();
196 - };
197 - }
198 -
199 - /*
200 - **********************************************
201 - 5. 카테고리 분류
202 - */
203 -
204 - // 카테고리
205 - const categoryMap = {
206 - korea: "한식",
207 - china: "중식",
208 - japan: "일식",
209 - america: "양식",
210 - wheat: "분식",
211 - meat: "구이",
212 - sushi: "회/초밥",
213 - etc: "기타",
214 - };
215 -
216 - const categoryList = document.querySelector(".category-list");
217 - categoryList.addEventListener("click", categoryHandler);
218 -
219 - async function categoryHandler(event) {
220 - const categoryId = event.target.id;
221 - const category = categoryMap[categoryId];
222 -
223 -<<<<<<< HEAD
224 -=======
225 -
226 ->>>>>>> release_v0.2.0
227 - try {
228 - // 데이터 분류
229 - let categorizedDataSet = await getDataSet(category);
230 -
231 - // 기존 마커 삭제
232 - closeMarker();
233 -
234 - // 기존 인포윈도우 닫기
235 - closeInfoWindow();
236 -
237 - setMap(categorizedDataSet);
238 -
239 - } catch (error) {
240 - console.error(error);
241 - }
242 - }
243 -
244 - let markerArray = [];
245 - function closeMarker() {
246 - for (marker of markerArray) {
247 - marker.setMap(null);
248 - }
249 - }
250 -
251 -<<<<<<< HEAD
252 - setMap(dataSet);
253 -
254 -// async function setting() {
255 -// try {
256 -// const dataSet = await getDataSet();
257 -// setMap(dataSet);
258 -
259 -// } catch (error) {
260 -// console.error(error);
261 -// }
262 -// }
263 -
264 -// setting();
265 -=======
266 - async function setting() {
267 - try {
268 - const dataSet = await getDataSet();
269 - setMap(dataSet);
270 - } catch (error) {
271 - console.error(error);
272 - }
273 - }
274 -
275 - setting();
276 ->>>>>>> release_v0.2.0
1 -"use strict";
2 -
3 -const socketIO = require("socket.io");
4 -const http = require("http");
5 -const app = express();
6 -const server = http.createServer(app);
7 -const io = socketIO(server);
8 -const socket = io();
9 -//.connect("http://localhost:3000/chat", {transports:['websocket']});
10 -
11 -const nickname = document.querySelector("#nickname")
12 -const chatlist = document.querySelector(".chatting-list")
13 -const chatInput = document.querySelector(".chatting-input")
14 -const sendButton = document.querySelector(".send-button")
15 -const displayContainer = document.querySelector(".display-container")
16 -
17 -chatInput.addEventListener("keypress", (event)=> {
18 - if(event.keyCode === 13) {
19 - send()
20 - }
21 -})
22 -
23 -function send() {
24 - const param = {
25 - name: nickname.value,
26 - msg: chatInput.value
27 - }
28 - socket.emit("chatting", param)
29 -}
30 -
31 -sendButton.addEventListener("click", send)
32 -
33 -socket.on("chatting", (data)=>{
34 - console.log(data)
35 - const {name, msg, time} = data;
36 - const item = new LiModel(name, msg, time);
37 - item.makeLi()
38 - displayContainer.scrollTo(0, displayContainer.scrollHeight)
39 -})
40 -
41 -//console.log(socket);
42 -
43 -function LiModel(name, msg, time) {
44 - this.name = name;
45 - this.msg = msg;
46 - this.time = time;
47 -
48 - this.makeLi = ()=>{
49 - const li = document.createElement("li");
50 - li.classList.add(nickname.value === this.name ? "sent":"received")
51 - const dom = `<span class="profile">
52 - <span class="user">${this.name}</span>
53 - <img class="image" src="https://placeimg.com/50/50/any" alt="any">
54 - </span>
55 - <span class="message">${this.msg}</span>
56 - <span class="time">${this.time}</span>`;
57 -
58 - li.innerHTML = dom;
59 - chatlist.appendChild(li)
60 - }
61 -}
...\ No newline at end of file ...\ No newline at end of file
1 -'use strict';
2 -
3 -const id = document.querySelector("#id"),
4 - password = document.querySelector("#password"),
5 - loginBtn = document.querySelector("#button");
6 -
7 -loginBtn.addEventListener("click", login);
8 -
9 -function login() {
10 - const req = {
11 - id : id.value,
12 - password : password.value,
13 - };
14 -
15 -<<<<<<< HEAD
16 -=======
17 - // console.log("login value : ", id.value);
18 ->>>>>>> release_v0.2.0
19 - fetch("/login", {
20 - method: "POST",
21 - headers: {
22 - "Content-Type": "application/json"
23 - },
24 - body: JSON.stringify(req),
25 - })
26 - .then((res) => res.json())
27 - .then((res) => {
28 - if (res.success) {
29 - //성공하면 이동
30 - location.href = "/";
31 - } else {
32 - alert(res.msg);
33 - }
34 - })
35 - .catch((err) => {
36 - console.error("로그인 중 에러 발생");
37 - });
38 -}
...\ No newline at end of file ...\ No newline at end of file
1 -'use strict';
2 -
3 -const id = document.querySelector("#id"),
4 - name = document.querySelector("#name"),
5 - password = document.querySelector("#password"),
6 - confirmPassword = document.querySelector("#confirm-password"),
7 - registerBtn = document.querySelector("#button");
8 -
9 -registerBtn.addEventListener("click", register);
10 -
11 -async function register() {
12 - if(!id.value) {
13 - return alert("아이디를 입력해주세요.")
14 - }
15 -<<<<<<< HEAD
16 -
17 -=======
18 ->>>>>>> release_v0.2.0
19 - if(!name.value) {
20 - return alert("이름을 입력해주세요.")
21 - }
22 - if(!password.value) {
23 - return alert("비밀번호를 입력해주세요.")
24 - }
25 - if(!confirmPassword.value) {
26 - return alert("비밀번호를 확인해주세요.")
27 - }
28 - if (password.value !== confirmPassword.value) {
29 - return alert("비밀번호가 일치하지 않습니다.")
30 - }
31 -<<<<<<< HEAD
32 -
33 -=======
34 -
35 ->>>>>>> release_v0.2.0
36 - const req = {
37 - id: id.value,
38 - name: name.value,
39 - password: password.value,
40 - };
41 -
42 -<<<<<<< HEAD
43 - console.log("id : ", req.id);
44 - try {
45 - const response = await fetch("/register", {
46 - method: "POST",
47 - headers: {
48 - "Content-Type": "application/json"
49 - },
50 - body: JSON.stringify(req),
51 - });
52 - console.log("테스트 : ", response);
53 - } catch(e) {
54 - console.log(e);
55 - }
56 -=======
57 - fetch("/register", {
58 - method: "POST",
59 - headers: {
60 - "Content-Type": "application/json",
61 - },
62 - body: JSON.stringify(req),
63 - })
64 - .then((res) => res.json())
65 - .then((res) => {
66 - if (res.success) {
67 - location.href = "/login";
68 - } else {
69 - if (res.err) return alert(res.err);
70 - alert(res.msg);
71 - }
72 - })
73 - .catch((err) => {
74 - console.error("회원가입 중 에러 발생");
75 - });
76 -
77 - // try {
78 - // const response = await fetch("/register", {
79 - // method: "POST",
80 - // headers: {
81 - // "Content-Type": "application/json"
82 - // },
83 - // body: JSON.stringify(req),
84 - // });
85 - // console.log("테스트 : ", response);
86 - // } catch(e) {
87 - // console.log(e);
88 - // }
89 ->>>>>>> release_v0.2.0
90 -
91 -}
...\ No newline at end of file ...\ No newline at end of file
1 -"use strict";
2 -
3 -const User = require("../../models/User");
4 -// const Restaurant = require("../../models/Restaurant");
5 -
6 -const output = {
7 - hello: (req, res) => {
8 - res.render("home/index");
9 - },
10 -
11 - login: (req, res) => {
12 - res.render("home/login");
13 - },
14 -
15 - register: (req, res) => {
16 - res.render("home/register");
17 - },
18 -
19 -<<<<<<< HEAD
20 -=======
21 - chat: (req, res) => {
22 - res.render("home/chat");
23 - },
24 -
25 ->>>>>>> release_v0.2.0
26 - // restaurants: (req, res) => {
27 - // res.render("home/restaurants");
28 - // }
29 -};
30 -
31 -const process = {
32 - login: async (req, res) => {
33 - const user = new User(req.body);
34 - const response = await user.login();
35 - return res.json(response);
36 - },
37 -
38 - register: async (req, res) => {
39 - const user = new User(req.body);
40 - const response = await user.register();
41 -<<<<<<< HEAD
42 -=======
43 - // console.log("req.body", req.body);
44 ->>>>>>> release_v0.2.0
45 - // console.log(res.json(response));
46 - // console.log(res.json(response).statusCode); => 이거도 잘 찍혔음.
47 - return res.json(response);
48 - },
49 -
50 - // restaurants: async (req, res) => {
51 - // const restaurant = new Restaurant(req.body);
52 - // const response = await restaurant.restaurants();
53 - // return res.json(response);
54 - // },
55 -};
56 -
57 -module.exports = {
58 - output,
59 - process,
60 -};
...\ No newline at end of file ...\ No newline at end of file
1 -"use strict";
2 -
3 -const express = require("express");
4 -const router = express.Router();
5 -const jwtMiddleware = require("../../config/jwtMiddleware");
6 -// const Restaurant = require("../../models/Restaurant");
7 -
8 -const ctrl = require("./home.ctrl");
9 -<<<<<<< HEAD
10 -=======
11 -const index = require("../../models/Restaurant");
12 ->>>>>>> release_v0.2.0
13 -
14 -router.get("/", ctrl.output.hello);
15 -router.get("/login", ctrl.output.login);
16 -router.get("/register", ctrl.output.register);
17 -<<<<<<< HEAD
18 -=======
19 -router.get("/restaurants", index.readRestaurants);
20 -router.get("/chat", ctrl.output.chat);
21 ->>>>>>> release_v0.2.0
22 -// router.get("/restaurants", Restaurant.restaurants);
23 -// router.get("/restaurants", ctrl.output.restaurants);
24 -
25 -router.post("/login", ctrl.process.login);
26 -router.post("/register", ctrl.process.register);
27 -
28 -module.exports = router;
...\ No newline at end of file ...\ No newline at end of file
1 -module.exports = function (app) {
2 - //controller갖고있는 모듈 생성
3 - const index = require("../../models/Restaurant");
4 - // const user = require("../../models/User");
5 - const jwtMiddleware = require("../../config/jwtMiddleware");
6 -
7 - // 식당 목록 조회
8 - app.get("/restaurants", index.readRestaurants);
9 - };
10 -
...\ No newline at end of file ...\ No newline at end of file
1 -<!DOCTYPE html>
2 -<html lang="en">
3 - <head>
4 - <meta charset="UTF-8" />
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 -<<<<<<< HEAD
8 - <title>채팅</title>
9 - </head>
10 - <body></body>
11 -=======
12 - <title>채팅방</title>
13 - <link rel="stylesheet" href="/css/home/chat.css" />
14 - </head>
15 - <body>
16 - <div class="wrapper">
17 - <div class="user-container">
18 - <lable class="nickname" for="nickname">닉네임설정</lable>
19 - <input type="text" id="nickname" />
20 - </div>
21 - <div class="display-container">
22 - <ul class="chatting-list"></ul>
23 - </div>
24 - <div class="input-container">
25 - <span>
26 - <input type="text" class="chatting-input" />
27 - <button class="send-button">전송</button>
28 - </span>
29 - </div>
30 - </div>
31 - <script
32 - src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.1/socket.io.js"
33 - integrity="sha512-9mpsATI0KClwt+xVZfbcf2lJ8IFBAwsubJ6mI3rtULwyM3fBmQFzj0It4tGqxLOGQwGfJdk/G+fANnxfq9/cew=="
34 - crossorigin="anonymous"
35 - referrerpolicy="no-referrer"
36 - ></script>
37 - <script src="/js/home/chat.js"></script>
38 - </body>
39 ->>>>>>> release_v0.2.0
40 -</html>
1 -<!DOCTYPE html>
2 -<html lang="en">
3 - <head>
4 - <meta charset="UTF-8" />
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 - <title>맛집지도</title>
8 - <meta name="author" content="양주미" />
9 - <meta name="description" content="맛집지도 서비스" />
10 - <meta name="keywords" content="맛집지도, 맛집추천, 실시간채팅" />
11 - <link rel="stylesheet" href="/css/home/index.css" />
12 -<<<<<<< HEAD
13 - <script src="/js/home/axios-index.js"></script>
14 -=======
15 - <link rel="stylesheet" href="/css/home/map.css" />
16 ->>>>>>> release_v0.2.0
17 - </head>
18 - <body>
19 - <nav>
20 - <div class="inner">
21 - <div class="nav-container">
22 - <h1 class="nav-title">맛집지도</h1>
23 -<<<<<<< HEAD
24 - <button class="nav-contact">Chatting Rooms</button>
25 -=======
26 - <button class="nav-contact">Contact : balljm@naver.com</button>
27 ->>>>>>> release_v0.2.0
28 - </div>
29 - </div>
30 - </nav>
31 -
32 - <main>
33 - <section id="category">
34 - <div class="inner">
35 - <div class="category-container">
36 - <h2 class="category-title">💜맛집지도 카테고리를 선택해보세요💜</h2>
37 - <div class="category-list">
38 - <button class="category-item" id="korea">한식🍚</button>
39 - <button class="category-item" id="china">중식🍜</button>
40 - <button class="category-item" id="japan">일식🍙</button>
41 - <button class="category-item" id="america">양식🍝</button>
42 - <button class="category-item" id="wheat">분식🍭</button>
43 - <button class="category-item" id="meat">구이🍖</button>
44 - <button class="category-item" id="sushi">회/초밥🍣</button>
45 - <button class="category-item" id="etc">기타🍴</button>
46 - </div>
47 - </div>
48 - </div>
49 - </section>
50 - <!-- 카테고리 -->
51 - <div id="map" class="inner"></div>
52 -
53 - <!-- 카카오지도 -->
54 - </main>
55 -
56 - <script
57 - type="text/javascript"
58 - src="//dapi.kakao.com/v2/maps/sdk.js?appkey=e55f753363b95e27b799aa6286a6c398&libraries=services"
59 - ></script>
60 -<<<<<<< HEAD
61 - <!-- <script
62 -=======
63 - <script
64 ->>>>>>> release_v0.2.0
65 - src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.0.0-alpha.1/axios.min.js"
66 - integrity="sha512-xIPqqrfvUAc/Cspuj7Bq0UtHNo/5qkdyngx6Vwt+tmbvTLDszzXM0G6c91LXmGrRx8KEPulT+AfOOez+TeVylg=="
67 - crossorigin="anonymous"
68 - referrerpolicy="no-referrer"
69 -<<<<<<< HEAD
70 - ></script> -->
71 -=======
72 - ></script>
73 - <script src="/js/home/axios-index.js"></script>
74 ->>>>>>> release_v0.2.0
75 - </body>
76 -</html>
1 -<!DOCTYPE html>
2 -<html lang="ko">
3 - <head>
4 - <meta charset="UTF-8" />
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 - <link rel="stylesheet" href="/css/home/login.css" />
8 - <script src="/js/home/login.js" defer></script>
9 - <title>로그인</title>
10 - </head>
11 - <body>
12 - <div class="login-page">
13 - <div class="form">
14 - <!-- <form class="register-form">
15 - <input type="text" placeholder="name" />
16 - <input type="password" placeholder="password" />
17 - <input type="text" placeholder="email address" />
18 - <button>create</button>
19 - <p class="message">Already registered? <a href="#">Sign In</a></p>
20 - </form> -->
21 - <form class="login-form">
22 - <input id="id" type="text" placeholder="아이디" />
23 - <input id="password" type="password" placeholder="비밀번호" />
24 - <p id="button">LOGIN</p>
25 - <p class="message">
26 - 계정이 없으신가요? <a href="/register">회원가입</a>
27 - </p>
28 - </form>
29 - </div>
30 - </div>
31 - </body>
32 -</html>
33 -
34 -<!-- Copyright (c) 2022 by Aigars Silkalns (https://codepen.io/colorlib/pen/rxddKy) -->
1 -<!DOCTYPE html>
2 -<html lang="ko">
3 - <head>
4 - <meta charset="UTF-8" />
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 - <link rel="stylesheet" href="/css/home/register.css" />
8 - <script src="/js/home/register.js" defer></script>
9 - <title>회원가입</title>
10 - </head>
11 - <body>
12 - <div class="login-page">
13 - <div class="form">
14 - <!-- <form class="register-form">
15 - <input type="text" placeholder="name" />
16 - <input type="password" placeholder="password" />
17 - <input type="text" placeholder="email address" />
18 - <button>create</button>
19 - <p class="message">Already registered? <a href="#">Sign In</a></p>
20 - </form> -->
21 - <form class="login-form">
22 - <input id="id" type="text" placeholder="아이디" />
23 - <input id="name" type="text" placeholder="이름" />
24 - <input id="password" type="password" placeholder="비밀번호" />
25 - <input
26 - id="confirm-password"
27 - type="password"
28 - placeholder="비밀번호 확인"
29 - />
30 - <p id="button">SIGN UP</p>
31 - <p class="message">계정이 있으신가요? <a href="/login">로그인</a></p>
32 - </form>
33 - </div>
34 - </div>
35 - </body>
36 -</html>
37 -
38 -<!-- Copyright (c) 2022 by Aigars Silkalns (https://codepen.io/colorlib/pen/rxddKy) -->
1 -{
2 - "lockfileVersion": 1
3 -}
1 -/*인포윈도우 설정*/
2 -.infowindow {
3 - width : 25rem;
4 - border : 1px solid black;
5 - border-radius: 5px;
6 - background-color : white;
7 -}
8 -
9 -.infowindow-title {
10 - font-size: 3rem;
11 -}
12 -
13 -.infowindow-address {
14 - font-size: 1.6rem;
15 -}
16 -
17 -.infowindow-btn {
18 - font-size: 1.6rem;
19 -}
...\ No newline at end of file ...\ No newline at end of file
1 -/*********************************************************************************
2 - * 1. 지도 생성 및 확대 축소 컨트롤러
3 - */
4 -
5 -var container = document.getElementById('map'); //지도를 담을 영역의 DOM 레퍼런스
6 -var options = { //지도를 생성할 때 필요한 기본 옵션
7 - center: new kakao.maps.LatLng(37.54, 126.96), //지도의 중심좌표.
8 - level: 7 //지도의 레벨(확대, 축소 정도)
9 -};
10 -
11 -var map = new kakao.maps.Map(container, options); //지도 생성 및 객체 리턴
12 -
13 -// 확대 축소 컨트롤러
14 -var zoomControl = new kakao.maps.ZoomControl();
15 -map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);
16 -
17 -/******************************************************************************
18 - * 2. 더미데이터 준비하기(제목, 주소, 카테고리)
19 - */
20 -
21 - const dataSet = [
22 - {
23 - title: "희락돈까스",
24 - address: "서울 영등포구 양산로 210",
25 - category: "양식",
26 - },
27 - {
28 - title: "즉석우동짜장",
29 - address: "서울 영등포구 대방천로 260",
30 - category: "한식",
31 - },
32 - {
33 - title: "아카사카",
34 - address: "서울 서초구 서초대로74길 23",
35 - category: "일식",
36 - },
37 - {
38 - title: "한우만",
39 - address: "서울 서초구 서초3동 효령로 216",
40 - category: "한식",
41 - },
42 -
43 - ];
44 -
45 -
46 -/******************************************************************************
47 - * 3. 여러개 마커찍기
48 - */
49 -
50 -// 주소-좌표 변환 객체를 생성합니다
51 -var geocoder = new kakao.maps.services.Geocoder();
52 -
53 -function getCoordsByAddress(address) {
54 - return new Promise((resolve, reject) => {
55 - // 주소로 좌표를 검색합니다
56 - geocoder.addressSearch(address, function (result, status) {
57 - // 정상적으로 검색이 완료됐으면
58 - if (status === kakao.maps.services.Status.OK) {
59 - var coords = new kakao.maps.LatLng(result[0].y, result[0].x);
60 - return resolve(coords);
61 - }
62 - reject(new Error("getCoordsByAddress Error: not valid Address"));
63 - });
64 - });
65 -}
66 -
67 -setMap(dataSet);
68 -
69 -/*
70 -*************************************************************
71 -4. 마커에 인포윈도우 붙이기
72 -*/
73 -
74 -function getContent(data) {
75 - // 인포윈도우 가공하기
76 - return `
77 - <div class="infowindow">
78 - <div class="infowindow-body">
79 - <h5 class="infowindow-title">${data.title}</h5>
80 - <p class="infowindow-address">${data.address}</p>
81 - <a href='/chat' class="infowindow-btn" target="_blank">채팅방이동</a>
82 - </div>
83 - </div>
84 - `;
85 -}
86 -
87 -async function setMap(dataSet) {
88 - for (var i = 0; i < dataSet.length; i++) {
89 - // 마커를 생성합니다
90 - let coords = await getCoordsByAddress(dataSet[i].address);
91 - var marker = new kakao.maps.Marker({
92 - map: map, // 마커를 표시할 지도
93 - position: coords,
94 - });
95 -
96 - markerArray.push(marker);
97 -
98 - // 마커에 표시할 인포윈도우를 생성합니다
99 - var infowindow = new kakao.maps.InfoWindow({
100 - content: getContent(dataSet[i]),// 인포윈도우에 표시할 내용
101 - });
102 -
103 - infowindowArray.push(infowindow);
104 -
105 - // 마커에 mouseover 이벤트와 mouseout 이벤트를 등록합니다
106 - // 이벤트 리스너로는 클로저를 만들어 등록합니다
107 - // for문에서 클로저를 만들어 주지 않으면 마지막 마커에만 이벤트가 등록됩니다
108 - kakao.maps.event.addListener(marker, 'click', makeOverListener(map, marker, infowindow, coords));
109 - kakao.maps.event.addListener(map, 'click', makeOutListener(infowindow));
110 - }
111 - }
112 -
113 - // 인포윈도우를 표시하는 클로저를 만드는 함수입니다
114 -function makeOverListener(map, marker, infowindow, coords) {
115 - return function() {
116 - // 1. 클릭시 다른 인포윈도우 닫기
117 - closeInfoWindow();
118 - infowindow.open(map, marker);
119 - // 2. 클릭한 곳으로 지도 중심 옮기기
120 - map.panTo(coords);
121 - };
122 -}
123 -
124 -let infowindowArray = [];
125 -function closeInfoWindow() {
126 - for (let infowindow of infowindowArray) {
127 - infowindow.close();
128 - }
129 -}
130 -
131 -// 인포윈도우를 닫는 클로저를 만드는 함수입니다
132 -function makeOutListener(infowindow) {
133 - return function() {
134 - infowindow.close();
135 - };
136 -}
137 -
138 -/*
139 -**********************************************
140 -5. 카테고리 분류
141 -*/
142 -
143 -// 카테고리
144 -const categoryMap = {
145 - korea: "한식",
146 - china: "중식",
147 - japan: "일식",
148 - america: "양식",
149 - wheat: "분식",
150 - meat: "구이",
151 - sushi: "회/초밥",
152 - etc: "기타",
153 - };
154 -
155 -const categoryList = document.querySelector(".category-list");
156 -categoryList.addEventListener("click", categoryHandler);
157 -
158 -function categoryHandler(event) {
159 - const categoryId = event.target.id;
160 - const category = categoryMap[categoryId];
161 -
162 - // 데이터 분류
163 - let categorizedDataSet = [];
164 - for (let data of dataSet) {
165 - if (data.category === category) {
166 - categorizedDataSet.push(data);
167 - }
168 - }
169 -
170 - // 기존 마커 삭제
171 - closeMarker();
172 -
173 - // 기존 인포윈도우 닫기
174 - closeInfoWindow();
175 -
176 - setMap(categorizedDataSet);
177 -}
178 -
179 -let markerArray = [];
180 -function closeMarker() {
181 - for (marker of markerArray) {
182 - marker.setMap(null);
183 - }
184 -}
...\ No newline at end of file ...\ No newline at end of file