송용우

Update Home Layout

...@@ -4,15 +4,6 @@ import styled from 'styled-components'; ...@@ -4,15 +4,6 @@ import styled from 'styled-components';
4 import palette from '../../lib/styles/palette'; 4 import palette from '../../lib/styles/palette';
5 import Button from '@material-ui/core/Button'; 5 import Button from '@material-ui/core/Button';
6 import TextField from '@material-ui/core/TextField'; 6 import TextField from '@material-ui/core/TextField';
7 -const BJIDFormBlock = styled.div`
8 - width: 100%;
9 - padding-top: 2rem;
10 - h4 {
11 - color: ${palette.gray[8]};
12 - margin-top: 0;
13 - margin-bottom: 0.5rem;
14 - }
15 -`;
16 7
17 const useStyles = makeStyles((theme) => ({ 8 const useStyles = makeStyles((theme) => ({
18 root: { 9 root: {
...@@ -32,7 +23,6 @@ const BJIDForm = ({ onChange, onBJIDSubmit, profile, onSyncBJIDSubmit }) => { ...@@ -32,7 +23,6 @@ const BJIDForm = ({ onChange, onBJIDSubmit, profile, onSyncBJIDSubmit }) => {
32 onChange={onChange} 23 onChange={onChange}
33 value={profile.userBJID} 24 value={profile.userBJID}
34 placeholder="백준 아이디" 25 placeholder="백준 아이디"
35 - id="standard-basic"
36 label="백준 아이디" 26 label="백준 아이디"
37 /> 27 />
38 <Button variant="outlined" type="submit"> 28 <Button variant="outlined" type="submit">
......
...@@ -2,19 +2,25 @@ import React, { useEffect, useState } from 'react'; ...@@ -2,19 +2,25 @@ import React, { useEffect, useState } from 'react';
2 import { useDispatch, useSelector } from 'react-redux'; 2 import { useDispatch, useSelector } from 'react-redux';
3 import { withRouter } from 'react-router-dom'; 3 import { withRouter } from 'react-router-dom';
4 import HomeForm from '../../components/home/HomeForm'; 4 import HomeForm from '../../components/home/HomeForm';
5 -const HomeContainer = ({ histroy }) => { 5 +import { getPROFILE } from '../../modules/profile';
6 +import { analyzeBJ } from '../../lib/util/analyzeBJ';
7 +const HomeContainer = ({ history }) => {
6 const dispatch = useDispatch(); 8 const dispatch = useDispatch();
7 const [isLogin, setLogin] = useState(false); 9 const [isLogin, setLogin] = useState(false);
8 const { user, profile } = useSelector(({ user, profile }) => ({ 10 const { user, profile } = useSelector(({ user, profile }) => ({
9 user: user.user, 11 user: user.user,
10 profile: profile, 12 profile: profile,
11 })); 13 }));
12 -
13 useEffect(() => { 14 useEffect(() => {
15 + analyzeBJ(profile.solvedBJ);
16 + }, [profile.solvedBJ]);
17 + useEffect(() => {
18 + setLogin(true);
14 if (user) { 19 if (user) {
15 - setLogin(true); 20 + let username = user.username;
21 + dispatch(getPROFILE({ username }));
16 } 22 }
17 - }); 23 + }, [dispatch, user]);
18 return <HomeForm />; 24 return <HomeForm />;
19 }; 25 };
20 export default withRouter(HomeContainer); 26 export default withRouter(HomeContainer);
......
...@@ -5,5 +5,15 @@ ...@@ -5,5 +5,15 @@
5 4. 추천 문제 5 4. 추천 문제
6 */ 6 */
7 exports.analyzeBJ = function (solvedBJ) { 7 exports.analyzeBJ = function (solvedBJ) {
8 - console.log(solvedBJ); 8 + console.log(typeof solvedBJ);
9 + if (solvedBJ) {
10 + solvedBJ.sort(function (a, b) {
11 + return a.solvedDate > b.solvedDate
12 + ? -1
13 + : a.solvedDate < b.solvedDate
14 + ? 1
15 + : 0;
16 + });
17 + console.log(solvedBJ);
18 + }
9 }; 19 };
......
1 +const webhookUri =
2 + 'https://hooks.slack.com/services/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';
3 +
4 +const slack = new Slack();
5 +slack.setWebhook(webhookUri);
6 +const send = async (message) => {
7 + slack.webhook(
8 + {
9 + channel: '#general', // 전송될 슬랙 채널
10 + username: 'webhookbot', //슬랙에 표시될 이름
11 + text: message,
12 + },
13 + function (err, response) {
14 + console.log(response);
15 + },
16 + );
17 +};
18 +
19 +send('안녕');
...@@ -202,7 +202,6 @@ ...@@ -202,7 +202,6 @@
202 "version": "6.12.2", 202 "version": "6.12.2",
203 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", 203 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
204 "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", 204 "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
205 - "dev": true,
206 "requires": { 205 "requires": {
207 "fast-deep-equal": "^3.1.1", 206 "fast-deep-equal": "^3.1.1",
208 "fast-json-stable-stringify": "^2.0.0", 207 "fast-json-stable-stringify": "^2.0.0",
...@@ -323,12 +322,40 @@ ...@@ -323,12 +322,40 @@
323 "sprintf-js": "~1.0.2" 322 "sprintf-js": "~1.0.2"
324 } 323 }
325 }, 324 },
325 + "asn1": {
326 + "version": "0.2.4",
327 + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
328 + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
329 + "requires": {
330 + "safer-buffer": "~2.1.0"
331 + }
332 + },
333 + "assert-plus": {
334 + "version": "1.0.0",
335 + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
336 + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
337 + },
326 "astral-regex": { 338 "astral-regex": {
327 "version": "1.0.0", 339 "version": "1.0.0",
328 "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 340 "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
329 "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 341 "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
330 "dev": true 342 "dev": true
331 }, 343 },
344 + "asynckit": {
345 + "version": "0.4.0",
346 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
347 + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
348 + },
349 + "aws-sign2": {
350 + "version": "0.7.0",
351 + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
352 + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
353 + },
354 + "aws4": {
355 + "version": "1.10.0",
356 + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
357 + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
358 + },
332 "axios": { 359 "axios": {
333 "version": "0.19.2", 360 "version": "0.19.2",
334 "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", 361 "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
...@@ -373,6 +400,14 @@ ...@@ -373,6 +400,14 @@
373 "node-pre-gyp": "0.14.0" 400 "node-pre-gyp": "0.14.0"
374 } 401 }
375 }, 402 },
403 + "bcrypt-pbkdf": {
404 + "version": "1.0.2",
405 + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
406 + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
407 + "requires": {
408 + "tweetnacl": "^0.14.3"
409 + }
410 + },
376 "binary-extensions": { 411 "binary-extensions": {
377 "version": "2.0.0", 412 "version": "2.0.0",
378 "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 413 "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
...@@ -517,6 +552,11 @@ ...@@ -517,6 +552,11 @@
517 "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 552 "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
518 "dev": true 553 "dev": true
519 }, 554 },
555 + "caseless": {
556 + "version": "0.12.0",
557 + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
558 + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
559 + },
520 "chalk": { 560 "chalk": {
521 "version": "3.0.0", 561 "version": "3.0.0",
522 "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 562 "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
...@@ -670,6 +710,14 @@ ...@@ -670,6 +710,14 @@
670 "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 710 "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
671 "dev": true 711 "dev": true
672 }, 712 },
713 + "combined-stream": {
714 + "version": "1.0.8",
715 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
716 + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
717 + "requires": {
718 + "delayed-stream": "~1.0.0"
719 + }
720 + },
673 "concat-map": { 721 "concat-map": {
674 "version": "0.0.1", 722 "version": "0.0.1",
675 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 723 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
...@@ -785,6 +833,14 @@ ...@@ -785,6 +833,14 @@
785 "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", 833 "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
786 "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" 834 "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
787 }, 835 },
836 + "dashdash": {
837 + "version": "1.14.1",
838 + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
839 + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
840 + "requires": {
841 + "assert-plus": "^1.0.0"
842 + }
843 + },
788 "debug": { 844 "debug": {
789 "version": "2.6.9", 845 "version": "2.6.9",
790 "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 846 "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
...@@ -831,6 +887,11 @@ ...@@ -831,6 +887,11 @@
831 "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 887 "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
832 "dev": true 888 "dev": true
833 }, 889 },
890 + "delayed-stream": {
891 + "version": "1.0.0",
892 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
893 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
894 + },
834 "delegates": { 895 "delegates": {
835 "version": "1.0.0", 896 "version": "1.0.0",
836 "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 897 "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
...@@ -916,6 +977,15 @@ ...@@ -916,6 +977,15 @@
916 "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 977 "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
917 "dev": true 978 "dev": true
918 }, 979 },
980 + "ecc-jsbn": {
981 + "version": "0.1.2",
982 + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
983 + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
984 + "requires": {
985 + "jsbn": "~0.1.0",
986 + "safer-buffer": "^2.1.0"
987 + }
988 + },
919 "ecdsa-sig-formatter": { 989 "ecdsa-sig-formatter": {
920 "version": "1.0.11", 990 "version": "1.0.11",
921 "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 991 "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
...@@ -1170,6 +1240,11 @@ ...@@ -1170,6 +1240,11 @@
1170 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1240 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1171 "dev": true 1241 "dev": true
1172 }, 1242 },
1243 + "extend": {
1244 + "version": "3.0.2",
1245 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1246 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1247 + },
1173 "external-editor": { 1248 "external-editor": {
1174 "version": "3.1.0", 1249 "version": "3.1.0",
1175 "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 1250 "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
...@@ -1181,17 +1256,20 @@ ...@@ -1181,17 +1256,20 @@
1181 "tmp": "^0.0.33" 1256 "tmp": "^0.0.33"
1182 } 1257 }
1183 }, 1258 },
1259 + "extsprintf": {
1260 + "version": "1.3.0",
1261 + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
1262 + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
1263 + },
1184 "fast-deep-equal": { 1264 "fast-deep-equal": {
1185 "version": "3.1.3", 1265 "version": "3.1.3",
1186 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1266 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1187 - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1267 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
1188 - "dev": true
1189 }, 1268 },
1190 "fast-json-stable-stringify": { 1269 "fast-json-stable-stringify": {
1191 "version": "2.1.0", 1270 "version": "2.1.0",
1192 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1271 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1193 - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1272 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
1194 - "dev": true
1195 }, 1273 },
1196 "fast-levenshtein": { 1274 "fast-levenshtein": {
1197 "version": "2.0.6", 1275 "version": "2.0.6",
...@@ -1277,6 +1355,21 @@ ...@@ -1277,6 +1355,21 @@
1277 } 1355 }
1278 } 1356 }
1279 }, 1357 },
1358 + "forever-agent": {
1359 + "version": "0.6.1",
1360 + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
1361 + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
1362 + },
1363 + "form-data": {
1364 + "version": "2.3.3",
1365 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
1366 + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
1367 + "requires": {
1368 + "asynckit": "^0.4.0",
1369 + "combined-stream": "^1.0.6",
1370 + "mime-types": "^2.1.12"
1371 + }
1372 + },
1280 "fresh": { 1373 "fresh": {
1281 "version": "0.5.2", 1374 "version": "0.5.2",
1282 "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1375 "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
...@@ -1367,6 +1460,14 @@ ...@@ -1367,6 +1460,14 @@
1367 "pump": "^3.0.0" 1460 "pump": "^3.0.0"
1368 } 1461 }
1369 }, 1462 },
1463 + "getpass": {
1464 + "version": "0.1.7",
1465 + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
1466 + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
1467 + "requires": {
1468 + "assert-plus": "^1.0.0"
1469 + }
1470 + },
1370 "glob": { 1471 "glob": {
1371 "version": "7.1.6", 1472 "version": "7.1.6",
1372 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1473 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
...@@ -1432,6 +1533,20 @@ ...@@ -1432,6 +1533,20 @@
1432 "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 1533 "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
1433 "dev": true 1534 "dev": true
1434 }, 1535 },
1536 + "har-schema": {
1537 + "version": "2.0.0",
1538 + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
1539 + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
1540 + },
1541 + "har-validator": {
1542 + "version": "5.1.3",
1543 + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
1544 + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
1545 + "requires": {
1546 + "ajv": "^6.5.5",
1547 + "har-schema": "^2.0.0"
1548 + }
1549 + },
1435 "has-flag": { 1550 "has-flag": {
1436 "version": "3.0.0", 1551 "version": "3.0.0",
1437 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1552 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
...@@ -1513,6 +1628,16 @@ ...@@ -1513,6 +1628,16 @@
1513 } 1628 }
1514 } 1629 }
1515 }, 1630 },
1631 + "http-signature": {
1632 + "version": "1.2.0",
1633 + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1634 + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
1635 + "requires": {
1636 + "assert-plus": "^1.0.0",
1637 + "jsprim": "^1.2.2",
1638 + "sshpk": "^1.7.0"
1639 + }
1640 + },
1516 "iconv": { 1641 "iconv": {
1517 "version": "3.0.0", 1642 "version": "3.0.0",
1518 "resolved": "https://registry.npmjs.org/iconv/-/iconv-3.0.0.tgz", 1643 "resolved": "https://registry.npmjs.org/iconv/-/iconv-3.0.0.tgz",
...@@ -1696,8 +1821,7 @@ ...@@ -1696,8 +1821,7 @@
1696 "is-typedarray": { 1821 "is-typedarray": {
1697 "version": "1.0.0", 1822 "version": "1.0.0",
1698 "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1823 "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1699 - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1824 + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
1700 - "dev": true
1701 }, 1825 },
1702 "is-yarn-global": { 1826 "is-yarn-global": {
1703 "version": "0.3.0", 1827 "version": "0.3.0",
...@@ -1724,6 +1848,11 @@ ...@@ -1724,6 +1848,11 @@
1724 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1848 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1725 "dev": true 1849 "dev": true
1726 }, 1850 },
1851 + "isstream": {
1852 + "version": "0.1.2",
1853 + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
1854 + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
1855 + },
1727 "joi": { 1856 "joi": {
1728 "version": "14.3.1", 1857 "version": "14.3.1",
1729 "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz", 1858 "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz",
...@@ -1750,6 +1879,11 @@ ...@@ -1750,6 +1879,11 @@
1750 "esprima": "^4.0.0" 1879 "esprima": "^4.0.0"
1751 } 1880 }
1752 }, 1881 },
1882 + "jsbn": {
1883 + "version": "0.1.1",
1884 + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1885 + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
1886 + },
1753 "jsesc": { 1887 "jsesc": {
1754 "version": "2.5.2", 1888 "version": "2.5.2",
1755 "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1889 "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
...@@ -1762,11 +1896,15 @@ ...@@ -1762,11 +1896,15 @@
1762 "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 1896 "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
1763 "dev": true 1897 "dev": true
1764 }, 1898 },
1899 + "json-schema": {
1900 + "version": "0.2.3",
1901 + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
1902 + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
1903 + },
1765 "json-schema-traverse": { 1904 "json-schema-traverse": {
1766 "version": "0.4.1", 1905 "version": "0.4.1",
1767 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1906 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1768 - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1907 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
1769 - "dev": true
1770 }, 1908 },
1771 "json-stable-stringify-without-jsonify": { 1909 "json-stable-stringify-without-jsonify": {
1772 "version": "1.0.1", 1910 "version": "1.0.1",
...@@ -1774,6 +1912,11 @@ ...@@ -1774,6 +1912,11 @@
1774 "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1912 "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
1775 "dev": true 1913 "dev": true
1776 }, 1914 },
1915 + "json-stringify-safe": {
1916 + "version": "5.0.1",
1917 + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1918 + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
1919 + },
1777 "jsonwebtoken": { 1920 "jsonwebtoken": {
1778 "version": "8.5.1", 1921 "version": "8.5.1",
1779 "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 1922 "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
...@@ -1791,6 +1934,17 @@ ...@@ -1791,6 +1934,17 @@
1791 "semver": "^5.6.0" 1934 "semver": "^5.6.0"
1792 } 1935 }
1793 }, 1936 },
1937 + "jsprim": {
1938 + "version": "1.4.1",
1939 + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
1940 + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
1941 + "requires": {
1942 + "assert-plus": "1.0.0",
1943 + "extsprintf": "1.3.0",
1944 + "json-schema": "0.2.3",
1945 + "verror": "1.10.0"
1946 + }
1947 + },
1794 "jwa": { 1948 "jwa": {
1795 "version": "1.4.1", 1949 "version": "1.4.1",
1796 "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 1950 "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
...@@ -2379,6 +2533,11 @@ ...@@ -2379,6 +2533,11 @@
2379 "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2533 "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
2380 "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 2534 "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
2381 }, 2535 },
2536 + "oauth-sign": {
2537 + "version": "0.9.0",
2538 + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
2539 + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
2540 + },
2382 "object-assign": { 2541 "object-assign": {
2383 "version": "4.1.1", 2542 "version": "4.1.1",
2384 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2543 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
...@@ -2526,6 +2685,11 @@ ...@@ -2526,6 +2685,11 @@
2526 "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 2685 "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
2527 "dev": true 2686 "dev": true
2528 }, 2687 },
2688 + "performance-now": {
2689 + "version": "2.1.0",
2690 + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
2691 + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
2692 + },
2529 "picomatch": { 2693 "picomatch": {
2530 "version": "2.2.2", 2694 "version": "2.2.2",
2531 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 2695 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
...@@ -2560,6 +2724,11 @@ ...@@ -2560,6 +2724,11 @@
2560 "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2724 "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
2561 "dev": true 2725 "dev": true
2562 }, 2726 },
2727 + "psl": {
2728 + "version": "1.8.0",
2729 + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
2730 + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
2731 + },
2563 "pstree.remy": { 2732 "pstree.remy": {
2564 "version": "1.1.8", 2733 "version": "1.1.8",
2565 "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 2734 "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
...@@ -2676,6 +2845,51 @@ ...@@ -2676,6 +2845,51 @@
2676 "rc": "^1.2.8" 2845 "rc": "^1.2.8"
2677 } 2846 }
2678 }, 2847 },
2848 + "request": {
2849 + "version": "2.88.2",
2850 + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
2851 + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
2852 + "requires": {
2853 + "aws-sign2": "~0.7.0",
2854 + "aws4": "^1.8.0",
2855 + "caseless": "~0.12.0",
2856 + "combined-stream": "~1.0.6",
2857 + "extend": "~3.0.2",
2858 + "forever-agent": "~0.6.1",
2859 + "form-data": "~2.3.2",
2860 + "har-validator": "~5.1.3",
2861 + "http-signature": "~1.2.0",
2862 + "is-typedarray": "~1.0.0",
2863 + "isstream": "~0.1.2",
2864 + "json-stringify-safe": "~5.0.1",
2865 + "mime-types": "~2.1.19",
2866 + "oauth-sign": "~0.9.0",
2867 + "performance-now": "^2.1.0",
2868 + "qs": "~6.5.2",
2869 + "safe-buffer": "^5.1.2",
2870 + "tough-cookie": "~2.5.0",
2871 + "tunnel-agent": "^0.6.0",
2872 + "uuid": "^3.3.2"
2873 + },
2874 + "dependencies": {
2875 + "qs": {
2876 + "version": "6.5.2",
2877 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
2878 + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
2879 + }
2880 + }
2881 + },
2882 + "requestretry": {
2883 + "version": "1.13.0",
2884 + "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz",
2885 + "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==",
2886 + "requires": {
2887 + "extend": "^3.0.0",
2888 + "lodash": "^4.15.0",
2889 + "request": "^2.74.0",
2890 + "when": "^3.7.7"
2891 + }
2892 + },
2679 "require_optional": { 2893 "require_optional": {
2680 "version": "1.0.1", 2894 "version": "1.0.1",
2681 "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", 2895 "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
...@@ -2830,6 +3044,14 @@ ...@@ -2830,6 +3044,14 @@
2830 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 3044 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
2831 "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 3045 "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
2832 }, 3046 },
3047 + "slack-node": {
3048 + "version": "0.1.8",
3049 + "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.1.8.tgz",
3050 + "integrity": "sha1-zamN6GgUhbMB3GdC3cOJcRf600k=",
3051 + "requires": {
3052 + "requestretry": "^1.2.2"
3053 + }
3054 + },
2833 "slice-ansi": { 3055 "slice-ansi": {
2834 "version": "2.1.0", 3056 "version": "2.1.0",
2835 "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 3057 "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
...@@ -2875,6 +3097,22 @@ ...@@ -2875,6 +3097,22 @@
2875 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 3097 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2876 "dev": true 3098 "dev": true
2877 }, 3099 },
3100 + "sshpk": {
3101 + "version": "1.16.1",
3102 + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
3103 + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
3104 + "requires": {
3105 + "asn1": "~0.2.3",
3106 + "assert-plus": "^1.0.0",
3107 + "bcrypt-pbkdf": "^1.0.0",
3108 + "dashdash": "^1.12.0",
3109 + "ecc-jsbn": "~0.1.1",
3110 + "getpass": "^0.1.1",
3111 + "jsbn": "~0.1.0",
3112 + "safer-buffer": "^2.0.2",
3113 + "tweetnacl": "~0.14.0"
3114 + }
3115 + },
2878 "statuses": { 3116 "statuses": {
2879 "version": "1.5.0", 3117 "version": "1.5.0",
2880 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 3118 "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
...@@ -3078,6 +3316,15 @@ ...@@ -3078,6 +3316,15 @@
3078 } 3316 }
3079 } 3317 }
3080 }, 3318 },
3319 + "tough-cookie": {
3320 + "version": "2.5.0",
3321 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
3322 + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
3323 + "requires": {
3324 + "psl": "^1.1.28",
3325 + "punycode": "^2.1.1"
3326 + }
3327 + },
3081 "tslib": { 3328 "tslib": {
3082 "version": "1.13.0", 3329 "version": "1.13.0",
3083 "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 3330 "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
...@@ -3089,6 +3336,19 @@ ...@@ -3089,6 +3336,19 @@
3089 "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", 3336 "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
3090 "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" 3337 "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA=="
3091 }, 3338 },
3339 + "tunnel-agent": {
3340 + "version": "0.6.0",
3341 + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
3342 + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
3343 + "requires": {
3344 + "safe-buffer": "^5.0.1"
3345 + }
3346 + },
3347 + "tweetnacl": {
3348 + "version": "0.14.5",
3349 + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
3350 + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
3351 + },
3092 "type-check": { 3352 "type-check": {
3093 "version": "0.4.0", 3353 "version": "0.4.0",
3094 "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3354 "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
...@@ -3170,7 +3430,6 @@ ...@@ -3170,7 +3430,6 @@
3170 "version": "4.2.2", 3430 "version": "4.2.2",
3171 "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 3431 "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
3172 "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 3432 "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
3173 - "dev": true,
3174 "requires": { 3433 "requires": {
3175 "punycode": "^2.1.0" 3434 "punycode": "^2.1.0"
3176 } 3435 }
...@@ -3204,6 +3463,11 @@ ...@@ -3204,6 +3463,11 @@
3204 "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3463 "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3205 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 3464 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
3206 }, 3465 },
3466 + "uuid": {
3467 + "version": "3.4.0",
3468 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
3469 + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
3470 + },
3207 "v8-compile-cache": { 3471 "v8-compile-cache": {
3208 "version": "2.1.0", 3472 "version": "2.1.0",
3209 "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", 3473 "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
...@@ -3215,11 +3479,26 @@ ...@@ -3215,11 +3479,26 @@
3215 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3479 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
3216 "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 3480 "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
3217 }, 3481 },
3482 + "verror": {
3483 + "version": "1.10.0",
3484 + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
3485 + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
3486 + "requires": {
3487 + "assert-plus": "^1.0.0",
3488 + "core-util-is": "1.0.2",
3489 + "extsprintf": "^1.2.0"
3490 + }
3491 + },
3218 "voca": { 3492 "voca": {
3219 "version": "1.4.0", 3493 "version": "1.4.0",
3220 "resolved": "https://registry.npmjs.org/voca/-/voca-1.4.0.tgz", 3494 "resolved": "https://registry.npmjs.org/voca/-/voca-1.4.0.tgz",
3221 "integrity": "sha512-8Xz4H3vhYRGbFupLtl6dHwMx0ojUcjt0HYkqZ9oBCfipd/5mD7Md58m2/dq7uPuZU/0T3Gb1m66KS9jn+I+14Q==" 3495 "integrity": "sha512-8Xz4H3vhYRGbFupLtl6dHwMx0ojUcjt0HYkqZ9oBCfipd/5mD7Md58m2/dq7uPuZU/0T3Gb1m66KS9jn+I+14Q=="
3222 }, 3496 },
3497 + "when": {
3498 + "version": "3.7.8",
3499 + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz",
3500 + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I="
3501 + },
3223 "which": { 3502 "which": {
3224 "version": "2.0.2", 3503 "version": "2.0.2",
3225 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3504 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
22 "mongoose": "^5.9.17", 22 "mongoose": "^5.9.17",
23 "morgan": "^1.10.0", 23 "morgan": "^1.10.0",
24 "path": "^0.12.7", 24 "path": "^0.12.7",
25 + "slack-node": "^0.1.8",
25 "voca": "^1.4.0" 26 "voca": "^1.4.0"
26 }, 27 },
27 "devDependencies": { 28 "devDependencies": {
......