김대연

Merge branch 'kdysy1130-socket' into 'master'

Kdysy1130 socket

kdysy1130-socket branch에
env, config설정
socket example server 만듦.

See merge request !2
1 +node_modules
2 +.env
1 +const path = require('path')
2 +require('dotenv').config({path: path.join(__dirname, "../.env")})
3 +
4 +const ip = process.env.IP || null
5 +const s_port = process.env.SOCKET_PORT || null
6 +const token = process.env.TOKEN || null
7 +
8 +module.exports = {
9 + 'ip' : ip,
10 + 's_port' : s_port,
11 + 'token' : token
12 +}
1 +const config = require('../config/config')
2 +const request = require('request');
3 +
4 +const PAPAGO_URL = 'https://openapi.naver.com/v1/papago/n2mt'
5 +const dPAPAGO_URL = 'https://openapi.naver.com/v1/papago/detectLangs'
6 +const PAPAGO_ID = process.env.PAPAGO_ID
7 +const PAPAGO_SECRET = process.env.PAPAGO_SECRET
8 +
9 +exports.trans = (message, lang, io, room) => {
10 + request.post(
11 + {
12 + url: PAPAGO_URL,
13 + headers: {
14 + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
15 + 'X-Naver-Client-Id': `${PAPAGO_ID}`,
16 + 'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
17 + },
18 + body: `source=${lang}&target=ko&text=` + message,
19 + json:true
20 + },(error, response, body) => {
21 + if(!error && response.statusCode == 200) {
22 + var Translated = body.message.result.translatedText;
23 + io.to(room).emit('chat message', "trans", Translated);
24 + }
25 + });
26 +}
27 +
28 +
29 +exports.detect = (message,io,room) => {
30 + request.post(
31 + {
32 + url: dPAPAGO_URL,
33 + headers: {
34 + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
35 + 'X-Naver-Client-Id': `${PAPAGO_ID}`,
36 + 'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
37 + },
38 + body: `query=` + message,
39 + json:true
40 + },(error, response, body) => {
41 + if(!error && response.statusCode == 200) {
42 + var lang = body.langCode;
43 + if(lang != 'ko'){
44 + this.trans(message,lang,io,room)
45 + }
46 + }
47 + });
48 +}
1 +{
2 + "name": "khuwitch-server",
3 + "version": "1.0.0",
4 + "lockfileVersion": 1,
5 + "requires": true,
6 + "dependencies": {
7 + "@types/body-parser": {
8 + "version": "1.19.0",
9 + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
10 + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==",
11 + "requires": {
12 + "@types/connect": "*",
13 + "@types/node": "*"
14 + }
15 + },
16 + "@types/component-emitter": {
17 + "version": "1.2.10",
18 + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz",
19 + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg=="
20 + },
21 + "@types/connect": {
22 + "version": "3.4.33",
23 + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz",
24 + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==",
25 + "requires": {
26 + "@types/node": "*"
27 + }
28 + },
29 + "@types/cookie": {
30 + "version": "0.4.0",
31 + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz",
32 + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg=="
33 + },
34 + "@types/cors": {
35 + "version": "2.8.8",
36 + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.8.tgz",
37 + "integrity": "sha512-fO3gf3DxU2Trcbr75O7obVndW/X5k8rJNZkLXlQWStTHhP71PkRqjwPIEI0yMnJdg9R9OasjU+Bsr+Hr1xy/0w==",
38 + "requires": {
39 + "@types/express": "*"
40 + }
41 + },
42 + "@types/express": {
43 + "version": "4.17.9",
44 + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz",
45 + "integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==",
46 + "requires": {
47 + "@types/body-parser": "*",
48 + "@types/express-serve-static-core": "*",
49 + "@types/qs": "*",
50 + "@types/serve-static": "*"
51 + }
52 + },
53 + "@types/express-serve-static-core": {
54 + "version": "4.17.14",
55 + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.14.tgz",
56 + "integrity": "sha512-uFTLwu94TfUFMToXNgRZikwPuZdOtDgs3syBtAIr/OXorL1kJqUJT9qCLnRZ5KBOWfZQikQ2xKgR2tnDj1OgDA==",
57 + "requires": {
58 + "@types/node": "*",
59 + "@types/qs": "*",
60 + "@types/range-parser": "*"
61 + }
62 + },
63 + "@types/mime": {
64 + "version": "2.0.3",
65 + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz",
66 + "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q=="
67 + },
68 + "@types/node": {
69 + "version": "14.14.10",
70 + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz",
71 + "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ=="
72 + },
73 + "@types/qs": {
74 + "version": "6.9.5",
75 + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz",
76 + "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ=="
77 + },
78 + "@types/range-parser": {
79 + "version": "1.2.3",
80 + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
81 + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA=="
82 + },
83 + "@types/serve-static": {
84 + "version": "1.13.8",
85 + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz",
86 + "integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==",
87 + "requires": {
88 + "@types/mime": "*",
89 + "@types/node": "*"
90 + }
91 + },
92 + "accepts": {
93 + "version": "1.3.7",
94 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
95 + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
96 + "requires": {
97 + "mime-types": "~2.1.24",
98 + "negotiator": "0.6.2"
99 + }
100 + },
101 + "ajv": {
102 + "version": "6.12.6",
103 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
104 + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
105 + "requires": {
106 + "fast-deep-equal": "^3.1.1",
107 + "fast-json-stable-stringify": "^2.0.0",
108 + "json-schema-traverse": "^0.4.1",
109 + "uri-js": "^4.2.2"
110 + }
111 + },
112 + "ansi-styles": {
113 + "version": "3.2.1",
114 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
115 + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
116 + "requires": {
117 + "color-convert": "^1.9.0"
118 + }
119 + },
120 + "array-flatten": {
121 + "version": "1.1.1",
122 + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
123 + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
124 + },
125 + "asn1": {
126 + "version": "0.2.4",
127 + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
128 + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
129 + "requires": {
130 + "safer-buffer": "~2.1.0"
131 + }
132 + },
133 + "assert-plus": {
134 + "version": "1.0.0",
135 + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
136 + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
137 + },
138 + "async": {
139 + "version": "0.9.2",
140 + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
141 + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
142 + },
143 + "asynckit": {
144 + "version": "0.4.0",
145 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
146 + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
147 + },
148 + "aws-sign2": {
149 + "version": "0.7.0",
150 + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
151 + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
152 + },
153 + "aws4": {
154 + "version": "1.11.0",
155 + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
156 + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
157 + },
158 + "balanced-match": {
159 + "version": "1.0.0",
160 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
161 + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
162 + },
163 + "base64id": {
164 + "version": "2.0.0",
165 + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
166 + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
167 + },
168 + "bcrypt-pbkdf": {
169 + "version": "1.0.2",
170 + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
171 + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
172 + "requires": {
173 + "tweetnacl": "^0.14.3"
174 + }
175 + },
176 + "body-parser": {
177 + "version": "1.19.0",
178 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
179 + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
180 + "requires": {
181 + "bytes": "3.1.0",
182 + "content-type": "~1.0.4",
183 + "debug": "2.6.9",
184 + "depd": "~1.1.2",
185 + "http-errors": "1.7.2",
186 + "iconv-lite": "0.4.24",
187 + "on-finished": "~2.3.0",
188 + "qs": "6.7.0",
189 + "raw-body": "2.4.0",
190 + "type-is": "~1.6.17"
191 + }
192 + },
193 + "brace-expansion": {
194 + "version": "1.1.11",
195 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
196 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
197 + "requires": {
198 + "balanced-match": "^1.0.0",
199 + "concat-map": "0.0.1"
200 + }
201 + },
202 + "bytes": {
203 + "version": "3.1.0",
204 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
205 + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
206 + },
207 + "caseless": {
208 + "version": "0.12.0",
209 + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
210 + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
211 + },
212 + "chalk": {
213 + "version": "2.4.2",
214 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
215 + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
216 + "requires": {
217 + "ansi-styles": "^3.2.1",
218 + "escape-string-regexp": "^1.0.5",
219 + "supports-color": "^5.3.0"
220 + }
221 + },
222 + "color-convert": {
223 + "version": "1.9.3",
224 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
225 + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
226 + "requires": {
227 + "color-name": "1.1.3"
228 + }
229 + },
230 + "color-name": {
231 + "version": "1.1.3",
232 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
233 + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
234 + },
235 + "combined-stream": {
236 + "version": "1.0.8",
237 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
238 + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
239 + "requires": {
240 + "delayed-stream": "~1.0.0"
241 + }
242 + },
243 + "component-emitter": {
244 + "version": "1.3.0",
245 + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
246 + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
247 + },
248 + "concat-map": {
249 + "version": "0.0.1",
250 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
251 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
252 + },
253 + "content-disposition": {
254 + "version": "0.5.3",
255 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
256 + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
257 + "requires": {
258 + "safe-buffer": "5.1.2"
259 + }
260 + },
261 + "content-type": {
262 + "version": "1.0.4",
263 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
264 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
265 + },
266 + "cookie": {
267 + "version": "0.4.0",
268 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
269 + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
270 + },
271 + "cookie-signature": {
272 + "version": "1.0.6",
273 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
274 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
275 + },
276 + "core-util-is": {
277 + "version": "1.0.2",
278 + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
279 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
280 + },
281 + "cors": {
282 + "version": "2.8.5",
283 + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
284 + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
285 + "requires": {
286 + "object-assign": "^4",
287 + "vary": "^1"
288 + }
289 + },
290 + "dashdash": {
291 + "version": "1.14.1",
292 + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
293 + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
294 + "requires": {
295 + "assert-plus": "^1.0.0"
296 + }
297 + },
298 + "debug": {
299 + "version": "2.6.9",
300 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
301 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
302 + "requires": {
303 + "ms": "2.0.0"
304 + }
305 + },
306 + "delayed-stream": {
307 + "version": "1.0.0",
308 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
309 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
310 + },
311 + "depd": {
312 + "version": "1.1.2",
313 + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
314 + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
315 + },
316 + "destroy": {
317 + "version": "1.0.4",
318 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
319 + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
320 + },
321 + "dotenv": {
322 + "version": "8.2.0",
323 + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
324 + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
325 + },
326 + "ecc-jsbn": {
327 + "version": "0.1.2",
328 + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
329 + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
330 + "requires": {
331 + "jsbn": "~0.1.0",
332 + "safer-buffer": "^2.1.0"
333 + }
334 + },
335 + "ee-first": {
336 + "version": "1.1.1",
337 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
338 + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
339 + },
340 + "ejs": {
341 + "version": "3.1.5",
342 + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz",
343 + "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==",
344 + "requires": {
345 + "jake": "^10.6.1"
346 + }
347 + },
348 + "encodeurl": {
349 + "version": "1.0.2",
350 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
351 + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
352 + },
353 + "engine.io": {
354 + "version": "4.0.4",
355 + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.0.4.tgz",
356 + "integrity": "sha512-4ggUX5pICZU17OTZNFv5+uFE/ZyoK+TIXv2SvxWWX8lwStllQ6Lvvs4lDBqvKpV9EYXNcvlNOcjKChd/mo+8Tw==",
357 + "requires": {
358 + "accepts": "~1.3.4",
359 + "base64id": "2.0.0",
360 + "cookie": "~0.4.1",
361 + "cors": "~2.8.5",
362 + "debug": "~4.1.0",
363 + "engine.io-parser": "~4.0.0",
364 + "ws": "^7.1.2"
365 + },
366 + "dependencies": {
367 + "cookie": {
368 + "version": "0.4.1",
369 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
370 + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
371 + },
372 + "debug": {
373 + "version": "4.1.1",
374 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
375 + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
376 + "requires": {
377 + "ms": "^2.1.1"
378 + }
379 + },
380 + "ms": {
381 + "version": "2.1.2",
382 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
383 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
384 + }
385 + }
386 + },
387 + "engine.io-parser": {
388 + "version": "4.0.1",
389 + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.1.tgz",
390 + "integrity": "sha512-v5aZK1hlckcJDGmHz3W8xvI3NUHYc9t8QtTbqdR5OaH3S9iJZilPubauOm+vLWOMMWzpE3hiq92l9lTAHamRCg=="
391 + },
392 + "escape-html": {
393 + "version": "1.0.3",
394 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
395 + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
396 + },
397 + "escape-string-regexp": {
398 + "version": "1.0.5",
399 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
400 + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
401 + },
402 + "etag": {
403 + "version": "1.8.1",
404 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
405 + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
406 + },
407 + "express": {
408 + "version": "4.17.1",
409 + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
410 + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
411 + "requires": {
412 + "accepts": "~1.3.7",
413 + "array-flatten": "1.1.1",
414 + "body-parser": "1.19.0",
415 + "content-disposition": "0.5.3",
416 + "content-type": "~1.0.4",
417 + "cookie": "0.4.0",
418 + "cookie-signature": "1.0.6",
419 + "debug": "2.6.9",
420 + "depd": "~1.1.2",
421 + "encodeurl": "~1.0.2",
422 + "escape-html": "~1.0.3",
423 + "etag": "~1.8.1",
424 + "finalhandler": "~1.1.2",
425 + "fresh": "0.5.2",
426 + "merge-descriptors": "1.0.1",
427 + "methods": "~1.1.2",
428 + "on-finished": "~2.3.0",
429 + "parseurl": "~1.3.3",
430 + "path-to-regexp": "0.1.7",
431 + "proxy-addr": "~2.0.5",
432 + "qs": "6.7.0",
433 + "range-parser": "~1.2.1",
434 + "safe-buffer": "5.1.2",
435 + "send": "0.17.1",
436 + "serve-static": "1.14.1",
437 + "setprototypeof": "1.1.1",
438 + "statuses": "~1.5.0",
439 + "type-is": "~1.6.18",
440 + "utils-merge": "1.0.1",
441 + "vary": "~1.1.2"
442 + }
443 + },
444 + "extend": {
445 + "version": "3.0.2",
446 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
447 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
448 + },
449 + "extsprintf": {
450 + "version": "1.3.0",
451 + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
452 + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
453 + },
454 + "fast-deep-equal": {
455 + "version": "3.1.3",
456 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
457 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
458 + },
459 + "fast-json-stable-stringify": {
460 + "version": "2.1.0",
461 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
462 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
463 + },
464 + "filelist": {
465 + "version": "1.0.1",
466 + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz",
467 + "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==",
468 + "requires": {
469 + "minimatch": "^3.0.4"
470 + }
471 + },
472 + "finalhandler": {
473 + "version": "1.1.2",
474 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
475 + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
476 + "requires": {
477 + "debug": "2.6.9",
478 + "encodeurl": "~1.0.2",
479 + "escape-html": "~1.0.3",
480 + "on-finished": "~2.3.0",
481 + "parseurl": "~1.3.3",
482 + "statuses": "~1.5.0",
483 + "unpipe": "~1.0.0"
484 + }
485 + },
486 + "forever-agent": {
487 + "version": "0.6.1",
488 + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
489 + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
490 + },
491 + "form-data": {
492 + "version": "2.3.3",
493 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
494 + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
495 + "requires": {
496 + "asynckit": "^0.4.0",
497 + "combined-stream": "^1.0.6",
498 + "mime-types": "^2.1.12"
499 + }
500 + },
501 + "forwarded": {
502 + "version": "0.1.2",
503 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
504 + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
505 + },
506 + "fresh": {
507 + "version": "0.5.2",
508 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
509 + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
510 + },
511 + "getpass": {
512 + "version": "0.1.7",
513 + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
514 + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
515 + "requires": {
516 + "assert-plus": "^1.0.0"
517 + }
518 + },
519 + "har-schema": {
520 + "version": "2.0.0",
521 + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
522 + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
523 + },
524 + "har-validator": {
525 + "version": "5.1.5",
526 + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
527 + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
528 + "requires": {
529 + "ajv": "^6.12.3",
530 + "har-schema": "^2.0.0"
531 + }
532 + },
533 + "has-flag": {
534 + "version": "3.0.0",
535 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
536 + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
537 + },
538 + "http-errors": {
539 + "version": "1.7.2",
540 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
541 + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
542 + "requires": {
543 + "depd": "~1.1.2",
544 + "inherits": "2.0.3",
545 + "setprototypeof": "1.1.1",
546 + "statuses": ">= 1.5.0 < 2",
547 + "toidentifier": "1.0.0"
548 + }
549 + },
550 + "http-signature": {
551 + "version": "1.2.0",
552 + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
553 + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
554 + "requires": {
555 + "assert-plus": "^1.0.0",
556 + "jsprim": "^1.2.2",
557 + "sshpk": "^1.7.0"
558 + }
559 + },
560 + "iconv-lite": {
561 + "version": "0.4.24",
562 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
563 + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
564 + "requires": {
565 + "safer-buffer": ">= 2.1.2 < 3"
566 + }
567 + },
568 + "inherits": {
569 + "version": "2.0.3",
570 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
571 + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
572 + },
573 + "ipaddr.js": {
574 + "version": "1.9.1",
575 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
576 + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
577 + },
578 + "is-typedarray": {
579 + "version": "1.0.0",
580 + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
581 + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
582 + },
583 + "isstream": {
584 + "version": "0.1.2",
585 + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
586 + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
587 + },
588 + "jake": {
589 + "version": "10.8.2",
590 + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
591 + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
592 + "requires": {
593 + "async": "0.9.x",
594 + "chalk": "^2.4.2",
595 + "filelist": "^1.0.1",
596 + "minimatch": "^3.0.4"
597 + }
598 + },
599 + "jsbn": {
600 + "version": "0.1.1",
601 + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
602 + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
603 + },
604 + "json-schema": {
605 + "version": "0.2.3",
606 + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
607 + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
608 + },
609 + "json-schema-traverse": {
610 + "version": "0.4.1",
611 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
612 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
613 + },
614 + "json-stringify-safe": {
615 + "version": "5.0.1",
616 + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
617 + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
618 + },
619 + "jsprim": {
620 + "version": "1.4.1",
621 + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
622 + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
623 + "requires": {
624 + "assert-plus": "1.0.0",
625 + "extsprintf": "1.3.0",
626 + "json-schema": "0.2.3",
627 + "verror": "1.10.0"
628 + }
629 + },
630 + "media-typer": {
631 + "version": "0.3.0",
632 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
633 + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
634 + },
635 + "merge-descriptors": {
636 + "version": "1.0.1",
637 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
638 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
639 + },
640 + "methods": {
641 + "version": "1.1.2",
642 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
643 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
644 + },
645 + "mime": {
646 + "version": "1.6.0",
647 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
648 + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
649 + },
650 + "mime-db": {
651 + "version": "1.44.0",
652 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
653 + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
654 + },
655 + "mime-types": {
656 + "version": "2.1.27",
657 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
658 + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
659 + "requires": {
660 + "mime-db": "1.44.0"
661 + }
662 + },
663 + "minimatch": {
664 + "version": "3.0.4",
665 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
666 + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
667 + "requires": {
668 + "brace-expansion": "^1.1.7"
669 + }
670 + },
671 + "ms": {
672 + "version": "2.0.0",
673 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
674 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
675 + },
676 + "negotiator": {
677 + "version": "0.6.2",
678 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
679 + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
680 + },
681 + "oauth-sign": {
682 + "version": "0.9.0",
683 + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
684 + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
685 + },
686 + "object-assign": {
687 + "version": "4.1.1",
688 + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
689 + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
690 + },
691 + "on-finished": {
692 + "version": "2.3.0",
693 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
694 + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
695 + "requires": {
696 + "ee-first": "1.1.1"
697 + }
698 + },
699 + "parseurl": {
700 + "version": "1.3.3",
701 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
702 + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
703 + },
704 + "path-to-regexp": {
705 + "version": "0.1.7",
706 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
707 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
708 + },
709 + "performance-now": {
710 + "version": "2.1.0",
711 + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
712 + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
713 + },
714 + "proxy-addr": {
715 + "version": "2.0.6",
716 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
717 + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
718 + "requires": {
719 + "forwarded": "~0.1.2",
720 + "ipaddr.js": "1.9.1"
721 + }
722 + },
723 + "psl": {
724 + "version": "1.8.0",
725 + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
726 + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
727 + },
728 + "punycode": {
729 + "version": "2.1.1",
730 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
731 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
732 + },
733 + "qs": {
734 + "version": "6.7.0",
735 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
736 + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
737 + },
738 + "range-parser": {
739 + "version": "1.2.1",
740 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
741 + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
742 + },
743 + "raw-body": {
744 + "version": "2.4.0",
745 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
746 + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
747 + "requires": {
748 + "bytes": "3.1.0",
749 + "http-errors": "1.7.2",
750 + "iconv-lite": "0.4.24",
751 + "unpipe": "1.0.0"
752 + }
753 + },
754 + "request": {
755 + "version": "2.88.2",
756 + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
757 + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
758 + "requires": {
759 + "aws-sign2": "~0.7.0",
760 + "aws4": "^1.8.0",
761 + "caseless": "~0.12.0",
762 + "combined-stream": "~1.0.6",
763 + "extend": "~3.0.2",
764 + "forever-agent": "~0.6.1",
765 + "form-data": "~2.3.2",
766 + "har-validator": "~5.1.3",
767 + "http-signature": "~1.2.0",
768 + "is-typedarray": "~1.0.0",
769 + "isstream": "~0.1.2",
770 + "json-stringify-safe": "~5.0.1",
771 + "mime-types": "~2.1.19",
772 + "oauth-sign": "~0.9.0",
773 + "performance-now": "^2.1.0",
774 + "qs": "~6.5.2",
775 + "safe-buffer": "^5.1.2",
776 + "tough-cookie": "~2.5.0",
777 + "tunnel-agent": "^0.6.0",
778 + "uuid": "^3.3.2"
779 + },
780 + "dependencies": {
781 + "qs": {
782 + "version": "6.5.2",
783 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
784 + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
785 + }
786 + }
787 + },
788 + "safe-buffer": {
789 + "version": "5.1.2",
790 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
791 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
792 + },
793 + "safer-buffer": {
794 + "version": "2.1.2",
795 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
796 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
797 + },
798 + "send": {
799 + "version": "0.17.1",
800 + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
801 + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
802 + "requires": {
803 + "debug": "2.6.9",
804 + "depd": "~1.1.2",
805 + "destroy": "~1.0.4",
806 + "encodeurl": "~1.0.2",
807 + "escape-html": "~1.0.3",
808 + "etag": "~1.8.1",
809 + "fresh": "0.5.2",
810 + "http-errors": "~1.7.2",
811 + "mime": "1.6.0",
812 + "ms": "2.1.1",
813 + "on-finished": "~2.3.0",
814 + "range-parser": "~1.2.1",
815 + "statuses": "~1.5.0"
816 + },
817 + "dependencies": {
818 + "ms": {
819 + "version": "2.1.1",
820 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
821 + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
822 + }
823 + }
824 + },
825 + "serve-static": {
826 + "version": "1.14.1",
827 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
828 + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
829 + "requires": {
830 + "encodeurl": "~1.0.2",
831 + "escape-html": "~1.0.3",
832 + "parseurl": "~1.3.3",
833 + "send": "0.17.1"
834 + }
835 + },
836 + "setprototypeof": {
837 + "version": "1.1.1",
838 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
839 + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
840 + },
841 + "socket.io": {
842 + "version": "3.0.3",
843 + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.0.3.tgz",
844 + "integrity": "sha512-TC1GnSXhDVmd3bHji5aG7AgWB8UL7E6quACbKra8uFXBqlMwEDbrJFK+tjuIY5Pe9N0L+MAPPDv3pycnn0000A==",
845 + "requires": {
846 + "@types/cookie": "^0.4.0",
847 + "@types/cors": "^2.8.8",
848 + "@types/node": "^14.14.7",
849 + "accepts": "~1.3.4",
850 + "base64id": "~2.0.0",
851 + "debug": "~4.1.0",
852 + "engine.io": "~4.0.0",
853 + "socket.io-adapter": "~2.0.3",
854 + "socket.io-parser": "~4.0.1"
855 + },
856 + "dependencies": {
857 + "debug": {
858 + "version": "4.1.1",
859 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
860 + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
861 + "requires": {
862 + "ms": "^2.1.1"
863 + }
864 + },
865 + "ms": {
866 + "version": "2.1.2",
867 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
868 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
869 + }
870 + }
871 + },
872 + "socket.io-adapter": {
873 + "version": "2.0.3",
874 + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.0.3.tgz",
875 + "integrity": "sha512-2wo4EXgxOGSFueqvHAdnmi5JLZzWqMArjuP4nqC26AtLh5PoCPsaRbRdah2xhcwTAMooZfjYiNVNkkmmSMaxOQ=="
876 + },
877 + "socket.io-parser": {
878 + "version": "4.0.2",
879 + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.2.tgz",
880 + "integrity": "sha512-Bs3IYHDivwf+bAAuW/8xwJgIiBNtlvnjYRc4PbXgniLmcP1BrakBoq/QhO24rgtgW7VZ7uAaswRGxutUnlAK7g==",
881 + "requires": {
882 + "@types/component-emitter": "^1.2.10",
883 + "component-emitter": "~1.3.0",
884 + "debug": "~4.1.0"
885 + },
886 + "dependencies": {
887 + "debug": {
888 + "version": "4.1.1",
889 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
890 + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
891 + "requires": {
892 + "ms": "^2.1.1"
893 + }
894 + },
895 + "ms": {
896 + "version": "2.1.2",
897 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
898 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
899 + }
900 + }
901 + },
902 + "sshpk": {
903 + "version": "1.16.1",
904 + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
905 + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
906 + "requires": {
907 + "asn1": "~0.2.3",
908 + "assert-plus": "^1.0.0",
909 + "bcrypt-pbkdf": "^1.0.0",
910 + "dashdash": "^1.12.0",
911 + "ecc-jsbn": "~0.1.1",
912 + "getpass": "^0.1.1",
913 + "jsbn": "~0.1.0",
914 + "safer-buffer": "^2.0.2",
915 + "tweetnacl": "~0.14.0"
916 + }
917 + },
918 + "statuses": {
919 + "version": "1.5.0",
920 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
921 + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
922 + },
923 + "supports-color": {
924 + "version": "5.5.0",
925 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
926 + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
927 + "requires": {
928 + "has-flag": "^3.0.0"
929 + }
930 + },
931 + "toidentifier": {
932 + "version": "1.0.0",
933 + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
934 + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
935 + },
936 + "tough-cookie": {
937 + "version": "2.5.0",
938 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
939 + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
940 + "requires": {
941 + "psl": "^1.1.28",
942 + "punycode": "^2.1.1"
943 + }
944 + },
945 + "tunnel-agent": {
946 + "version": "0.6.0",
947 + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
948 + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
949 + "requires": {
950 + "safe-buffer": "^5.0.1"
951 + }
952 + },
953 + "tweetnacl": {
954 + "version": "0.14.5",
955 + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
956 + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
957 + },
958 + "type-is": {
959 + "version": "1.6.18",
960 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
961 + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
962 + "requires": {
963 + "media-typer": "0.3.0",
964 + "mime-types": "~2.1.24"
965 + }
966 + },
967 + "unpipe": {
968 + "version": "1.0.0",
969 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
970 + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
971 + },
972 + "uri-js": {
973 + "version": "4.4.0",
974 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
975 + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
976 + "requires": {
977 + "punycode": "^2.1.0"
978 + }
979 + },
980 + "utils-merge": {
981 + "version": "1.0.1",
982 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
983 + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
984 + },
985 + "uuid": {
986 + "version": "3.4.0",
987 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
988 + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
989 + },
990 + "vary": {
991 + "version": "1.1.2",
992 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
993 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
994 + },
995 + "verror": {
996 + "version": "1.10.0",
997 + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
998 + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
999 + "requires": {
1000 + "assert-plus": "^1.0.0",
1001 + "core-util-is": "1.0.2",
1002 + "extsprintf": "^1.2.0"
1003 + }
1004 + },
1005 + "ws": {
1006 + "version": "7.4.0",
1007 + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz",
1008 + "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ=="
1009 + }
1010 + }
1011 +}
1 +{
2 + "name": "khuwitch-server",
3 + "version": "1.0.0",
4 + "description": "twitch translator chatbot & tts server dev",
5 + "main": "socket_server.js",
6 + "scripts": {
7 + "test": "echo \"Error: no test specified\" && exit 1"
8 + },
9 + "author": "Daeyeonkim97",
10 + "license": "ISC",
11 + "dependencies": {
12 + "dotenv": "^8.2.0",
13 + "ejs": "^3.1.5",
14 + "express": "^4.17.1",
15 + "request": "^2.88.2",
16 + "socket.io": "^3.0.3"
17 + }
18 +}
1 +const config = require('./config/config')
2 +
3 +const app = require('express')();
4 +const http = require('http').Server(app);
5 +const io = require('socket.io')(http);
6 +const papago = require('./openAPIs/papago_api')
7 +
8 +app.set('view engine', 'ejs');
9 +app.set('views', './testviews');
10 +
11 +let room = ['streamer1', 'streamer2'];
12 +let a = 0;
13 +
14 +app.get('/', (req, res) => {
15 + res.render('chat');
16 +});
17 +
18 +app.get('/list',(req,res) => {
19 + res.send(room);
20 +})
21 +
22 +app.post('/add',(req,res)=>{
23 + room.append(req.body.streamer);
24 + res.send(req.body.streamer);
25 +})
26 +
27 +
28 +io.on('connection', (socket) => {
29 + socket.on('disconnect', () => {
30 + console.log('user disconnected');
31 + });
32 +
33 + socket.on('leaveRoom', (num,name) => {
34 + socket.leave(room[num], () => {
35 + console.log('Someone leave a ' + room[num]);
36 + io.to(room[num]).emit('leaveRoom', num ,name);
37 + });
38 + });
39 +
40 + socket.on('joinRoom', (num,name) => {
41 + socket.join(room[num], () => {
42 + console.log('Someone join a ' + room[num]);
43 + io.to(room[num]).emit('joinRoom', num ,name);
44 + });
45 + });
46 +
47 + socket.on('chat message', (num,name, msg) => {
48 + papago.detect(msg,io,room[num]);
49 + io.to(room[a]).emit('chat message', name, msg);
50 + });
51 +});
52 +
53 +
54 +http.listen(process.env.SOCKET_PORT, () => {
55 + console.log(`Connect at ${process.env.SOCKET_PORT}`);
56 +});
...\ No newline at end of file ...\ No newline at end of file
1 +<html>
2 +<head>
3 + <style>
4 + * {
5 + margin: 0;
6 + padding: 0;
7 + box-sizing: border-box;
8 + }
9 +
10 + body {
11 + font: 13px Helvetica, Arial;
12 + }
13 +
14 + form {
15 + background: #000;
16 + padding: 3px;
17 + position: fixed;
18 + bottom: 0;
19 + width: 100%;
20 + }
21 +
22 + form input {
23 + border: 0;
24 + padding: 10px;
25 + width: 90%;
26 + margin-right: .5%;
27 + }
28 +
29 + form button {
30 + width: 9%;
31 + background: rgb(130, 224, 255);
32 + border: none;
33 + padding: 10px;
34 + }
35 +
36 + #messages {
37 + list-style-type: none;
38 + margin: 0;
39 + padding: 0;
40 + }
41 +
42 + #messages li {
43 + padding: 5px 10px;
44 + }
45 +
46 + #messages li:nth-child(odd) {
47 + background: #eee;
48 + }
49 + </style>
50 +</head>
51 +<body>
52 +<select>
53 + <option value="streamer1">streamer1</option>
54 + <option value="streamer2">streamer2</option>
55 +</select>
56 +<ul id="messages"></ul>
57 +<form action="">
58 + <input id="m" autocomplete="off"/>
59 + <button>Send</button>
60 +</form>
61 +<script src="/socket.io/socket.io.js"></script>
62 +<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
63 +<script>
64 + $(() => {
65 + const name = prompt('What your name');
66 + const socket = io();
67 + let room = ['streamer1', 'streamer2'];
68 + let num = 0;
69 +
70 + socket.emit('joinRoom', num, name);
71 +
72 + $('select').change(() => {
73 + socket.emit('leaveRoom', num, name);
74 + num++;
75 + num = num % 2;
76 + socket.emit('joinRoom', num, name);
77 + });
78 +
79 +
80 + $('form').submit(() => {
81 + socket.emit('chat message', num, name, $('#m').val());
82 + $('#m').val('');
83 + return false;
84 + });
85 +
86 + socket.on('chat message', (name, msg) => {
87 + $('#messages').append($('<li>').text(name + ' : ' +
88 + msg));
89 + });
90 +
91 + socket.on('leaveRoom', (num, name) => {
92 + $('#messages').append($('<li>').text(name + ' leaved '
93 + + room[num] + ' :('));
94 + });
95 +
96 + socket.on('joinRoom', (num, name) => {
97 + $('#messages').append($('<li>').text(name + ' joined '
98 + + room[num] + ':)'));
99 + });
100 + });
101 +</script>
102 +</body>
103 +</html>
...\ No newline at end of file ...\ No newline at end of file