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