minsung

Merge branch 'master' of https://bitbucket.org/vel1024/capstone

Showing 54 changed files with 535 additions and 2065 deletions
1 *.xlsx 1 *.xlsx
2 -.env
...\ No newline at end of file ...\ No newline at end of file
2 +.env
3 +node_modules
4 +.vscode
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
4 4
5 Subject : Making website in order to practice latest web technologies 5 Subject : Making website in order to practice latest web technologies
6 6
7 +- (Tech : react.js, react hooks, styled-components, GraphQL, Prisma, Apollo, AWS, Docker, sendGrid, Twilio, Maxmind)
8 +
7 sub-subject : making chat site using JS 9 sub-subject : making chat site using JS
8 10
9 version 11 version
...@@ -16,13 +18,12 @@ Atom : 1.45.0 ...@@ -16,13 +18,12 @@ Atom : 1.45.0
16 - 4/6 ~ 4/12 18 - 4/6 ~ 4/12
17 - [x] Set development environment 19 - [x] Set development environment
18 20
19 - (tech : react.js, react hooks, styled-components, GraphQL, Prisma, Apollo, AWS, Docker)
20 -
21 - 4/13 ~ 4/19 21 - 4/13 ~ 4/19
22 -- [x] login, sign up (using JWT, sendGrid), Create Docker-compose 22 +- [x] login, sign up, Create Docker-compose
23 23
24 - 4/20 ~ 4/26 24 - 4/20 ~ 4/26
25 -- [ ] Find ID, PW 25 +- [X] Find ID, PW
26 + : find password : sendgrid, find userID : twilio
26 27
27 - 4/27 ~ 5/3 28 - 4/27 ~ 5/3
28 - [ ] Make chat room (using GraphQL's subscription) 29 - [ ] Make chat room (using GraphQL's subscription)
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
4 4
5 Subject : Making website in order to practice latest web technologies 5 Subject : Making website in order to practice latest web technologies
6 6
7 +- (Tech : react.js, react hooks, styled-components, GraphQL, Prisma, Apollo, AWS, Docker, sendGrid, Twilio, Maxmind)
8 +
7 sub-subject : making chat site using JS 9 sub-subject : making chat site using JS
8 10
9 # Schedule 11 # Schedule
...@@ -11,20 +13,19 @@ sub-subject : making chat site using JS ...@@ -11,20 +13,19 @@ sub-subject : making chat site using JS
11 - 4/6 ~ 4/12 13 - 4/6 ~ 4/12
12 - [x] Set development environment 14 - [x] Set development environment
13 15
14 - (tech : react.js, react hooks, styled-components, GraphQL, Prisma, Apollo, AWS, Docker)
15 -
16 - 4/13 ~ 4/19 16 - 4/13 ~ 4/19
17 -- [x] login, sign up (using JWT, sendGrid), Create Docker-compose 17 +- [x] login, sign up, Create Docker-compose
18 18
19 - 4/20 ~ 4/26 19 - 4/20 ~ 4/26
20 -- [ ] Find ID, PW 20 +- [X] Find ID, PW <br>
21 + -> find password : sendgrid || find userID : twilio
21 22
22 - 4/27 ~ 5/3 23 - 4/27 ~ 5/3
23 - [ ] Make chat room (using GraphQL's subscription) 24 - [ ] Make chat room (using GraphQL's subscription)
24 25
25 - 5/4 ~ 5/10 26 - 5/4 ~ 5/10
26 - [ ] Mid-term exam, Debugging 27 - [ ] Mid-term exam, Debugging
27 - 28 +
28 - 5/11 ~ 5/17 29 - 5/11 ~ 5/17
29 - [ ] Plan chat category and make code 30 - [ ] Plan chat category and make code
30 31
......
...@@ -1065,9 +1065,9 @@ ...@@ -1065,9 +1065,9 @@
1065 } 1065 }
1066 }, 1066 },
1067 "@prisma/cli": { 1067 "@prisma/cli": {
1068 - "version": "2.0.0-beta.2", 1068 + "version": "2.0.0-beta.3",
1069 - "resolved": "https://registry.npmjs.org/@prisma/cli/-/cli-2.0.0-beta.2.tgz", 1069 + "resolved": "https://registry.npmjs.org/@prisma/cli/-/cli-2.0.0-beta.3.tgz",
1070 - "integrity": "sha512-lD0cv/YC4g4SKByxH3hvzX1oS9cjRdCDU1Sh2inATaKcTHWPlxxgXQW4yYU2FF/HSWR9KK6YMAdO3ShkOl1PEQ==", 1070 + "integrity": "sha512-VZxeTLLMenhkAyaY4tvTqChcW6QtUkiVvZj7N6A2vi6HsM1Tnf0fIZsiH1h3e/LEnaaDGIUC8F4Gkh2SeyeyCg==",
1071 "dev": true 1071 "dev": true
1072 }, 1072 },
1073 "@prisma/client": { 1073 "@prisma/client": {
...@@ -1075,6 +1075,33 @@ ...@@ -1075,6 +1075,33 @@
1075 "resolved": "https://registry.npmjs.org/@prisma/client/-/client-2.0.0-beta.2.tgz", 1075 "resolved": "https://registry.npmjs.org/@prisma/client/-/client-2.0.0-beta.2.tgz",
1076 "integrity": "sha512-VhNYeeGTrFfLjB/JL7XPoWpxSTCb+YV+F3ggR1X0CGa4b/u6Kxy65aElLozs+yFdMQPVNkyg2PwUO8xQ7G9fpg==" 1076 "integrity": "sha512-VhNYeeGTrFfLjB/JL7XPoWpxSTCb+YV+F3ggR1X0CGa4b/u6Kxy65aElLozs+yFdMQPVNkyg2PwUO8xQ7G9fpg=="
1077 }, 1077 },
1078 + "@sendgrid/client": {
1079 + "version": "7.0.1",
1080 + "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-7.0.1.tgz",
1081 + "integrity": "sha512-HZhDD1bctv5rM0wqAz9LhJC1IL9YHn5jJvxPqiK/3f3WCQjRvraJ1AkqkFFNFd9lPBVLmcrORX04lojwl+5ZaA==",
1082 + "requires": {
1083 + "@sendgrid/helpers": "^7.0.1",
1084 + "axios": "^0.19.2"
1085 + }
1086 + },
1087 + "@sendgrid/helpers": {
1088 + "version": "7.0.1",
1089 + "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-7.0.1.tgz",
1090 + "integrity": "sha512-i/zsissq1upgdywtuJKysaplJJZC24GdtEKiJC1IRlXvBHzIjH4eU+rqUFO8h+hGji3UMURGgMFuLUXTUYvZ9w==",
1091 + "requires": {
1092 + "chalk": "^2.0.1",
1093 + "deepmerge": "^4.2.2"
1094 + }
1095 + },
1096 + "@sendgrid/mail": {
1097 + "version": "7.0.1",
1098 + "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-7.0.1.tgz",
1099 + "integrity": "sha512-yFkhjrYQvwpdy8eUiDxLLgPp9o5jHQzjJ5qUkgMr2fuPuYSKKqbpPir1PXIHx0ek2VKkTsvj/7Z5UQk6hPZcrQ==",
1100 + "requires": {
1101 + "@sendgrid/client": "^7.0.1",
1102 + "@sendgrid/helpers": "^7.0.1"
1103 + }
1104 + },
1078 "@types/aws-lambda": { 1105 "@types/aws-lambda": {
1079 "version": "8.10.13", 1106 "version": "8.10.13",
1080 "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.13.tgz", 1107 "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.13.tgz",
...@@ -1180,12 +1207,6 @@ ...@@ -1180,12 +1207,6 @@
1180 "tslib": "^1.9.3" 1207 "tslib": "^1.9.3"
1181 } 1208 }
1182 }, 1209 },
1183 - "abab": {
1184 - "version": "1.0.4",
1185 - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz",
1186 - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=",
1187 - "optional": true
1188 - },
1189 "abbrev": { 1210 "abbrev": {
1190 "version": "1.1.1", 1211 "version": "1.1.1",
1191 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 1212 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
...@@ -1201,21 +1222,6 @@ ...@@ -1201,21 +1222,6 @@
1201 "negotiator": "0.6.2" 1222 "negotiator": "0.6.2"
1202 } 1223 }
1203 }, 1224 },
1204 - "acorn": {
1205 - "version": "2.7.0",
1206 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
1207 - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=",
1208 - "optional": true
1209 - },
1210 - "acorn-globals": {
1211 - "version": "1.0.9",
1212 - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
1213 - "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
1214 - "optional": true,
1215 - "requires": {
1216 - "acorn": "^2.1.0"
1217 - }
1218 - },
1219 "aggregate-error": { 1225 "aggregate-error": {
1220 "version": "3.0.1", 1226 "version": "3.0.1",
1221 "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", 1227 "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
...@@ -1225,17 +1231,6 @@ ...@@ -1225,17 +1231,6 @@
1225 "indent-string": "^4.0.0" 1231 "indent-string": "^4.0.0"
1226 } 1232 }
1227 }, 1233 },
1228 - "ajv": {
1229 - "version": "6.12.2",
1230 - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
1231 - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
1232 - "requires": {
1233 - "fast-deep-equal": "^3.1.1",
1234 - "fast-json-stable-stringify": "^2.0.0",
1235 - "json-schema-traverse": "^0.4.1",
1236 - "uri-js": "^4.2.2"
1237 - }
1238 - },
1239 "ansi-align": { 1234 "ansi-align": {
1240 "version": "2.0.0", 1235 "version": "2.0.0",
1241 "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", 1236 "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
...@@ -1255,7 +1250,6 @@ ...@@ -1255,7 +1250,6 @@
1255 "version": "3.2.1", 1250 "version": "3.2.1",
1256 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1251 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1257 "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1252 "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1258 - "dev": true,
1259 "requires": { 1253 "requires": {
1260 "color-convert": "^1.9.0" 1254 "color-convert": "^1.9.0"
1261 } 1255 }
...@@ -1377,24 +1371,6 @@ ...@@ -1377,24 +1371,6 @@
1377 "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 1371 "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
1378 "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 1372 "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
1379 }, 1373 },
1380 - "asn1": {
1381 - "version": "0.2.4",
1382 - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
1383 - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
1384 - "requires": {
1385 - "safer-buffer": "~2.1.0"
1386 - }
1387 - },
1388 - "assert-plus": {
1389 - "version": "1.0.0",
1390 - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
1391 - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
1392 - },
1393 - "assertion-error": {
1394 - "version": "1.0.0",
1395 - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz",
1396 - "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js="
1397 - },
1398 "async-limiter": { 1374 "async-limiter": {
1399 "version": "1.0.1", 1375 "version": "1.0.1",
1400 "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 1376 "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
...@@ -1405,16 +1381,6 @@ ...@@ -1405,16 +1381,6 @@
1405 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1381 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
1406 "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 1382 "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
1407 }, 1383 },
1408 - "aws-sign2": {
1409 - "version": "0.7.0",
1410 - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
1411 - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
1412 - },
1413 - "aws4": {
1414 - "version": "1.9.1",
1415 - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
1416 - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
1417 - },
1418 "axios": { 1384 "axios": {
1419 "version": "0.19.2", 1385 "version": "0.19.2",
1420 "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", 1386 "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
...@@ -1423,93 +1389,6 @@ ...@@ -1423,93 +1389,6 @@
1423 "follow-redirects": "1.5.10" 1389 "follow-redirects": "1.5.10"
1424 } 1390 }
1425 }, 1391 },
1426 - "babel-code-frame": {
1427 - "version": "6.26.0",
1428 - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
1429 - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
1430 - "requires": {
1431 - "chalk": "^1.1.3",
1432 - "esutils": "^2.0.2",
1433 - "js-tokens": "^3.0.2"
1434 - },
1435 - "dependencies": {
1436 - "ansi-regex": {
1437 - "version": "2.1.1",
1438 - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
1439 - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
1440 - },
1441 - "ansi-styles": {
1442 - "version": "2.2.1",
1443 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
1444 - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
1445 - },
1446 - "chalk": {
1447 - "version": "1.1.3",
1448 - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
1449 - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
1450 - "requires": {
1451 - "ansi-styles": "^2.2.1",
1452 - "escape-string-regexp": "^1.0.2",
1453 - "has-ansi": "^2.0.0",
1454 - "strip-ansi": "^3.0.0",
1455 - "supports-color": "^2.0.0"
1456 - }
1457 - },
1458 - "js-tokens": {
1459 - "version": "3.0.2",
1460 - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
1461 - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
1462 - },
1463 - "strip-ansi": {
1464 - "version": "3.0.1",
1465 - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1466 - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1467 - "requires": {
1468 - "ansi-regex": "^2.0.0"
1469 - }
1470 - },
1471 - "supports-color": {
1472 - "version": "2.0.0",
1473 - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1474 - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
1475 - }
1476 - }
1477 - },
1478 - "babel-generator": {
1479 - "version": "6.26.1",
1480 - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
1481 - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
1482 - "requires": {
1483 - "babel-messages": "^6.23.0",
1484 - "babel-runtime": "^6.26.0",
1485 - "babel-types": "^6.26.0",
1486 - "detect-indent": "^4.0.0",
1487 - "jsesc": "^1.3.0",
1488 - "lodash": "^4.17.4",
1489 - "source-map": "^0.5.7",
1490 - "trim-right": "^1.0.1"
1491 - },
1492 - "dependencies": {
1493 - "jsesc": {
1494 - "version": "1.3.0",
1495 - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
1496 - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
1497 - },
1498 - "source-map": {
1499 - "version": "0.5.7",
1500 - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1501 - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
1502 - }
1503 - }
1504 - },
1505 - "babel-messages": {
1506 - "version": "6.23.0",
1507 - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
1508 - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
1509 - "requires": {
1510 - "babel-runtime": "^6.22.0"
1511 - }
1512 - },
1513 "babel-plugin-dynamic-import-node": { 1392 "babel-plugin-dynamic-import-node": {
1514 "version": "2.3.0", 1393 "version": "2.3.0",
1515 "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", 1394 "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
...@@ -1519,68 +1398,6 @@ ...@@ -1519,68 +1398,6 @@
1519 "object.assign": "^4.1.0" 1398 "object.assign": "^4.1.0"
1520 } 1399 }
1521 }, 1400 },
1522 - "babel-runtime": {
1523 - "version": "6.26.0",
1524 - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
1525 - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
1526 - "requires": {
1527 - "core-js": "^2.4.0",
1528 - "regenerator-runtime": "^0.11.0"
1529 - },
1530 - "dependencies": {
1531 - "regenerator-runtime": {
1532 - "version": "0.11.1",
1533 - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
1534 - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
1535 - }
1536 - }
1537 - },
1538 - "babel-traverse": {
1539 - "version": "6.26.0",
1540 - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
1541 - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
1542 - "requires": {
1543 - "babel-code-frame": "^6.26.0",
1544 - "babel-messages": "^6.23.0",
1545 - "babel-runtime": "^6.26.0",
1546 - "babel-types": "^6.26.0",
1547 - "babylon": "^6.18.0",
1548 - "debug": "^2.6.8",
1549 - "globals": "^9.18.0",
1550 - "invariant": "^2.2.2",
1551 - "lodash": "^4.17.4"
1552 - },
1553 - "dependencies": {
1554 - "globals": {
1555 - "version": "9.18.0",
1556 - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
1557 - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
1558 - }
1559 - }
1560 - },
1561 - "babel-types": {
1562 - "version": "6.26.0",
1563 - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
1564 - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
1565 - "requires": {
1566 - "babel-runtime": "^6.26.0",
1567 - "esutils": "^2.0.2",
1568 - "lodash": "^4.17.4",
1569 - "to-fast-properties": "^1.0.3"
1570 - },
1571 - "dependencies": {
1572 - "to-fast-properties": {
1573 - "version": "1.0.3",
1574 - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
1575 - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
1576 - }
1577 - }
1578 - },
1579 - "babylon": {
1580 - "version": "6.18.0",
1581 - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
1582 - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
1583 - },
1584 "backo2": { 1401 "backo2": {
1585 "version": "1.0.2", 1402 "version": "1.0.2",
1586 "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 1403 "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
...@@ -1601,14 +1418,6 @@ ...@@ -1601,14 +1418,6 @@
1601 "safe-buffer": "5.1.2" 1418 "safe-buffer": "5.1.2"
1602 } 1419 }
1603 }, 1420 },
1604 - "bcrypt-pbkdf": {
1605 - "version": "1.0.2",
1606 - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
1607 - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
1608 - "requires": {
1609 - "tweetnacl": "^0.14.3"
1610 - }
1611 - },
1612 "bcryptjs": { 1421 "bcryptjs": {
1613 "version": "2.4.3", 1422 "version": "2.4.3",
1614 "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", 1423 "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
...@@ -1664,11 +1473,6 @@ ...@@ -1664,11 +1473,6 @@
1664 "body-parser": "^1.18.2" 1473 "body-parser": "^1.18.2"
1665 } 1474 }
1666 }, 1475 },
1667 - "boolbase": {
1668 - "version": "1.0.0",
1669 - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
1670 - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
1671 - },
1672 "boxen": { 1476 "boxen": {
1673 "version": "1.3.0", 1477 "version": "1.3.0",
1674 "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", 1478 "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
...@@ -1765,44 +1569,16 @@ ...@@ -1765,44 +1569,16 @@
1765 "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", 1569 "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
1766 "dev": true 1570 "dev": true
1767 }, 1571 },
1768 - "caseless": {
1769 - "version": "0.12.0",
1770 - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
1771 - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
1772 - },
1773 - "chai": {
1774 - "version": "2.3.0",
1775 - "resolved": "https://registry.npmjs.org/chai/-/chai-2.3.0.tgz",
1776 - "integrity": "sha1-ii9qNHSNqAEJD9cyh7Kqc5pOkJo=",
1777 - "requires": {
1778 - "assertion-error": "1.0.0",
1779 - "deep-eql": "0.1.3"
1780 - }
1781 - },
1782 "chalk": { 1572 "chalk": {
1783 "version": "2.4.2", 1573 "version": "2.4.2",
1784 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1574 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1785 "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1575 "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1786 - "dev": true,
1787 "requires": { 1576 "requires": {
1788 "ansi-styles": "^3.2.1", 1577 "ansi-styles": "^3.2.1",
1789 "escape-string-regexp": "^1.0.5", 1578 "escape-string-regexp": "^1.0.5",
1790 "supports-color": "^5.3.0" 1579 "supports-color": "^5.3.0"
1791 } 1580 }
1792 }, 1581 },
1793 - "cheerio": {
1794 - "version": "1.0.0-rc.2",
1795 - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
1796 - "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
1797 - "requires": {
1798 - "css-select": "~1.2.0",
1799 - "dom-serializer": "~0.1.0",
1800 - "entities": "~1.1.1",
1801 - "htmlparser2": "^3.9.1",
1802 - "lodash": "^4.15.0",
1803 - "parse5": "^3.0.1"
1804 - }
1805 - },
1806 "chokidar": { 1582 "chokidar": {
1807 "version": "3.3.1", 1583 "version": "3.3.1",
1808 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", 1584 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
...@@ -1840,21 +1616,14 @@ ...@@ -1840,21 +1616,14 @@
1840 "version": "1.9.3", 1616 "version": "1.9.3",
1841 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1617 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1842 "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1618 "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1843 - "dev": true,
1844 "requires": { 1619 "requires": {
1845 "color-name": "1.1.3" 1620 "color-name": "1.1.3"
1846 } 1621 }
1847 }, 1622 },
1848 - "color-logger": {
1849 - "version": "0.0.6",
1850 - "resolved": "https://registry.npmjs.org/color-logger/-/color-logger-0.0.6.tgz",
1851 - "integrity": "sha1-5WJF7ymCJlcRDHy3WpzXhstp7Rs="
1852 - },
1853 "color-name": { 1623 "color-name": {
1854 "version": "1.1.3", 1624 "version": "1.1.3",
1855 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1625 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1856 - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1626 + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
1857 - "dev": true
1858 }, 1627 },
1859 "combined-stream": { 1628 "combined-stream": {
1860 "version": "1.0.8", 1629 "version": "1.0.8",
...@@ -1965,6 +1734,15 @@ ...@@ -1965,6 +1734,15 @@
1965 "vary": "^1" 1734 "vary": "^1"
1966 } 1735 }
1967 }, 1736 },
1737 + "country-data": {
1738 + "version": "0.0.31",
1739 + "resolved": "https://registry.npmjs.org/country-data/-/country-data-0.0.31.tgz",
1740 + "integrity": "sha1-gJZrjh0Uf6bWpYnTKTP4eTd0lW0=",
1741 + "requires": {
1742 + "currency-symbol-map": "~2",
1743 + "underscore": ">1.4.4"
1744 + }
1745 + },
1968 "create-error-class": { 1746 "create-error-class": {
1969 "version": "3.0.2", 1747 "version": "3.0.2",
1970 "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 1748 "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
...@@ -1991,44 +1769,10 @@ ...@@ -1991,44 +1769,10 @@
1991 "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", 1769 "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
1992 "dev": true 1770 "dev": true
1993 }, 1771 },
1994 - "css-select": { 1772 + "currency-symbol-map": {
1995 - "version": "1.2.0", 1773 + "version": "2.2.0",
1996 - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 1774 + "resolved": "https://registry.npmjs.org/currency-symbol-map/-/currency-symbol-map-2.2.0.tgz",
1997 - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", 1775 + "integrity": "sha1-KzwYcv8aws5ZXYJz5Y4f/wJyrqI="
1998 - "requires": {
1999 - "boolbase": "~1.0.0",
2000 - "css-what": "2.1",
2001 - "domutils": "1.5.1",
2002 - "nth-check": "~1.0.1"
2003 - }
2004 - },
2005 - "css-what": {
2006 - "version": "2.1.3",
2007 - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
2008 - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
2009 - },
2010 - "cssom": {
2011 - "version": "0.3.8",
2012 - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
2013 - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
2014 - "optional": true
2015 - },
2016 - "cssstyle": {
2017 - "version": "0.2.37",
2018 - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz",
2019 - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
2020 - "optional": true,
2021 - "requires": {
2022 - "cssom": "0.3.x"
2023 - }
2024 - },
2025 - "dashdash": {
2026 - "version": "1.14.1",
2027 - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
2028 - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
2029 - "requires": {
2030 - "assert-plus": "^1.0.0"
2031 - }
2032 }, 1776 },
2033 "dayjs": { 1777 "dayjs": {
2034 "version": "1.8.25", 1778 "version": "1.8.25",
...@@ -2043,26 +1787,12 @@ ...@@ -2043,26 +1787,12 @@
2043 "ms": "2.0.0" 1787 "ms": "2.0.0"
2044 } 1788 }
2045 }, 1789 },
2046 - "deep-eql": {
2047 - "version": "0.1.3",
2048 - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
2049 - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
2050 - "requires": {
2051 - "type-detect": "0.1.1"
2052 - }
2053 - },
2054 "deep-extend": { 1790 "deep-extend": {
2055 "version": "0.6.0", 1791 "version": "0.6.0",
2056 "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 1792 "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
2057 "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 1793 "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
2058 "dev": true 1794 "dev": true
2059 }, 1795 },
2060 - "deep-is": {
2061 - "version": "0.1.3",
2062 - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
2063 - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
2064 - "optional": true
2065 - },
2066 "deepmerge": { 1796 "deepmerge": {
2067 "version": "4.2.2", 1797 "version": "4.2.2",
2068 "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 1798 "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
...@@ -2097,14 +1827,6 @@ ...@@ -2097,14 +1827,6 @@
2097 "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 1827 "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
2098 "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 1828 "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
2099 }, 1829 },
2100 - "detect-indent": {
2101 - "version": "4.0.0",
2102 - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
2103 - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
2104 - "requires": {
2105 - "repeating": "^2.0.0"
2106 - }
2107 - },
2108 "dicer": { 1830 "dicer": {
2109 "version": "0.2.5", 1831 "version": "0.2.5",
2110 "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", 1832 "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
...@@ -2122,37 +1844,6 @@ ...@@ -2122,37 +1844,6 @@
2122 "path-type": "^4.0.0" 1844 "path-type": "^4.0.0"
2123 } 1845 }
2124 }, 1846 },
2125 - "dom-serializer": {
2126 - "version": "0.1.1",
2127 - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
2128 - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
2129 - "requires": {
2130 - "domelementtype": "^1.3.0",
2131 - "entities": "^1.1.1"
2132 - }
2133 - },
2134 - "domelementtype": {
2135 - "version": "1.3.1",
2136 - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
2137 - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
2138 - },
2139 - "domhandler": {
2140 - "version": "2.4.2",
2141 - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
2142 - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
2143 - "requires": {
2144 - "domelementtype": "1"
2145 - }
2146 - },
2147 - "domutils": {
2148 - "version": "1.5.1",
2149 - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
2150 - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
2151 - "requires": {
2152 - "dom-serializer": "0",
2153 - "domelementtype": "1"
2154 - }
2155 - },
2156 "dot-prop": { 1847 "dot-prop": {
2157 "version": "4.2.0", 1848 "version": "4.2.0",
2158 "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", 1849 "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
...@@ -2173,15 +1864,6 @@ ...@@ -2173,15 +1864,6 @@
2173 "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 1864 "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
2174 "dev": true 1865 "dev": true
2175 }, 1866 },
2176 - "ecc-jsbn": {
2177 - "version": "0.1.2",
2178 - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
2179 - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
2180 - "requires": {
2181 - "jsbn": "~0.1.0",
2182 - "safer-buffer": "^2.1.0"
2183 - }
2184 - },
2185 "ecdsa-sig-formatter": { 1867 "ecdsa-sig-formatter": {
2186 "version": "1.0.11", 1868 "version": "1.0.11",
2187 "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 1869 "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
...@@ -2206,11 +1888,6 @@ ...@@ -2206,11 +1888,6 @@
2206 "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1888 "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
2207 "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 1889 "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
2208 }, 1890 },
2209 - "entities": {
2210 - "version": "1.1.2",
2211 - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
2212 - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
2213 - },
2214 "es-abstract": { 1891 "es-abstract": {
2215 "version": "1.17.5", 1892 "version": "1.17.5",
2216 "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", 1893 "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
...@@ -2251,70 +1928,11 @@ ...@@ -2251,70 +1928,11 @@
2251 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1928 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
2252 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 1929 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
2253 }, 1930 },
2254 - "escodegen": {
2255 - "version": "1.14.1",
2256 - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
2257 - "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
2258 - "optional": true,
2259 - "requires": {
2260 - "esprima": "^4.0.1",
2261 - "estraverse": "^4.2.0",
2262 - "esutils": "^2.0.2",
2263 - "optionator": "^0.8.1",
2264 - "source-map": "~0.6.1"
2265 - }
2266 - },
2267 - "esdoc": {
2268 - "version": "1.1.0",
2269 - "resolved": "https://registry.npmjs.org/esdoc/-/esdoc-1.1.0.tgz",
2270 - "integrity": "sha512-vsUcp52XJkOWg9m1vDYplGZN2iDzvmjDL5M/Mp8qkoDG3p2s0yIQCIjKR5wfPBaM3eV14a6zhQNYiNTCVzPnxA==",
2271 - "requires": {
2272 - "babel-generator": "6.26.1",
2273 - "babel-traverse": "6.26.0",
2274 - "babylon": "6.18.0",
2275 - "cheerio": "1.0.0-rc.2",
2276 - "color-logger": "0.0.6",
2277 - "escape-html": "1.0.3",
2278 - "fs-extra": "5.0.0",
2279 - "ice-cap": "0.0.4",
2280 - "marked": "0.3.19",
2281 - "minimist": "1.2.0",
2282 - "taffydb": "2.7.3"
2283 - },
2284 - "dependencies": {
2285 - "minimist": {
2286 - "version": "1.2.0",
2287 - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
2288 - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
2289 - }
2290 - }
2291 - },
2292 - "esdoc-coverage-plugin": {
2293 - "version": "1.1.0",
2294 - "resolved": "https://registry.npmjs.org/esdoc-coverage-plugin/-/esdoc-coverage-plugin-1.1.0.tgz",
2295 - "integrity": "sha1-OGmGnNf4eJH5cmJXh2laKZrs5Fw="
2296 - },
2297 - "esdoc-type-inference-plugin": {
2298 - "version": "1.0.2",
2299 - "resolved": "https://registry.npmjs.org/esdoc-type-inference-plugin/-/esdoc-type-inference-plugin-1.0.2.tgz",
2300 - "integrity": "sha512-tMIcEHNe1uhUGA7lT1UTWc9hs2dzthnTgmqXpmeUhurk7fL2tinvoH+IVvG/sLROzwOGZQS9zW/F9KWnpMzLIQ=="
2301 - },
2302 - "esprima": {
2303 - "version": "4.0.1",
2304 - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
2305 - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
2306 - "optional": true
2307 - },
2308 - "estraverse": {
2309 - "version": "4.3.0",
2310 - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
2311 - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
2312 - "optional": true
2313 - },
2314 "esutils": { 1931 "esutils": {
2315 "version": "2.0.3", 1932 "version": "2.0.3",
2316 "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1933 "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
2317 - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 1934 + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1935 + "dev": true
2318 }, 1936 },
2319 "etag": { 1937 "etag": {
2320 "version": "1.8.1", 1938 "version": "1.8.1",
...@@ -2378,26 +1996,11 @@ ...@@ -2378,26 +1996,11 @@
2378 "vary": "~1.1.2" 1996 "vary": "~1.1.2"
2379 } 1997 }
2380 }, 1998 },
2381 - "extend": {
2382 - "version": "3.0.2",
2383 - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
2384 - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
2385 - },
2386 "extract-files": { 1999 "extract-files": {
2387 "version": "7.0.0", 2000 "version": "7.0.0",
2388 "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-7.0.0.tgz", 2001 "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-7.0.0.tgz",
2389 "integrity": "sha512-3AUlT7TD+DbQXNe3t70QrgJU6Wgcp7rk1Zm0vqWz8OYnw4vxihgG0TgZ2SIGrVqScc4WfOu7B4a0BezGJ0YqvQ==" 2002 "integrity": "sha512-3AUlT7TD+DbQXNe3t70QrgJU6Wgcp7rk1Zm0vqWz8OYnw4vxihgG0TgZ2SIGrVqScc4WfOu7B4a0BezGJ0YqvQ=="
2390 }, 2003 },
2391 - "extsprintf": {
2392 - "version": "1.3.0",
2393 - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
2394 - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
2395 - },
2396 - "fast-deep-equal": {
2397 - "version": "3.1.1",
2398 - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
2399 - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
2400 - },
2401 "fast-glob": { 2004 "fast-glob": {
2402 "version": "3.2.2", 2005 "version": "3.2.2",
2403 "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", 2006 "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz",
...@@ -2416,12 +2019,6 @@ ...@@ -2416,12 +2019,6 @@
2416 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2019 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
2417 "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 2020 "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
2418 }, 2021 },
2419 - "fast-levenshtein": {
2420 - "version": "2.0.6",
2421 - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
2422 - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
2423 - "optional": true
2424 - },
2425 "fastq": { 2022 "fastq": {
2426 "version": "1.7.0", 2023 "version": "1.7.0",
2427 "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", 2024 "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz",
...@@ -2508,11 +2105,6 @@ ...@@ -2508,11 +2105,6 @@
2508 } 2105 }
2509 } 2106 }
2510 }, 2107 },
2511 - "forever-agent": {
2512 - "version": "0.6.1",
2513 - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
2514 - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
2515 - },
2516 "form-data": { 2108 "form-data": {
2517 "version": "3.0.0", 2109 "version": "3.0.0",
2518 "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", 2110 "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
...@@ -2538,16 +2130,6 @@ ...@@ -2538,16 +2130,6 @@
2538 "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-1.0.1.tgz", 2130 "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-1.0.1.tgz",
2539 "integrity": "sha512-XdZK0Q78WP29Vm3FGgJRhRhrBm51PagovzWtW2kJ3Q6cYJbGtZqWSGTSPwvtEkyjIirFd7b8Yes/dpOYjt4RRQ==" 2131 "integrity": "sha512-XdZK0Q78WP29Vm3FGgJRhRhrBm51PagovzWtW2kJ3Q6cYJbGtZqWSGTSPwvtEkyjIirFd7b8Yes/dpOYjt4RRQ=="
2540 }, 2132 },
2541 - "fs-extra": {
2542 - "version": "5.0.0",
2543 - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
2544 - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
2545 - "requires": {
2546 - "graceful-fs": "^4.1.2",
2547 - "jsonfile": "^4.0.0",
2548 - "universalify": "^0.1.0"
2549 - }
2550 - },
2551 "fsevents": { 2133 "fsevents": {
2552 "version": "2.1.2", 2134 "version": "2.1.2",
2553 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", 2135 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz",
...@@ -2573,14 +2155,6 @@ ...@@ -2573,14 +2155,6 @@
2573 "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 2155 "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
2574 "dev": true 2156 "dev": true
2575 }, 2157 },
2576 - "getpass": {
2577 - "version": "0.1.7",
2578 - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
2579 - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
2580 - "requires": {
2581 - "assert-plus": "^1.0.0"
2582 - }
2583 - },
2584 "glob-parent": { 2158 "glob-parent": {
2585 "version": "5.1.1", 2159 "version": "5.1.1",
2586 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 2160 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
...@@ -2639,7 +2213,8 @@ ...@@ -2639,7 +2213,8 @@
2639 "graceful-fs": { 2213 "graceful-fs": {
2640 "version": "4.2.3", 2214 "version": "4.2.3",
2641 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", 2215 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
2642 - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" 2216 + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
2217 + "dev": true
2643 }, 2218 },
2644 "graphql": { 2219 "graphql": {
2645 "version": "14.6.0", 2220 "version": "14.6.0",
...@@ -2806,20 +2381,6 @@ ...@@ -2806,20 +2381,6 @@
2806 "subscriptions-transport-ws": "^0.9.8" 2381 "subscriptions-transport-ws": "^0.9.8"
2807 } 2382 }
2808 }, 2383 },
2809 - "har-schema": {
2810 - "version": "2.0.0",
2811 - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
2812 - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
2813 - },
2814 - "har-validator": {
2815 - "version": "5.1.3",
2816 - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
2817 - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
2818 - "requires": {
2819 - "ajv": "^6.5.5",
2820 - "har-schema": "^2.0.0"
2821 - }
2822 - },
2823 "has": { 2384 "has": {
2824 "version": "1.0.3", 2385 "version": "1.0.3",
2825 "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2386 "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
...@@ -2829,26 +2390,10 @@ ...@@ -2829,26 +2390,10 @@
2829 "function-bind": "^1.1.1" 2390 "function-bind": "^1.1.1"
2830 } 2391 }
2831 }, 2392 },
2832 - "has-ansi": {
2833 - "version": "2.0.0",
2834 - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
2835 - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
2836 - "requires": {
2837 - "ansi-regex": "^2.0.0"
2838 - },
2839 - "dependencies": {
2840 - "ansi-regex": {
2841 - "version": "2.1.1",
2842 - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
2843 - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
2844 - }
2845 - }
2846 - },
2847 "has-flag": { 2393 "has-flag": {
2848 "version": "3.0.0", 2394 "version": "3.0.0",
2849 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2395 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
2850 - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 2396 + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
2851 - "dev": true
2852 }, 2397 },
2853 "has-symbols": { 2398 "has-symbols": {
2854 "version": "1.0.1", 2399 "version": "1.0.1",
...@@ -2865,44 +2410,6 @@ ...@@ -2865,44 +2410,6 @@
2865 "parse-passwd": "^1.0.0" 2410 "parse-passwd": "^1.0.0"
2866 } 2411 }
2867 }, 2412 },
2868 - "htmlparser2": {
2869 - "version": "3.10.1",
2870 - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
2871 - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
2872 - "requires": {
2873 - "domelementtype": "^1.3.1",
2874 - "domhandler": "^2.3.0",
2875 - "domutils": "^1.5.1",
2876 - "entities": "^1.1.1",
2877 - "inherits": "^2.0.1",
2878 - "readable-stream": "^3.1.1"
2879 - },
2880 - "dependencies": {
2881 - "readable-stream": {
2882 - "version": "3.6.0",
2883 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
2884 - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
2885 - "requires": {
2886 - "inherits": "^2.0.3",
2887 - "string_decoder": "^1.1.1",
2888 - "util-deprecate": "^1.0.1"
2889 - }
2890 - },
2891 - "safe-buffer": {
2892 - "version": "5.2.0",
2893 - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
2894 - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
2895 - },
2896 - "string_decoder": {
2897 - "version": "1.3.0",
2898 - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
2899 - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
2900 - "requires": {
2901 - "safe-buffer": "~5.2.0"
2902 - }
2903 - }
2904 - }
2905 - },
2906 "http-errors": { 2413 "http-errors": {
2907 "version": "1.7.3", 2414 "version": "1.7.3",
2908 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", 2415 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
...@@ -2915,72 +2422,6 @@ ...@@ -2915,72 +2422,6 @@
2915 "toidentifier": "1.0.0" 2422 "toidentifier": "1.0.0"
2916 } 2423 }
2917 }, 2424 },
2918 - "http-signature": {
2919 - "version": "1.2.0",
2920 - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
2921 - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
2922 - "requires": {
2923 - "assert-plus": "^1.0.0",
2924 - "jsprim": "^1.2.2",
2925 - "sshpk": "^1.7.0"
2926 - }
2927 - },
2928 - "ice-cap": {
2929 - "version": "0.0.4",
2930 - "resolved": "https://registry.npmjs.org/ice-cap/-/ice-cap-0.0.4.tgz",
2931 - "integrity": "sha1-im0xq0ysjUtW3k+pRt8zUlYbbhg=",
2932 - "requires": {
2933 - "cheerio": "0.20.0",
2934 - "color-logger": "0.0.3"
2935 - },
2936 - "dependencies": {
2937 - "cheerio": {
2938 - "version": "0.20.0",
2939 - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz",
2940 - "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=",
2941 - "requires": {
2942 - "css-select": "~1.2.0",
2943 - "dom-serializer": "~0.1.0",
2944 - "entities": "~1.1.1",
2945 - "htmlparser2": "~3.8.1",
2946 - "jsdom": "^7.0.2",
2947 - "lodash": "^4.1.0"
2948 - }
2949 - },
2950 - "color-logger": {
2951 - "version": "0.0.3",
2952 - "resolved": "https://registry.npmjs.org/color-logger/-/color-logger-0.0.3.tgz",
2953 - "integrity": "sha1-2bIt0dlz4Waxi/MT+fSBu6TfIBg="
2954 - },
2955 - "domhandler": {
2956 - "version": "2.3.0",
2957 - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
2958 - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
2959 - "requires": {
2960 - "domelementtype": "1"
2961 - }
2962 - },
2963 - "htmlparser2": {
2964 - "version": "3.8.3",
2965 - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
2966 - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
2967 - "requires": {
2968 - "domelementtype": "1",
2969 - "domhandler": "2.3",
2970 - "domutils": "1.5",
2971 - "entities": "1.0",
2972 - "readable-stream": "1.1"
2973 - },
2974 - "dependencies": {
2975 - "entities": {
2976 - "version": "1.0.0",
2977 - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
2978 - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY="
2979 - }
2980 - }
2981 - }
2982 - }
2983 - },
2984 "iconv-lite": { 2425 "iconv-lite": {
2985 "version": "0.4.24", 2426 "version": "0.4.24",
2986 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 2427 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
...@@ -3032,6 +2473,7 @@ ...@@ -3032,6 +2473,7 @@
3032 "version": "2.2.4", 2473 "version": "2.2.4",
3033 "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 2474 "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
3034 "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 2475 "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
2476 + "dev": true,
3035 "requires": { 2477 "requires": {
3036 "loose-envify": "^1.0.0" 2478 "loose-envify": "^1.0.0"
3037 } 2479 }
...@@ -3076,11 +2518,6 @@ ...@@ -3076,11 +2518,6 @@
3076 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2518 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
3077 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 2519 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
3078 }, 2520 },
3079 - "is-finite": {
3080 - "version": "1.1.0",
3081 - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
3082 - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w=="
3083 - },
3084 "is-fullwidth-code-point": { 2521 "is-fullwidth-code-point": {
3085 "version": "2.0.0", 2522 "version": "2.0.0",
3086 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2523 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
...@@ -3167,11 +2604,6 @@ ...@@ -3167,11 +2604,6 @@
3167 "has-symbols": "^1.0.1" 2604 "has-symbols": "^1.0.1"
3168 } 2605 }
3169 }, 2606 },
3170 - "is-typedarray": {
3171 - "version": "1.0.0",
3172 - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
3173 - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
3174 - },
3175 "isarray": { 2607 "isarray": {
3176 "version": "0.0.1", 2608 "version": "0.0.1",
3177 "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 2609 "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
...@@ -3183,11 +2615,6 @@ ...@@ -3183,11 +2615,6 @@
3183 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2615 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
3184 "dev": true 2616 "dev": true
3185 }, 2617 },
3186 - "isstream": {
3187 - "version": "0.1.2",
3188 - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
3189 - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
3190 - },
3191 "iterall": { 2618 "iterall": {
3192 "version": "1.3.0", 2619 "version": "1.3.0",
3193 "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz", 2620 "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz",
...@@ -3196,43 +2623,8 @@ ...@@ -3196,43 +2623,8 @@
3196 "js-tokens": { 2623 "js-tokens": {
3197 "version": "4.0.0", 2624 "version": "4.0.0",
3198 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2625 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
3199 - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 2626 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
3200 - }, 2627 + "dev": true
3201 - "jsbn": {
3202 - "version": "0.1.1",
3203 - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
3204 - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
3205 - },
3206 - "jsdom": {
3207 - "version": "7.2.2",
3208 - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz",
3209 - "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=",
3210 - "optional": true,
3211 - "requires": {
3212 - "abab": "^1.0.0",
3213 - "acorn": "^2.4.0",
3214 - "acorn-globals": "^1.0.4",
3215 - "cssom": ">= 0.3.0 < 0.4.0",
3216 - "cssstyle": ">= 0.2.29 < 0.3.0",
3217 - "escodegen": "^1.6.1",
3218 - "nwmatcher": ">= 1.3.7 < 2.0.0",
3219 - "parse5": "^1.5.1",
3220 - "request": "^2.55.0",
3221 - "sax": "^1.1.4",
3222 - "symbol-tree": ">= 3.1.0 < 4.0.0",
3223 - "tough-cookie": "^2.2.0",
3224 - "webidl-conversions": "^2.0.0",
3225 - "whatwg-url-compat": "~0.6.5",
3226 - "xml-name-validator": ">= 2.0.1 < 3.0.0"
3227 - },
3228 - "dependencies": {
3229 - "parse5": {
3230 - "version": "1.5.1",
3231 - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
3232 - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
3233 - "optional": true
3234 - }
3235 - }
3236 }, 2628 },
3237 "jsesc": { 2629 "jsesc": {
3238 "version": "2.5.2", 2630 "version": "2.5.2",
...@@ -3240,21 +2632,6 @@ ...@@ -3240,21 +2632,6 @@
3240 "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2632 "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
3241 "dev": true 2633 "dev": true
3242 }, 2634 },
3243 - "json-schema": {
3244 - "version": "0.2.3",
3245 - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
3246 - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
3247 - },
3248 - "json-schema-traverse": {
3249 - "version": "0.4.1",
3250 - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
3251 - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
3252 - },
3253 - "json-stringify-safe": {
3254 - "version": "5.0.1",
3255 - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
3256 - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
3257 - },
3258 "json5": { 2635 "json5": {
3259 "version": "2.1.3", 2636 "version": "2.1.3",
3260 "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", 2637 "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
...@@ -3264,14 +2641,6 @@ ...@@ -3264,14 +2641,6 @@
3264 "minimist": "^1.2.5" 2641 "minimist": "^1.2.5"
3265 } 2642 }
3266 }, 2643 },
3267 - "jsonfile": {
3268 - "version": "4.0.0",
3269 - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
3270 - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
3271 - "requires": {
3272 - "graceful-fs": "^4.1.6"
3273 - }
3274 - },
3275 "jsonwebtoken": { 2644 "jsonwebtoken": {
3276 "version": "8.5.1", 2645 "version": "8.5.1",
3277 "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 2646 "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
...@@ -3296,17 +2665,6 @@ ...@@ -3296,17 +2665,6 @@
3296 } 2665 }
3297 } 2666 }
3298 }, 2667 },
3299 - "jsprim": {
3300 - "version": "1.4.1",
3301 - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
3302 - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
3303 - "requires": {
3304 - "assert-plus": "1.0.0",
3305 - "extsprintf": "1.3.0",
3306 - "json-schema": "0.2.3",
3307 - "verror": "1.10.0"
3308 - }
3309 - },
3310 "jwa": { 2668 "jwa": {
3311 "version": "1.4.1", 2669 "version": "1.4.1",
3312 "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 2670 "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
...@@ -3350,16 +2708,6 @@ ...@@ -3350,16 +2708,6 @@
3350 "leven": "^3.1.0" 2708 "leven": "^3.1.0"
3351 } 2709 }
3352 }, 2710 },
3353 - "levn": {
3354 - "version": "0.3.0",
3355 - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
3356 - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
3357 - "optional": true,
3358 - "requires": {
3359 - "prelude-ls": "~1.1.2",
3360 - "type-check": "~0.3.2"
3361 - }
3362 - },
3363 "locate-path": { 2711 "locate-path": {
3364 "version": "3.0.0", 2712 "version": "3.0.0",
3365 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 2713 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
...@@ -3414,6 +2762,7 @@ ...@@ -3414,6 +2762,7 @@
3414 "version": "1.4.0", 2762 "version": "1.4.0",
3415 "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 2763 "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
3416 "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 2764 "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
2765 + "dev": true,
3417 "requires": { 2766 "requires": {
3418 "js-tokens": "^3.0.0 || ^4.0.0" 2767 "js-tokens": "^3.0.0 || ^4.0.0"
3419 } 2768 }
...@@ -3451,11 +2800,6 @@ ...@@ -3451,11 +2800,6 @@
3451 "pify": "^3.0.0" 2800 "pify": "^3.0.0"
3452 } 2801 }
3453 }, 2802 },
3454 - "marked": {
3455 - "version": "0.3.19",
3456 - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
3457 - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg=="
3458 - },
3459 "media-typer": { 2803 "media-typer": {
3460 "version": "0.3.0", 2804 "version": "0.3.0",
3461 "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 2805 "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
...@@ -3595,19 +2939,6 @@ ...@@ -3595,19 +2939,6 @@
3595 "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", 2939 "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==",
3596 "dev": true 2940 "dev": true
3597 }, 2941 },
3598 - "nodemailer": {
3599 - "version": "6.4.6",
3600 - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.6.tgz",
3601 - "integrity": "sha512-/kJ+FYVEm2HuUlw87hjSqTss+GU35D4giOpdSfGp7DO+5h6RlJj7R94YaYHOkoxu1CSaM0d3WRBtCzwXrY6MKA=="
3602 - },
3603 - "nodemailer-sendgrid-transport": {
3604 - "version": "0.2.0",
3605 - "resolved": "https://registry.npmjs.org/nodemailer-sendgrid-transport/-/nodemailer-sendgrid-transport-0.2.0.tgz",
3606 - "integrity": "sha1-pRZZO/49HyeM/hcGDh2yNlio9Pw=",
3607 - "requires": {
3608 - "sendgrid": "^1.8.0"
3609 - }
3610 - },
3611 "nodemon": { 2942 "nodemon": {
3612 "version": "2.0.2", 2943 "version": "2.0.2",
3613 "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.2.tgz", 2944 "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.2.tgz",
...@@ -3667,25 +2998,6 @@ ...@@ -3667,25 +2998,6 @@
3667 "path-key": "^2.0.0" 2998 "path-key": "^2.0.0"
3668 } 2999 }
3669 }, 3000 },
3670 - "nth-check": {
3671 - "version": "1.0.2",
3672 - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
3673 - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
3674 - "requires": {
3675 - "boolbase": "~1.0.0"
3676 - }
3677 - },
3678 - "nwmatcher": {
3679 - "version": "1.4.4",
3680 - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz",
3681 - "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==",
3682 - "optional": true
3683 - },
3684 - "oauth-sign": {
3685 - "version": "0.9.0",
3686 - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
3687 - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
3688 - },
3689 "object-assign": { 3001 "object-assign": {
3690 "version": "4.1.1", 3002 "version": "4.1.1",
3691 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 3003 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
...@@ -3744,20 +3056,6 @@ ...@@ -3744,20 +3056,6 @@
3744 "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 3056 "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
3745 "dev": true 3057 "dev": true
3746 }, 3058 },
3747 - "optionator": {
3748 - "version": "0.8.3",
3749 - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
3750 - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
3751 - "optional": true,
3752 - "requires": {
3753 - "deep-is": "~0.1.3",
3754 - "fast-levenshtein": "~2.0.6",
3755 - "levn": "~0.3.0",
3756 - "prelude-ls": "~1.1.2",
3757 - "type-check": "~0.3.2",
3758 - "word-wrap": "~1.2.3"
3759 - }
3760 - },
3761 "p-finally": { 3059 "p-finally": {
3762 "version": "1.0.0", 3060 "version": "1.0.0",
3763 "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 3061 "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
...@@ -3806,14 +3104,6 @@ ...@@ -3806,14 +3104,6 @@
3806 "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", 3104 "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
3807 "dev": true 3105 "dev": true
3808 }, 3106 },
3809 - "parse5": {
3810 - "version": "3.0.3",
3811 - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
3812 - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
3813 - "requires": {
3814 - "@types/node": "*"
3815 - }
3816 - },
3817 "parseurl": { 3107 "parseurl": {
3818 "version": "1.3.3", 3108 "version": "1.3.3",
3819 "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 3109 "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
...@@ -3828,6 +3118,29 @@ ...@@ -3828,6 +3118,29 @@
3828 "tslib": "^1.10.0" 3118 "tslib": "^1.10.0"
3829 } 3119 }
3830 }, 3120 },
3121 + "passport": {
3122 + "version": "0.4.1",
3123 + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
3124 + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==",
3125 + "requires": {
3126 + "passport-strategy": "1.x.x",
3127 + "pause": "0.0.1"
3128 + }
3129 + },
3130 + "passport-jwt": {
3131 + "version": "4.0.0",
3132 + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.0.tgz",
3133 + "integrity": "sha512-BwC0n2GP/1hMVjR4QpnvqA61TxenUMlmfNjYNgK0ZAs0HK4SOQkHcSv4L328blNTLtHq7DbmvyNJiH+bn6C5Mg==",
3134 + "requires": {
3135 + "jsonwebtoken": "^8.2.0",
3136 + "passport-strategy": "^1.0.0"
3137 + }
3138 + },
3139 + "passport-strategy": {
3140 + "version": "1.0.0",
3141 + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
3142 + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ="
3143 + },
3831 "path-exists": { 3144 "path-exists": {
3832 "version": "3.0.0", 3145 "version": "3.0.0",
3833 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 3146 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
...@@ -3862,10 +3175,10 @@ ...@@ -3862,10 +3175,10 @@
3862 "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 3175 "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
3863 "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" 3176 "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
3864 }, 3177 },
3865 - "performance-now": { 3178 + "pause": {
3866 - "version": "2.1.0", 3179 + "version": "0.0.1",
3867 - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 3180 + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
3868 - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 3181 + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
3869 }, 3182 },
3870 "picomatch": { 3183 "picomatch": {
3871 "version": "2.2.2", 3184 "version": "2.2.2",
...@@ -3955,12 +3268,6 @@ ...@@ -3955,12 +3268,6 @@
3955 "resolved": "https://registry.npmjs.org/pop-iterate/-/pop-iterate-1.0.1.tgz", 3268 "resolved": "https://registry.npmjs.org/pop-iterate/-/pop-iterate-1.0.1.tgz",
3956 "integrity": "sha1-zqz9q0q/NT16DyqqLB/Hs/lBO6M=" 3269 "integrity": "sha1-zqz9q0q/NT16DyqqLB/Hs/lBO6M="
3957 }, 3270 },
3958 - "prelude-ls": {
3959 - "version": "1.1.2",
3960 - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
3961 - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
3962 - "optional": true
3963 - },
3964 "prepend-http": { 3271 "prepend-http": {
3965 "version": "1.0.4", 3272 "version": "1.0.4",
3966 "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", 3273 "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
...@@ -3988,22 +3295,12 @@ ...@@ -3988,22 +3295,12 @@
3988 "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 3295 "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
3989 "dev": true 3296 "dev": true
3990 }, 3297 },
3991 - "psl": {
3992 - "version": "1.8.0",
3993 - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
3994 - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
3995 - },
3996 "pstree.remy": { 3298 "pstree.remy": {
3997 "version": "1.1.7", 3299 "version": "1.1.7",
3998 "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", 3300 "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz",
3999 "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==", 3301 "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==",
4000 "dev": true 3302 "dev": true
4001 }, 3303 },
4002 - "punycode": {
4003 - "version": "2.1.1",
4004 - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
4005 - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
4006 - },
4007 "q": { 3304 "q": {
4008 "version": "2.0.3", 3305 "version": "2.0.3",
4009 "resolved": "https://registry.npmjs.org/q/-/q-2.0.3.tgz", 3306 "resolved": "https://registry.npmjs.org/q/-/q-2.0.3.tgz",
...@@ -4183,58 +3480,6 @@ ...@@ -4183,58 +3480,6 @@
4183 "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 3480 "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
4184 "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" 3481 "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
4185 }, 3482 },
4186 - "repeating": {
4187 - "version": "2.0.1",
4188 - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
4189 - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
4190 - "requires": {
4191 - "is-finite": "^1.0.0"
4192 - }
4193 - },
4194 - "request": {
4195 - "version": "2.88.2",
4196 - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
4197 - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
4198 - "requires": {
4199 - "aws-sign2": "~0.7.0",
4200 - "aws4": "^1.8.0",
4201 - "caseless": "~0.12.0",
4202 - "combined-stream": "~1.0.6",
4203 - "extend": "~3.0.2",
4204 - "forever-agent": "~0.6.1",
4205 - "form-data": "~2.3.2",
4206 - "har-validator": "~5.1.3",
4207 - "http-signature": "~1.2.0",
4208 - "is-typedarray": "~1.0.0",
4209 - "isstream": "~0.1.2",
4210 - "json-stringify-safe": "~5.0.1",
4211 - "mime-types": "~2.1.19",
4212 - "oauth-sign": "~0.9.0",
4213 - "performance-now": "^2.1.0",
4214 - "qs": "~6.5.2",
4215 - "safe-buffer": "^5.1.2",
4216 - "tough-cookie": "~2.5.0",
4217 - "tunnel-agent": "^0.6.0",
4218 - "uuid": "^3.3.2"
4219 - },
4220 - "dependencies": {
4221 - "form-data": {
4222 - "version": "2.3.3",
4223 - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
4224 - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
4225 - "requires": {
4226 - "asynckit": "^0.4.0",
4227 - "combined-stream": "^1.0.6",
4228 - "mime-types": "^2.1.12"
4229 - }
4230 - },
4231 - "qs": {
4232 - "version": "6.5.2",
4233 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
4234 - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
4235 - }
4236 - }
4237 - },
4238 "requires-port": { 3483 "requires-port": {
4239 "version": "1.0.0", 3484 "version": "1.0.0",
4240 "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 3485 "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
...@@ -4279,12 +3524,6 @@ ...@@ -4279,12 +3524,6 @@
4279 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3524 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
4280 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 3525 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
4281 }, 3526 },
4282 - "sax": {
4283 - "version": "1.2.4",
4284 - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
4285 - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
4286 - "optional": true
4287 - },
4288 "scmp": { 3527 "scmp": {
4289 "version": "2.1.0", 3528 "version": "2.1.0",
4290 "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.1.0.tgz", 3529 "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.1.0.tgz",
...@@ -4331,24 +3570,6 @@ ...@@ -4331,24 +3570,6 @@
4331 } 3570 }
4332 } 3571 }
4333 }, 3572 },
4334 - "sendgrid": {
4335 - "version": "1.9.2",
4336 - "resolved": "https://registry.npmjs.org/sendgrid/-/sendgrid-1.9.2.tgz",
4337 - "integrity": "sha1-1AfmogawoqaWQkbdnAZBwQvwLxk=",
4338 - "requires": {
4339 - "lodash": "^3.0.1 || ^2.0.0",
4340 - "mime": "^1.2.9",
4341 - "request": "^2.60.0",
4342 - "smtpapi": "^1.2.0"
4343 - },
4344 - "dependencies": {
4345 - "lodash": {
4346 - "version": "3.10.1",
4347 - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
4348 - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
4349 - }
4350 - }
4351 - },
4352 "serve-static": { 3573 "serve-static": {
4353 "version": "1.14.1", 3574 "version": "1.14.1",
4354 "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 3575 "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
...@@ -4391,17 +3612,6 @@ ...@@ -4391,17 +3612,6 @@
4391 "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3612 "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
4392 "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" 3613 "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
4393 }, 3614 },
4394 - "smtpapi": {
4395 - "version": "1.4.2",
4396 - "resolved": "https://registry.npmjs.org/smtpapi/-/smtpapi-1.4.2.tgz",
4397 - "integrity": "sha512-rkb2Qkl8JnsLr/1unpZs1sUZODVMyl9kcYyBNvsilP+RyWMQw2yXUpgHsW41oEAu2yM5z9e2tmyZu52RAbB8Xw==",
4398 - "requires": {
4399 - "chai": "^2.3.0",
4400 - "esdoc": "^1.0.3",
4401 - "esdoc-coverage-plugin": "^1.1.0",
4402 - "esdoc-type-inference-plugin": "^1.0.1"
4403 - }
4404 - },
4405 "source-map": { 3615 "source-map": {
4406 "version": "0.6.1", 3616 "version": "0.6.1",
4407 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3617 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
...@@ -4416,22 +3626,6 @@ ...@@ -4416,22 +3626,6 @@
4416 "source-map": "^0.6.0" 3626 "source-map": "^0.6.0"
4417 } 3627 }
4418 }, 3628 },
4419 - "sshpk": {
4420 - "version": "1.16.1",
4421 - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
4422 - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
4423 - "requires": {
4424 - "asn1": "~0.2.3",
4425 - "assert-plus": "^1.0.0",
4426 - "bcrypt-pbkdf": "^1.0.0",
4427 - "dashdash": "^1.12.0",
4428 - "ecc-jsbn": "~0.1.1",
4429 - "getpass": "^0.1.1",
4430 - "jsbn": "~0.1.0",
4431 - "safer-buffer": "^2.0.2",
4432 - "tweetnacl": "~0.14.0"
4433 - }
4434 - },
4435 "statuses": { 3629 "statuses": {
4436 "version": "1.5.0", 3630 "version": "1.5.0",
4437 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 3631 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
...@@ -4536,7 +3730,6 @@ ...@@ -4536,7 +3730,6 @@
4536 "version": "5.5.0", 3730 "version": "5.5.0",
4537 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3731 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
4538 "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 3732 "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
4539 - "dev": true,
4540 "requires": { 3733 "requires": {
4541 "has-flag": "^3.0.0" 3734 "has-flag": "^3.0.0"
4542 } 3735 }
...@@ -4546,17 +3739,6 @@ ...@@ -4546,17 +3739,6 @@
4546 "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", 3739 "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
4547 "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" 3740 "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
4548 }, 3741 },
4549 - "symbol-tree": {
4550 - "version": "3.2.4",
4551 - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
4552 - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
4553 - "optional": true
4554 - },
4555 - "taffydb": {
4556 - "version": "2.7.3",
4557 - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.7.3.tgz",
4558 - "integrity": "sha1-KtNxaWKUmPylvIQkMJbTzeDsOjQ="
4559 - },
4560 "term-size": { 3742 "term-size": {
4561 "version": "1.2.0", 3743 "version": "1.2.0",
4562 "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", 3744 "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
...@@ -4600,26 +3782,6 @@ ...@@ -4600,26 +3782,6 @@
4600 "nopt": "~1.0.10" 3782 "nopt": "~1.0.10"
4601 } 3783 }
4602 }, 3784 },
4603 - "tough-cookie": {
4604 - "version": "2.5.0",
4605 - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
4606 - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
4607 - "requires": {
4608 - "psl": "^1.1.28",
4609 - "punycode": "^2.1.1"
4610 - }
4611 - },
4612 - "tr46": {
4613 - "version": "0.0.3",
4614 - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
4615 - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
4616 - "optional": true
4617 - },
4618 - "trim-right": {
4619 - "version": "1.0.1",
4620 - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
4621 - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
4622 - },
4623 "ts-invariant": { 3785 "ts-invariant": {
4624 "version": "0.4.4", 3786 "version": "0.4.4",
4625 "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", 3787 "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz",
...@@ -4633,19 +3795,6 @@ ...@@ -4633,19 +3795,6 @@
4633 "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", 3795 "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
4634 "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" 3796 "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA=="
4635 }, 3797 },
4636 - "tunnel-agent": {
4637 - "version": "0.6.0",
4638 - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
4639 - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
4640 - "requires": {
4641 - "safe-buffer": "^5.0.1"
4642 - }
4643 - },
4644 - "tweetnacl": {
4645 - "version": "0.14.5",
4646 - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
4647 - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
4648 - },
4649 "twilio": { 3798 "twilio": {
4650 "version": "3.42.2", 3799 "version": "3.42.2",
4651 "resolved": "https://registry.npmjs.org/twilio/-/twilio-3.42.2.tgz", 3800 "resolved": "https://registry.npmjs.org/twilio/-/twilio-3.42.2.tgz",
...@@ -4671,20 +3820,6 @@ ...@@ -4671,20 +3820,6 @@
4671 } 3820 }
4672 } 3821 }
4673 }, 3822 },
4674 - "type-check": {
4675 - "version": "0.3.2",
4676 - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
4677 - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
4678 - "optional": true,
4679 - "requires": {
4680 - "prelude-ls": "~1.1.2"
4681 - }
4682 - },
4683 - "type-detect": {
4684 - "version": "0.1.1",
4685 - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
4686 - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI="
4687 - },
4688 "type-is": { 3823 "type-is": {
4689 "version": "1.6.18", 3824 "version": "1.6.18",
4690 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 3825 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
...@@ -4703,6 +3838,11 @@ ...@@ -4703,6 +3838,11 @@
4703 "debug": "^2.2.0" 3838 "debug": "^2.2.0"
4704 } 3839 }
4705 }, 3840 },
3841 + "underscore": {
3842 + "version": "1.10.2",
3843 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz",
3844 + "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg=="
3845 + },
4706 "unicode-canonical-property-names-ecmascript": { 3846 "unicode-canonical-property-names-ecmascript": {
4707 "version": "1.0.4", 3847 "version": "1.0.4",
4708 "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 3848 "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
...@@ -4740,11 +3880,6 @@ ...@@ -4740,11 +3880,6 @@
4740 "crypto-random-string": "^1.0.0" 3880 "crypto-random-string": "^1.0.0"
4741 } 3881 }
4742 }, 3882 },
4743 - "universalify": {
4744 - "version": "0.1.2",
4745 - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
4746 - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
4747 - },
4748 "unixify": { 3883 "unixify": {
4749 "version": "1.0.0", 3884 "version": "1.0.0",
4750 "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", 3885 "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz",
...@@ -4792,14 +3927,6 @@ ...@@ -4792,14 +3927,6 @@
4792 "xdg-basedir": "^3.0.0" 3927 "xdg-basedir": "^3.0.0"
4793 } 3928 }
4794 }, 3929 },
4795 - "uri-js": {
4796 - "version": "4.2.2",
4797 - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
4798 - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
4799 - "requires": {
4800 - "punycode": "^2.1.0"
4801 - }
4802 - },
4803 "url-parse": { 3930 "url-parse": {
4804 "version": "1.4.7", 3931 "version": "1.4.7",
4805 "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", 3932 "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
...@@ -4818,11 +3945,6 @@ ...@@ -4818,11 +3945,6 @@
4818 "prepend-http": "^1.0.1" 3945 "prepend-http": "^1.0.1"
4819 } 3946 }
4820 }, 3947 },
4821 - "util-deprecate": {
4822 - "version": "1.0.2",
4823 - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
4824 - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
4825 - },
4826 "utils-merge": { 3948 "utils-merge": {
4827 "version": "1.0.1", 3949 "version": "1.0.1",
4828 "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 3950 "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
...@@ -4847,36 +3969,11 @@ ...@@ -4847,36 +3969,11 @@
4847 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3969 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
4848 "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 3970 "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
4849 }, 3971 },
4850 - "verror": {
4851 - "version": "1.10.0",
4852 - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
4853 - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
4854 - "requires": {
4855 - "assert-plus": "^1.0.0",
4856 - "core-util-is": "1.0.2",
4857 - "extsprintf": "^1.2.0"
4858 - }
4859 - },
4860 "weak-map": { 3972 "weak-map": {
4861 "version": "1.0.5", 3973 "version": "1.0.5",
4862 "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz", 3974 "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz",
4863 "integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes=" 3975 "integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes="
4864 }, 3976 },
4865 - "webidl-conversions": {
4866 - "version": "2.0.1",
4867 - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz",
4868 - "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=",
4869 - "optional": true
4870 - },
4871 - "whatwg-url-compat": {
4872 - "version": "0.6.5",
4873 - "resolved": "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz",
4874 - "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=",
4875 - "optional": true,
4876 - "requires": {
4877 - "tr46": "~0.0.1"
4878 - }
4879 - },
4880 "which": { 3977 "which": {
4881 "version": "1.3.1", 3978 "version": "1.3.1",
4882 "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 3979 "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
...@@ -4895,12 +3992,6 @@ ...@@ -4895,12 +3992,6 @@
4895 "string-width": "^2.1.1" 3992 "string-width": "^2.1.1"
4896 } 3993 }
4897 }, 3994 },
4898 - "word-wrap": {
4899 - "version": "1.2.3",
4900 - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
4901 - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
4902 - "optional": true
4903 - },
4904 "write-file-atomic": { 3995 "write-file-atomic": {
4905 "version": "2.4.3", 3996 "version": "2.4.3",
4906 "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", 3997 "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
...@@ -4926,12 +4017,6 @@ ...@@ -4926,12 +4017,6 @@
4926 "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", 4017 "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
4927 "dev": true 4018 "dev": true
4928 }, 4019 },
4929 - "xml-name-validator": {
4930 - "version": "2.0.1",
4931 - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
4932 - "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
4933 - "optional": true
4934 - },
4935 "xmlbuilder": { 4020 "xmlbuilder": {
4936 "version": "13.0.2", 4021 "version": "13.0.2",
4937 "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", 4022 "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz",
......
...@@ -15,21 +15,23 @@ ...@@ -15,21 +15,23 @@
15 "homepage": "https://bitbucket.org/vel1024/capstone2#readme", 15 "homepage": "https://bitbucket.org/vel1024/capstone2#readme",
16 "dependencies": { 16 "dependencies": {
17 "@prisma/client": "^2.0.0-beta.2", 17 "@prisma/client": "^2.0.0-beta.2",
18 + "@sendgrid/mail": "^7.0.1",
18 "bcryptjs": "^2.4.3", 19 "bcryptjs": "^2.4.3",
20 + "country-data": "0.0.31",
19 "dotenv": "^8.2.0", 21 "dotenv": "^8.2.0",
20 "graphql-tools": "^4.0.7", 22 "graphql-tools": "^4.0.7",
21 "graphql-yoga": "^1.18.3", 23 "graphql-yoga": "^1.18.3",
22 "jsonwebtoken": "^8.5.1", 24 "jsonwebtoken": "^8.5.1",
23 "merge-graphql-schemas": "^1.7.7", 25 "merge-graphql-schemas": "^1.7.7",
24 - "nodemailer": "^6.4.6", 26 + "passport": "^0.4.1",
25 - "nodemailer-sendgrid-transport": "^0.2.0", 27 + "passport-jwt": "^4.0.0",
26 "twilio": "^3.42.2" 28 "twilio": "^3.42.2"
27 }, 29 },
28 "devDependencies": { 30 "devDependencies": {
29 "@babel/core": "^7.9.0", 31 "@babel/core": "^7.9.0",
30 "@babel/node": "^7.8.7", 32 "@babel/node": "^7.8.7",
31 "@babel/preset-env": "^7.9.0", 33 "@babel/preset-env": "^7.9.0",
32 - "@prisma/cli": "^2.0.0-beta.2", 34 + "@prisma/cli": "^2.0.0-beta.3",
33 "morgan": "^1.10.0", 35 "morgan": "^1.10.0",
34 "nodemon": "^2.0.2" 36 "nodemon": "^2.0.2"
35 } 37 }
......
1 -# Migration `20200419160117-init`
2 -
3 -This migration has been generated by sdy at 4/19/2020, 4:01:17 PM.
4 -You can check out the [state of the schema](./schema.prisma) after the migration.
5 -
6 -## Database Steps
7 -
8 -```sql
9 -CREATE TABLE `chat_schema`.`User` (
10 - `avatarUrl` varchar(191) ,
11 - `bio` varchar(191) ,
12 - `createdAt` datetime DEFAULT CURRENT_TIMESTAMP ,
13 - `email` varchar(191) NOT NULL ,
14 - `id` int NOT NULL AUTO_INCREMENT,
15 - `loginSecret` varchar(191) ,
16 - `name` varchar(191) NOT NULL ,
17 - `password` varchar(191) NOT NULL ,
18 - PRIMARY KEY (`id`)
19 -)
20 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
21 -
22 -CREATE TABLE `chat_schema`.`Room` (
23 - `id` int NOT NULL AUTO_INCREMENT,
24 - PRIMARY KEY (`id`)
25 -)
26 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
27 -
28 -CREATE TABLE `chat_schema`.`Category` (
29 - `id` int NOT NULL AUTO_INCREMENT,
30 - `name` varchar(191) DEFAULT '' ,
31 - PRIMARY KEY (`id`)
32 -)
33 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
34 -
35 -CREATE TABLE `chat_schema`.`Message` (
36 - `id` int NOT NULL AUTO_INCREMENT,
37 - `senderId` int NOT NULL ,
38 - `text` varchar(191) DEFAULT '' ,
39 - PRIMARY KEY (`id`)
40 -)
41 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
42 -
43 -CREATE TABLE `chat_schema`.`_RoomToUser` (
44 - `A` int NOT NULL ,
45 - `B` int NOT NULL
46 -)
47 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
48 -
49 -CREATE TABLE `chat_schema`.`_CategoryToRoom` (
50 - `A` int NOT NULL ,
51 - `B` int NOT NULL
52 -)
53 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
54 -
55 -CREATE UNIQUE INDEX `User.email` ON `chat_schema`.`User`(`email`)
56 -
57 -CREATE UNIQUE INDEX `_RoomToUser_AB_unique` ON `chat_schema`.`_RoomToUser`(`A`,`B`)
58 -
59 -CREATE INDEX `_RoomToUser_B_index` ON `chat_schema`.`_RoomToUser`(`B`)
60 -
61 -CREATE UNIQUE INDEX `_CategoryToRoom_AB_unique` ON `chat_schema`.`_CategoryToRoom`(`A`,`B`)
62 -
63 -CREATE INDEX `_CategoryToRoom_B_index` ON `chat_schema`.`_CategoryToRoom`(`B`)
64 -
65 -ALTER TABLE `chat_schema`.`Message` ADD FOREIGN KEY (`senderId`) REFERENCES `chat_schema`.`User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
66 -
67 -ALTER TABLE `chat_schema`.`_RoomToUser` ADD FOREIGN KEY (`A`) REFERENCES `chat_schema`.`Room`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
68 -
69 -ALTER TABLE `chat_schema`.`_RoomToUser` ADD FOREIGN KEY (`B`) REFERENCES `chat_schema`.`User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
70 -
71 -ALTER TABLE `chat_schema`.`_CategoryToRoom` ADD FOREIGN KEY (`A`) REFERENCES `chat_schema`.`Category`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
72 -
73 -ALTER TABLE `chat_schema`.`_CategoryToRoom` ADD FOREIGN KEY (`B`) REFERENCES `chat_schema`.`Room`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
74 -
75 -DROP TABLE `chat_schema`.`_migration`;
76 -
77 -DROP TABLE `chat_schema`.`test`;
78 -```
79 -
80 -## Changes
81 -
82 -```diff
83 -diff --git schema.prisma schema.prisma
84 -migration ..20200419160117-init
85 ---- datamodel.dml
86 -+++ datamodel.dml
87 -@@ -1,0 +1,41 @@
88 -+generator client {
89 -+ provider = "prisma-client-js"
90 -+ binaryTargets = ["native", "debian-openssl-1.1.x"]
91 -+}
92 -+
93 -+datasource db {
94 -+ provider = "mysql"
95 -+ url = env("DATABASE_URL")
96 -+}
97 -+
98 -+model User {
99 -+ id Int @default(autoincrement()) @id
100 -+ avatarUrl String?
101 -+ email String @unique
102 -+ password String
103 -+ name String
104 -+ loginSecret String?
105 -+ bio String?
106 -+ rooms Room[] @relation(references: [id])
107 -+ messages Message[]
108 -+ createdAt DateTime? @default(now())
109 -+}
110 -+
111 -+model Room {
112 -+ id Int @default(autoincrement()) @id
113 -+ participants User[] @relation(references: [id])
114 -+ categories Category[] @relation(references: [id])
115 -+}
116 -+
117 -+model Category {
118 -+ id Int @default(autoincrement()) @id
119 -+ name String? @default("")
120 -+ rooms Room[] @relation(references: [id])
121 -+}
122 -+
123 -+model Message {
124 -+ id Int @default(autoincrement()) @id
125 -+ text String? @default("")
126 -+ sender User @relation(fields: [senderId], references: [id])
127 -+ senderId Int
128 -+}
129 -```
130 -
131 -
1 -generator client {
2 - provider = "prisma-client-js"
3 - binaryTargets = ["native", "debian-openssl-1.1.x"]
4 -}
5 -
6 -datasource db {
7 - provider = "mysql"
8 - url = "***"
9 -}
10 -
11 -model User {
12 - id Int @default(autoincrement()) @id
13 - avatarUrl String?
14 - email String @unique
15 - password String
16 - name String
17 - loginSecret String?
18 - bio String?
19 - rooms Room[] @relation(references: [id])
20 - messages Message[]
21 - createdAt DateTime? @default(now())
22 -}
23 -
24 -model Room {
25 - id Int @default(autoincrement()) @id
26 - participants User[] @relation(references: [id])
27 - categories Category[] @relation(references: [id])
28 -}
29 -
30 -model Category {
31 - id Int @default(autoincrement()) @id
32 - name String? @default("")
33 - rooms Room[] @relation(references: [id])
34 -}
35 -
36 -model Message {
37 - id Int @default(autoincrement()) @id
38 - text String? @default("")
39 - sender User @relation(fields: [senderId], references: [id])
40 - senderId Int
41 -}
...\ No newline at end of file ...\ No newline at end of file
1 -{
2 - "version": "0.3.14-fixed",
3 - "steps": [
4 - {
5 - "tag": "CreateSource",
6 - "source": "db"
7 - },
8 - {
9 - "tag": "CreateArgument",
10 - "location": {
11 - "tag": "Source",
12 - "source": "db"
13 - },
14 - "argument": "provider",
15 - "value": "\"mysql\""
16 - },
17 - {
18 - "tag": "CreateArgument",
19 - "location": {
20 - "tag": "Source",
21 - "source": "db"
22 - },
23 - "argument": "url",
24 - "value": "env(\"DATABASE_URL\")"
25 - },
26 - {
27 - "tag": "CreateModel",
28 - "model": "User"
29 - },
30 - {
31 - "tag": "CreateField",
32 - "model": "User",
33 - "field": "id",
34 - "type": "Int",
35 - "arity": "Required"
36 - },
37 - {
38 - "tag": "CreateDirective",
39 - "location": {
40 - "path": {
41 - "tag": "Field",
42 - "model": "User",
43 - "field": "id"
44 - },
45 - "directive": "default"
46 - }
47 - },
48 - {
49 - "tag": "CreateArgument",
50 - "location": {
51 - "tag": "Directive",
52 - "path": {
53 - "tag": "Field",
54 - "model": "User",
55 - "field": "id"
56 - },
57 - "directive": "default"
58 - },
59 - "argument": "",
60 - "value": "autoincrement()"
61 - },
62 - {
63 - "tag": "CreateDirective",
64 - "location": {
65 - "path": {
66 - "tag": "Field",
67 - "model": "User",
68 - "field": "id"
69 - },
70 - "directive": "id"
71 - }
72 - },
73 - {
74 - "tag": "CreateField",
75 - "model": "User",
76 - "field": "avatarUrl",
77 - "type": "String",
78 - "arity": "Optional"
79 - },
80 - {
81 - "tag": "CreateField",
82 - "model": "User",
83 - "field": "email",
84 - "type": "String",
85 - "arity": "Required"
86 - },
87 - {
88 - "tag": "CreateDirective",
89 - "location": {
90 - "path": {
91 - "tag": "Field",
92 - "model": "User",
93 - "field": "email"
94 - },
95 - "directive": "unique"
96 - }
97 - },
98 - {
99 - "tag": "CreateField",
100 - "model": "User",
101 - "field": "password",
102 - "type": "String",
103 - "arity": "Required"
104 - },
105 - {
106 - "tag": "CreateField",
107 - "model": "User",
108 - "field": "name",
109 - "type": "String",
110 - "arity": "Required"
111 - },
112 - {
113 - "tag": "CreateField",
114 - "model": "User",
115 - "field": "loginSecret",
116 - "type": "String",
117 - "arity": "Optional"
118 - },
119 - {
120 - "tag": "CreateField",
121 - "model": "User",
122 - "field": "bio",
123 - "type": "String",
124 - "arity": "Optional"
125 - },
126 - {
127 - "tag": "CreateField",
128 - "model": "User",
129 - "field": "rooms",
130 - "type": "Room",
131 - "arity": "List"
132 - },
133 - {
134 - "tag": "CreateDirective",
135 - "location": {
136 - "path": {
137 - "tag": "Field",
138 - "model": "User",
139 - "field": "rooms"
140 - },
141 - "directive": "relation"
142 - }
143 - },
144 - {
145 - "tag": "CreateArgument",
146 - "location": {
147 - "tag": "Directive",
148 - "path": {
149 - "tag": "Field",
150 - "model": "User",
151 - "field": "rooms"
152 - },
153 - "directive": "relation"
154 - },
155 - "argument": "references",
156 - "value": "[id]"
157 - },
158 - {
159 - "tag": "CreateField",
160 - "model": "User",
161 - "field": "messages",
162 - "type": "Message",
163 - "arity": "List"
164 - },
165 - {
166 - "tag": "CreateField",
167 - "model": "User",
168 - "field": "createdAt",
169 - "type": "DateTime",
170 - "arity": "Optional"
171 - },
172 - {
173 - "tag": "CreateDirective",
174 - "location": {
175 - "path": {
176 - "tag": "Field",
177 - "model": "User",
178 - "field": "createdAt"
179 - },
180 - "directive": "default"
181 - }
182 - },
183 - {
184 - "tag": "CreateArgument",
185 - "location": {
186 - "tag": "Directive",
187 - "path": {
188 - "tag": "Field",
189 - "model": "User",
190 - "field": "createdAt"
191 - },
192 - "directive": "default"
193 - },
194 - "argument": "",
195 - "value": "now()"
196 - },
197 - {
198 - "tag": "CreateModel",
199 - "model": "Room"
200 - },
201 - {
202 - "tag": "CreateField",
203 - "model": "Room",
204 - "field": "id",
205 - "type": "Int",
206 - "arity": "Required"
207 - },
208 - {
209 - "tag": "CreateDirective",
210 - "location": {
211 - "path": {
212 - "tag": "Field",
213 - "model": "Room",
214 - "field": "id"
215 - },
216 - "directive": "default"
217 - }
218 - },
219 - {
220 - "tag": "CreateArgument",
221 - "location": {
222 - "tag": "Directive",
223 - "path": {
224 - "tag": "Field",
225 - "model": "Room",
226 - "field": "id"
227 - },
228 - "directive": "default"
229 - },
230 - "argument": "",
231 - "value": "autoincrement()"
232 - },
233 - {
234 - "tag": "CreateDirective",
235 - "location": {
236 - "path": {
237 - "tag": "Field",
238 - "model": "Room",
239 - "field": "id"
240 - },
241 - "directive": "id"
242 - }
243 - },
244 - {
245 - "tag": "CreateField",
246 - "model": "Room",
247 - "field": "participants",
248 - "type": "User",
249 - "arity": "List"
250 - },
251 - {
252 - "tag": "CreateDirective",
253 - "location": {
254 - "path": {
255 - "tag": "Field",
256 - "model": "Room",
257 - "field": "participants"
258 - },
259 - "directive": "relation"
260 - }
261 - },
262 - {
263 - "tag": "CreateArgument",
264 - "location": {
265 - "tag": "Directive",
266 - "path": {
267 - "tag": "Field",
268 - "model": "Room",
269 - "field": "participants"
270 - },
271 - "directive": "relation"
272 - },
273 - "argument": "references",
274 - "value": "[id]"
275 - },
276 - {
277 - "tag": "CreateField",
278 - "model": "Room",
279 - "field": "categories",
280 - "type": "Category",
281 - "arity": "List"
282 - },
283 - {
284 - "tag": "CreateDirective",
285 - "location": {
286 - "path": {
287 - "tag": "Field",
288 - "model": "Room",
289 - "field": "categories"
290 - },
291 - "directive": "relation"
292 - }
293 - },
294 - {
295 - "tag": "CreateArgument",
296 - "location": {
297 - "tag": "Directive",
298 - "path": {
299 - "tag": "Field",
300 - "model": "Room",
301 - "field": "categories"
302 - },
303 - "directive": "relation"
304 - },
305 - "argument": "references",
306 - "value": "[id]"
307 - },
308 - {
309 - "tag": "CreateModel",
310 - "model": "Category"
311 - },
312 - {
313 - "tag": "CreateField",
314 - "model": "Category",
315 - "field": "id",
316 - "type": "Int",
317 - "arity": "Required"
318 - },
319 - {
320 - "tag": "CreateDirective",
321 - "location": {
322 - "path": {
323 - "tag": "Field",
324 - "model": "Category",
325 - "field": "id"
326 - },
327 - "directive": "default"
328 - }
329 - },
330 - {
331 - "tag": "CreateArgument",
332 - "location": {
333 - "tag": "Directive",
334 - "path": {
335 - "tag": "Field",
336 - "model": "Category",
337 - "field": "id"
338 - },
339 - "directive": "default"
340 - },
341 - "argument": "",
342 - "value": "autoincrement()"
343 - },
344 - {
345 - "tag": "CreateDirective",
346 - "location": {
347 - "path": {
348 - "tag": "Field",
349 - "model": "Category",
350 - "field": "id"
351 - },
352 - "directive": "id"
353 - }
354 - },
355 - {
356 - "tag": "CreateField",
357 - "model": "Category",
358 - "field": "name",
359 - "type": "String",
360 - "arity": "Optional"
361 - },
362 - {
363 - "tag": "CreateDirective",
364 - "location": {
365 - "path": {
366 - "tag": "Field",
367 - "model": "Category",
368 - "field": "name"
369 - },
370 - "directive": "default"
371 - }
372 - },
373 - {
374 - "tag": "CreateArgument",
375 - "location": {
376 - "tag": "Directive",
377 - "path": {
378 - "tag": "Field",
379 - "model": "Category",
380 - "field": "name"
381 - },
382 - "directive": "default"
383 - },
384 - "argument": "",
385 - "value": "\"\""
386 - },
387 - {
388 - "tag": "CreateField",
389 - "model": "Category",
390 - "field": "rooms",
391 - "type": "Room",
392 - "arity": "List"
393 - },
394 - {
395 - "tag": "CreateDirective",
396 - "location": {
397 - "path": {
398 - "tag": "Field",
399 - "model": "Category",
400 - "field": "rooms"
401 - },
402 - "directive": "relation"
403 - }
404 - },
405 - {
406 - "tag": "CreateArgument",
407 - "location": {
408 - "tag": "Directive",
409 - "path": {
410 - "tag": "Field",
411 - "model": "Category",
412 - "field": "rooms"
413 - },
414 - "directive": "relation"
415 - },
416 - "argument": "references",
417 - "value": "[id]"
418 - },
419 - {
420 - "tag": "CreateModel",
421 - "model": "Message"
422 - },
423 - {
424 - "tag": "CreateField",
425 - "model": "Message",
426 - "field": "id",
427 - "type": "Int",
428 - "arity": "Required"
429 - },
430 - {
431 - "tag": "CreateDirective",
432 - "location": {
433 - "path": {
434 - "tag": "Field",
435 - "model": "Message",
436 - "field": "id"
437 - },
438 - "directive": "default"
439 - }
440 - },
441 - {
442 - "tag": "CreateArgument",
443 - "location": {
444 - "tag": "Directive",
445 - "path": {
446 - "tag": "Field",
447 - "model": "Message",
448 - "field": "id"
449 - },
450 - "directive": "default"
451 - },
452 - "argument": "",
453 - "value": "autoincrement()"
454 - },
455 - {
456 - "tag": "CreateDirective",
457 - "location": {
458 - "path": {
459 - "tag": "Field",
460 - "model": "Message",
461 - "field": "id"
462 - },
463 - "directive": "id"
464 - }
465 - },
466 - {
467 - "tag": "CreateField",
468 - "model": "Message",
469 - "field": "text",
470 - "type": "String",
471 - "arity": "Optional"
472 - },
473 - {
474 - "tag": "CreateDirective",
475 - "location": {
476 - "path": {
477 - "tag": "Field",
478 - "model": "Message",
479 - "field": "text"
480 - },
481 - "directive": "default"
482 - }
483 - },
484 - {
485 - "tag": "CreateArgument",
486 - "location": {
487 - "tag": "Directive",
488 - "path": {
489 - "tag": "Field",
490 - "model": "Message",
491 - "field": "text"
492 - },
493 - "directive": "default"
494 - },
495 - "argument": "",
496 - "value": "\"\""
497 - },
498 - {
499 - "tag": "CreateField",
500 - "model": "Message",
501 - "field": "sender",
502 - "type": "User",
503 - "arity": "Required"
504 - },
505 - {
506 - "tag": "CreateDirective",
507 - "location": {
508 - "path": {
509 - "tag": "Field",
510 - "model": "Message",
511 - "field": "sender"
512 - },
513 - "directive": "relation"
514 - }
515 - },
516 - {
517 - "tag": "CreateArgument",
518 - "location": {
519 - "tag": "Directive",
520 - "path": {
521 - "tag": "Field",
522 - "model": "Message",
523 - "field": "sender"
524 - },
525 - "directive": "relation"
526 - },
527 - "argument": "fields",
528 - "value": "[senderId]"
529 - },
530 - {
531 - "tag": "CreateArgument",
532 - "location": {
533 - "tag": "Directive",
534 - "path": {
535 - "tag": "Field",
536 - "model": "Message",
537 - "field": "sender"
538 - },
539 - "directive": "relation"
540 - },
541 - "argument": "references",
542 - "value": "[id]"
543 - },
544 - {
545 - "tag": "CreateField",
546 - "model": "Message",
547 - "field": "senderId",
548 - "type": "Int",
549 - "arity": "Required"
550 - }
551 - ]
552 -}
...\ No newline at end of file ...\ No newline at end of file
1 -# Migration `20200424124259-init`
2 -
3 -This migration has been generated by sdy at 4/24/2020, 12:42:59 PM.
4 -You can check out the [state of the schema](./schema.prisma) after the migration.
5 -
6 -## Database Steps
7 -
8 -```sql
9 -CREATE TABLE `chat_schema`.`User` (
10 - `avatarUrl` varchar(191) ,
11 - `bio` varchar(191) ,
12 - `createdAt` datetime DEFAULT CURRENT_TIMESTAMP ,
13 - `email` varchar(191) NOT NULL ,
14 - `emailSecret` varchar(191) ,
15 - `id` int NOT NULL AUTO_INCREMENT,
16 - `name` varchar(191) NOT NULL ,
17 - `password` varchar(191) NOT NULL ,
18 - `phoneNumber` int ,
19 - `phoneSecret` varchar(191) ,
20 - PRIMARY KEY (`id`)
21 -)
22 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
23 -
24 -CREATE TABLE `chat_schema`.`Room` (
25 - `id` int NOT NULL AUTO_INCREMENT,
26 - PRIMARY KEY (`id`)
27 -)
28 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
29 -
30 -CREATE TABLE `chat_schema`.`Category` (
31 - `id` int NOT NULL AUTO_INCREMENT,
32 - `name` varchar(191) DEFAULT '' ,
33 - PRIMARY KEY (`id`)
34 -)
35 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
36 -
37 -CREATE TABLE `chat_schema`.`Message` (
38 - `id` int NOT NULL AUTO_INCREMENT,
39 - `senderId` int NOT NULL ,
40 - `text` varchar(191) DEFAULT '' ,
41 - PRIMARY KEY (`id`)
42 -)
43 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
44 -
45 -CREATE TABLE `chat_schema`.`_RoomToUser` (
46 - `A` int NOT NULL ,
47 - `B` int NOT NULL
48 -)
49 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
50 -
51 -CREATE TABLE `chat_schema`.`_CategoryToRoom` (
52 - `A` int NOT NULL ,
53 - `B` int NOT NULL
54 -)
55 -DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
56 -
57 -CREATE UNIQUE INDEX `User.email` ON `chat_schema`.`User`(`email`)
58 -
59 -CREATE UNIQUE INDEX `_RoomToUser_AB_unique` ON `chat_schema`.`_RoomToUser`(`A`,`B`)
60 -
61 -CREATE INDEX `_RoomToUser_B_index` ON `chat_schema`.`_RoomToUser`(`B`)
62 -
63 -CREATE UNIQUE INDEX `_CategoryToRoom_AB_unique` ON `chat_schema`.`_CategoryToRoom`(`A`,`B`)
64 -
65 -CREATE INDEX `_CategoryToRoom_B_index` ON `chat_schema`.`_CategoryToRoom`(`B`)
66 -
67 -ALTER TABLE `chat_schema`.`Message` ADD FOREIGN KEY (`senderId`) REFERENCES `chat_schema`.`User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
68 -
69 -ALTER TABLE `chat_schema`.`_RoomToUser` ADD FOREIGN KEY (`A`) REFERENCES `chat_schema`.`Room`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
70 -
71 -ALTER TABLE `chat_schema`.`_RoomToUser` ADD FOREIGN KEY (`B`) REFERENCES `chat_schema`.`User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
72 -
73 -ALTER TABLE `chat_schema`.`_CategoryToRoom` ADD FOREIGN KEY (`A`) REFERENCES `chat_schema`.`Category`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
74 -
75 -ALTER TABLE `chat_schema`.`_CategoryToRoom` ADD FOREIGN KEY (`B`) REFERENCES `chat_schema`.`Room`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
76 -
77 -DROP TABLE `chat_schema`.`_categorytoroom`;
78 -
79 -DROP TABLE `chat_schema`.`_migration`;
80 -
81 -DROP TABLE `chat_schema`.`_roomtouser`;
82 -
83 -DROP TABLE `chat_schema`.`category`;
84 -
85 -DROP TABLE `chat_schema`.`message`;
86 -
87 -DROP TABLE `chat_schema`.`room`;
88 -
89 -DROP TABLE `chat_schema`.`test`;
90 -
91 -DROP TABLE `chat_schema`.`user`;
92 -```
93 -
94 -## Changes
95 -
96 -```diff
97 -diff --git schema.prisma schema.prisma
98 -migration 20200419160117-init..20200424124259-init
99 ---- datamodel.dml
100 -+++ datamodel.dml
101 -@@ -4,18 +4,20 @@
102 - }
103 - datasource db {
104 - provider = "mysql"
105 -- url = "***"
106 -+ url = env("DATABASE_URL")
107 - }
108 - model User {
109 - id Int @default(autoincrement()) @id
110 - avatarUrl String?
111 - email String @unique
112 - password String
113 - name String
114 -- loginSecret String?
115 -+ phoneNumber Int?
116 -+ emailSecret String?
117 -+ phoneSecret String?
118 - bio String?
119 - rooms Room[] @relation(references: [id])
120 - messages Message[]
121 - createdAt DateTime? @default(now())
122 -```
123 -
124 -
1 -generator client {
2 - provider = "prisma-client-js"
3 - binaryTargets = ["native", "debian-openssl-1.1.x"]
4 -}
5 -
6 -datasource db {
7 - provider = "mysql"
8 - url = "***"
9 -}
10 -
11 -model User {
12 - id Int @default(autoincrement()) @id
13 - avatarUrl String?
14 - email String @unique
15 - password String
16 - name String
17 - phoneNumber Int?
18 - emailSecret String?
19 - phoneSecret String?
20 - bio String?
21 - rooms Room[] @relation(references: [id])
22 - messages Message[]
23 - createdAt DateTime? @default(now())
24 -}
25 -
26 -model Room {
27 - id Int @default(autoincrement()) @id
28 - participants User[] @relation(references: [id])
29 - categories Category[] @relation(references: [id])
30 -}
31 -
32 -model Category {
33 - id Int @default(autoincrement()) @id
34 - name String? @default("")
35 - rooms Room[] @relation(references: [id])
36 -}
37 -
38 -model Message {
39 - id Int @default(autoincrement()) @id
40 - text String? @default("")
41 - sender User @relation(fields: [senderId], references: [id])
42 - senderId Int
43 -}
...\ No newline at end of file ...\ No newline at end of file
1 -{
2 - "version": "0.3.14-fixed",
3 - "steps": [
4 - {
5 - "tag": "CreateField",
6 - "model": "User",
7 - "field": "phoneNumber",
8 - "type": "Int",
9 - "arity": "Optional"
10 - },
11 - {
12 - "tag": "CreateField",
13 - "model": "User",
14 - "field": "emailSecret",
15 - "type": "String",
16 - "arity": "Optional"
17 - },
18 - {
19 - "tag": "CreateField",
20 - "model": "User",
21 - "field": "phoneSecret",
22 - "type": "String",
23 - "arity": "Optional"
24 - },
25 - {
26 - "tag": "DeleteField",
27 - "model": "User",
28 - "field": "loginSecret"
29 - }
30 - ]
31 -}
...\ No newline at end of file ...\ No newline at end of file
1 -# IF THERE'S A GIT CONFLICT IN THIS FILE, DON'T SOLVE IT MANUALLY!
2 -# INSTEAD EXECUTE `prisma migrate fix`
3 -# Prisma Migrate lockfile v1
4 -# Read more about conflict resolution here: TODO
5 -
6 -20200419160117-init
7 -20200424124259-init
...\ No newline at end of file ...\ No newline at end of file
1 generator client { 1 generator client {
2 provider = "prisma-client-js" 2 provider = "prisma-client-js"
3 - binaryTargets = ["native", "debian-openssl-1.1.x"] 3 + binaryTargets = ["native", "debian-openssl-1.1.x", "darwin"]
4 } 4 }
5 5
6 datasource db { 6 datasource db {
...@@ -9,18 +9,19 @@ datasource db { ...@@ -9,18 +9,19 @@ datasource db {
9 } 9 }
10 10
11 model User { 11 model User {
12 - id Int @default(autoincrement()) @id 12 + id Int @default(autoincrement()) @id
13 - avatarUrl String? 13 + avatarUrl String? @default("")
14 - email String @unique 14 + email String @unique
15 - password String 15 + password String
16 - name String 16 + name String
17 - phoneNumber String? @unique 17 + phoneNum String @default("") @unique
18 - emailSecret String? 18 + emailSecret String? @default("")
19 - phoneSecret String? 19 + phoneSecret String? @default("")
20 - bio String? 20 + bio String? @default("")
21 - rooms Room[] @relation(references: [id]) 21 + rooms Room[] @relation(references: [id])
22 - messages Message[] 22 + sendMessage Message[] @relation("Sender")
23 - createdAt DateTime? @default(now()) 23 + receiveMessage Message[] @relation("Receiver")
24 + createdAt DateTime? @default(now())
24 } 25 }
25 26
26 model Room { 27 model Room {
...@@ -36,8 +37,11 @@ model Category { ...@@ -36,8 +37,11 @@ model Category {
36 } 37 }
37 38
38 model Message { 39 model Message {
39 - id Int @default(autoincrement()) @id 40 + id Int @default(autoincrement()) @id
40 - text String? @default("") 41 + text String? @default("")
41 - sender User @relation(fields: [senderId], references: [id]) 42 + from User[] @relation("Sender", references: [id])
42 - senderId Int 43 + to User[] @relation("Receiver", references: [id])
44 + room Room @relation(fields: [roomId], references: [id])
45 + roomId Int
46 + createdAt DateTime? @default(now())
43 } 47 }
...\ No newline at end of file ...\ No newline at end of file
......
1 +type Mutation {
2 + newMessage(receiverId: Int, message: String!, roomId: Int): Message!
3 +}
1 +import { isAuthenticated, prisma } from "../../../utils";
2 +import { ONE_TO_ONE_MESSAGE } from "../../../topics";
3 +
4 +export default {
5 + Mutation: {
6 + newMessage: async (_, args, { request, pubsub }) => {
7 + isAuthenticated(request);
8 + const { user } = request;
9 + const { receiverId, message, roomId } = args;
10 + let room = await prisma.room.findOne({
11 + where: {
12 + id: roomId,
13 + },
14 + });
15 + room = await prisma.room.update({
16 + where: {
17 + id: roomId,
18 + },
19 + data: {
20 + participants: {
21 + connect: [{ id: user.id }, { id: receiverId }],
22 + },
23 + },
24 + });
25 + // 방이 없는 경우
26 + if (room === undefined || room === null) {
27 + // 보내는 사람과 받는 사람이 다른 경우
28 + if (user.id !== receiverId) {
29 + room = await prisma.room.create({
30 + data: {
31 + participants: {
32 + connect: [{ id: receiverId }, { id: user.id }],
33 + },
34 + },
35 + });
36 + } else {
37 + // 자기 자신에게 보내는 경우
38 + room = await prisma.room.create({
39 + data: {
40 + participants: {
41 + connect: [{ id: user.id }],
42 + },
43 + },
44 + });
45 + }
46 + }
47 + if (!room) {
48 + throw new Error("There is no room");
49 + }
50 + const subMessage = await prisma.message.create({
51 + data: {
52 + text: message,
53 + to: {
54 + connect: {
55 + id: receiverId,
56 + },
57 + },
58 + from: {
59 + connect: {
60 + id: user.id,
61 + },
62 + },
63 + room: {
64 + connect: {
65 + id: room.id,
66 + },
67 + },
68 + },
69 + });
70 + console.log(subMessage);
71 + pubsub.publish(ONE_TO_ONE_MESSAGE, subMessage);
72 + return subMessage;
73 + },
74 + },
75 +};
1 type Subscription { 1 type Subscription {
2 - sendMessage(message: String!): Message! 2 + subMessage: Message
3 } 3 }
......
1 -import { prisma } from "../../../utils"; 1 +import { ONE_TO_ONE_MESSAGE } from "../../../topics";
2 2
3 export default { 3 export default {
4 Subscription: { 4 Subscription: {
5 - sendMessage: async (_, args) => { 5 + subMessage: {
6 - const { message } = args; 6 + subscribe: async (_, __, { pubsub }) => {
7 + return pubsub.asyncIterator(ONE_TO_ONE_MESSAGE);
8 + },
7 }, 9 },
8 }, 10 },
9 }; 11 };
......
1 +type Mutation {
2 + createRoom(participantsId: [Int], categories: [Int]): Room!
3 +}
1 +import { prisma } from "../../../utils";
2 +
3 +export default {
4 + Mutation: {
5 + createRoom: async (_, args) => {
6 + const { participantsId, categories } = args;
7 + let newRoom, participantId;
8 + if (participantsId !== undefined) {
9 + newRoom = await prisma.room.create({
10 + data: {
11 + participants: {
12 + connect: {
13 + id: (participantId = participantsId.forEach(
14 + (cur, _, __) => cur
15 + )),
16 + },
17 + },
18 + },
19 + });
20 + }
21 + if (categories !== undefined) {
22 + newRoom = await prisma.room.create({
23 + data: {
24 + categories: {
25 + connect: {
26 + id: (category = categories.forEach((cur, _, __) => cur)),
27 + },
28 + },
29 + },
30 + });
31 + }
32 + return newRoom;
33 + },
34 + },
35 +};
...@@ -5,5 +5,6 @@ type Mutation { ...@@ -5,5 +5,6 @@ type Mutation {
5 password: String! 5 password: String!
6 bio: String 6 bio: String
7 avatarUrl: String 7 avatarUrl: String
8 + phoneNum: String
8 ): AuthPayload! 9 ): AuthPayload!
9 } 10 }
......
1 -import { prisma, generateToken } from "../../../utils"; 1 +import { prisma, generateToken, changePhoneNumber } from "../../../utils";
2 import bcrypt from "bcryptjs"; 2 import bcrypt from "bcryptjs";
3 3
4 export default { 4 export default {
5 Mutation: { 5 Mutation: {
6 createAccount: async (_, args) => { 6 createAccount: async (_, args) => {
7 - const { name, password, email, bio = "", avatarUrl = "" } = args; 7 + const { name, password, email, bio, avatarUrl, phoneNum } = args;
8 const encryptPw = await bcrypt.hash(password, 10); 8 const encryptPw = await bcrypt.hash(password, 10);
9 + // TODO: Find user's country code and change new phone number value
10 + const newPhoneNumber = await changePhoneNumber(phoneNum, "+82");
9 const user = await prisma.user.create({ 11 const user = await prisma.user.create({
10 data: { 12 data: {
11 name, 13 name,
...@@ -13,6 +15,7 @@ export default { ...@@ -13,6 +15,7 @@ export default {
13 bio, 15 bio,
14 avatarUrl, 16 avatarUrl,
15 password: encryptPw, 17 password: encryptPw,
18 + phoneNum: newPhoneNumber,
16 }, 19 },
17 }); 20 });
18 const token = generateToken(user.id); 21 const token = generateToken(user.id);
......
1 +type Mutation {
2 + deleteUser(email: String!): User!
3 +}
1 +import { isAuthenticated, prisma } from "../../../utils";
2 +
3 +export default {
4 + Mutation: {
5 + deleteUser: async (_, args, { request }) => {
6 + isAuthenticated(request);
7 + const { email } = args;
8 + return prisma.user.delete({
9 + where: {
10 + email,
11 + },
12 + });
13 + },
14 + },
15 +};
1 type Mutation { 1 type Mutation {
2 editProfile( 2 editProfile(
3 + email: String!
3 name: String 4 name: String
4 - email: String
5 bio: String 5 bio: String
6 avatarUrl: String 6 avatarUrl: String
7 + phoneNum: String
7 ): User! 8 ): User!
8 } 9 }
......
1 -import { prisma } from "../../../utils"; 1 +import { isAuthenticated, prisma } from "../../../utils";
2 2
3 export default { 3 export default {
4 Mutation: { 4 Mutation: {
5 - editProfile: async (_, args, { request }) => {}, 5 + editProfile: async (_, args, { request }) => {
6 + isAuthenticated(request);
7 + const { name, email, avatarUrl, bio, phoneNum } = args;
8 + const user = await prisma.user.findOne({
9 + where: {
10 + email,
11 + },
12 + });
13 + if (user) {
14 + const updateUser = await prisma.user.update({
15 + where: {
16 + email,
17 + },
18 + data: {
19 + name,
20 + bio,
21 + avatarUrl,
22 + phoneNum,
23 + },
24 + });
25 + return updateUser;
26 + } else {
27 + throw new Error("There is no such a user");
28 + }
29 + },
6 }, 30 },
7 }; 31 };
......
1 type Query { 1 type Query {
2 - findEmail(phoneNumber: String!): User! 2 + findEmail(phoneNum: String!): Boolean!
3 } 3 }
......
1 -import { prisma, generateSecret } from "../../../utils"; 1 +import { prisma, isAuthenticated, changePhoneNumber } from "../../../utils";
2 import twilio from "twilio"; 2 import twilio from "twilio";
3 3
4 export default { 4 export default {
5 Query: { 5 Query: {
6 findEmail: async (_, args) => { 6 findEmail: async (_, args) => {
7 - const { phoneNumber } = args; 7 + const { phoneNum } = args;
8 - const accountSid = process.env.TWILIO_SID; 8 + const changeNum = await changePhoneNumber(phoneNum, "+82");
9 - const authToken = process.env.TWILIO_AUTH_TOKEN; 9 + const user = await prisma.user.findOne({
10 - const client = new twilio(accountSid, authToken);
11 - const randomWords = generateSecret();
12 - client.messages
13 - .create({
14 - body: `Please enter this word : ${randomWords}`,
15 - to: `${phoneNumber}`,
16 - from: "KhuChat",
17 - })
18 - .then((message) => console.log(message.sid));
19 -
20 - const user = await prisma.user.update({
21 where: { 10 where: {
22 - phoneNumber, 11 + phoneNum: changeNum,
23 - },
24 - data: {
25 - phoneSecret: randomWords,
26 }, 12 },
27 }); 13 });
28 - return user; 14 + if (user && isAuthenticated) {
15 + const accountSid = process.env.TWILIO_SID;
16 + const authToken = process.env.TWILIO_AUTH_TOKEN;
17 + const twilioPhone = process.env.TWILIO_PHONE_NUMBER;
18 + const client = new twilio(accountSid, authToken);
19 + client.messages
20 + .create({
21 + body: `Your Email is : ${user.email}`,
22 + to: `${changeNum}`,
23 + from: `${twilioPhone}`,
24 + })
25 + .then((message) => {
26 + console.log(message.sid);
27 + });
28 + return true;
29 + } else {
30 + throw new Error("You need to login first");
31 + }
29 }, 32 },
30 }, 33 },
31 }; 34 };
......
1 -import { prisma, generateSecret, sendSecretMail } from "../../../utils"; 1 +import { prisma, generateSecret, sendEmail } from "../../../utils";
2 import bcrypt from "bcryptjs"; 2 import bcrypt from "bcryptjs";
3 3
4 export default { 4 export default {
...@@ -6,15 +6,14 @@ export default { ...@@ -6,15 +6,14 @@ export default {
6 requestEmailSecret: async (_, args) => { 6 requestEmailSecret: async (_, args) => {
7 const { email } = args; 7 const { email } = args;
8 const emailSecret = generateSecret(); 8 const emailSecret = generateSecret();
9 - const encryptSecret = await bcrypt.hash(emailSecret, 10);
10 try { 9 try {
11 - await sendSecretMail(email, emailSecret); 10 + await sendEmail(email, emailSecret);
12 await prisma.user.update({ 11 await prisma.user.update({
13 where: { 12 where: {
14 email, 13 email,
15 }, 14 },
16 data: { 15 data: {
17 - emailSecret: encryptSecret, 16 + emailSecret,
18 }, 17 },
19 }); 18 });
20 return true; 19 return true;
......
1 type Mutation { 1 type Mutation {
2 resetPassword( 2 resetPassword(
3 - secret: String! 3 + emailSecret: String!
4 email: String! 4 email: String!
5 passwordOne: String! 5 passwordOne: String!
6 passwordTwo: String! 6 passwordTwo: String!
......
1 -import { prisma } from "../../../utils"; 1 +import { prisma, isAuthenticated } from "../../../utils";
2 import bcrypt from "bcryptjs"; 2 import bcrypt from "bcryptjs";
3 3
4 export default { 4 export default {
5 Mutation: { 5 Mutation: {
6 - resetPassword: async (_, args) => { 6 + resetPassword: async (_, args, { request }) => {
7 - const { secret, email, passwordOne, passwordTwo } = args; 7 + isAuthenticated(request);
8 + const { emailSecret, email, passwordOne, passwordTwo } = args;
8 const user = await prisma.user.findOne({ 9 const user = await prisma.user.findOne({
9 where: { 10 where: {
10 email, 11 email,
11 }, 12 },
12 }); 13 });
13 - const encryptSecret = await bcrypt.hash(user.emailSecret, 10); 14 + if (user.emailSecret !== emailSecret) {
14 - if (encryptSecret !== secret) {
15 throw new Error( 15 throw new Error(
16 "not vaild secret value!, input another value or resend email" 16 "not vaild secret value!, input another value or resend email"
17 ); 17 );
...@@ -20,13 +20,14 @@ export default { ...@@ -20,13 +20,14 @@ export default {
20 // For check new password is right, the two things must be same. 20 // For check new password is right, the two things must be same.
21 throw new Error("the two password don't match each other, try again"); 21 throw new Error("the two password don't match each other, try again");
22 } else { 22 } else {
23 + const encyptPW = await bcrypt.hash(passwordOne, 10);
23 await prisma.user.update({ 24 await prisma.user.update({
24 where: { 25 where: {
25 email, 26 email,
26 }, 27 },
27 data: { 28 data: {
28 emailSecret: "", 29 emailSecret: "",
29 - password: passwordOne, 30 + password: encyptPW,
30 }, 31 },
31 }); 32 });
32 } 33 }
......
1 type Query { 1 type Query {
2 - searchUser(name: String!): [User!]! 2 + searchUser(term: String!): [User!]!
3 } 3 }
......
...@@ -3,8 +3,24 @@ import { prisma } from "../../../utils"; ...@@ -3,8 +3,24 @@ import { prisma } from "../../../utils";
3 export default { 3 export default {
4 Query: { 4 Query: {
5 searchUser: async (_, args) => { 5 searchUser: async (_, args) => {
6 - const { name } = args; 6 + const { term } = args;
7 - const user = await prisma.user.findOne({}); 7 + try {
8 + return prisma.user.findMany({
9 + where: {
10 + OR: [
11 + {
12 + name: { contains: term },
13 + },
14 + {
15 + email: { contains: term },
16 + },
17 + ],
18 + },
19 + });
20 + } catch (error) {
21 + console.log(error);
22 + return null;
23 + }
8 }, 24 },
9 }, 25 },
10 }; 26 };
......
1 type Query { 1 type Query {
2 - seeProfile(id: String!): User! 2 + seeProfile(email: String!): User!
3 } 3 }
......
1 -import { prisma } from "../../../utils"; 1 +import { prisma, isAuthenticated } from "../../../utils";
2 2
3 export default { 3 export default {
4 Query: { 4 Query: {
5 - seeProfile: async (_, args) => { 5 + seeProfile: async (_, args, { request }) => {
6 - const { id } = args; 6 + isAuthenticated(request);
7 + const { email } = args;
8 + return prisma.user.findOne({
9 + where: {
10 + email,
11 + },
12 + });
7 }, 13 },
8 }, 14 },
9 }; 15 };
......
1 type User { 1 type User {
2 id: ID! 2 id: ID!
3 avatarUrl: String 3 avatarUrl: String
4 - name: String 4 + name: String!
5 email: String! 5 email: String!
6 - password: String 6 + password: String!
7 - phoneNumber: String
8 emailSecret: String 7 emailSecret: String
8 + phoneNum: String!
9 phoneSecret: String 9 phoneSecret: String
10 bio: String 10 bio: String
11 rooms: [Room] 11 rooms: [Room]
12 createdAt: String 12 createdAt: String
13 messages: [Message] 13 messages: [Message]
14 + from: Message
15 + to: [Message]
14 } 16 }
15 17
16 type Room { 18 type Room {
...@@ -27,8 +29,12 @@ type Category { ...@@ -27,8 +29,12 @@ type Category {
27 29
28 type Message { 30 type Message {
29 id: ID! 31 id: ID!
30 - text: String 32 + text: String!
31 - sender: User 33 + from: User
34 + to: [User]
35 + room: Room!
36 + createdAt: String
37 + updatedAt: String
32 } 38 }
33 39
34 type AuthPayload { 40 type AuthPayload {
......
1 +import passport from "passport";
2 +import { Strategy, ExtractJwt } from "passport-jwt";
3 +import { prisma } from "./utils";
4 +
5 +const JWTOptions = {
6 + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
7 + secretOrKey: process.env.JWT_SECRET,
8 +};
9 +
10 +const verifyUser = async (payload, done) => {
11 + try {
12 + const user = await prisma.user.findOne({
13 + where: {
14 + id: payload.id,
15 + },
16 + });
17 + if (user !== null) {
18 + return done(null, user);
19 + } else {
20 + return done(null, false);
21 + }
22 + } catch (error) {
23 + return done(null, false);
24 + }
25 +};
26 +
27 +export const authenticateJWT = (req, res, next) => {
28 + passport.authenticate("jwt", { session: false }, (error, user) => {
29 + if (user) {
30 + req.user = user;
31 + }
32 + next();
33 + })(req, res, next);
34 +};
35 +
36 +passport.use(new Strategy(JWTOptions, verifyUser));
37 +passport.initialize();
1 import dotenv from "dotenv"; 1 import dotenv from "dotenv";
2 dotenv.config(); 2 dotenv.config();
3 -import { GraphQLServer } from "graphql-yoga"; 3 +import { GraphQLServer, PubSub } from "graphql-yoga";
4 import morgan from "morgan"; 4 import morgan from "morgan";
5 import schema from "./schema"; 5 import schema from "./schema";
6 -import { prisma } from "./utils"; 6 +import "./passport";
7 +import { authenticateJWT } from "./passport";
7 8
8 const PORT = process.env.PORT; 9 const PORT = process.env.PORT;
9 10
11 +const pubsub = new PubSub();
12 +
10 const server = new GraphQLServer({ 13 const server = new GraphQLServer({
11 schema, 14 schema,
12 - context: (request) => { 15 + context: ({ request }) => ({ request, pubsub }),
13 - return {
14 - ...request,
15 - prisma,
16 - };
17 - },
18 }); 16 });
19 17
20 server.express.use(morgan("dev")); 18 server.express.use(morgan("dev"));
19 +server.express.use(authenticateJWT);
21 20
22 server.start(() => console.log(`server is running : http://localhost:${PORT}`)); 21 server.start(() => console.log(`server is running : http://localhost:${PORT}`));
......
1 +export const ONE_TO_ONE_MESSAGE = "one-to-one message";
1 +import dotenv from "dotenv";
2 +dotenv.config();
1 import { PrismaClient } from "@prisma/client"; 3 import { PrismaClient } from "@prisma/client";
2 import { nouns, adjectives } from "./words"; 4 import { nouns, adjectives } from "./words";
3 import jwt from "jsonwebtoken"; 5 import jwt from "jsonwebtoken";
4 -import nodemailer from "nodemailer"; 6 +import sgMail from "@sendgrid/mail";
5 -import sgTransport from "nodemailer-sendgrid-transport"; 7 +sgMail.setApiKey(process.env.SENDGRID_API_KEY);
6 8
7 export const prisma = new PrismaClient(); 9 export const prisma = new PrismaClient();
8 10
...@@ -16,30 +18,45 @@ export const getUserId = (context) => { ...@@ -16,30 +18,45 @@ export const getUserId = (context) => {
16 throw new Error("There is no vaild user"); 18 throw new Error("There is no vaild user");
17 }; 19 };
18 20
21 +export const isAuthenticated = (request) => {
22 + if (!request.user) {
23 + throw new Error("You need to login First");
24 + }
25 + return;
26 +};
27 +
28 +export const changePhoneNumber = (phoneNum, locationNum) => {
29 + var leftStr = locationNum;
30 + var rightStr = phoneNum.slice(1, phoneNum.length);
31 + var newStr = leftStr + rightStr;
32 + return newStr;
33 +};
34 +
19 export const generateSecret = () => { 35 export const generateSecret = () => {
20 const randomNumber = Math.floor(Math.random() * adjectives.length); 36 const randomNumber = Math.floor(Math.random() * adjectives.length);
21 return `${adjectives[randomNumber]} ${nouns[randomNumber]}`; 37 return `${adjectives[randomNumber]} ${nouns[randomNumber]}`;
22 }; 38 };
23 39
24 -const sendEmail = (email) => { 40 +export const generateToken = (id) => jwt.sign({ id }, process.env.JWT_SECRET);
25 - const options = {
26 - auth: {
27 - api_user: process.env.SENDGRID_USERNAME,
28 - api_password: process.env.SENDGRID_PASSWORD,
29 - },
30 - };
31 - const client = nodemailer.createTransport(sgTransport(options));
32 - return client.sendMail(email);
33 -};
34 41
35 -export const sendSecretMail = (address, emailSecret, value) => { 42 +export const createEMessage = (userEmail, emailSecret) => {
36 - const email = { 43 + const emailMessage = {
37 - from: "vel1024@khu.ac.kr", 44 + to: `${userEmail}`,
38 - to: address, 45 + from: "KhuChat@KhuChat.com",
39 - subject: `Authentication key for forgotten ${value}`, 46 + subject: "Email from KhuChat",
40 - html: `Hello, This is khuchat, authentication key is <b>${emailSecret}</b>, copy and paste it, Thanks.`, 47 + html: `We send email for reset your password, enter this key : <b>${emailSecret}</b>`,
41 }; 48 };
42 - return sendEmail(email); 49 + return emailMessage;
43 }; 50 };
44 51
45 -export const generateToken = (id) => jwt.sign({ id }, process.env.JWT_SECRET); 52 +export const sendEmail = (userEmail, emailSecret) => {
53 + sgMail.send(createEMessage(userEmail, emailSecret)).then(
54 + () => {},
55 + (error) => {
56 + console.error(error);
57 + if (error.response) {
58 + console.error(error.response.body);
59 + }
60 + }
61 + );
62 +};
......
...@@ -1174,6 +1174,35 @@ ...@@ -1174,6 +1174,35 @@
1174 "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", 1174 "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
1175 "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" 1175 "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
1176 }, 1176 },
1177 + "@fortawesome/fontawesome-common-types": {
1178 + "version": "0.2.28",
1179 + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.28.tgz",
1180 + "integrity": "sha512-gtis2/5yLdfI6n0ia0jH7NJs5i/Z/8M/ZbQL6jXQhCthEOe5Cr5NcQPhgTvFxNOtURE03/ZqUcEskdn2M+QaBg=="
1181 + },
1182 + "@fortawesome/fontawesome-svg-core": {
1183 + "version": "1.2.28",
1184 + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.28.tgz",
1185 + "integrity": "sha512-4LeaNHWvrneoU0i8b5RTOJHKx7E+y7jYejplR7uSVB34+mp3Veg7cbKk7NBCLiI4TyoWS1wh9ZdoyLJR8wSAdg==",
1186 + "requires": {
1187 + "@fortawesome/fontawesome-common-types": "^0.2.28"
1188 + }
1189 + },
1190 + "@fortawesome/free-solid-svg-icons": {
1191 + "version": "5.13.0",
1192 + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.13.0.tgz",
1193 + "integrity": "sha512-IHUgDJdomv6YtG4p3zl1B5wWf9ffinHIvebqQOmV3U+3SLw4fC+LUCCgwfETkbTtjy5/Qws2VoVf6z/ETQpFpg==",
1194 + "requires": {
1195 + "@fortawesome/fontawesome-common-types": "^0.2.28"
1196 + }
1197 + },
1198 + "@fortawesome/react-fontawesome": {
1199 + "version": "0.1.9",
1200 + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.9.tgz",
1201 + "integrity": "sha512-49V3WNysLZU5fZ3sqSuys4nGRytsrxJktbv3vuaXkEoxv22C6T7TEG0TW6+nqVjMnkfCQd5xOnmJoZHMF78tOw==",
1202 + "requires": {
1203 + "prop-types": "^15.7.2"
1204 + }
1205 + },
1177 "@hapi/address": { 1206 "@hapi/address": {
1178 "version": "2.1.4", 1207 "version": "2.1.4",
1179 "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", 1208 "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
......
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
3 "version": "0.1.0", 3 "version": "0.1.0",
4 "private": true, 4 "private": true,
5 "dependencies": { 5 "dependencies": {
6 + "@fortawesome/fontawesome-svg-core": "^1.2.28",
7 + "@fortawesome/free-solid-svg-icons": "^5.13.0",
8 + "@fortawesome/react-fontawesome": "^0.1.9",
6 "@testing-library/jest-dom": "^4.2.4", 9 "@testing-library/jest-dom": "^4.2.4",
7 "@testing-library/react": "^9.3.2", 10 "@testing-library/react": "^9.3.2",
8 "@testing-library/user-event": "^7.1.2", 11 "@testing-library/user-event": "^7.1.2",
......
...@@ -7,6 +7,9 @@ const Header = Styled.div` ...@@ -7,6 +7,9 @@ const Header = Styled.div`
7 justify-content: center; 7 justify-content: center;
8 margin: 10px 0px; 8 margin: 10px 0px;
9 font-size: 25px; 9 font-size: 25px;
10 + font-family: 'Source Code Pro';
11 + font-weight: 200;
12 + font-size: 40px;
10 `; 13 `;
11 14
12 export default () => { 15 export default () => {
......
1 import React from "react"; 1 import React from "react";
2 import Styled from "styled-components"; 2 import Styled from "styled-components";
3 +//import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
4 +//import { faList, faAddressBook } from "@fortawesome/free-solid-svg-icons";
5 +import PropTypes from "prop-types";
3 6
4 -const MenuBox = Styled.div` 7 +const Container = Styled.div`
5 - width: 30%; 8 + width: 400px;
6 - display: flex; 9 + height: 100%;
7 - justify-content: center;
8 - align-items: center;
9 - margin-top: 10px;
10 - border-top: 1px solid black;
11 - border-right: 1px solid black;
12 `; 10 `;
13 11
14 -const MenuList = Styled.ol` 12 +const Switch = ({ checked = false, isChecked, onClick }) => (
15 -`; 13 + <Container checked={checked} onClick={onClick} isChecked={isChecked} />
16 - 14 +);
17 -const MenuItem = Styled.li`
18 -`;
19 15
20 -const Link = Styled.a` 16 +Switch.propTypes = {
21 -`; 17 + checked: PropTypes.bool,
18 + isChecked: PropTypes.func,
19 + onClick: PropTypes.func,
20 +};
22 21
23 export default () => { 22 export default () => {
24 - return ( 23 + return <Switch />;
25 - <MenuBox>
26 - <MenuList>
27 - <MenuItem>
28 - <Link href="">1. What is KHU Chat?</Link>
29 - </MenuItem>
30 - </MenuList>
31 - </MenuBox>
32 - );
33 }; 24 };
......
1 +import { useState } from "react";
2 +
3 +export default (args) => {
4 + const [value, setValue] = useState(args);
5 +
6 + const onClick = (e) => {};
7 +};
...@@ -2,6 +2,10 @@ import { createGlobalStyle } from "styled-components"; ...@@ -2,6 +2,10 @@ import { createGlobalStyle } from "styled-components";
2 import reset from "styled-reset"; 2 import reset from "styled-reset";
3 3
4 export default createGlobalStyle` 4 export default createGlobalStyle`
5 + @import url('https://fonts.googleapis.com/css2?family=Nanum+Brush+Script&display=swap');
6 + @import url('https://fonts.googleapis.com/css2?family=Do+Hyeon&family=Nanum+Gothic+Coding:wght@400;700&family=Nanum+Pen+Script&family=Sunflower:wght@300;500;700&display=swap');
7 + @import url('https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,900;1,200;1,300;1,400;1,500;1,600;1,700;1,900&display=swap');
8 +
5 ${reset} 9 ${reset}
6 * { 10 * {
7 box-sizing: border-box; 11 box-sizing: border-box;
......
1 +{
2 + "name": "capstone",
3 + "version": "1.0.0",
4 + "lockfileVersion": 1,
5 + "requires": true,
6 + "dependencies": {
7 + "@prisma/cli": {
8 + "version": "2.0.0-beta.3",
9 + "resolved": "https://registry.npmjs.org/@prisma/cli/-/cli-2.0.0-beta.3.tgz",
10 + "integrity": "sha512-VZxeTLLMenhkAyaY4tvTqChcW6QtUkiVvZj7N6A2vi6HsM1Tnf0fIZsiH1h3e/LEnaaDGIUC8F4Gkh2SeyeyCg==",
11 + "dev": true
12 + }
13 + }
14 +}
...@@ -15,5 +15,8 @@ ...@@ -15,5 +15,8 @@
15 "name": "sdy, kms", 15 "name": "sdy, kms",
16 "email": "vel1024@khu.ac.kr" 16 "email": "vel1024@khu.ac.kr"
17 }, 17 },
18 - "license": "ISC" 18 + "license": "ISC",
19 + "devDependencies": {
20 + "@prisma/cli": "^2.0.0-beta.3"
21 + }
19 } 22 }
......