diff --git a/package-lock.json b/package-lock.json index c835e5f..5a556d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,6 @@ "mariadb": "^2.5.1", "moment": "^2.29.1", "multer": "^1.4.2", - "mysql2": "^2.2.5", "sequelize": "^6.3.5", "validator": "^13.1.17" }, @@ -33,19 +32,19 @@ } }, "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz", - "integrity": "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.7.tgz", + "integrity": "sha512-PplSvl4pJ5N3BkVjAdDzpPhVUPdC73JgttkR+LnBx2OORC1GCQsBjUeEuipf9uOaAM1SbxcdZFfR3KDTKm2S0A==", "dependencies": { "detect-libc": "^1.0.3", "https-proxy-agent": "^5.0.0", "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.5", "nopt": "^5.0.0", - "npmlog": "^4.1.2", + "npmlog": "^6.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.4", - "tar": "^6.1.0" + "semver": "^7.3.5", + "tar": "^6.1.11" }, "bin": { "node-pre-gyp": "bin/node-pre-gyp" @@ -78,9 +77,9 @@ "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" }, "node_modules/@types/node": { - "version": "14.17.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.7.tgz", - "integrity": "sha512-SYTdMaW47se8499q8m0fYKZZRlmq0RaRv6oYmlVm6DUm31l0fhOl1D03X8hGxohCKTI2Bg6w7W0TiYB51aJzag==" + "version": "14.18.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", + "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==" }, "node_modules/abbrev": { "version": "1.1.1", @@ -122,9 +121,9 @@ } }, "node_modules/agent-base/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -143,64 +142,20 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "string-width": "^4.1.0" } }, "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -242,44 +197,60 @@ "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" }, "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "dependencies": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/are-we-there-yet/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, + "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "node_modules/array-flatten": { @@ -296,11 +267,11 @@ } }, "node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dependencies": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "node_modules/balanced-match": { @@ -383,77 +354,27 @@ } }, "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "dependencies": { "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/boxen/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -548,25 +469,31 @@ } }, "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/chalk/node_modules/has-flag": { @@ -646,14 +573,6 @@ "mimic-response": "^1.0.0" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -672,6 +591,14 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -786,9 +713,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cors": { "version": "2.8.5", @@ -868,9 +795,9 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "node_modules/denque": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", - "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", "engines": { "node": ">=0.10" } @@ -956,10 +883,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1088,9 +1014,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", "funding": [ { "type": "individual", @@ -1153,39 +1079,43 @@ } }, "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz", + "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==", "dependencies": { - "aproba": "^1.0.3", + "ansi-regex": "^5.0.1", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", + "has-unicode": "^2.0.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/gaxios": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz", - "integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz", + "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==", "dependencies": { "abort-controller": "^3.0.0", "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" + "node-fetch": "^2.6.1" }, "engines": { "node": ">=10" } }, "node_modules/gcp-metadata": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.0.tgz", - "integrity": "sha512-L9XQUpvKJCM76YRSmcxrR4mFPzPGsgZUH+GgHMxAET8qc6+BhRJq63RLhWakgEO2KKVgeSDVfyiNjkGSADwNTA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", "dependencies": { "gaxios": "^4.0.0", "json-bigint": "^1.0.0" @@ -1194,14 +1124,6 @@ "node": ">=10" } }, - "node_modules/generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "dependencies": { - "is-property": "^1.0.2" - } - }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -1215,9 +1137,9 @@ } }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1246,27 +1168,27 @@ } }, "node_modules/global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dev": true, "dependencies": { - "ini": "1.3.7" + "ini": "2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gmail-send": { - "version": "1.8.10", - "resolved": "https://registry.npmjs.org/gmail-send/-/gmail-send-1.8.10.tgz", - "integrity": "sha512-QMpWwzeA64U69HzOEzI37UNc73xXkhTg8LuqsfKX9W7LjiQY3yRvViVn7ZhuJWLTV4136vsLJf2sXiZKmdykbw==", + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/gmail-send/-/gmail-send-1.8.14.tgz", + "integrity": "sha512-hc+4Ej7ZJtw0G5sync10pmWkpPXIabkQ+p/a92lPPTXni3ChEU9sR2wxOvK6Hx+5Ou+2m9h1cVffWEgtR6Gzkw==", "dependencies": { - "lodash": "^4.17.15", - "nodemailer": "^6.3.0" + "lodash": "^4.17.21", + "nodemailer": "^6.6.5" } }, "node_modules/google-auth-library": { @@ -1289,9 +1211,9 @@ } }, "node_modules/google-p12-pem": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.1.tgz", - "integrity": "sha512-e9CwdD2QYkpvJsktki3Bm8P8FSGIneF+/42a9F9QHcQvJ73C2RoYZdrwRl6BhwksWtzl65gT4OnBROhUIFw95Q==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz", + "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==", "dependencies": { "node-forge": "^0.10.0" }, @@ -1353,15 +1275,15 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "node_modules/gtoken": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.0.tgz", - "integrity": "sha512-mCcISYiaRZrJpfqOs0QWa6lfEM/C1V9ASkzFmuz43XBb5s1Vynh+CZy1ECeeJXVGx2PRByjYzb4Y4/zr1byr0w==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", + "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==", "dependencies": { "gaxios": "^4.0.0", "google-p12-pem": "^3.0.3", @@ -1428,9 +1350,9 @@ } }, "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -1506,10 +1428,13 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -1553,20 +1478,17 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -1576,28 +1498,31 @@ } }, "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "dependencies": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-number": { @@ -1627,11 +1552,6 @@ "node": ">=8" } }, - "node_modules/is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -1860,9 +1780,9 @@ } }, "node_modules/mariadb": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.5.4.tgz", - "integrity": "sha512-4vQgMRyBIN9EwSQG0vzjR9D8bscPH0dGPJt67qVlOkHSiSm0xUatg1Pft4o1LzORgeOW4PheiY/HBE9bYYmNCA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.5.5.tgz", + "integrity": "sha512-6dklvcKWuuaV1JjAwnE2ezR+jTt7JrZHftgeHHBmjB0wgfaUpdxol1DPWclwMcCrsO9yoM0FuCOiCcCgXc//9Q==", "dependencies": { "@types/geojson": "^7946.0.7", "@types/node": "^14.14.28", @@ -1920,19 +1840,19 @@ } }, "node_modules/mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dependencies": { - "mime-db": "1.49.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" @@ -1964,9 +1884,9 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", "dependencies": { "yallist": "^4.0.0" }, @@ -2006,9 +1926,9 @@ } }, "node_modules/moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", "dependencies": { "moment": ">= 2.9.0" }, @@ -2022,14 +1942,14 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/multer": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", - "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", "dependencies": { "append-field": "^1.0.0", "busboy": "^0.2.11", "concat-stream": "^1.5.2", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.4", "object-assign": "^4.1.1", "on-finished": "^2.3.0", "type-is": "^1.6.4", @@ -2039,60 +1959,6 @@ "node": ">= 0.10.0" } }, - "node_modules/mysql2": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.2.5.tgz", - "integrity": "sha512-XRqPNxcZTpmFdXbJqb+/CtYVLCx14x1RTeNMD4954L331APu75IC74GDqnZMEt1kwaXy6TySo55rF2F3YJS78g==", - "dependencies": { - "denque": "^1.4.1", - "generate-function": "^2.3.1", - "iconv-lite": "^0.6.2", - "long": "^4.0.0", - "lru-cache": "^6.0.0", - "named-placeholders": "^1.1.2", - "seq-queue": "^0.0.5", - "sqlstring": "^2.3.2" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/mysql2/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/named-placeholders": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", - "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", - "dependencies": { - "lru-cache": "^4.1.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/named-placeholders/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/named-placeholders/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -2107,9 +1973,12 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { "node": "4.x || >=6.0.0" } @@ -2123,30 +1992,30 @@ } }, "node_modules/nodemailer": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.3.tgz", - "integrity": "sha512-faZFufgTMrphYoDjvyVpbpJcYzwyFnbAMmQtj1lVBYAUSm3SOy2fIdd9+Mr4UxPosBa0JRw9bJoIwQn+nswiew==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.2.tgz", + "integrity": "sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q==", "engines": { "node": ">=6.0.0" } }, "node_modules/nodemon": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", - "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", "dev": true, "hasInstallScript": true, "dependencies": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", + "chokidar": "^3.5.2", + "debug": "^3.2.7", "ignore-by-default": "^1.0.1", "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", + "pstree.remy": "^1.1.8", "semver": "^5.7.1", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^4.1.0" + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" }, "bin": { "nodemon": "bin/nodemon.js" @@ -2216,22 +2085,17 @@ } }, "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz", + "integrity": "sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q==", "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.0", + "set-blocking": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/object-assign": { @@ -2315,6 +2179,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -2361,11 +2230,6 @@ "node": ">= 0.10" } }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -2439,6 +2303,12 @@ "rc": "cli.js" } }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", @@ -2595,15 +2465,10 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, - "node_modules/seq-queue": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" - }, "node_modules/sequelize": { - "version": "6.6.5", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.6.5.tgz", - "integrity": "sha512-QyRrJrDRiwuiILqTMHUA1yWOPIL12KlfmgZ3hnzQwbMvp2vJ6fzu9bYJQB+qPMosck4mBUggY4Cjoc6Et8FBIQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.11.0.tgz", + "integrity": "sha512-+j3N5lr+FR1eicMRGR3bRsGOl9HMY0UGb2PyB2i1yZ64XBgsz3xejMH0UD45LcUitj40soDGIa9CyvZG0dfzKg==", "dependencies": { "debug": "^4.1.1", "dottie": "^2.0.0", @@ -2611,12 +2476,13 @@ "lodash": "^4.17.20", "moment": "^2.26.0", "moment-timezone": "^0.5.31", + "pg-connection-string": "^2.5.0", "retry-as-promised": "^3.2.0", "semver": "^7.3.2", "sequelize-pool": "^6.0.0", "toposort-class": "^1.0.1", "uuid": "^8.1.0", - "validator": "^13.6.0", + "validator": "^13.7.0", "wkx": "^0.5.0" }, "engines": { @@ -2652,9 +2518,9 @@ } }, "node_modules/sequelize/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -2697,17 +2563,9 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/sqlstring": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", - "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==", - "engines": { - "node": ">= 0.6" - } + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "node_modules/statuses": { "version": "1.5.0", @@ -2731,27 +2589,27 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/strip-bom": { @@ -2787,9 +2645,9 @@ } }, "node_modules/tar": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.5.tgz", - "integrity": "sha512-FiK6MQyyaqd5vHuUjbg/NpO8BuEGeSXcmlH7Pt/JkugWS8s0w8nKybWjHDJiwzCAIKZ66uof4ghm4tBADjcqRA==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -2813,18 +2671,6 @@ "node": ">=10" } }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -2886,13 +2732,21 @@ "node": "*" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/type-is": { @@ -2922,13 +2776,10 @@ } }, "node_modules/undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, - "dependencies": { - "debug": "^2.2.0" - } + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, "node_modules/unique-string": { "version": "2.0.0", @@ -2951,27 +2802,28 @@ } }, "node_modules/update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "dependencies": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/yeoman/update-notifier?sponsor=1" @@ -3016,9 +2868,9 @@ } }, "node_modules/validator": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.6.0.tgz", - "integrity": "sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", "engines": { "node": ">= 0.10" } @@ -3031,12 +2883,26 @@ "node": ">= 0.8" } }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "dependencies": { - "string-width": "^1.0.2 || 2" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/widest-line": { @@ -3051,56 +2917,6 @@ "node": ">=8" } }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/widest-line/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wkx": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", @@ -3109,6 +2925,23 @@ "@types/node": "*" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3151,19 +2984,19 @@ }, "dependencies": { "@mapbox/node-pre-gyp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz", - "integrity": "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.7.tgz", + "integrity": "sha512-PplSvl4pJ5N3BkVjAdDzpPhVUPdC73JgttkR+LnBx2OORC1GCQsBjUeEuipf9uOaAM1SbxcdZFfR3KDTKm2S0A==", "requires": { "detect-libc": "^1.0.3", "https-proxy-agent": "^5.0.0", "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.5", "nopt": "^5.0.0", - "npmlog": "^4.1.2", + "npmlog": "^6.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.4", - "tar": "^6.1.0" + "semver": "^7.3.5", + "tar": "^6.1.11" } }, "@sindresorhus/is": { @@ -3187,9 +3020,9 @@ "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" }, "@types/node": { - "version": "14.17.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.7.tgz", - "integrity": "sha512-SYTdMaW47se8499q8m0fYKZZRlmq0RaRv6oYmlVm6DUm31l0fhOl1D03X8hGxohCKTI2Bg6w7W0TiYB51aJzag==" + "version": "14.18.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", + "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==" }, "abbrev": { "version": "1.1.1", @@ -3222,9 +3055,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -3237,52 +3070,18 @@ } }, "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "string-width": "^4.1.0" } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -3314,44 +3113,40 @@ "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" }, "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "requires": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } } } @@ -3367,11 +3162,11 @@ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "balanced-match": { @@ -3427,59 +3222,19 @@ } }, "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "requires": { "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" } }, "brace-expansion": { @@ -3557,15 +3312,15 @@ } }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", "dev": true }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -3631,11 +3386,6 @@ "mimic-response": "^1.0.0" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3651,6 +3401,11 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -3749,9 +3504,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cors": { "version": "2.8.5", @@ -3813,9 +3568,9 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "denque": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", - "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" }, "depd": { "version": "1.1.2", @@ -3880,10 +3635,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -3991,9 +3745,9 @@ } }, "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" }, "forwarded": { "version": "0.2.0", @@ -4026,49 +3780,42 @@ "optional": true }, "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz", + "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==", "requires": { - "aproba": "^1.0.3", + "ansi-regex": "^5.0.1", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", + "has-unicode": "^2.0.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" } }, "gaxios": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz", - "integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz", + "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==", "requires": { "abort-controller": "^3.0.0", "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" + "node-fetch": "^2.6.1" } }, "gcp-metadata": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.0.tgz", - "integrity": "sha512-L9XQUpvKJCM76YRSmcxrR4mFPzPGsgZUH+GgHMxAET8qc6+BhRJq63RLhWakgEO2KKVgeSDVfyiNjkGSADwNTA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", "requires": { "gaxios": "^4.0.0", "json-bigint": "^1.0.0" } }, - "generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "requires": { - "is-property": "^1.0.2" - } - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -4079,9 +3826,9 @@ } }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4101,21 +3848,21 @@ } }, "global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dev": true, "requires": { - "ini": "1.3.7" + "ini": "2.0.0" } }, "gmail-send": { - "version": "1.8.10", - "resolved": "https://registry.npmjs.org/gmail-send/-/gmail-send-1.8.10.tgz", - "integrity": "sha512-QMpWwzeA64U69HzOEzI37UNc73xXkhTg8LuqsfKX9W7LjiQY3yRvViVn7ZhuJWLTV4136vsLJf2sXiZKmdykbw==", + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/gmail-send/-/gmail-send-1.8.14.tgz", + "integrity": "sha512-hc+4Ej7ZJtw0G5sync10pmWkpPXIabkQ+p/a92lPPTXni3ChEU9sR2wxOvK6Hx+5Ou+2m9h1cVffWEgtR6Gzkw==", "requires": { - "lodash": "^4.17.15", - "nodemailer": "^6.3.0" + "lodash": "^4.17.21", + "nodemailer": "^6.6.5" } }, "google-auth-library": { @@ -4135,9 +3882,9 @@ } }, "google-p12-pem": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.1.tgz", - "integrity": "sha512-e9CwdD2QYkpvJsktki3Bm8P8FSGIneF+/42a9F9QHcQvJ73C2RoYZdrwRl6BhwksWtzl65gT4OnBROhUIFw95Q==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz", + "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==", "requires": { "node-forge": "^0.10.0" } @@ -4184,15 +3931,15 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "gtoken": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.0.tgz", - "integrity": "sha512-mCcISYiaRZrJpfqOs0QWa6lfEM/C1V9ASkzFmuz43XBb5s1Vynh+CZy1ECeeJXVGx2PRByjYzb4Y4/zr1byr0w==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", + "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==", "requires": { "gaxios": "^4.0.0", "google-p12-pem": "^3.0.3", @@ -4244,9 +3991,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -4304,9 +4051,9 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, "ipaddr.js": { @@ -4339,36 +4086,33 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" } }, "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true }, "is-number": { @@ -4389,11 +4133,6 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -4595,9 +4334,9 @@ } }, "mariadb": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.5.4.tgz", - "integrity": "sha512-4vQgMRyBIN9EwSQG0vzjR9D8bscPH0dGPJt67qVlOkHSiSm0xUatg1Pft4o1LzORgeOW4PheiY/HBE9bYYmNCA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.5.5.tgz", + "integrity": "sha512-6dklvcKWuuaV1JjAwnE2ezR+jTt7JrZHftgeHHBmjB0wgfaUpdxol1DPWclwMcCrsO9yoM0FuCOiCcCgXc//9Q==", "requires": { "@types/geojson": "^7946.0.7", "@types/node": "^14.14.28", @@ -4639,16 +4378,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.49.0" + "mime-db": "1.51.0" } }, "mimic-response": { @@ -4671,9 +4410,9 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", "requires": { "yallist": "^4.0.0" } @@ -4701,9 +4440,9 @@ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", "requires": { "moment": ">= 2.9.0" } @@ -4714,69 +4453,20 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "multer": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", - "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", "requires": { "append-field": "^1.0.0", "busboy": "^0.2.11", "concat-stream": "^1.5.2", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.4", "object-assign": "^4.1.1", "on-finished": "^2.3.0", "type-is": "^1.6.4", "xtend": "^4.0.0" } }, - "mysql2": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.2.5.tgz", - "integrity": "sha512-XRqPNxcZTpmFdXbJqb+/CtYVLCx14x1RTeNMD4954L331APu75IC74GDqnZMEt1kwaXy6TySo55rF2F3YJS78g==", - "requires": { - "denque": "^1.4.1", - "generate-function": "^2.3.1", - "iconv-lite": "^0.6.2", - "long": "^4.0.0", - "lru-cache": "^6.0.0", - "named-placeholders": "^1.1.2", - "seq-queue": "^0.0.5", - "sqlstring": "^2.3.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "named-placeholders": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", - "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", - "requires": { - "lru-cache": "^4.1.3" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -4788,9 +4478,12 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "requires": { + "whatwg-url": "^5.0.0" + } }, "node-forge": { "version": "0.10.0", @@ -4798,26 +4491,26 @@ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" }, "nodemailer": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.3.tgz", - "integrity": "sha512-faZFufgTMrphYoDjvyVpbpJcYzwyFnbAMmQtj1lVBYAUSm3SOy2fIdd9+Mr4UxPosBa0JRw9bJoIwQn+nswiew==" + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.2.tgz", + "integrity": "sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q==" }, "nodemon": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", - "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", "dev": true, "requires": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", + "chokidar": "^3.5.2", + "debug": "^3.2.7", "ignore-by-default": "^1.0.1", "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", + "pstree.remy": "^1.1.8", "semver": "^5.7.1", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^4.1.0" + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" }, "dependencies": { "debug": { @@ -4864,21 +4557,16 @@ "dev": true }, "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz", + "integrity": "sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q==", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.0", + "set-blocking": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4941,6 +4629,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -4975,11 +4668,6 @@ "ipaddr.js": "1.9.1" } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -5036,6 +4724,14 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + } } }, "readable-stream": { @@ -5168,15 +4864,10 @@ } } }, - "seq-queue": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" - }, "sequelize": { - "version": "6.6.5", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.6.5.tgz", - "integrity": "sha512-QyRrJrDRiwuiILqTMHUA1yWOPIL12KlfmgZ3hnzQwbMvp2vJ6fzu9bYJQB+qPMosck4mBUggY4Cjoc6Et8FBIQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.11.0.tgz", + "integrity": "sha512-+j3N5lr+FR1eicMRGR3bRsGOl9HMY0UGb2PyB2i1yZ64XBgsz3xejMH0UD45LcUitj40soDGIa9CyvZG0dfzKg==", "requires": { "debug": "^4.1.1", "dottie": "^2.0.0", @@ -5184,19 +4875,20 @@ "lodash": "^4.17.20", "moment": "^2.26.0", "moment-timezone": "^0.5.31", + "pg-connection-string": "^2.5.0", "retry-as-promised": "^3.2.0", "semver": "^7.3.2", "sequelize-pool": "^6.0.0", "toposort-class": "^1.0.1", "uuid": "^8.1.0", - "validator": "^13.6.0", + "validator": "^13.7.0", "wkx": "^0.5.0" }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -5235,14 +4927,9 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "sqlstring": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", - "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "statuses": { "version": "1.5.0", @@ -5260,21 +4947,21 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -5301,9 +4988,9 @@ } }, "tar": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.5.tgz", - "integrity": "sha512-FiK6MQyyaqd5vHuUjbg/NpO8BuEGeSXcmlH7Pt/JkugWS8s0w8nKybWjHDJiwzCAIKZ66uof4ghm4tBADjcqRA==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -5320,12 +5007,6 @@ } } }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -5371,10 +5052,15 @@ } } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { @@ -5401,13 +5087,10 @@ } }, "undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, - "requires": { - "debug": "^2.2.0" - } + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, "unique-string": { "version": "2.0.0", @@ -5424,22 +5107,23 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" } @@ -5474,21 +5158,35 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "validator": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.6.0.tgz", - "integrity": "sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==" + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "requires": { - "string-width": "^1.0.2 || 2" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "widest-line": { @@ -5498,46 +5196,6 @@ "dev": true, "requires": { "string-width": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "wkx": { @@ -5548,6 +5206,17 @@ "@types/node": "*" } }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 0fded85..9986364 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,6 @@ "test": "node ./server/config/test", "db:install": "node ./server/db/install", "db:data-fake": "node ./server/db/data-fake", - "db:antiguo": "node ./server/db/antiguo", "dev": "nodemon ./server/app", "start": "node ./server/app" }, @@ -15,7 +14,7 @@ "type": "git", "url": "https://repositorio.acatlan.unam.mx/CIDWA/servicio_social_api.git" }, - "author": "cidwa", + "author": "CIDWA", "license": "ISC", "dependencies": { "axios": "^0.21.0", @@ -33,7 +32,6 @@ "mariadb": "^2.5.1", "moment": "^2.29.1", "multer": "^1.4.2", - "mysql2": "^2.2.5", "sequelize": "^6.3.5", "validator": "^13.1.17" }, diff --git a/server/app.js b/server/app.js index 36acec1..a2a0806 100644 --- a/server/app.js +++ b/server/app.js @@ -21,6 +21,6 @@ app.get('/', (req, res) => res.send('API IRIS')); app.use(require('./routes/index')); -app.listen(process.env.PORT, () => +app.listen(Number(process.env.PORT), () => console.log(`API IRIS corriendo en el puerto: ${process.env.PORT}`.rainbow) ); diff --git a/server/config/config.js b/server/config/config.js index 35d3525..b7736ee 100644 --- a/server/config/config.js +++ b/server/config/config.js @@ -1,6 +1,6 @@ const dotenv = require('dotenv'); const colors = require('colors'); -var result = {}; +let result = {}; try { result = dotenv.config(); @@ -9,19 +9,3 @@ try { } catch (err) { console.log('El archivo .env no se cargo.'.underline.bold.red); } - -// process.env.TYPEDB = process.env.TYPEDB - -// process.env.DB = process.env.DB - -// process.env.USERDB = process.env.USERDB - -// process.env.PASSWORDDB = process.env.PASSWORDDB - -// process.env.HOSTDB = process.env.HOSTDB - -// process.env.PORT = process.env.PORT - -// process.env.SALT_ROUNDS = process.env.SALT_ROUNDS - -process.env.CADUCIDAD_TOKEN = 1800000; diff --git a/server/config/sybase.js b/server/config/sybase.js deleted file mode 100644 index 0ffc607..0000000 --- a/server/config/sybase.js +++ /dev/null @@ -1,27 +0,0 @@ -require('./config'); -const Sybase = require('sybase'); -const db = new Sybase( - process.env.SYBASE_IP, - Number(process.env.SYBASE_PORT), - process.env.SYBASE_DB, - process.env.SYBASE_USER, - process.env.SYBASE_PASSWORD -); - -const alumno = (numeroCuenta) => { - return new Promise((resolve, reject) => { - db.connect((err) => { - if (err) reject(err); - db.query( - `select * from servicio_social where cuenta = '${numeroCuenta}'`, - (err, data) => { - if (err) reject(err); - db.disconnect(); - resolve(data); - } - ); - }); - }); -}; - -module.exports = alumno; diff --git a/server/controller/CasoEspecial/casoEspecial.js b/server/controller/CasoEspecial/casoEspecial.js index 7e67ffc..4a0d66d 100644 --- a/server/controller/CasoEspecial/casoEspecial.js +++ b/server/controller/CasoEspecial/casoEspecial.js @@ -1,12 +1,13 @@ -const validar = require('../../helper/validar'); -const CasoEspecial = require('../../db/tablas/CasoEspecial'); -const Usuario = require('../../db/tablas/Usuario'); -const TipoUsuario = require('../../db/tablas/TipoUsuario'); -const Carrera = require('../../db/tablas/Carrera'); -const Status = require('../../db/tablas/Status'); +const { validarId } = require('../../helper/validar'); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const CasoEspecial = require(`${dbPath}/CasoEspecial`); +const Status = require(`${dbPath}/Status`); +const TipoUsuario = require(`${dbPath}/TipoUsuario`); +const Usuario = require(`${dbPath}/Usuario`); const admin = async (body) => { - const idCasoEspecial = validar.validarId(body.idCasoEspecial); + const idCasoEspecial = validarId(body.idCasoEspecial); return CasoEspecial.findOne({ where: { idCasoEspecial }, diff --git a/server/controller/CasoEspecial/liberacion.js b/server/controller/CasoEspecial/liberacion.js index 3292285..3913d88 100644 --- a/server/controller/CasoEspecial/liberacion.js +++ b/server/controller/CasoEspecial/liberacion.js @@ -1,11 +1,13 @@ -const validar = require('../../helper/validar'); -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const CasoEspecial = require('../../db/tablas/CasoEspecial'); -const Usuario = require('../../db/tablas/Usuario'); +const helperPath = '../../helper'; +const correos = require(`${helperPath}/correos`); +const gmail = require(`${helperPath}/gmail`); +const { validarId } = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const CasoEspecial = require(`${dbPath}/CasoEspecial`); +const Usuario = require(`${dbPath}/Usuario`); const liberacion = async (body) => { - const idCasoEspecial = validar.validarId(body.idCasoEspecial); + const idCasoEspecial = validarId(body.idCasoEspecial); let update = {}; return CasoEspecial.findOne({ diff --git a/server/controller/CasoEspecial/nuevo.js b/server/controller/CasoEspecial/nuevo.js index 9fa0860..82f65d4 100644 --- a/server/controller/CasoEspecial/nuevo.js +++ b/server/controller/CasoEspecial/nuevo.js @@ -1,8 +1,10 @@ -const drive = require('../../helper/drive'); -const CasoEspecial = require('../../db/tablas/CasoEspecial'); -const Usuario = require('../../db/tablas/Usuario'); -const Carrera = require('../../db/tablas/Carrera'); -const validar = require('../../helper/validar'); +const helperPath = '../../helper'; +const drive = require(`${helperPath}/drive`); +const validar = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const CasoEspecial = require(`${dbPath}/CasoEspecial`); +const Usuario = require(`${dbPath}/Usuario`); const nuevo = async (body, file) => { const idUsuario = validar.validarId(body.idUsuario); diff --git a/server/controller/CasoEspecial/serviciosEspeciales.js b/server/controller/CasoEspecial/serviciosEspeciales.js index fe9baf6..1a51a60 100644 --- a/server/controller/CasoEspecial/serviciosEspeciales.js +++ b/server/controller/CasoEspecial/serviciosEspeciales.js @@ -1,13 +1,13 @@ const { Op } = require('sequelize'); const validar = require('../../helper/validar'); -const CasoEspecial = require('../../db/tablas/CasoEspecial'); -const Usuario = require('../../db/tablas/Usuario'); -const Carrera = require('../../db/tablas/Carrera'); -const Status = require('../../db/tablas/Status'); -const TipoUsuario = require('../../db/tablas/TipoUsuario'); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const CasoEspecial = require(`${dbPath}/CasoEspecial`); +const Status = require(`${dbPath}/Status`); +const Usuario = require(`${dbPath}/Usuario`); const serviciosEspeciales = async (body) => { - const pagina = validar.validarId(body.pagina); + const pagina = validar.validarNumero(body.pagina, true); const where = body.idStatus ? { idStatus: validar.validarId(body.idStatus) } : { idStatus: { [Op.gt]: 10 } }; @@ -17,41 +17,29 @@ const serviciosEspeciales = async (body) => { const numeroCuenta = body.numeroCuenta ? validar.validarNumeroCuenta(body.numeroCuenta) : ''; - const data = []; - return CasoEspecial.findAll({ + return CasoEspecial.findAndCountAll({ include: [ { model: Usuario, - include: { model: TipoUsuario }, where: { - usuario: { [Op.like]: `%${numeroCuenta}%` }, - nombre: { [Op.like]: `%${nombre}%` }, + [Op.and]: [ + { usuario: { [Op.like]: `%${numeroCuenta}%` } }, + { nombre: { [Op.like]: `%${nombre}%` } }, + ], }, }, { model: Carrera }, { model: Status, where }, ], order: [['updatedAt', 'DESC']], + limit: 25, + offset: 25 * (pagina - 1), }).then((res) => { - for (let i = pagina * 25 - 25; i < res.length && i < pagina * 25; i++) - data.push({ - idCasoEspecial: res[i].idCasoEspecial, - createdAt: res[i].createdAt, - Usuario: { - idUsuario: res[i].Usuario.idUsuario, - usuario: res[i].Usuario.usuario, - nombre: res[i].Usuario.nombre, - TipoUsuario: res[i].Usuario.TipoUsuario, - }, - Carrera: res[i].Carrera, - Status: res[i].Status, - }); - return { - registros: res.length, - faltantes: res.length - data.length - (pagina - 1) * 25, - servicios: data, - }; + for (let i = 0; i < res.rows.length; i++) { + // delete res.rows[i].dataValues.idUsuario + } + return { count: res.count, serviciosEspeciales: res.rows }; }); }; diff --git a/server/controller/CasoEspecial/update.js b/server/controller/CasoEspecial/update.js index c55f96a..213678f 100644 --- a/server/controller/CasoEspecial/update.js +++ b/server/controller/CasoEspecial/update.js @@ -41,7 +41,7 @@ const update = async (body) => { 'El texto motivo.', 1 ); - if (validar.isObjectEmpty(dataUpdate)) + if (validar.validarObjetoVacio(dataUpdate)) throw new Error( 'No se envio nada para actualizar este Caso Especial.' ); diff --git a/server/controller/CuestionarioAlumno/get.js b/server/controller/CuestionarioAlumno/get.js index fa6ee41..e93ce54 100644 --- a/server/controller/CuestionarioAlumno/get.js +++ b/server/controller/CuestionarioAlumno/get.js @@ -1,15 +1,17 @@ -const fs = require('fs'); const { convertArrayToCSV } = require('convert-array-to-csv'); const { Op } = require('sequelize'); -const validar = require('../../helper/validar'); -const CuestionarioAlumno = require('../../db/tablas/CuestionarioAlumno'); -const Servicio = require('../../db/tablas/Servicio'); -const Programa = require('../../db/tablas/Programa'); -const Usuario = require('../../db/tablas/Usuario'); +const helperPath = '../../helper'; +const helper = require(`${helperPath}/helper`); +const { validarNumero } = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const CuestionarioAlumno = require(`${dbPath}/CuestionarioAlumno`); +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Usuario = require(`${dbPath}/Usuario`); const get = async (body) => { - const year = validar.validarNumero(body.year, 4); - const path = `csv/${year}_cuestionario_alumno.csv`; + const year = validarNumero(body.year, 4); + const path = `server/uploads/${year}_cuestionario_alumno.csv`; const data = []; return Servicio.findAll({ @@ -21,61 +23,59 @@ const get = async (body) => { { model: Programa, where: { clavePrograma: { [Op.like]: `${year}%` } } }, { model: Usuario }, ], - }).then((res) => { - for (let i = 0; i < res.length; i++) - data.push({ - idServicio: res[i].idServicio, - clavePrograma: res[i].Programa.clavePrograma, - usuario: res[i].Usuario.usuario, - nombre: res[i].Usuario.nombre, - idCuestionarioAlumno: res[i].CuestionarioAlumno.idCuestionarioAlumno, - sexo: res[i].CuestionarioAlumno.sexo, - edad: res[i].CuestionarioAlumno.edad, - servicioMedico: res[i].CuestionarioAlumno.servicioMedico, - p1: res[i].CuestionarioAlumno.p1, - p2: res[i].CuestionarioAlumno.p2, - p3: res[i].CuestionarioAlumno.p3, - p4: res[i].CuestionarioAlumno.p4, - p5: res[i].CuestionarioAlumno.p5, - p6: res[i].CuestionarioAlumno.p6, - p7: res[i].CuestionarioAlumno.p7, - p8: res[i].CuestionarioAlumno.p8, - p9: res[i].CuestionarioAlumno.p9, - p10: res[i].CuestionarioAlumno.p10, - p11: res[i].CuestionarioAlumno.p11, - p12: res[i].CuestionarioAlumno.p12, - p13: res[i].CuestionarioAlumno.p13, - p14: res[i].CuestionarioAlumno.p14, - p15: res[i].CuestionarioAlumno.p15, - p16: res[i].CuestionarioAlumno.p16, - p17: res[i].CuestionarioAlumno.p17, - p18: res[i].CuestionarioAlumno.p18, - p19: res[i].CuestionarioAlumno.p19, - p20: res[i].CuestionarioAlumno.p20, - p21: res[i].CuestionarioAlumno.p21, - p22: res[i].CuestionarioAlumno.p22, - p23: res[i].CuestionarioAlumno.p23, - p24: res[i].CuestionarioAlumno.p24, - p25: res[i].CuestionarioAlumno.p25, - p26: res[i].CuestionarioAlumno.p26, - p27: res[i].CuestionarioAlumno.p27, - p28: res[i].CuestionarioAlumno.p28, - p29: res[i].CuestionarioAlumno.p29, - p30: res[i].CuestionarioAlumno.p30, - createdAt: res[i].CuestionarioAlumno.createdAt, + order: [['createdAt']], + }) + .then(async (res) => { + for (let i = 0; i < res.length; i++) + data.push({ + idServicio: res[i].idServicio, + clavePrograma: res[i].Programa.clavePrograma, + usuario: res[i].Usuario.usuario, + nombre: res[i].Usuario.nombre, + idCuestionarioAlumno: res[i].CuestionarioAlumno.idCuestionarioAlumno, + sexo: res[i].CuestionarioAlumno.sexo, + edad: res[i].CuestionarioAlumno.edad, + servicioMedico: res[i].CuestionarioAlumno.servicioMedico, + p1: res[i].CuestionarioAlumno.p1, + p2: res[i].CuestionarioAlumno.p2, + p3: res[i].CuestionarioAlumno.p3, + p4: res[i].CuestionarioAlumno.p4, + p5: res[i].CuestionarioAlumno.p5, + p6: res[i].CuestionarioAlumno.p6, + p7: res[i].CuestionarioAlumno.p7, + p8: res[i].CuestionarioAlumno.p8, + p9: res[i].CuestionarioAlumno.p9, + p10: res[i].CuestionarioAlumno.p10, + p11: res[i].CuestionarioAlumno.p11, + p12: res[i].CuestionarioAlumno.p12, + p13: res[i].CuestionarioAlumno.p13, + p14: res[i].CuestionarioAlumno.p14, + p15: res[i].CuestionarioAlumno.p15, + p16: res[i].CuestionarioAlumno.p16, + p17: res[i].CuestionarioAlumno.p17, + p18: res[i].CuestionarioAlumno.p18, + p19: res[i].CuestionarioAlumno.p19, + p20: res[i].CuestionarioAlumno.p20, + p21: res[i].CuestionarioAlumno.p21, + p22: res[i].CuestionarioAlumno.p22, + p23: res[i].CuestionarioAlumno.p23, + p24: res[i].CuestionarioAlumno.p24, + p25: res[i].CuestionarioAlumno.p25, + p26: res[i].CuestionarioAlumno.p26, + p27: res[i].CuestionarioAlumno.p27, + p28: res[i].CuestionarioAlumno.p28, + p29: res[i].CuestionarioAlumno.p29, + p30: res[i].CuestionarioAlumno.p30, + createdAt: res[i].CuestionarioAlumno.createdAt, + }); + await helper.eliminarArchivo(path).catch((err) => { + console.log(err); }); - try { - fs.unlinkSync(path); - } catch (err) { - console.log(err); - } - fs.appendFile(path, convertArrayToCSV(data), (err) => { - if (err) throw new Error(err); + return helper.crearArchivo(path, convertArrayToCSV(data)); + }) + .then((res) => { + return path; }); - return { - message: `Se creo/actualizo correctamente el csv del cuestionario de alumno del año ${year}.`, - }; - }); }; module.exports = get; diff --git a/server/controller/CuestionarioAlumno/nuevo.js b/server/controller/CuestionarioAlumno/nuevo.js index 6feb5ae..57a7b59 100644 --- a/server/controller/CuestionarioAlumno/nuevo.js +++ b/server/controller/CuestionarioAlumno/nuevo.js @@ -1,6 +1,7 @@ const validar = require('../../helper/validar'); -const CuestionarioAlumno = require('../../db/tablas/CuestionarioAlumno'); -const Servicio = require('../../db/tablas/Servicio'); +const dbPath = '../../db/tablas'; +const CuestionarioAlumno = require(`${dbPath}/CuestionarioAlumno`); +const Servicio = require(`${dbPath}/Servicio`); const nuevo = async (body) => { const idServicio = validar.validarId(body.idServicio); diff --git a/server/controller/CuestionarioPrograma/get.js b/server/controller/CuestionarioPrograma/get.js index 797bf5a..ec3366f 100644 --- a/server/controller/CuestionarioPrograma/get.js +++ b/server/controller/CuestionarioPrograma/get.js @@ -1,15 +1,18 @@ const fs = require('fs'); const { convertArrayToCSV } = require('convert-array-to-csv'); const { Op } = require('sequelize'); -const validar = require('../../helper/validar'); -const CuestionarioPrograma = require('../../db/tablas/CuestionarioPrograma'); -const Servicio = require('../../db/tablas/Servicio'); -const Programa = require('../../db/tablas/Programa'); -const Usuario = require('../../db/tablas/Usuario'); +const helperPath = '../../helper'; +const helper = require(`${helperPath}/helper`); +const { validarNumero } = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const CuestionarioPrograma = require(`${dbPath}/CuestionarioPrograma`); +const Servicio = require(`${dbPath}/Servicio`); +const Programa = require(`${dbPath}/Programa`); +const Usuario = require(`${dbPath}/Usuario`); const get = async (body) => { - const year = validar.validarNumero(body.year, 4); - const path = `csv/${year}_cuestionario_programa.csv`; + const year = validarNumero(body.year, 4); + const path = `server/uploads/${year}_cuestionario_programa.csv`; const data = []; return Servicio.findAll({ @@ -21,37 +24,35 @@ const get = async (body) => { { model: Programa, where: { clavePrograma: { [Op.like]: `${year}-%` } } }, { model: Usuario }, ], - }).then((res) => { - for (let i = 0; i < res.length; i++) - data.push({ - idServicio: res[i].idServicio, - clavePrograma: res[i].Programa.clavePrograma, - usuario: res[i].Usuario.usuario, - nombre: res[i].Usuario.nombre, - idCuestionarioPrograma: - res[i].CuestionarioPrograma.idCuestionarioPrograma, - actividad1: res[i].CuestionarioPrograma.actividad1, - actividad2: res[i].CuestionarioPrograma.actividad2, - actividad3: res[i].CuestionarioPrograma.actividad3, - actividad4: res[i].CuestionarioPrograma.actividad4, - actividad5: res[i].CuestionarioPrograma.actividad5, - retroalimentacion: res[i].CuestionarioPrograma.retroalimentacion, - p6: res[i].CuestionarioPrograma.p6, - p7: res[i].CuestionarioPrograma.p7, - createdAt: res[i].CuestionarioPrograma.createdAt, + order: [['createdAt']], + }) + .then(async (res) => { + for (let i = 0; i < res.length; i++) + data.push({ + idServicio: res[i].idServicio, + clavePrograma: res[i].Programa.clavePrograma, + usuario: res[i].Usuario.usuario, + nombre: res[i].Usuario.nombre, + idCuestionarioPrograma: + res[i].CuestionarioPrograma.idCuestionarioPrograma, + actividad1: res[i].CuestionarioPrograma.actividad1, + actividad2: res[i].CuestionarioPrograma.actividad2, + actividad3: res[i].CuestionarioPrograma.actividad3, + actividad4: res[i].CuestionarioPrograma.actividad4, + actividad5: res[i].CuestionarioPrograma.actividad5, + retroalimentacion: res[i].CuestionarioPrograma.retroalimentacion, + p6: res[i].CuestionarioPrograma.p6, + p7: res[i].CuestionarioPrograma.p7, + createdAt: res[i].CuestionarioPrograma.createdAt, + }); + await helper.eliminarArchivo(path).catch((err) => { + console.log(err); }); - try { - fs.unlinkSync(path); - } catch (err) { - console.log(err); - } - fs.appendFile(path, convertArrayToCSV(data), (err) => { - if (err) throw new Error(err); + return helper.crearArchivo(path, convertArrayToCSV(data)); + }) + .then((res) => { + return path; }); - return { - message: `Se creo/actualizo correctamente el csv del cuestionario de programa del año ${year}.`, - }; - }); }; module.exports = get; diff --git a/server/controller/CuestionarioPrograma/nuevo.js b/server/controller/CuestionarioPrograma/nuevo.js index 55bb2ff..0ed51ba 100644 --- a/server/controller/CuestionarioPrograma/nuevo.js +++ b/server/controller/CuestionarioPrograma/nuevo.js @@ -1,6 +1,7 @@ const validar = require('../../helper/validar'); -const CuestionarioPrograma = require('../../db/tablas/CuestionarioPrograma'); -const Servicio = require('../../db/tablas/Servicio'); +const dbPath = '../../db/tablas'; +const CuestionarioPrograma = require(`${dbPath}/CuestionarioPrograma`); +const Servicio = require(`${dbPath}/Servicio`); const nuevo = async (body) => { const idServicio = validar.validarId(body.idServicio); diff --git a/server/controller/Programa/cargaMasiva.js b/server/controller/Programa/cargaMasiva.js index 2260380..3d32bc4 100644 --- a/server/controller/Programa/cargaMasiva.js +++ b/server/controller/Programa/cargaMasiva.js @@ -1,12 +1,14 @@ const fs = require('fs'); -const moment = require('moment'); const csv = require('csvtojson'); -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const encriptar = require('../../helper/encriptar'); -const validar = require('../../helper/validar'); -const Programa = require('../../db/tablas/Programa'); -const Usuario = require('../../db/tablas/Usuario'); +const moment = require('moment'); +const helperPath = '../../helper'; +const correos = require(`${helperPath}/correos`); +const encriptar = require(`${helperPath}/encriptar`); +const gmail = require(`${helperPath}/gmail`); +const { validarCorreo } = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Programa = require(`${dbPath}/Programa`); +const Usuario = require(`${dbPath}/Usuario`); const cargaMasiva = async (file) => { const path = `server/uploads/${file}`; @@ -32,7 +34,7 @@ const cargaMasiva = async (file) => { continue; } try { - validar.validarCorreo(programas[i].correo); + validarCorreo(programas[i].correo); } catch (err) { console.log(err); mensaje += 'Esta linea contiene un correo no valido.\n\n'; @@ -42,7 +44,7 @@ const cargaMasiva = async (file) => { const activo = Number(programas[i].clave.substr(0, 4)) === today.year(); const responsable = await Usuario.findOne({ where: { usuario: programas[i].correo, idTipoUsuario: 2 }, - }).then(async (res) => { + }).then((res) => { if (!res) { const password = encriptar.generarPassword(); const correo = correos.enviarSec( @@ -50,8 +52,6 @@ const cargaMasiva = async (file) => { programas[i].correo, programas[i].nombre ); - - await gmail(correo.subject, programas[i].correo, correo.msj); return Usuario.create({ usuario: programas[i].correo, password: encriptar.encriptar(password), @@ -59,12 +59,13 @@ const cargaMasiva = async (file) => { activo: true, idTipoUsuario: 2, }) - .then((res) => { - mensaje += `Se creo el responsable con id ${res.idUsuario} y correo ${res.usuario}\n`; + .then(async (res) => { + await gmail(correo.subject, programas[i].correo, correo.msj); + mensaje += `Se creo al responsable con id ${res.idUsuario} y correo ${res.usuario}\n`; return res; }) .catch((err) => { - mensaje += err; + mensaje = mensaje + err.message + err; }); } return res; @@ -84,13 +85,13 @@ const cargaMasiva = async (file) => { activo, idUsuario: responsable.idUsuario, }).catch((err) => { - mensaje += err; + mensaje = mensaje + err.message + err; }); } mensaje += `El programa ${res.clavePrograma} ya ${ programas[i].correo === res.Usuario.usuario ? 'le pertenece a este responsable' - : 'fue asignado a otro responsable' + : 'fue asignado al responsable' } con id ${res.Usuario.idUsuario} y correo ${ res.Usuario.usuario }.\n`; @@ -98,7 +99,7 @@ const cargaMasiva = async (file) => { }) .then((res) => { if (res) - mensaje += `Se asigno el programa ${res.clavePrograma} con id ${res.idPrograma} al usuario con correo ${responsable.idUsuario} y correo ${responsable.usuario}\n`; + mensaje += `Se asigno el programa ${res.clavePrograma} con id ${res.idPrograma} al usuario con id ${responsable.idUsuario} y correo ${responsable.usuario}\n`; }); } else { await Programa.findOne({ @@ -118,7 +119,7 @@ const cargaMasiva = async (file) => { acatlan, idUsuario: responsable.idUsuario, }).catch((err) => { - mensaje += err; + mensaje = mensaje + err.message + err; }); } mensaje += `El programa ${res.clavePrograma} ya pertenece al responsable con id ${responsable.idUsuario} y correo ${responsable.usuario}\n`; @@ -126,15 +127,12 @@ const cargaMasiva = async (file) => { }) .then((res) => { if (res) - mensaje += `Se asigno el programa ${res.clavePrograma} con id ${res.idPrograma} al usuario con correo ${responsable.idUsuario} y correo ${responsable.usuario}\n`; + mensaje += `Se asigno el programa ${res.clavePrograma} con id ${res.idPrograma} al usuario con id ${responsable.idUsuario} y correo ${responsable.usuario}\n`; }); } mensaje += '\n'; } await gmail('Reporte carga masiva', 'lemuel@acatlan.unam.mx', mensaje); - await gmail('Reporte carga masiva', 'dscad@acatlan.unam.mx', mensaje); - await gmail('Reporte carga masiva', 'tramites.ss@acatlan.unam.mx', mensaje); - fs.unlinkSync(path); }); return { diff --git a/server/controller/Programa/programasAdmin.js b/server/controller/Programa/programasAdmin.js index 14d0a31..b181a73 100644 --- a/server/controller/Programa/programasAdmin.js +++ b/server/controller/Programa/programasAdmin.js @@ -1,9 +1,10 @@ -const validar = require('../../helper/validar'); -const Programa = require('../../db/tablas/Programa'); -const Usuario = require('../../db/tablas/Usuario'); +const { validarId } = require('../../helper/validar'); +const dbPath = '../../db/tablas'; +const Programa = require(`${dbPath}/Programa`); +const Usuario = require(`${dbPath}/Usuario`); const programasAdmin = async (body) => { - const idUsuario = validar.validarId(body.idUsuario); + const idUsuario = validarId(body.idUsuario); return Usuario.findOne({ where: { idUsuario }, diff --git a/server/controller/Programa/programasResponsable.js b/server/controller/Programa/programasResponsable.js index a81ad02..b602cf1 100644 --- a/server/controller/Programa/programasResponsable.js +++ b/server/controller/Programa/programasResponsable.js @@ -1,9 +1,10 @@ -const validar = require('../../helper/validar'); -const Programa = require('../../db/tablas/Programa'); -const Usuario = require('../../db/tablas/Usuario'); +const { validarId } = require('../../helper/validar'); +const dbPath = '../../db/tablas'; +const Programa = require(`${dbPath}/Programa`); +const Usuario = require(`${dbPath}/Usuario`); const programasResponsable = async (body) => { - const idUsuario = validar.validarId(body.idUsuario); + const idUsuario = validarId(body.idUsuario); return Usuario.findOne({ where: { idUsuario }, diff --git a/server/controller/Programa/reasignarProgramas.js b/server/controller/Programa/reasignarProgramas.js new file mode 100644 index 0000000..bc453c4 --- /dev/null +++ b/server/controller/Programa/reasignarProgramas.js @@ -0,0 +1,40 @@ +const { validarId, validarCorreo } = require('../../helper/validar'); +const dbPath = '../../db/tablas'; +const Programa = require(`${dbPath}/Programa`); +const Usuario = require(`${dbPath}/Usuario`); + +const reasignarProgramas = async (body) => { + const idUsuario = validarId(body.idUsuario); + const correoOtroResponsable = validarCorreo(body.correoOtroResponsable); + let otorResponsable = {}; + + return Usuario.findOne({ + where: { idUsuario }, + }) + .then((res) => { + if (!res) throw new Error('No existe este usuario.'); + if (res.idTipoUsuario != 2) + throw new Error('No es un usuario de tipo responsable'); + if (res.usuario === correoOtroResponsable) + throw new Error('Son el mismo usuario.'); + return Usuario.findOne({ where: { usuario: correoOtroResponsable } }); + }) + .then((res) => { + if (!res) throw new Error('No existe este usuario.'); + otorResponsable = res; + return Programa.update( + { idUsuario }, + { + where: { idUsuario: otorResponsable.idUsuario }, + } + ); + }) + .then((res) => + Usuario.destroy({ where: { idUsuario: otorResponsable.idUsuario } }) + ) + .then((res) => ({ + message: `Se elimino correctamente al usuario ${correoOtroResponsable} y se reasigno correctamente sus programas.`, + })); +}; + +module.exports = reasignarProgramas; diff --git a/server/controller/Servicio/admin.js b/server/controller/Servicio/admin.js index ccb467e..78eba42 100644 --- a/server/controller/Servicio/admin.js +++ b/server/controller/Servicio/admin.js @@ -1,13 +1,14 @@ -const validar = require('../../helper/validar'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const TipoUsuario = require('../../db/tablas/TipoUsuario'); -const Carrera = require('../../db/tablas/Carrera'); -const Status = require('../../db/tablas/Status'); -const Programa = require('../../db/tablas/Programa'); +const { validarId } = require('../../helper/validar'); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Status = require(`${dbPath}/Status`); +const TipoUsuario = require(`${dbPath}/TipoUsuario`); +const Usuario = require(`${dbPath}/Usuario`); const admin = async (body) => { - const idServicio = validar.validarId(body.idServicio); + const idServicio = validarId(body.idServicio); return Servicio.findOne({ where: { idServicio }, diff --git a/server/controller/Servicio/alumno.js b/server/controller/Servicio/alumno.js index c76c6b0..11866bd 100644 --- a/server/controller/Servicio/alumno.js +++ b/server/controller/Servicio/alumno.js @@ -1,13 +1,14 @@ const { Op } = require('sequelize'); -const validar = require('../../helper/validar'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Carrera = require('../../db/tablas/Carrera'); -const Status = require('../../db/tablas/Status'); -const Programa = require('../../db/tablas/Programa'); +const { validarId } = require('../../helper/validar'); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Status = require(`${dbPath}/Status`); +const Usuario = require(`${dbPath}/Usuario`); const alumno = async (body) => { - let idUsuario = validar.validarId(body.idUsuario); + let idUsuario = validarId(body.idUsuario); return Usuario.findOne({ where: { idUsuario } }) .then((res) => { diff --git a/server/controller/Servicio/cancelar.js b/server/controller/Servicio/cancelar.js index d38b4f2..3bdceed 100644 --- a/server/controller/Servicio/cancelar.js +++ b/server/controller/Servicio/cancelar.js @@ -1,9 +1,11 @@ -const validar = require('../../helper/validar'); -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Programa = require('../../db/tablas/Programa'); +const helperPath = '../../helper'; +const correos = require(`${helperPath}/correos`); +const gmail = require(`${helperPath}/gmail`); +const validar = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Usuario = require(`${dbPath}/Usuario`); const cancelar = async (body) => { const idServicio = validar.validarId(body.idServicio); diff --git a/server/controller/Servicio/cartaAceptacion.js b/server/controller/Servicio/cartaAceptacion.js index 9780cb4..ee93ba3 100644 --- a/server/controller/Servicio/cartaAceptacion.js +++ b/server/controller/Servicio/cartaAceptacion.js @@ -1,5 +1,6 @@ -const validar = require('../../helper/validar'); -const drive = require('../../helper/drive'); +const helperPath = '../../helper'; +const drive = require(`${helperPath}/drive`); +const validar = require(`${helperPath}/validar`); const Servicio = require('../../db/tablas/Servicio'); const cartaTermino = async (body, file) => { diff --git a/server/controller/Servicio/cartaTermino.js b/server/controller/Servicio/cartaTermino.js index c9c920d..e30b238 100644 --- a/server/controller/Servicio/cartaTermino.js +++ b/server/controller/Servicio/cartaTermino.js @@ -1,5 +1,6 @@ -const validar = require('../../helper/validar'); -const drive = require('../../helper/drive'); +const helperPath = '../../helper'; +const drive = require(`${helperPath}/drive`); +const validar = require(`${helperPath}/validar`); const Servicio = require('../../db/tablas/Servicio'); const cartaTermino = async (body, file) => { diff --git a/server/controller/Servicio/gustavoBazPrada.js b/server/controller/Servicio/gustavoBazPrada.js index 230fd1b..dbda0c3 100644 --- a/server/controller/Servicio/gustavoBazPrada.js +++ b/server/controller/Servicio/gustavoBazPrada.js @@ -1,17 +1,19 @@ -const fs = require('fs'); const moment = require('moment'); const { convertArrayToCSV } = require('convert-array-to-csv'); const { Op } = require('sequelize'); -const validar = require('../../helper/validar'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Carrera = require('../../db/tablas/Carrera'); +const helperPath = '../../helper'; +const helper = require(`${helperPath}/helper`); +const validar = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const Servicio = require(`${dbPath}/Servicio`); +const Usuario = require(`${dbPath}/Usuario`); const gustavoBazPrada = async (body) => { const year = validar.validarNumero(body.year, 4); const inicio = moment(`${year}-01-31`); const fin = moment(`${parseInt(year) + 1}-01-31`); - const path = `csv/${year}_gustavo_baz_prada.csv`; + const path = `server/uploads/${year}_gustavo_baz_prada.csv`; const data = []; return Servicio.findAll({ @@ -22,27 +24,25 @@ const gustavoBazPrada = async (body) => { ], }, include: [{ model: Usuario }, { model: Carrera }], - }).then((res) => { - for (let i = 0; i < res.length; i++) - data.push({ - numeroCuenta: res[i].Usuario.usuario, - nombre: res[i].Usuario.nombre, - licenciatura: res[i].Carrera.carrera, - correo: res[i].correo, - fechaLiberacion: validar.crearDDMMAAAA(res[i].fechaLiberacion), + order: [['fechaLiberacion']], + }) + .then(async (res) => { + for (let i = 0; i < res.length; i++) + data.push({ + numeroCuenta: res[i].Usuario.usuario, + nombre: res[i].Usuario.nombre, + licenciatura: res[i].Carrera.carrera, + correo: res[i].correo, + fechaLiberacion: helper.crearDDMMAAAA(res[i].fechaLiberacion), + }); + await helper.eliminarArchivo(path).catch((err) => { + console.log(err); }); - try { - fs.unlinkSync(path); - } catch (err) { - console.log(err); - } - fs.appendFile(path, convertArrayToCSV(data), (err) => { - if (err) throw new Error(err); + return helper.crearArchivo(path, convertArrayToCSV(data)); + }) + .then((res) => { + return path; }); - return { - message: `Se creo/actualizo correctamente el csv del reporte Gustavo Baz Prada.`, - }; - }); }; module.exports = gustavoBazPrada; diff --git a/server/controller/Servicio/informeGlobal.js b/server/controller/Servicio/informeGlobal.js index 0ea0a56..dbcf654 100644 --- a/server/controller/Servicio/informeGlobal.js +++ b/server/controller/Servicio/informeGlobal.js @@ -1,5 +1,6 @@ -const validar = require('../../helper/validar'); -const drive = require('../../helper/drive'); +const helperPath = '../../helper'; +const drive = require(`${helperPath}/drive`); +const validar = require(`${helperPath}/validar`); const Servicio = require('../../db/tablas/Servicio'); const informeGlobal = async (body, file) => { diff --git a/server/controller/Servicio/liberacion.js b/server/controller/Servicio/liberacion.js index 049b253..8fbd2cc 100644 --- a/server/controller/Servicio/liberacion.js +++ b/server/controller/Servicio/liberacion.js @@ -1,14 +1,16 @@ const moment = require('moment'); -const validar = require('../../helper/validar'); -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Programa = require('../../db/tablas/Programa'); +const helperPath = '../../helper'; +const correos = require(`${helperPath}/correos`); +const gmail = require(`${helperPath}/gmail`); +const validar = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Usuario = require(`${dbPath}/Usuario`); const liberacion = async (body) => { const idServicio = validar.validarId(body.idServicio); - const update = { idStatus: 6, fechaLiberacion: moment() }; + const update = { idStatus: 6, fechaLiberacion: moment().format() }; let correo = {}; return Servicio.findOne({ diff --git a/server/controller/Servicio/nuevo.js b/server/controller/Servicio/nuevo.js index 0ca68b6..ff47253 100644 --- a/server/controller/Servicio/nuevo.js +++ b/server/controller/Servicio/nuevo.js @@ -1,10 +1,12 @@ const { Op } = require('sequelize'); -const drive = require('../../helper/drive'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Programa = require('../../db/tablas/Programa'); -const Carrera = require('../../db/tablas/Carrera'); -const validar = require('../../helper/validar'); +const helperPath = '../../helper'; +const drive = require(`${helperPath}/drive`); +const validar = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Usuario = require(`${dbPath}/Usuario`); const nuevo = async (body, file) => { const idUsuario = validar.validarId(body.idUsuario); @@ -68,8 +70,8 @@ const nuevo = async (body, file) => { idCarrera, creditos, correo, - fechaInicio, - fechaFin, + fechaInicio: fechaInicio.format(), + fechaFin: fechaFin.format(), carpeta, cartaAceptacion: res, profesor, diff --git a/server/controller/Servicio/rechazarAceptacion.js b/server/controller/Servicio/rechazarAceptacion.js index 5b087df..99d7521 100644 --- a/server/controller/Servicio/rechazarAceptacion.js +++ b/server/controller/Servicio/rechazarAceptacion.js @@ -1,9 +1,11 @@ -const validar = require('../../helper/validar'); -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Programa = require('../../db/tablas/Programa'); +const helperPath = '../../helper'; +const correos = require(`${helperPath}/correos`); +const gmail = require(`${helperPath}/gmail`); +const validar = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Usuario = require(`${dbPath}/Usuario`); const cancelar = async (body) => { const idServicio = validar.validarId(body.idServicio); diff --git a/server/controller/Servicio/rechazarInforme.js b/server/controller/Servicio/rechazarInforme.js index ca00989..a36bf06 100644 --- a/server/controller/Servicio/rechazarInforme.js +++ b/server/controller/Servicio/rechazarInforme.js @@ -1,9 +1,11 @@ -const validar = require('../../helper/validar'); -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Programa = require('../../db/tablas/Programa'); +const helperPath = '../../helper'; +const correos = require(`${helperPath}/correos`); +const gmail = require(`${helperPath}/gmail`); +const validar = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Usuario = require(`${dbPath}/Usuario`); const cancelar = async (body) => { const idServicio = validar.validarId(body.idServicio); diff --git a/server/controller/Servicio/rechazarTermino.js b/server/controller/Servicio/rechazarTermino.js index a2cb982..c6fb084 100644 --- a/server/controller/Servicio/rechazarTermino.js +++ b/server/controller/Servicio/rechazarTermino.js @@ -1,9 +1,11 @@ -const validar = require('../../helper/validar'); -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Programa = require('../../db/tablas/Programa'); +const helperPath = '../../helper'; +const correos = require(`${helperPath}/correos`); +const gmail = require(`${helperPath}/gmail`); +const validar = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Usuario = require(`${dbPath}/Usuario`); const cancelar = async (body) => { const idServicio = validar.validarId(body.idServicio); diff --git a/server/controller/Servicio/registro.js b/server/controller/Servicio/registro.js index e3601d1..6f84032 100644 --- a/server/controller/Servicio/registro.js +++ b/server/controller/Servicio/registro.js @@ -1,9 +1,11 @@ -const validar = require('../../helper/validar'); -const encriptar = require('../../helper/encriptar'); -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); +const helperPath = '../../helper'; +const correos = require(`${helperPath}/correos`); +const encriptar = require(`${helperPath}/encriptar`); +const gmail = require(`${helperPath}/gmail`); +const validar = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Servicio = require(`${dbPath}/Servicio`); +const Usuario = require(`${dbPath}/Usuario`); const registro = async (body) => { const idServicio = validar.validarId(body.idServicio); diff --git a/server/controller/Servicio/registroValidado.js b/server/controller/Servicio/registroValidado.js index 6642178..f90c61e 100644 --- a/server/controller/Servicio/registroValidado.js +++ b/server/controller/Servicio/registroValidado.js @@ -1,9 +1,11 @@ -const validar = require('../../helper/validar'); -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Programa = require('../../db/tablas/Programa'); +const helperPath = '../../helper'; +const correos = require(`${helperPath}/correos`); +const gmail = require(`${helperPath}/gmail`); +const validar = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Usuario = require(`${dbPath}/Usuario`); const registroValidado = async (body) => { const idServicio = validar.validarId(body.idServicio); diff --git a/server/controller/Servicio/reporte.js b/server/controller/Servicio/reporte.js index 23a93fc..39e3dec 100644 --- a/server/controller/Servicio/reporte.js +++ b/server/controller/Servicio/reporte.js @@ -1,24 +1,26 @@ -const fs = require('fs'); const { convertArrayToCSV } = require('convert-array-to-csv'); const { Op } = require('sequelize'); -const validar = require('../../helper/validar'); -const Servicio = require('../../db/tablas/Servicio'); -const Programa = require('../../db/tablas/Programa'); -const Usuario = require('../../db/tablas/Usuario'); -const Carrera = require('../../db/tablas/Carrera'); -const Status = require('../../db/tablas/Status'); +const helperPath = '../../helper'; +const helper = require(`${helperPath}/helper`); +const { validarFecha } = require(`${helperPath}/validar`); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Status = require(`${dbPath}/Status`); +const Usuario = require(`${dbPath}/Usuario`); const reporte = async (body) => { - const inicio = validar.validarFecha(body.inicio); - const fin = validar.validarFecha(body.fin); - const path = `csv/reporte.csv`; + const inicio = validarFecha(body.inicio); + const fin = validarFecha(body.fin); + const path = `server/uploads/reporte.csv`; const data = []; return Servicio.findAll({ where: { [Op.and]: [ - { fechaInicio: { [Op.gte]: inicio } }, - { fechaInicio: { [Op.lte]: fin } }, + { fechaInicio: { [Op.gte]: inicio.format() } }, + { fechaInicio: { [Op.lte]: fin.format() } }, ], }, include: [ @@ -27,35 +29,33 @@ const reporte = async (body) => { { model: Carrera }, { model: Status }, ], - }).then((res) => { - for (let i = 0; i < res.length; i++) - data.push({ - numeroCuenta: res[i].Usuario.usuario, - nombre: res[i].Usuario.nombre, - licenciatura: res[i].Carrera.carrera, - correo: res[i].correo, - fechaInicio: validar.crearDDMMAAAA(res[i].fechaInicio), - fechaFin: validar.crearDDMMAAAA(res[i].fechaFin), - fechaLiberacion: validar.crearDDMMAAAA(res[i].fechaLiberacion), - institucion: res[i].Programa.institucion, - dependencia: res[i].Programa.dependencia, - programa: res[i].Programa.programa, - profesor: res[i].profesor, - clave: res[i].Programa.clavePrograma, - status: res[i].Status.status, + order: [['fechaInicio']], + }) + .then(async (res) => { + for (let i = 0; i < res.length; i++) + data.push({ + numeroCuenta: res[i].Usuario.usuario, + nombre: res[i].Usuario.nombre, + licenciatura: res[i].Carrera.carrera, + correo: res[i].correo, + fechaInicio: helper.crearDDMMAAAA(res[i].fechaInicio), + fechaFin: helper.crearDDMMAAAA(res[i].fechaFin), + fechaLiberacion: helper.crearDDMMAAAA(res[i].fechaLiberacion), + institucion: res[i].Programa.institucion, + dependencia: res[i].Programa.dependencia, + programa: res[i].Programa.programa, + profesor: res[i].profesor, + clave: res[i].Programa.clavePrograma, + status: res[i].Status.status, + }); + await helper.eliminarArchivo(path).catch((err) => { + console.log(err); }); - try { - fs.unlinkSync(path); - } catch (err) { - console.log(err); - } - fs.appendFile(path, convertArrayToCSV(data), (err) => { - if (err) throw new Error(err); + return helper.crearArchivo(path, convertArrayToCSV(data)); + }) + .then((res) => { + return path; }); - return { - message: `Se creo/actualizo correctamente el csv del reporte de servicios sociales.`, - }; - }); }; module.exports = reporte; diff --git a/server/controller/Servicio/serviciosAdmin.js b/server/controller/Servicio/serviciosAdmin.js index 369c98f..e834118 100644 --- a/server/controller/Servicio/serviciosAdmin.js +++ b/server/controller/Servicio/serviciosAdmin.js @@ -1,13 +1,14 @@ +const moment = require('moment'); const { Op } = require('sequelize'); const validar = require('../../helper/validar'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Carrera = require('../../db/tablas/Carrera'); -const Status = require('../../db/tablas/Status'); -const TipoUsuario = require('../../db/tablas/TipoUsuario'); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const Servicio = require(`${dbPath}/Servicio`); +const Status = require(`${dbPath}/Status`); +const Usuario = require(`${dbPath}/Usuario`); const serviciosAdmin = async (body) => { - const pagina = validar.validarId(body.pagina); + const pagina = validar.validarNumero(body.pagina, true); const where = body.idStatus ? { idStatus: validar.validarId(body.idStatus) } : {}; @@ -17,43 +18,43 @@ const serviciosAdmin = async (body) => { const numeroCuenta = body.numeroCuenta ? validar.validarNumeroCuenta(body.numeroCuenta) : ''; - const data = []; - return Servicio.findAll({ + return Servicio.findAndCountAll({ include: [ { model: Usuario, - include: { model: TipoUsuario }, where: { - usuario: { [Op.like]: `%${numeroCuenta}%` }, - nombre: { [Op.like]: `%${nombre}%` }, + [Op.and]: [ + { usuario: { [Op.like]: `%${numeroCuenta}%` } }, + { nombre: { [Op.like]: `%${nombre}%` } }, + ], }, }, { model: Carrera }, { model: Status, where }, ], order: [['updatedAt', 'DESC']], + limit: 25, + offset: 25 * (pagina - 1), }).then((res) => { - for (let i = pagina * 25 - 25; i < res.length && i < pagina * 25; i++) + let data = []; + + for (let i = 0; i < res.rows.length; i++) { data.push({ - idServicio: res[i].idServicio, - fechaInicio: res[i].fechaInicio, - fechaFin: res[i].fechaFin, - createdAt: res[i].createdAt, + idServicio: res.rows[i].idServicio, + fechaInicio: moment(res.rows[i].fechaInicio).format(), + fechaFin: moment(res.rows[i].fechaFin).format(), + createdAt: moment(res.rows[i].createdAt).format(), Usuario: { - idUsuario: res[i].Usuario.idUsuario, - usuario: res[i].Usuario.usuario, - nombre: res[i].Usuario.nombre, - TipoUsuario: res[i].Usuario.TipoUsuario, + idUsuario: res.rows[i].Usuario.idUsuario, + usuario: res.rows[i].Usuario.usuario, + nombre: res.rows[i].Usuario.nombre, }, - Carrera: res[i].Carrera, - Status: res[i].Status, + Carrera: res.rows[i].Carrera, + Status: res.rows[i].Status, }); - return { - registros: res.length, - faltantes: res.length - data.length - (pagina - 1) * 25, - servicios: data, - }; + } + return { count: res.count, serviciosAdmin: data }; }); }; diff --git a/server/controller/Servicio/serviciosResponsable.js b/server/controller/Servicio/serviciosResponsable.js index 6ae73c8..744099c 100644 --- a/server/controller/Servicio/serviciosResponsable.js +++ b/server/controller/Servicio/serviciosResponsable.js @@ -1,14 +1,15 @@ +const moment = require('moment'); const { Op } = require('sequelize'); const validar = require('../../helper/validar'); -const Servicio = require('../../db/tablas/Servicio'); -const Usuario = require('../../db/tablas/Usuario'); -const Carrera = require('../../db/tablas/Carrera'); -const Status = require('../../db/tablas/Status'); -const TipoUsuario = require('../../db/tablas/TipoUsuario'); -const Programa = require('../../db/tablas/Programa'); +const dbPath = '../../db/tablas'; +const Carrera = require(`${dbPath}/Carrera`); +const Programa = require(`${dbPath}/Programa`); +const Servicio = require(`${dbPath}/Servicio`); +const Status = require(`${dbPath}/Status`); +const Usuario = require(`${dbPath}/Usuario`); const serviciosResponsable = async (body) => { - const pagina = validar.validarId(body.pagina); + const pagina = validar.validarNumero(body.pagina, true); const idUsuario = validar.validarId(body.idUsuario); const where = body.idStatus ? { idStatus: validar.validarId(body.idStatus) } @@ -20,52 +21,52 @@ const serviciosResponsable = async (body) => { const numeroCuenta = body.numeroCuenta ? validar.validarNumeroCuenta(body.numeroCuenta) : ''; - const data = []; return Usuario.findOne({ where: { idUsuario } }) .then((res) => { if (!res) throw new Error('No existe este usuario.'); if (res.idTipoUsuario !== 2) throw new Error('No es un usuario tipo responsable.'); - return Servicio.findAll({ + return Servicio.findAndCountAll({ include: [ { model: Programa, where: { idUsuario } }, { model: Usuario, - include: { model: TipoUsuario }, where: { - usuario: { [Op.like]: `%${numeroCuenta}%` }, - nombre: { [Op.like]: `%${nombre}%` }, + [Op.and]: [ + { usuario: { [Op.like]: `%${numeroCuenta}%` } }, + { nombre: { [Op.like]: `%${nombre}%` } }, + ], }, }, { model: Carrera }, { model: Status, where }, ], order: [['updatedAt', 'DESC']], + limit: 25, + offset: 25 * (pagina - 1), }); }) .then((res) => { - for (let i = pagina * 25 - 25; i < res.length && i < pagina * 25; i++) + let data = []; + + for (let i = 0; i < res.rows.length; i++) { data.push({ - idServicio: res[i].idServicio, - fechaInicio: res[i].fechaInicio, - fechaFin: res[i].fechaFin, - cartaTermino: res[i].cartaTermino, - idCuestionarioPrograma: res[i].idCuestionarioPrograma, + idServicio: res.rows[i].idServicio, + fechaInicio: moment(res.rows[i].fechaInicio).format(), + fechaFin: moment(res.rows[i].fechaFin).format(), + cartaTermino: res.rows[i].cartaTermino, + idCuestionarioPrograma: res.rows[i].idCuestionarioPrograma, Usuario: { - idUsuario: res[i].Usuario.idUsuario, - usuario: res[i].Usuario.usuario, - nombre: res[i].Usuario.nombre, - TipoUsuario: res[i].Usuario.TipoUsuario, + idUsuario: res.rows[i].Usuario.idUsuario, + usuario: res.rows[i].Usuario.usuario, + nombre: res.rows[i].Usuario.nombre, }, - Carrera: res[i].Carrera, - Status: res[i].Status, + Carrera: res.rows[i].Carrera, + Status: res.rows[i].Status, }); - return { - registros: res.length, - faltantes: res.length - data.length - (pagina - 1) * 25, - servicios: data, - }; + } + return { count: res.count, serviciosResponsable: data }; }); }; diff --git a/server/controller/Servicio/update.js b/server/controller/Servicio/update.js index 5d96c7c..32d7e3a 100644 --- a/server/controller/Servicio/update.js +++ b/server/controller/Servicio/update.js @@ -1,5 +1,6 @@ -const drive = require('../../helper/drive'); -const validar = require('../../helper/validar'); +const helperPath = '../../helper'; +const drive = require(`${helperPath}/drive`); +const validar = require(`${helperPath}/validar`); const Servicio = require('../../db/tablas/Servicio'); const update = async (body, files) => { @@ -51,7 +52,7 @@ const update = async (body, files) => { ); if (body.telefono) dataUpdate.telefono = validar.validarNumero(body.telefono, 15); - if (validar.isObjectEmpty(dataUpdate)) + if (validar.validarObjetoVacio(dataUpdate)) throw new Error( 'No se envio nada para actualizar este Servicio Social' ); diff --git a/server/controller/Usuario/escolares.js b/server/controller/Usuario/escolares.js index 25442e3..78a15b6 100644 --- a/server/controller/Usuario/escolares.js +++ b/server/controller/Usuario/escolares.js @@ -1,8 +1,9 @@ require('../../config/config'); -const validar = require('../../helper/validar'); const axios = require('axios'); -const Usuario = require('../../db/tablas/Usuario'); -const Carrera = require('../../db/tablas/Carrera'); +const { validarNumeroCuenta } = require('../../helper/validar'); +const dbPath = '../../db/tablas'; +const Usuario = require(`${dbPath}/Usuario`); +const Carrera = require(`${dbPath}/Carrera`); const creditosCarreras = [ { carrera: 'LIC. EN ACTUARIA', creditos: 70 }, { carrera: 'LIC. EN ARQUITECTURA', creditos: 70 }, @@ -32,7 +33,7 @@ const creditosCarreras = [ ]; const escolares = async (body) => { - const numeroCuenta = validar.validarNumeroCuenta(body.numeroCuenta); + const numeroCuenta = validarNumeroCuenta(body.numeroCuenta); let alumno; return axios({ @@ -63,7 +64,6 @@ const escolares = async (body) => { alumno.nombre = alumno.nombre.replace('Ã', 'Ñ'); alumno.nombre = alumno.nombre.replace('‘', ''); } - return Carrera.findOne({ where: { carrera: alumno.carrera } }); }) .then((res) => { diff --git a/server/controller/Usuario/login.js b/server/controller/Usuario/login.js index 3627937..9eca3dc 100644 --- a/server/controller/Usuario/login.js +++ b/server/controller/Usuario/login.js @@ -1,14 +1,15 @@ -const encriptar = require('../../helper/encriptar'); const validar = require('../../helper/validar'); const { crearToken } = require('../../middleware/autentificacion'); -const Usuario = require('../../db/tablas/Usuario'); -const TipoUsuario = require('../../db/tablas/TipoUsuario'); +const { comparar } = require('../../helper/encriptar'); +const dbPath = '../../db/tablas'; +const Usuario = require(`${dbPath}/Usuario`); +const TipoUsuario = require(`${dbPath}/TipoUsuario`); const login = async (body) => { const usuario = validar.validar(body.usuario, 'El usuario', 60); const password = validar.validarAlfanumerico( body.password, - 'El password', + 'La contraseña', 20 ); @@ -18,7 +19,7 @@ const login = async (body) => { }).then((res) => { if (!res) throw new Error('No existe este usuario.'); if (!res.activo) throw new Error('Este usuario no esta activo.'); - if (encriptar.comparar(password, res.password)) { + if (comparar(password, res.password)) { delete res.dataValues.password; delete res.dataValues.activo; return { diff --git a/server/controller/Usuario/newPasswordAlumno.js b/server/controller/Usuario/newPasswordAlumno.js index ddf4088..932aa1e 100644 --- a/server/controller/Usuario/newPasswordAlumno.js +++ b/server/controller/Usuario/newPasswordAlumno.js @@ -1,12 +1,14 @@ -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const encriptar = require('../../helper/encriptar'); -const validar = require('../../helper/validar'); -const Usuario = require('../../db/tablas/Usuario'); -const Servicio = require('../../db/tablas/Servicio'); +const helperPath = '../../helper'; +const { validarId } = require(`${helperPath}/validar`); +const gmail = require(`${helperPath}/gmail`); +const correos = require(`${helperPath}/correos`); +const encriptar = require(`${helperPath}/encriptar`); +const dbPath = '../../db/tablas'; +const Usuario = require(`${dbPath}/Usuario`); +const Servicio = require(`${dbPath}/Servicio`); const newPasswordAlumno = async (body) => { - const idServicio = validar.validarId(body.idServicio); + const idServicio = validarId(body.idServicio); const password = encriptar.generarPassword(); let idUsuario; let correo = {}; diff --git a/server/controller/Usuario/newPasswordResponsable.js b/server/controller/Usuario/newPasswordResponsable.js index 75c4b7b..2a7a86c 100644 --- a/server/controller/Usuario/newPasswordResponsable.js +++ b/server/controller/Usuario/newPasswordResponsable.js @@ -1,11 +1,12 @@ -const gmail = require('../../helper/gmail'); -const correos = require('../../helper/correos'); -const encriptar = require('../../helper/encriptar'); -const validar = require('../../helper/validar'); +const helperPath = '../../helper'; +const { validarId } = require(`${helperPath}/validar`); +const gmail = require(`${helperPath}/gmail`); +const correos = require(`${helperPath}/correos`); +const encriptar = require(`${helperPath}/encriptar`); const Usuario = require('../../db/tablas/Usuario'); const newPasswordResponsable = async (body) => { - const idUsuario = await validar.validarId(body.idUsuario); + const idUsuario = await validarId(body.idUsuario); const password = encriptar.generarPassword(); let correo = {}; diff --git a/server/controller/Usuario/responsable.js b/server/controller/Usuario/responsable.js index f1e0469..3c304b3 100644 --- a/server/controller/Usuario/responsable.js +++ b/server/controller/Usuario/responsable.js @@ -1,36 +1,15 @@ -const { Op } = require('sequelize'); -const validar = require('../../helper/validar'); +const { validarId } = require('../../helper/validar'); const Usuario = require('../../db/tablas/Usuario'); -const TipoUsuario = require('../../db/tablas/TipoUsuario'); const responsable = async (body) => { - const pagina = validar.validarId(body.pagina); - const nombre = body.nombre - ? validar.validarTexto(body.nombre, 'El nombre', 60) - : ''; - const correo = body.correo - ? validar.validar(body.correo, 'El correo', 1000) - : ''; - const data = []; + const idUsuario = validarId(body.idUsuario); - return Usuario.findAll({ - where: { - usuario: { [Op.like]: `%${correo}%` }, - nombre: { [Op.like]: `%${nombre}%` }, - idTipoUsuario: 2, - }, - include: [{ model: TipoUsuario }], + return Usuario.findOne({ + where: { idUsuario }, }).then((res) => { - for (let i = pagina * 25 - 25; i < res.length && i < pagina * 25; i++) { - delete res[i].dataValues.password; - delete res[i].dataValues.idTipoUsuario; - data.push(res[i]); - } - return { - registros: res.length, - faltantes: res.length - data.length - (pagina - 1) * 25, - servicios: data, - }; + delete res.dataValues.password; + delete res.dataValues.idTipoUsuario; + return res; }); }; diff --git a/server/controller/Usuario/responsableUpdate.js b/server/controller/Usuario/responsableUpdate.js index cbc6535..02250c0 100644 --- a/server/controller/Usuario/responsableUpdate.js +++ b/server/controller/Usuario/responsableUpdate.js @@ -11,7 +11,7 @@ const responsableUpdate = async (body) => { if (!res) throw new Error('No existe este responsable en la base de datos.'); if (res.idTipoUsuario !== 2) - throw new Error('No es un usuaior de tipo responasble.'); + throw new Error('Este usuario no es un responsable de programa.'); if (body.correo) { const yaUsado = await Usuario.findOne({ where: { usuario: body.correo, idUsuario: { [Op.not]: idUsuario } }, @@ -26,7 +26,7 @@ const responsableUpdate = async (body) => { if (body.nombre) dataUpdate.nombre = validar.validarTexto(body.nombre, 'el nombre', 70); - if (validar.isObjectEmpty(dataUpdate)) + if (validar.validarObjetoVacio(dataUpdate)) throw new Error('No se a envio nada para actualizar.'); return Usuario.update(dataUpdate, { where: { idUsuario } }); }) diff --git a/server/controller/Usuario/responsables.js b/server/controller/Usuario/responsables.js new file mode 100644 index 0000000..64f9802 --- /dev/null +++ b/server/controller/Usuario/responsables.js @@ -0,0 +1,33 @@ +const { Op } = require('sequelize'); +const validar = require('../../helper/validar'); +const Usuario = require('../../db/tablas/Usuario'); + +const responsables = async (body) => { + const pagina = validar.validarNumero(body.pagina, true); + const nombre = body.nombre + ? validar.validarTexto(body.nombre, 'El nombre', 60) + : ''; + const correo = body.correo + ? validar.validar(body.correo, 'El correo', 1000) + : ''; + + return Usuario.findAndCountAll({ + where: { + [Op.and]: [ + { usuario: { [Op.like]: `%${correo}%` } }, + { nombre: { [Op.like]: `%${nombre}%` } }, + { idTipoUsuario: 2 }, + ], + }, + limit: 25, + offset: 25 * (pagina - 1), + }).then((res) => { + for (let i = 0; i < res.rows.length; i++) { + delete res.rows[i].dataValues.password; + delete res.rows[i].dataValues.idTipoUsuario; + } + return { count: res.count, responsables: res.rows }; + }); +}; + +module.exports = responsables; diff --git a/server/db/data-fake.js b/server/db/data-fake.js index c6bcfbf..ea5fe92 100644 --- a/server/db/data-fake.js +++ b/server/db/data-fake.js @@ -3,75 +3,68 @@ const encriptar = require('../helper/encriptar'); const Usuario = require('./tablas/Usuario'); const Programa = require('./tablas/Programa'); -const correos = [ - 'lemuel@acatlan.unam.mx', - 'araceliperezpalma@gmail.com', - 'nol_123@hotmail.es', - 'adrianaroquedelangel@gmail.com', - 'lucel21@hotmail.com', - 'cidwa1@acatlan.unam.mx', - // 'dscad@acatlan.unam.mx', - '417095552@pcpuma.acatlan.unam.mx', - // 'Jefaturassbt@acatlan.unam.mx', - // 'tramites.ss@acatlan.unam.mx', -]; -const nombres = [ - 'Lemuel', - 'Araceli', - 'Noli', - 'Adriana', - 'Lulu', - 'Cidwa', - // 'dscad', - 'Noli Acatlan', - // 'Jefatura', - // 'Tramites', -]; +const correosExt = ['lemuel@acatlan.unam.mx']; +const correosInt = ['cidwa1@pcpuma.acatlan.unam.mx']; +const nombresExt = ['Lemuel Rosas']; +const nombresInt = ['Lemuel Márquez']; -const dataResponsable = async () => { - console.log('\nPaso 1) Instalando Responsables falsos.'.bold.blue); - for (let i = 0; i < correos.length; i++) { +const dataResponsableExt = async () => { + console.log('\nPaso 1) Instalando Responsables Externos falsos.'.bold.blue); + for (let i = 0; i < correosExt.length; i++) { await Usuario.create({ - usuario: correos[i], + usuario: correosExt[i], idTipoUsuario: 2, - nombre: nombres[i], + nombre: nombresExt[i], password: encriptar.encriptar('qwertyui'), activo: true, }).then(async (res) => { - console.log(`Se inserto el responsable ${nombres[i]}`.magenta); - if (i < 5) { - for (let j = 1; j <= 5; j++) { - await Programa.create({ - institucion: `Institucion Falsa ${i + 1}`, - dependencia: `Dependencia Falsa ${j - i + 1}`, - programa: `Programa Falso ${j}`, - clavePrograma: `2020-${j}/${i + j + 1}-${i + j + 1}`, - idUsuario: res.dataValues.idUsuario, - }); - console.log( - `Se inserto el programa ${j} del responsable ${i + 1}`.magenta - ); - } - } else { + console.log(`Se inserto al responsable ${nombresExt[i]}`.magenta); + for (let j = 1; j <= 5; j++) { await Programa.create({ - institucion: `UNAM`, - dependencia: `FES Acatlán`, - programa: `Acatlán Contigo`, - clavePrograma: `2020-12/20-91`, - acatlan: true, + institucion: `Institucion Falsa ${i + 1}`, + dependencia: `Dependencia Falsa ${j - i + 1}`, + programa: `Programa Falso ${j}`, + clavePrograma: `2020-${j}/${i + j + 1}-${i + j + 1}`, idUsuario: res.dataValues.idUsuario, }); console.log( - `Se inserto el programa Acatlan Contigo del responsable ${i + 1}` - .magenta + `Se inserto el programa ${j} del responsable ${i + 1}`.magenta ); } }); } }; +const dataResponsableInt = async () => { + console.log('\nPaso 1) Instalando Responsables Internos falsos.'.bold.blue); + for (let i = 0; i < correosInt.length; i++) { + await Usuario.create({ + usuario: correosInt[i], + idTipoUsuario: 2, + nombre: nombresInt[i], + password: encriptar.encriptar('qwertyui'), + activo: true, + }).then(async (res) => { + console.log(`Se inserto sl responsable ${nombresInt[i]}`.magenta); + await Programa.create({ + institucion: `UNAM`, + dependencia: `FES Acatlán`, + programa: `Acatlán Contigo`, + clavePrograma: `2021-12/20-91`, + acatlan: true, + idUsuario: res.dataValues.idUsuario, + }); + console.log( + `Se inserto el programa Acatlan Contigo del responsable ${i + 1}` + .magenta + ); + }); + } +}; + const exec = async () => { - await dataResponsable(); + await dataResponsableExt(); + await dataResponsableInt(); console.log( '\nSe ha instalado exitosamente la informacion falsa.\n'.underline.bold .green diff --git a/server/db/install.js b/server/db/install.js index b07451c..6c9ef67 100644 --- a/server/db/install.js +++ b/server/db/install.js @@ -80,7 +80,7 @@ const sync = async () => { }; const dataTipoUsuario = async () => { - const data = ['admin', 'responsable', 'alumno', 'caso especial']; + const data = ['admin', 'responsable', 'alumno', 'casoEspecial']; console.log('\nPaso 3) Instalando data de TipoUsuario.'.bold.blue); for (let i = 0; i < data.length; i++) { diff --git a/server/helper/correos.js b/server/helper/correos.js index c517b52..1c4d588 100644 --- a/server/helper/correos.js +++ b/server/helper/correos.js @@ -137,9 +137,9 @@ const enviarSec = (secreto, usuariomail, nombre) => { subject: `Estimado responsable de programa de servicio social: ${nombre}`, msj: `Como ya se les había informado, en nuestra Facultad estamos en un proceso de actualización administrativa que implica la puesta en marcha de un nuevo sistema interno de servicio social en el cual estará el expediente electrónico del alumno y su seguimiento con respecto a estos trámites. La dirección electrónica de dicho sistema es https://iris.acatlan.unam.mx y su usuario y contraseña son: -Usuario para ingresar = ${usuariomail} +Usuario: ${usuariomail} -Contraseña = ${secreto} +Contraseña: ${secreto} Le pedimos sea cuidadoso de sus claves de acceso ya que con ellos tiene la facultad para registrar el trámite de inicio y término de servicio social de nuestros alumnos, lo que genera un riesgo para malas prácticas si comparte sus datos con otras personas. diff --git a/server/helper/diario.js b/server/helper/diario.js index a9c27e6..cb3fe5b 100644 --- a/server/helper/diario.js +++ b/server/helper/diario.js @@ -1,37 +1,38 @@ const moment = require('moment'); +const gmail = require('./gmail'); +const correos = require('./correos'); const Servicio = require('../db/tablas/Servicio'); const Usuario = require('../db/tablas/Usuario'); const Programa = require('../db/tablas/Programa'); -const gmail = require('./gmail'); -const correos = require('./correos'); +const now = moment(); const diario = async () => { - let mensaje = ''; - const now = moment(); - const servicios = await Servicio.findAll({ + return Servicio.findAll({ where: { idStatus: 3 }, include: [ { model: Usuario }, { model: Programa, include: [{ model: Usuario }] }, ], - }); + }).then(async (servicios) => { + let mensaje = ''; - for (let i = 0; i < servicios.length; i++) { - let fechaFin = moment(servicios[i].fechaFin); - let fechaFinDate = fechaFin.dayOfYear(); + for (let i = 0; i < servicios.length; i++) { + let fechaFin = moment(servicios[i].fechaFin); + let fechaFinDate = fechaFin.dayOfYear(); - if (fechaFin.year() > now.year()) - fechaFinDate += 365 * (fechaFin.year() - now.year()); - if (fechaFin.year() < now.year()) - fechaFinDate -= 365 * (now.year() - fechaFin.year()); - if (fechaFinDate - now.dayOfYear() === 7) { - let correoAlumno = correos.avisoTerminoAlumno( - servicios[i].Usuario.nombre - ); - let correoResponsable = correos.avisoTerminoResponsable( - servicios[i].Usuario.nombre - ); + if (fechaFin.year() > now.year()) + fechaFinDate += 365 * (fechaFin.year() - now.year()); + if (fechaFin.year() < now.year()) + fechaFinDate -= 365 * (now.year() - fechaFin.year()); + if (fechaFinDate - now.dayOfYear() === 7) { + let correoAlumno = correos.avisoTerminoAlumno( + servicios[i].Usuario.nombre + ); + let correoResponsable = correos.avisoTerminoResponsable( + servicios[i].Usuario.nombre + ); +<<<<<<< HEAD mensaje += `Se envio correo al alumno ${servicios[i].Usuario.usuario} con id ${servicios[i].Usuario.idUsuario} al correo ${servicios[i].correo} y al responsable ${servicios[i].Programa.Usuario.nombre} con id ${servicios[i].Programa.Usuario.idUsuario} y correo ${servicios[i].Programa.Usuario.usuario}\n`; await gmail(correoAlumno.subject, servicios[i].correo, correoAlumno.msj); await gmail( @@ -49,6 +50,29 @@ const diario = async () => { } await gmail('Reporte función diario', 'lemuel@acatlan.unam.mx', mensaje); +======= + mensaje += `Se envio correo al alumno ${servicios[i].Usuario.usuario} con id ${servicios[i].Usuario.idUsuario} al correo ${servicios[i].correo} y al responsable ${servicios[i].Programa.Usuario.nombre} con id ${servicios[i].Programa.Usuario.idUsuario} y correo ${servicios[i].Programa.Usuario.usuario}\n\n`; + await gmail( + correoAlumno.subject, + servicios[i].correo, + correoAlumno.msj + ); + await gmail( + correoResponsable.subject, + servicios[i].Programa.Usuario.usuario, + correoResponsable.msj + ); + } else if (fechaFinDate - now.dayOfYear() <= -1) { + mensaje += `El servicio con id ${servicios[i].idServicio} del alumno ${servicios[i].Usuario.usuario} con id ${servicios[i].Usuario.idUsuario} paso al status 4\n\n`; + await Servicio.update( + { idStatus: 4 }, + { where: { idServicio: servicios[i].idServicio } } + ); + } + } + return gmail('Reporte función diario', 'lemuel@acatlan.unam.mx', mensaje); + }); +>>>>>>> d469b1cdc632486c7bd7cb62b183dc917bcf0c93 }; diario(); diff --git a/server/helper/drive.js b/server/helper/drive.js index bb42f82..3c3cf84 100644 --- a/server/helper/drive.js +++ b/server/helper/drive.js @@ -133,44 +133,40 @@ const folder = async (numeroCuenta) => { let pageToken = ''; do { - let response = await list(pageToken); - let files = response.files; + let res = await list(pageToken); - for (let i = 0; i < files.length; i++) + for (let i = 0; i < res.files.length; i++) if ( - files[i].name === numeroCuenta && - files[i].mimeType === 'application/vnd.google-apps.folder' + res.files[i].name === numeroCuenta && + res.files[i].mimeType === 'application/vnd.google-apps.folder' ) - return files[i].id; - pageToken = ''; - if (response.nextPageToken) pageToken = response.nextPageToken; + return res.files[i].id; + pageToken = res.nextPageToken ? res.nextPageToken : ''; } while (pageToken); return mkDir(numeroCuenta); }; const borrarTodo = () => { return list().then(async (res) => { - console.log(res); + console.log(res.files); // for (let i = 0; i < res.files.length; i++) - // if (res.files[i].name !== 'Babyhelon') await deleteFile(res.files[i].id); + // if (res.files[i].id !== process.env.CARPETA) + // await deleteFile(res.files[i].id); }); }; // borrarTodo(); const archivosFicheros = async () => { - let pageToken = ''; const pdf = []; const carpetas = []; + let pageToken = ''; do { let response = await list(pageToken); - console.log(response); - if (response.nextPageToken) pageToken = response.nextPageToken; - else pageToken = ''; + pageToken = response.nextPageToken ? response.nextPageToken : ''; } while (pageToken); - return { pdf, carpetas }; }; diff --git a/server/helper/helper.js b/server/helper/helper.js new file mode 100644 index 0000000..f269aa5 --- /dev/null +++ b/server/helper/helper.js @@ -0,0 +1,37 @@ +const fs = require('fs'); +const moment = require('moment'); + +const crearDDMMAAAA = (date) => { + const fechaMoment = moment(date); + let ddmmaaaa = ''; + + if (fechaMoment.isValid()) + ddmmaaaa = `${fechaMoment.date()}/${ + fechaMoment.month() + 1 + }/${fechaMoment.year()}`; + return ddmmaaaa; +}; + +const eliminarArchivo = (path) => { + return new Promise((resolve, reject) => { + fs.unlink(path, (err) => { + if (err) reject(err); + resolve({ message: 'Se elimino el archivo correctamente.' }); + }); + }); +}; + +const crearArchivo = (path, texto) => { + return new Promise((resolve, reject) => { + fs.appendFile(path, texto, (err) => { + if (err) reject(err); + resolve({ message: 'Se creo el archivo correctamente.' }); + }); + }); +}; + +module.exports = { + crearDDMMAAAA, + eliminarArchivo, + crearArchivo, +}; diff --git a/server/helper/validar.js b/server/helper/validar.js index bbe0708..54ca01b 100644 --- a/server/helper/validar.js +++ b/server/helper/validar.js @@ -1,3 +1,4 @@ +// const fs = require('fs'); const moment = require('moment'); const validator = require('validator'); const Servicio = require('../db/tablas/Servicio'); @@ -104,7 +105,7 @@ const validarFecha = (fecha) => { return fechaMoment; }; -const validarNumero = (numero, length) => { +const validarNumero = (numero, makeNumber = false, length) => { let campo = 'El numero'; noHay(numero, campo); @@ -114,6 +115,7 @@ const validarNumero = (numero, length) => { (length && numero.length > length) ) noValido(campo); + if (makeNumber) return Number(numero); return numero; }; @@ -142,24 +144,13 @@ const validarAccesibilidad = (usuariosValidos = [], idTipoUsuario) => { throw new Error('Este usuario no tiene permitido usar esta linea de la API.'); }; -const isObjectEmpty = (obj) => { +const validarObjetoVacio = (obj) => { for (let key in obj) { if (obj.hasOwnProperty(key)) return false; } return true; }; -const crearDDMMAAAA = (date) => { - const fechaMoment = moment(date); - let ddmmaaaa = ''; - - if (fechaMoment.isValid()) - ddmmaaaa = `${fechaMoment.date()}/${ - fechaMoment.month() + 1 - }/${fechaMoment.year()}`; - return ddmmaaaa; -}; - module.exports = { validar, noValido, @@ -174,6 +165,5 @@ module.exports = { validarNumero, validarPreTermino, validarAccesibilidad, - isObjectEmpty, - crearDDMMAAAA, + validarObjetoVacio, }; diff --git a/server/middleware/autentificacion.js b/server/middleware/autentificacion.js index 8f610d9..bc99d03 100644 --- a/server/middleware/autentificacion.js +++ b/server/middleware/autentificacion.js @@ -6,13 +6,20 @@ const verificaToken = (req, res, next) => { if (!token) return res.status(400).json({ - message: 'No hay token', + message: 'No se envio el token.', }); jwt.verify(token, process.env.KEY, (err, decoded) => { - if (err) - return res.status(401).json({ - message: err.message, - }); + if (err) { + let message = ''; + + if (err.message === 'invalid signature') + message = 'El token no es valido. Inicia sesión de nuevo.'; + if (err.message === 'jwt expired') + message = 'El token expiro. Inicia sesión de nuevo.'; + if (err.message === 'jwt malformed') + message = 'Hubo un problema con el token. Inicia sesión de nuevo.'; + return res.status(401).json({ message, err: 'token error' }); + } req.decoded = decoded; next(); }); @@ -20,7 +27,7 @@ const verificaToken = (req, res, next) => { const crearToken = (info) => { return jwt.sign({ info }, process.env.KEY, { - expiresIn: process.env.CADUCIDAD_TOKEN, + expiresIn: Number(process.env.CADUCIDAD_TOKEN), }); }; diff --git a/server/routes/CasoEspecial.js b/server/routes/CasoEspecial.js index ece6979..b393b7b 100644 --- a/server/routes/CasoEspecial.js +++ b/server/routes/CasoEspecial.js @@ -1,20 +1,18 @@ -const fs = require('fs'); const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'server/uploads' }); const { verificaToken } = require('../middleware/autentificacion'); +const { eliminarArchivo } = require('../helper/helper'); const route = '/caso_especial'; -const nuevo = require('../controller/CasoEspecial/nuevo'); -const serviciosEspeciales = require('../controller/CasoEspecial/serviciosEspeciales'); -const casoEspecial = require('../controller/CasoEspecial/casoEspecial'); -const liberacion = require('../controller/CasoEspecial/liberacion'); -const update = require('../controller/CasoEspecial/update'); - -const eliminarArchivo = (filename) => { - fs.unlinkSync(`./server/uploads/${filename}`); -}; +const controllerPath = '../controller/CasoEspecial'; +const casoEspecial = require(`${controllerPath}/casoEspecial`); +const liberacion = require(`${controllerPath}/liberacion`); +const nuevo = require(`${controllerPath}/nuevo`); +const serviciosEspeciales = require(`${controllerPath}/serviciosEspeciales`); +const update = require(`${controllerPath}/update`); +// POST app.post( `${route}/nuevo`, // verificaToken, @@ -31,16 +29,7 @@ app.post( } ); -app.get(`${route}/servicios_especiales`, verificaToken, (req, res) => { - return serviciosEspeciales(req.query) - .then((data) => { - res.status(200).json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - +// GET app.get(`${route}`, verificaToken, (req, res) => { return casoEspecial(req.query) .then((data) => { @@ -51,6 +40,17 @@ app.get(`${route}`, verificaToken, (req, res) => { }); }); +app.get(`${route}/servicios_especiales`, verificaToken, (req, res) => { + return serviciosEspeciales(req.query) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + +// PUT app.put(`${route}/liberacion`, verificaToken, (req, res) => { return liberacion(req.body) .then((data) => { diff --git a/server/routes/CuestionarioAlumno.js b/server/routes/CuestionarioAlumno.js index 960df15..764bb4a 100644 --- a/server/routes/CuestionarioAlumno.js +++ b/server/routes/CuestionarioAlumno.js @@ -2,9 +2,11 @@ const express = require('express'); const app = express(); const { verificaToken } = require('../middleware/autentificacion'); const route = '/cuestionario_alumno'; -const nuevo = require('../controller/CuestionarioAlumno/nuevo'); -const get = require('../controller/CuestionarioAlumno/get'); +const controllerPath = '../controller/CuestionarioAlumno'; +const get = require(`${controllerPath}/get`); +const nuevo = require(`${controllerPath}/nuevo`); +// POST app.post(`${route}`, verificaToken, (req, res) => { return nuevo(req.body) .then((data) => { @@ -15,10 +17,11 @@ app.post(`${route}`, verificaToken, (req, res) => { }); }); +// GET app.get(`${route}`, verificaToken, (req, res) => { return get(req.query) .then((data) => { - res.status(200).json(data); + res.download(data); }) .catch((err) => { res.status(400).json({ message: err.message }); diff --git a/server/routes/CuestionarioPrograma.js b/server/routes/CuestionarioPrograma.js index 4e0a691..7183d54 100644 --- a/server/routes/CuestionarioPrograma.js +++ b/server/routes/CuestionarioPrograma.js @@ -2,9 +2,11 @@ const express = require('express'); const app = express(); const { verificaToken } = require('../middleware/autentificacion'); const route = '/cuestionario_programa'; -const nuevo = require('../controller/CuestionarioPrograma/nuevo'); -const get = require('../controller/CuestionarioPrograma/get'); +const controllerPath = '../controller/CuestionarioPrograma'; +const get = require(`${controllerPath}/get`); +const nuevo = require(`${controllerPath}/nuevo`); +// POST app.post(`${route}`, verificaToken, (req, res) => { return nuevo(req.body) .then((data) => { @@ -15,10 +17,11 @@ app.post(`${route}`, verificaToken, (req, res) => { }); }); +// GET app.get(`${route}`, verificaToken, (req, res) => { return get(req.query) .then((data) => { - res.status(200).json(data); + res.download(data); }) .catch((err) => { res.status(400).json({ message: err.message }); diff --git a/server/routes/Programa.js b/server/routes/Programa.js index 5316452..fbce79a 100644 --- a/server/routes/Programa.js +++ b/server/routes/Programa.js @@ -4,30 +4,13 @@ const app = express(); const upload = multer({ dest: 'server/uploads' }); const { verificaToken } = require('../middleware/autentificacion'); const route = '/programa'; -const programasResponsable = require('../controller/Programa/programasResponsable'); -const programasAdmin = require('../controller/Programa/programasAdmin'); -const cargaMasiva = require('../controller/Programa/cargaMasiva'); - -app.get(`${route}/programas_responsable`, verificaToken, (req, res) => { - return programasResponsable(req.query) - .then((data) => { - res.status(200).json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.get(`${route}/programas_admin`, verificaToken, (req, res) => { - return programasAdmin(req.query) - .then((data) => { - res.status(200).json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); +const controllerPath = '../controller/Programa'; +const cargaMasiva = require(`${controllerPath}/cargaMasiva`); +const programasAdmin = require(`${controllerPath}/programasAdmin`); +const programasResponsable = require(`${controllerPath}/programasResponsable`); +const reasignarProgramas = require(`${controllerPath}/reasignarProgramas`); +// POST app.post( `${route}/carga_masiva`, // verificaToken, @@ -48,4 +31,36 @@ app.post( } ); +// PUT +app.put(`${route}/reasignar_programas`, verificaToken, (req, res) => { + return reasignarProgramas(req.body) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + +// GET +app.get(`${route}/programas_admin`, verificaToken, (req, res) => { + return programasAdmin(req.query) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + +app.get(`${route}/programas_responsable`, verificaToken, (req, res) => { + return programasResponsable(req.query) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + module.exports = app; diff --git a/server/routes/Servicio.js b/server/routes/Servicio.js index a9aa3f4..217155b 100644 --- a/server/routes/Servicio.js +++ b/server/routes/Servicio.js @@ -1,33 +1,31 @@ -const fs = require('fs'); const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'server/uploads' }); const { verificaToken } = require('../middleware/autentificacion'); +const { eliminarArchivo } = require('../helper/helper'); const route = '/servicio'; -const nuevo = require('../controller/Servicio/nuevo'); -const serviciosAdmin = require('../controller/Servicio/serviciosAdmin'); -const serviciosResponsable = require('../controller/Servicio/serviciosResponsable'); -const admin = require('../controller/Servicio/admin'); -const alumno = require('../controller/Servicio/alumno'); -const cancelar = require('../controller/Servicio/cancelar'); -const registro = require('../controller/Servicio/registro'); -const registroValidado = require('../controller/Servicio/registroValidado'); -const cartaAceptacion = require('../controller/Servicio/cartaAceptacion'); -const cartaTermino = require('../controller/Servicio/cartaTermino'); -const informeGlobal = require('../controller/Servicio/informeGlobal'); -const liberacion = require('../controller/Servicio/liberacion'); -const rechazarAceptacion = require('../controller/Servicio/rechazarAceptacion'); -const rechazarTermino = require('../controller/Servicio/rechazarTermino'); -const rechazarInforme = require('../controller/Servicio/rechazarInforme'); -const update = require('../controller/Servicio/update'); -const reporte = require('../controller/Servicio/reporte'); -const gustavoBazPrada = require('../controller/Servicio/gustavoBazPrada'); - -const eliminarArchivo = (filename) => { - fs.unlinkSync(`./server/uploads/${filename}`); -}; +const controllerPath = '../controller/Servicio'; +const nuevo = require(`${controllerPath}/nuevo`); +const serviciosAdmin = require(`${controllerPath}/serviciosAdmin`); +const serviciosResponsable = require(`${controllerPath}/serviciosResponsable`); +const admin = require(`${controllerPath}/admin`); +const alumno = require(`${controllerPath}/alumno`); +const cancelar = require(`${controllerPath}/cancelar`); +const registro = require(`${controllerPath}/registro`); +const registroValidado = require(`${controllerPath}/registroValidado`); +const cartaAceptacion = require(`${controllerPath}/cartaAceptacion`); +const cartaTermino = require(`${controllerPath}/cartaTermino`); +const informeGlobal = require(`${controllerPath}/informeGlobal`); +const liberacion = require(`${controllerPath}/liberacion`); +const rechazarAceptacion = require(`${controllerPath}/rechazarAceptacion`); +const rechazarTermino = require(`${controllerPath}/rechazarTermino`); +const rechazarInforme = require(`${controllerPath}/rechazarInforme`); +const update = require(`${controllerPath}/update`); +const reporte = require(`${controllerPath}/reporte`); +const gustavoBazPrada = require(`${controllerPath}/gustavoBazPrada`); +// POST app.post( `${route}/nuevo`, // verificaToken, @@ -44,6 +42,47 @@ app.post( } ); +// GET +app.get(`${route}/admin`, verificaToken, (req, res) => { + return admin(req.query) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + +app.get(`${route}/alumno`, verificaToken, (req, res) => { + return alumno(req.query) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + +app.get(`${route}/gustavo_baz_prada`, verificaToken, (req, res) => { + return gustavoBazPrada(req.query) + .then((data) => { + res.download(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + +app.get(`${route}/reporte`, verificaToken, (req, res) => { + return reporte(req.query) + .then((data) => { + res.download(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + app.get(`${route}/servicios_admin`, verificaToken, (req, res) => { return serviciosAdmin(req.query) .then((data) => { @@ -64,46 +103,7 @@ app.get(`${route}/servicios_responsable`, verificaToken, (req, res) => { }); }); -app.get(`${route}/admin`, verificaToken, (req, res) => { - return admin(req.query) - .then((data) => { - res.status(200).json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.get(`${route}/alumno`, verificaToken, (req, res) => { - return alumno(req.query) - .then((data) => { - res.status(200).json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.get(`${route}/reporte`, verificaToken, (req, res) => { - return reporte(req.query) - .then((data) => { - res.status(200).json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.get(`${route}/gustavo_bas_prada`, verificaToken, (req, res) => { - return gustavoBazPrada(req.query) - .then((data) => { - res.status(200).json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - +// PUT app.put(`${route}/cancelar`, verificaToken, (req, res) => { return cancelar(req.body) .then((data) => { @@ -114,26 +114,6 @@ app.put(`${route}/cancelar`, verificaToken, (req, res) => { }); }); -app.put(`${route}/registro`, verificaToken, (req, res) => { - return registro(req.body) - .then((data) => { - res.status(200).json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.put(`${route}/registro_validado`, verificaToken, (req, res) => { - return registroValidado(req.body) - .then((data) => { - res.status(200).json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - app.put( `${route}/carta_aceptacion`, // verificaToken, @@ -192,6 +172,26 @@ app.put(`${route}/liberacion`, verificaToken, (req, res) => { }); }); +app.put(`${route}/registro`, verificaToken, (req, res) => { + return registro(req.body) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + +app.put(`${route}/registro_validado`, verificaToken, (req, res) => { + return registroValidado(req.body) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + app.put(`${route}/rechazar_aceptacion`, verificaToken, (req, res) => { return rechazarAceptacion(req.body) .then((data) => { @@ -202,8 +202,8 @@ app.put(`${route}/rechazar_aceptacion`, verificaToken, (req, res) => { }); }); -app.put(`${route}/rechazar_termino`, verificaToken, (req, res) => { - return rechazarTermino(req.body) +app.put(`${route}/rechazar_informe`, verificaToken, (req, res) => { + return rechazarInforme(req.body) .then((data) => { res.status(200).json(data); }) @@ -212,8 +212,8 @@ app.put(`${route}/rechazar_termino`, verificaToken, (req, res) => { }); }); -app.put(`${route}/rechazar_informe`, verificaToken, (req, res) => { - return rechazarInforme(req.body) +app.put(`${route}/rechazar_termino`, verificaToken, (req, res) => { + return rechazarTermino(req.body) .then((data) => { res.status(200).json(data); }) diff --git a/server/routes/Status.js b/server/routes/Status.js index e3f50b5..b09bd3b 100644 --- a/server/routes/Status.js +++ b/server/routes/Status.js @@ -10,7 +10,7 @@ app.get(`${route}`, verificaToken, (req, res) => { res.status(200).json(data); }) .catch((err) => { - res.status(400).json(err); + res.status(400).json({ message: err.message }); }); }); diff --git a/server/routes/Usuario.js b/server/routes/Usuario.js index 665a825..9d602fb 100644 --- a/server/routes/Usuario.js +++ b/server/routes/Usuario.js @@ -2,13 +2,16 @@ const express = require('express'); const app = express(); const { verificaToken } = require('../middleware/autentificacion'); const route = '/usuario'; -const escolares = require('../controller/Usuario/escolares'); -const login = require('../controller/Usuario/login'); -const responsable = require('../controller/Usuario/responsable'); -const responsableUpdate = require('../controller/Usuario/responsableUpdate'); -const newPasswordAlumno = require('../controller/Usuario/newPasswordAlumno'); -const newPasswordResponsable = require('../controller/Usuario/newPasswordResponsable'); +const controllerPath = '../controller/Usuario'; +const escolares = require(`${controllerPath}/escolares`); +const login = require(`${controllerPath}/login`); +const newPasswordAlumno = require(`${controllerPath}/newPasswordAlumno`); +const newPasswordResponsable = require(`${controllerPath}/newPasswordResponsable`); +const responsable = require(`${controllerPath}/responsable`); +const responsables = require(`${controllerPath}/responsables`); +const responsableUpdate = require(`${controllerPath}/responsableUpdate`); +// POST app.post(`${route}/login`, (req, res) => { return login(req.body) .then((data) => { @@ -19,6 +22,7 @@ app.post(`${route}/login`, (req, res) => { }); }); +// GET app.get(`${route}/escolares`, verificaToken, (req, res) => { return escolares(req.query) .then((data) => { @@ -39,8 +43,8 @@ app.get(`${route}/responsable`, verificaToken, (req, res) => { }); }); -app.put(`${route}/responsable/update`, verificaToken, (req, res) => { - return responsableUpdate(req.body) +app.get(`${route}/responsables`, verificaToken, (req, res) => { + return responsables(req.query) .then((data) => { res.status(200).json(data); }) @@ -49,6 +53,7 @@ app.put(`${route}/responsable/update`, verificaToken, (req, res) => { }); }); +// PUT app.put(`${route}/new_password_alumno`, verificaToken, (req, res) => { return newPasswordAlumno(req.body) .then((data) => { @@ -69,4 +74,14 @@ app.put(`${route}/new_password_responsable`, verificaToken, (req, res) => { }); }); +app.put(`${route}/responsable/update`, verificaToken, (req, res) => { + return responsableUpdate(req.body) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + module.exports = app; diff --git a/server/routes/index.js b/server/routes/index.js index 69195f8..69d782f 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -1,12 +1,12 @@ const express = require('express'); const app = express(); -app.use(require('./Status')); -app.use(require('./Usuario')); -app.use(require('./Servicio')); app.use(require('./CasoEspecial')); -app.use(require('./Programa')); app.use(require('./CuestionarioAlumno')); app.use(require('./CuestionarioPrograma')); +app.use(require('./Programa')); +app.use(require('./Servicio')); +app.use(require('./Status')); +app.use(require('./Usuario')); module.exports = app;