From 2f40cf797c65226102bbb91fd3f95d593e9d3d25 Mon Sep 17 00:00:00 2001 From: Ben Elferink Date: Tue, 28 Sep 2021 18:53:02 +0300 Subject: [PATCH] Refactored - now includes fullstack AUTH --- README.md | 45 +- client/package-lock.json | 1396 ++++++- client/package.json | 13 +- client/public/android-chrome-192x192.png | Bin 0 -> 16139 bytes client/public/android-chrome-512x512.png | Bin 0 -> 40661 bytes client/public/apple-touch-icon.png | Bin 0 -> 14708 bytes client/public/favicon-16x16.png | Bin 0 -> 665 bytes client/public/favicon-32x32.png | Bin 0 -> 1779 bytes client/public/favicon.ico | Bin 0 -> 15406 bytes client/src/App.js | 32 +- client/src/api/index.js | 6 +- client/src/components/AuthModal.js | 124 + client/src/components/Header.js | 77 + client/src/components/OnlineIndicator.js | 63 + client/src/contexts/AuthContext.js | 71 +- client/src/index.js | 14 +- client/src/styles/{styles.css => index.css} | 26 +- package-lock.json | 1093 ++++- package.json | 26 +- server/.env.example | 4 +- server/api/controllers/authControllers.js | 38 - server/api/routes/authRoutes.js | 24 - server/constants/index.js | 16 + server/controllers/auth/get-account.js | 20 + server/controllers/auth/login.js | 59 + server/controllers/auth/register.js | 60 + server/index.js | 53 +- server/middlewares/jsonwebtoken.js | 39 + server/{api => }/models/Account.js | 25 +- server/package-lock.json | 3963 +++++++++++++++++-- server/package.json | 21 +- server/routes/auth.js | 19 + server/utils/app.js | 20 + server/utils/mongo.js | 32 + 34 files changed, 6684 insertions(+), 695 deletions(-) create mode 100644 client/public/android-chrome-192x192.png create mode 100644 client/public/android-chrome-512x512.png create mode 100644 client/public/apple-touch-icon.png create mode 100644 client/public/favicon-16x16.png create mode 100644 client/public/favicon-32x32.png create mode 100644 client/public/favicon.ico create mode 100644 client/src/components/AuthModal.js create mode 100644 client/src/components/Header.js create mode 100644 client/src/components/OnlineIndicator.js rename client/src/styles/{styles.css => index.css} (62%) delete mode 100644 server/api/controllers/authControllers.js delete mode 100644 server/api/routes/authRoutes.js create mode 100644 server/constants/index.js create mode 100644 server/controllers/auth/get-account.js create mode 100644 server/controllers/auth/login.js create mode 100644 server/controllers/auth/register.js create mode 100644 server/middlewares/jsonwebtoken.js rename server/{api => }/models/Account.js (54%) create mode 100644 server/routes/auth.js create mode 100644 server/utils/app.js create mode 100644 server/utils/mongo.js diff --git a/README.md b/README.md index 4913cd6..29483c3 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,14 @@

+# What is this template? + +This template allows you to quick-start your Fullstack application using the MERN stack, it has a server setup with some basic authentication, and a client ready to communicate with the backend.
+I have attempted to use the best practices for both ends, which should make it easy for any advanced/new developer to use, and perhaps learn from. + +
+
+ # How to use this template [📀 Demo video](https://youtu.be/N2pvvkyoS68) @@ -17,17 +25,20 @@ ### STEP 1: Click ["Use this template"](https://github.com/belferink1996/MERN-template/generate) to generate a -new repository.
Then open your terminal and clone your repository: +new repository.
+Then open your terminal and clone your repository: -> cd ~/Desktop
git clone https://github.com/[your-user-name]/[your-repo-name].git +> cd ~/Desktop
+> git clone https://github.com/[your-user-name]/[your-repo-name].git
### STEP 2: -Go to your repository's folder, and install all dependecies: +Go to the root of your repository's folder, and install all dependecies: -> cd ~/Desktop/[your-repo-name]
npm install +> cd ~/Desktop/[your-repo-name]
+> npm install
@@ -35,7 +46,7 @@ Go to your repository's folder, and install all dependecies: Prepare your MongoDB database ([atlas](https://www.mongodb.com/cloud/atlas), [community]()).
-Then go to your server folder (backend), and set your database within `server.js`, +Then configure your database within `server/constants/index.js`, by configuring the `MONGO_URI` variable.
@@ -44,19 +55,19 @@ Then go to your server folder (backend), and set your database within `server.js

-# Node dependecies & versions: +### To run the client and/or the server, you can do any of the following: -###### Client: +#### Short Method -> axios: ^0.21.1     --->     Use the API
react: ^17.0.1 ->     --->     UI framework
react-dom: ^17.0.1 ->     --->     UI framework
react-scripts: 4.0.3 ->     --->     React 'npm' scripts +From the root of your project run: +> npm start -###### Server: +#### Long Method -> cors: ^2.8.5     --->     Enable HTTP requests
dotenv: ^8.2.0 ->     --->     Secure sensitive information
express: ^4.17.1 ->     --->     Server app
mongoose: ^5.12.0     -> --->     MongoDB database
morgan: ^1.10.0     ---> ->     Logs incoming requests +Open terminal #1 (backend) +> cd ./server
+> npm start + +Open terminal #2 (frontend) +> cd ./client
+> npm start \ No newline at end of file diff --git a/client/package-lock.json b/client/package-lock.json index ac3c3df..b298cdd 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -8,9 +8,13 @@ "version": "0.1.0", "license": "ISC", "dependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "@fontsource/roboto": "^4.5.1", + "@mui/material": "^5.0.1", "axios": "^0.21.1", - "react": "^17.0.1", - "react-dom": "^17.0.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", "react-scripts": "4.0.3" } }, @@ -1416,6 +1420,185 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" }, + "node_modules/@emotion/babel-plugin": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.3.0.tgz", + "integrity": "sha512-UZKwBV2rADuhRp+ZOGgNWg2eYgbzKzQXfQPtJbu/PLy8onurxlNCLvxMQEvlr1/GudguPI5IU9qIY1+2z1M5bA==", + "dependencies": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/runtime": "^7.13.10", + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.5", + "@emotion/serialize": "^1.0.2", + "babel-plugin-macros": "^2.6.1", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "^4.0.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/cache": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.4.0.tgz", + "integrity": "sha512-Zx70bjE7LErRO9OaZrhf22Qye1y4F7iDl+ITjet0J+i+B88PrAOBkKvaAWhxsZf72tDLajwCgfCjJ2dvH77C3g==", + "dependencies": { + "@emotion/memoize": "^0.7.4", + "@emotion/sheet": "^1.0.0", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "stylis": "^4.0.3" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.0.tgz", + "integrity": "sha512-9RkilvXAufQHsSsjQ3PIzSns+pxuX4EW8EbGeSPjZMHuMx6z/MOzb9LpqNieQX4F3mre3NWS2+X3JNRHTQztUQ==", + "dependencies": { + "@emotion/memoize": "^0.7.4" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", + "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + }, + "node_modules/@emotion/react": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.4.1.tgz", + "integrity": "sha512-pRegcsuGYj4FCdZN6j5vqCALkNytdrKw3TZMekTzNXixRg4wkLsU5QEaBG5LC6l01Vppxlp7FE3aTHpIG5phLg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@emotion/cache": "^11.4.0", + "@emotion/serialize": "^1.0.2", + "@emotion/sheet": "^1.0.2", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/react/node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/serialize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", + "integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==", + "dependencies": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.2.tgz", + "integrity": "sha512-QQPB1B70JEVUHuNtzjHftMGv6eC3Y9wqavyarj4x4lg47RACkeSfNo5pxIOKizwS9AEFLohsqoaxGQj4p0vSIw==" + }, + "node_modules/@emotion/styled": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.3.0.tgz", + "integrity": "sha512-fUoLcN3BfMiLlRhJ8CuPUMEyKkLEoM+n+UyAbnqGEsCd5IzKQ7VQFLtzpJOaCD2/VR2+1hXQTnSZXVJeiTNltA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@emotion/babel-plugin": "^11.3.0", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/serialize": "^1.0.2", + "@emotion/utils": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/styled/node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "node_modules/@emotion/utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.0.0.tgz", + "integrity": "sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" + }, "node_modules/@eslint/eslintrc": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", @@ -1457,6 +1640,11 @@ "node": ">=8" } }, + "node_modules/@fontsource/roboto": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@fontsource/roboto/-/roboto-4.5.1.tgz", + "integrity": "sha512-3mhfL+eNPG/woMNqwD/OHaW5qMpeGEBsDwzmhFmjB1yUV+M+M9P0NhP/AyHvnGz3DrqkvZ7CPzNMa+UkVLeELg==" + }, "node_modules/@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -2215,6 +2403,284 @@ "node": ">=8" } }, + "node_modules/@mui/core": { + "version": "5.0.0-alpha.48", + "resolved": "https://registry.npmjs.org/@mui/core/-/core-5.0.0-alpha.48.tgz", + "integrity": "sha512-H/QQwKsr2EqPAnP35DGDpWihk5BOFYGhO52rIHb3XKOfoUjDCrCHBy2kvr3dLWJDmJXr/QzYj3AX10n5XzlaMg==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@emotion/is-prop-valid": "^1.1.0", + "@mui/utils": "^5.0.1", + "clsx": "^1.1.1", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8.6 || ^17.0.0", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core/node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mui/core/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/@mui/material": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.0.1.tgz", + "integrity": "sha512-+/JJzRcORUf5MiZnzuqsPFRgxm3/0CUi1wE97ZQ2y7r+EnDVsjJLcjAH9Q9GY3k9zkPIpYb9Hig/+HT6AGZRnQ==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@mui/core": "5.0.0-alpha.48", + "@mui/system": "^5.0.1", + "@mui/types": "^7.0.0", + "@mui/utils": "^5.0.1", + "@popperjs/core": "^2.4.4", + "@types/react-transition-group": "^4.4.3", + "clsx": "^1.1.1", + "csstype": "^3.0.9", + "hoist-non-react-statics": "^3.3.2", + "prop-types": "^15.7.2", + "react-is": "^17.0.2", + "react-transition-group": "^4.4.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/material-ui" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "@types/react": "^16.8.6 || ^17.0.0", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/@mui/private-theming": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.0.1.tgz", + "integrity": "sha512-R8Cf2+32cG1OXFAqTighA5Mx9R5BQ57cN1ZVaNgfgdbI87Yig2fVMdFSPrw3txcjKlnwsvFJF8AdwQMqq1tJ3Q==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@mui/utils": "^5.0.1", + "prop-types": "^15.7.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/material-ui" + }, + "peerDependencies": { + "@types/react": "^16.8.6 || ^17.0.0", + "react": "^17.0.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming/node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.0.1.tgz", + "integrity": "sha512-j40nCbaKr1HAZYqpX61XvZYsadYskjo3u6+pRFFaewSViAkkD1rjjbubpnh15nqVfYmijtHMZJ9/l1x1hamvfQ==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@emotion/cache": "^11.4.0", + "prop-types": "^15.7.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/material-ui" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.2" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine/node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mui/system": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.0.1.tgz", + "integrity": "sha512-pGNKUpjK5hm4apZAUZu7LugemBPoZnNvNNCI2miI/BXxqyx41mL9+iT9p6Qe9uDOh8Z6GUbLIzvOjSTP+ECRZw==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@mui/private-theming": "^5.0.1", + "@mui/styled-engine": "^5.0.1", + "@mui/types": "^7.0.0", + "@mui/utils": "^5.0.1", + "clsx": "^1.1.1", + "csstype": "^3.0.9", + "prop-types": "^15.7.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/material-ui" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "@types/react": "^16.8.6 || ^17.0.0", + "react": "^17.0.2" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/system/node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mui/types": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.0.0.tgz", + "integrity": "sha512-M/tkF2pZ4uoPhZ8pnNhlVnOFtz6F3dnYKIsnj8MuXKT6d26IE2u0UjA8B0275ggN74dR9rlHG5xJt5jgDx/Ung==", + "peerDependencies": { + "@types/react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.0.1.tgz", + "integrity": "sha512-GWO104N+o9KG5fKiTEYnAg7kONKEg3vLN+VROAU0f3it6lFGLCVPcQYex/1gJ4QAy96u6Ez8/Hmmhi1+3cX0tQ==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@types/prop-types": "^15.7.4", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "react": "^17.0.2" + } + }, + "node_modules/@mui/utils/node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", @@ -2324,6 +2790,15 @@ "node": ">= 8" } }, + "node_modules/@popperjs/core": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.1.tgz", + "integrity": "sha512-HnUhk1Sy9IuKrxEMdIRCxpIqPw6BFsbYSEUO9p/hNw5sMld/+3OLMWQP80F8/db9qsv3qUjs7ZR5bS/R+iinXw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rollup/plugin-node-resolve": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", @@ -2741,11 +3216,42 @@ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.2.tgz", "integrity": "sha512-i99hy7Ki19EqVOl77WplDrvgNugHnsSjECVR/wUrzw2TJXz1zlUfT2ngGckR6xN7yFYaijsMAqPkOLx9HgUqHg==" }, + "node_modules/@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" + }, "node_modules/@types/q": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, + "node_modules/@types/react": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.24.tgz", + "integrity": "sha512-eIpyco99gTH+FTI3J7Oi/OH8MZoFMJuztNRimDOJwH4iGIsKV2qkGnk4M9VzlaVWeEEWLWSQRy0FEA0Kz218cg==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-2+L0ilcAEG8udkDnvx8B0upwXFBbNnVwOsSCTxW3SDOkmar9NyEeLG0ZLa3uOEw9zyYf/fQapcnfXAVmDKlyHw==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.3.tgz", + "integrity": "sha512-fUx5muOWSYP8Bw2BUQ9M9RK9+W1XBK/7FLJ8PTQpnpTEkn0ccyMffyEQvan4C3h53gHdx7KE5Qrxi/LnUGQtdg==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/resolve": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", @@ -2754,6 +3260,11 @@ "@types/node": "*" } }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, "node_modules/@types/source-list-map": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", @@ -3297,6 +3808,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -4528,15 +5050,15 @@ } }, "node_modules/browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.1.tgz", + "integrity": "sha512-aLD0ZMDSnF4lUt4ZDNgqi5BUn9BZ7YdQdI/cYlILrhdSSZJLU9aNZoD5/NBmM4SK34APB2e83MOsRt1EnkuyaQ==", "dependencies": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001259", + "electron-to-chromium": "^1.3.846", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "nanocolors": "^0.1.5", + "node-releases": "^1.1.76" }, "bin": { "browserslist": "cli.js" @@ -4745,9 +5267,16 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001199", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001199.tgz", - "integrity": "sha512-ifbK2eChUCFUwGhlEzIoVwzFt1+iriSjyKKFYNfv6hN34483wyWpLLavYQXhnR036LhkdUYaSDpHg1El++VgHQ==" + "version": "1.0.30001260", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001260.tgz", + "integrity": "sha512-Fhjc/k8725ItmrvW5QomzxLeojewxvqiYCKeFcfFEhut28IVLdpHU19dneOmltZQIE5HNbawj1HYD+1f2bM1Dg==", + "dependencies": { + "nanocolors": "^0.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } }, "node_modules/capture-exit": { "version": "2.0.0", @@ -4990,6 +5519,14 @@ "wrap-ansi": "^6.2.0" } }, + "node_modules/clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -5827,6 +6364,11 @@ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, + "node_modules/csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" + }, "node_modules/cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", @@ -6266,9 +6808,9 @@ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" }, "node_modules/dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dependencies": { "ip": "^1.1.0", "safe-buffer": "^5.0.1" @@ -6301,6 +6843,15 @@ "utila": "~0.4" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", @@ -6474,9 +7025,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.687", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.687.tgz", - "integrity": "sha512-IpzksdQNl3wdgkzf7dnA7/v10w0Utf1dF2L+B4+gKrloBrxCut+au+kky3PYvle3RMdSxZP+UiCZtLbcYRxSNQ==" + "version": "1.3.850", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.850.tgz", + "integrity": "sha512-ZzkDcdzePeF4dhoGZQT77V2CyJOpwfTZEOg4h0x6R/jQhGt/rIRpbRyVreWLtD7B/WsVxo91URm2WxMKR9JQZA==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -8092,6 +8643,11 @@ "node": ">=6" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -8882,6 +9438,19 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -8891,9 +9460,9 @@ } }, "node_modules/hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "node_modules/hpack.js": { "version": "2.1.6", @@ -12822,10 +13391,15 @@ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "optional": true }, + "node_modules/nanocolors": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz", + "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==" + }, "node_modules/nanoid": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.21.tgz", - "integrity": "sha512-A6oZraK4DJkAOICstsGH98dvycPr/4GGDH7ZWKmMdd3vGcOurZ6JmWFUt0DA5bzrrn2FrUjmv6mFNWvv8jpppA==", + "version": "3.1.28", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.28.tgz", + "integrity": "sha512-gSu9VZ2HtmoKYe/lmyPFES5nknFrHa+/DT9muUFWFMi6Jh9E1I7bkvlQ8xxf1Kos9pi9o8lBnIOkatMhKX/YUw==", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12992,9 +13566,9 @@ } }, "node_modules/node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" + "version": "1.1.76", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz", + "integrity": "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==" }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -13656,9 +14230,9 @@ } }, "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -13908,13 +14482,12 @@ } }, "node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.38.tgz", + "integrity": "sha512-wNrSHWjHDQJR/IZL5IKGxRtFgrYNaAA/UrkW2WqbtZO6uxSLMxMN+s2iqUMwnAWm3fMROlDYZB41dr0Mt7vBwQ==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "nanocolors": "^0.2.2", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -14994,14 +15567,19 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-safe-parser/node_modules/nanocolors": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.9.tgz", + "integrity": "sha512-aymgS4Xe0LMqHOHl7jSUEkFh/6O/pcF0j61dBtreQZ1nmbyYdYjSYSJzz0iPLbKPkMtSmdRgyBGywNZGjKOEfw==" + }, "node_modules/postcss-safe-parser/node_modules/postcss": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.8.tgz", - "integrity": "sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw==", + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.8.tgz", + "integrity": "sha512-GT5bTjjZnwDifajzczOC+r3FI3Cu+PgPvrsjhQdRqa2kTJ4968/X9CUce9xttIB0xOs5c6xf0TCWZo/y9lF6bA==", "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.20", - "source-map": "^0.6.1" + "nanocolors": "^0.2.2", + "nanoid": "^3.1.25", + "source-map-js": "^0.6.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -15011,14 +15589,6 @@ "url": "https://opencollective.com/postcss/" } }, - "node_modules/postcss-safe-parser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss-selector-matches": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", @@ -15101,6 +15671,11 @@ "node": ">=6.14.4" } }, + "node_modules/postcss/node_modules/nanocolors": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.9.tgz", + "integrity": "sha512-aymgS4Xe0LMqHOHl7jSUEkFh/6O/pcF0j61dBtreQZ1nmbyYdYjSYSJzz0iPLbKPkMtSmdRgyBGywNZGjKOEfw==" + }, "node_modules/postcss/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -15109,17 +15684,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -15462,9 +16026,9 @@ } }, "node_modules/react": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", - "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -15588,16 +16152,16 @@ } }, "node_modules/react-dom": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", - "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "scheduler": "^0.20.1" + "scheduler": "^0.20.2" }, "peerDependencies": { - "react": "17.0.1" + "react": "17.0.2" } }, "node_modules/react-error-overlay": { @@ -15702,6 +16266,21 @@ } } }, + "node_modules/react-transition-group": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -16173,9 +16752,9 @@ "deprecated": "https://github.com/lydell/resolve-url#deprecated" }, "node_modules/resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz", + "integrity": "sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==", "dependencies": { "adjust-sourcemap-loader": "3.0.0", "camelcase": "5.3.1", @@ -16183,7 +16762,7 @@ "convert-source-map": "1.7.0", "es6-iterator": "2.0.3", "loader-utils": "1.2.3", - "postcss": "7.0.21", + "postcss": "7.0.36", "rework": "1.0.1", "rework-visit": "1.0.0", "source-map": "0.6.1" @@ -16233,9 +16812,9 @@ } }, "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dependencies": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -16243,6 +16822,10 @@ }, "engines": { "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, "node_modules/resolve-url-loader/node_modules/source-map": { @@ -16829,9 +17412,9 @@ } }, "node_modules/scheduler": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.1.tgz", - "integrity": "sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -17410,6 +17993,14 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", @@ -17995,6 +18586,11 @@ "node": ">=8" } }, + "node_modules/stylis": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.10.tgz", + "integrity": "sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg==" + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -18116,9 +18712,9 @@ } }, "node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "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", @@ -18656,11 +19252,13 @@ } }, "node_modules/type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -18951,9 +19549,9 @@ } }, "node_modules/url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -20085,9 +20683,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dependencies": { "async-limiter": "~1.0.0" } @@ -20449,9 +21047,9 @@ } }, "node_modules/webpack/node_modules/ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dependencies": { "figgy-pudding": "^3.5.1" } @@ -20878,9 +21476,9 @@ } }, "node_modules/ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "engines": { "node": ">=8.3.0" }, @@ -22119,6 +22717,148 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" }, + "@emotion/babel-plugin": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.3.0.tgz", + "integrity": "sha512-UZKwBV2rADuhRp+ZOGgNWg2eYgbzKzQXfQPtJbu/PLy8onurxlNCLvxMQEvlr1/GudguPI5IU9qIY1+2z1M5bA==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/runtime": "^7.13.10", + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.5", + "@emotion/serialize": "^1.0.2", + "babel-plugin-macros": "^2.6.1", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "^4.0.3" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + } + } + }, + "@emotion/cache": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.4.0.tgz", + "integrity": "sha512-Zx70bjE7LErRO9OaZrhf22Qye1y4F7iDl+ITjet0J+i+B88PrAOBkKvaAWhxsZf72tDLajwCgfCjJ2dvH77C3g==", + "requires": { + "@emotion/memoize": "^0.7.4", + "@emotion/sheet": "^1.0.0", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "stylis": "^4.0.3" + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "@emotion/is-prop-valid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.0.tgz", + "integrity": "sha512-9RkilvXAufQHsSsjQ3PIzSns+pxuX4EW8EbGeSPjZMHuMx6z/MOzb9LpqNieQX4F3mre3NWS2+X3JNRHTQztUQ==", + "requires": { + "@emotion/memoize": "^0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", + "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + }, + "@emotion/react": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.4.1.tgz", + "integrity": "sha512-pRegcsuGYj4FCdZN6j5vqCALkNytdrKw3TZMekTzNXixRg4wkLsU5QEaBG5LC6l01Vppxlp7FE3aTHpIG5phLg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@emotion/cache": "^11.4.0", + "@emotion/serialize": "^1.0.2", + "@emotion/sheet": "^1.0.2", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "hoist-non-react-statics": "^3.3.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "@emotion/serialize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", + "integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==", + "requires": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.2.tgz", + "integrity": "sha512-QQPB1B70JEVUHuNtzjHftMGv6eC3Y9wqavyarj4x4lg47RACkeSfNo5pxIOKizwS9AEFLohsqoaxGQj4p0vSIw==" + }, + "@emotion/styled": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.3.0.tgz", + "integrity": "sha512-fUoLcN3BfMiLlRhJ8CuPUMEyKkLEoM+n+UyAbnqGEsCd5IzKQ7VQFLtzpJOaCD2/VR2+1hXQTnSZXVJeiTNltA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@emotion/babel-plugin": "^11.3.0", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/serialize": "^1.0.2", + "@emotion/utils": "^1.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "@emotion/utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.0.0.tgz", + "integrity": "sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==" + }, + "@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" + }, "@eslint/eslintrc": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", @@ -22150,6 +22890,11 @@ } } }, + "@fontsource/roboto": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@fontsource/roboto/-/roboto-4.5.1.tgz", + "integrity": "sha512-3mhfL+eNPG/woMNqwD/OHaW5qMpeGEBsDwzmhFmjB1yUV+M+M9P0NhP/AyHvnGz3DrqkvZ7CPzNMa+UkVLeELg==" + }, "@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -22727,6 +23472,167 @@ } } }, + "@mui/core": { + "version": "5.0.0-alpha.48", + "resolved": "https://registry.npmjs.org/@mui/core/-/core-5.0.0-alpha.48.tgz", + "integrity": "sha512-H/QQwKsr2EqPAnP35DGDpWihk5BOFYGhO52rIHb3XKOfoUjDCrCHBy2kvr3dLWJDmJXr/QzYj3AX10n5XzlaMg==", + "requires": { + "@babel/runtime": "^7.15.4", + "@emotion/is-prop-valid": "^1.1.0", + "@mui/utils": "^5.0.1", + "clsx": "^1.1.1", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + } + } + }, + "@mui/material": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.0.1.tgz", + "integrity": "sha512-+/JJzRcORUf5MiZnzuqsPFRgxm3/0CUi1wE97ZQ2y7r+EnDVsjJLcjAH9Q9GY3k9zkPIpYb9Hig/+HT6AGZRnQ==", + "requires": { + "@babel/runtime": "^7.15.4", + "@mui/core": "5.0.0-alpha.48", + "@mui/system": "^5.0.1", + "@mui/types": "^7.0.0", + "@mui/utils": "^5.0.1", + "@popperjs/core": "^2.4.4", + "@types/react-transition-group": "^4.4.3", + "clsx": "^1.1.1", + "csstype": "^3.0.9", + "hoist-non-react-statics": "^3.3.2", + "prop-types": "^15.7.2", + "react-is": "^17.0.2", + "react-transition-group": "^4.4.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + } + } + }, + "@mui/private-theming": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.0.1.tgz", + "integrity": "sha512-R8Cf2+32cG1OXFAqTighA5Mx9R5BQ57cN1ZVaNgfgdbI87Yig2fVMdFSPrw3txcjKlnwsvFJF8AdwQMqq1tJ3Q==", + "requires": { + "@babel/runtime": "^7.15.4", + "@mui/utils": "^5.0.1", + "prop-types": "^15.7.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "@mui/styled-engine": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.0.1.tgz", + "integrity": "sha512-j40nCbaKr1HAZYqpX61XvZYsadYskjo3u6+pRFFaewSViAkkD1rjjbubpnh15nqVfYmijtHMZJ9/l1x1hamvfQ==", + "requires": { + "@babel/runtime": "^7.15.4", + "@emotion/cache": "^11.4.0", + "prop-types": "^15.7.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "@mui/system": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.0.1.tgz", + "integrity": "sha512-pGNKUpjK5hm4apZAUZu7LugemBPoZnNvNNCI2miI/BXxqyx41mL9+iT9p6Qe9uDOh8Z6GUbLIzvOjSTP+ECRZw==", + "requires": { + "@babel/runtime": "^7.15.4", + "@mui/private-theming": "^5.0.1", + "@mui/styled-engine": "^5.0.1", + "@mui/types": "^7.0.0", + "@mui/utils": "^5.0.1", + "clsx": "^1.1.1", + "csstype": "^3.0.9", + "prop-types": "^15.7.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "@mui/types": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.0.0.tgz", + "integrity": "sha512-M/tkF2pZ4uoPhZ8pnNhlVnOFtz6F3dnYKIsnj8MuXKT6d26IE2u0UjA8B0275ggN74dR9rlHG5xJt5jgDx/Ung==", + "requires": {} + }, + "@mui/utils": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.0.1.tgz", + "integrity": "sha512-GWO104N+o9KG5fKiTEYnAg7kONKEg3vLN+VROAU0f3it6lFGLCVPcQYex/1gJ4QAy96u6Ez8/Hmmhi1+3cX0tQ==", + "requires": { + "@babel/runtime": "^7.15.4", + "@types/prop-types": "^15.7.4", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + } + } + }, "@nodelib/fs.scandir": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", @@ -22786,6 +23692,11 @@ } } }, + "@popperjs/core": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.1.tgz", + "integrity": "sha512-HnUhk1Sy9IuKrxEMdIRCxpIqPw6BFsbYSEUO9p/hNw5sMld/+3OLMWQP80F8/db9qsv3qUjs7ZR5bS/R+iinXw==" + }, "@rollup/plugin-node-resolve": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", @@ -23092,11 +24003,42 @@ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.2.tgz", "integrity": "sha512-i99hy7Ki19EqVOl77WplDrvgNugHnsSjECVR/wUrzw2TJXz1zlUfT2ngGckR6xN7yFYaijsMAqPkOLx9HgUqHg==" }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" + }, "@types/q": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, + "@types/react": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.24.tgz", + "integrity": "sha512-eIpyco99gTH+FTI3J7Oi/OH8MZoFMJuztNRimDOJwH4iGIsKV2qkGnk4M9VzlaVWeEEWLWSQRy0FEA0Kz218cg==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-2+L0ilcAEG8udkDnvx8B0upwXFBbNnVwOsSCTxW3SDOkmar9NyEeLG0ZLa3uOEw9zyYf/fQapcnfXAVmDKlyHw==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.3.tgz", + "integrity": "sha512-fUx5muOWSYP8Bw2BUQ9M9RK9+W1XBK/7FLJ8PTQpnpTEkn0ccyMffyEQvan4C3h53gHdx7KE5Qrxi/LnUGQtdg==", + "requires": { + "@types/react": "*" + } + }, "@types/resolve": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", @@ -23105,6 +24047,11 @@ "@types/node": "*" } }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, "@types/source-list-map": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", @@ -23529,6 +24476,13 @@ "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "requires": { "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + } } }, "ansi-html": { @@ -24525,15 +25479,15 @@ } }, "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.1.tgz", + "integrity": "sha512-aLD0ZMDSnF4lUt4ZDNgqi5BUn9BZ7YdQdI/cYlILrhdSSZJLU9aNZoD5/NBmM4SK34APB2e83MOsRt1EnkuyaQ==", "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001259", + "electron-to-chromium": "^1.3.846", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "nanocolors": "^0.1.5", + "node-releases": "^1.1.76" } }, "bser": { @@ -24694,9 +25648,12 @@ } }, "caniuse-lite": { - "version": "1.0.30001199", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001199.tgz", - "integrity": "sha512-ifbK2eChUCFUwGhlEzIoVwzFt1+iriSjyKKFYNfv6hN34483wyWpLLavYQXhnR036LhkdUYaSDpHg1El++VgHQ==" + "version": "1.0.30001260", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001260.tgz", + "integrity": "sha512-Fhjc/k8725ItmrvW5QomzxLeojewxvqiYCKeFcfFEhut28IVLdpHU19dneOmltZQIE5HNbawj1HYD+1f2bM1Dg==", + "requires": { + "nanocolors": "^0.1.0" + } }, "capture-exit": { "version": "2.0.0", @@ -24893,6 +25850,11 @@ "wrap-ansi": "^6.2.0" } }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -25568,6 +26530,11 @@ } } }, + "csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" + }, "cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", @@ -25912,9 +26879,9 @@ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "requires": { "ip": "^1.1.0", "safe-buffer": "^5.0.1" @@ -25944,6 +26911,15 @@ "utila": "~0.4" } }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", @@ -26096,9 +27072,9 @@ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" }, "electron-to-chromium": { - "version": "1.3.687", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.687.tgz", - "integrity": "sha512-IpzksdQNl3wdgkzf7dnA7/v10w0Utf1dF2L+B4+gKrloBrxCut+au+kky3PYvle3RMdSxZP+UiCZtLbcYRxSNQ==" + "version": "1.3.850", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.850.tgz", + "integrity": "sha512-ZzkDcdzePeF4dhoGZQT77V2CyJOpwfTZEOg4h0x6R/jQhGt/rIRpbRyVreWLtD7B/WsVxo91URm2WxMKR9JQZA==" }, "elliptic": { "version": "6.5.4", @@ -27333,6 +28309,11 @@ } } }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -27951,15 +28932,30 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, "hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "hpack.js": { "version": "2.1.6", @@ -30921,10 +31917,15 @@ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "optional": true }, + "nanocolors": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz", + "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==" + }, "nanoid": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.21.tgz", - "integrity": "sha512-A6oZraK4DJkAOICstsGH98dvycPr/4GGDH7ZWKmMdd3vGcOurZ6JmWFUt0DA5bzrrn2FrUjmv6mFNWvv8jpppA==" + "version": "3.1.28", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.28.tgz", + "integrity": "sha512-gSu9VZ2HtmoKYe/lmyPFES5nknFrHa+/DT9muUFWFMi6Jh9E1I7bkvlQ8xxf1Kos9pi9o8lBnIOkatMhKX/YUw==" }, "nanomatch": { "version": "1.2.13", @@ -31075,9 +32076,9 @@ } }, "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" + "version": "1.1.76", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz", + "integrity": "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==" }, "normalize-package-data": { "version": "2.5.0", @@ -31578,9 +32579,9 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", @@ -31767,27 +32768,23 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.38.tgz", + "integrity": "sha512-wNrSHWjHDQJR/IZL5IKGxRtFgrYNaAA/UrkW2WqbtZO6uxSLMxMN+s2iqUMwnAWm3fMROlDYZB41dr0Mt7vBwQ==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "nanocolors": "^0.2.2", + "source-map": "^0.6.1" }, "dependencies": { + "nanocolors": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.9.tgz", + "integrity": "sha512-aymgS4Xe0LMqHOHl7jSUEkFh/6O/pcF0j61dBtreQZ1nmbyYdYjSYSJzz0iPLbKPkMtSmdRgyBGywNZGjKOEfw==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -32674,20 +33671,20 @@ "postcss": "^8.1.0" }, "dependencies": { - "postcss": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.8.tgz", - "integrity": "sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw==", - "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.20", - "source-map": "^0.6.1" - } + "nanocolors": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.9.tgz", + "integrity": "sha512-aymgS4Xe0LMqHOHl7jSUEkFh/6O/pcF0j61dBtreQZ1nmbyYdYjSYSJzz0iPLbKPkMtSmdRgyBGywNZGjKOEfw==" }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "postcss": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.8.tgz", + "integrity": "sha512-GT5bTjjZnwDifajzczOC+r3FI3Cu+PgPvrsjhQdRqa2kTJ4968/X9CUce9xttIB0xOs5c6xf0TCWZo/y9lF6bA==", + "requires": { + "nanocolors": "^0.2.2", + "nanoid": "^3.1.25", + "source-map-js": "^0.6.2" + } } } }, @@ -33037,9 +34034,9 @@ } }, "react": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", - "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -33134,13 +34131,13 @@ } }, "react-dom": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", - "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "scheduler": "^0.20.1" + "scheduler": "^0.20.2" } }, "react-error-overlay": { @@ -33224,6 +34221,17 @@ "workbox-webpack-plugin": "5.1.4" } }, + "react-transition-group": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -33584,9 +34592,9 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz", + "integrity": "sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==", "requires": { "adjust-sourcemap-loader": "3.0.0", "camelcase": "5.3.1", @@ -33594,7 +34602,7 @@ "convert-source-map": "1.7.0", "es6-iterator": "2.0.3", "loader-utils": "1.2.3", - "postcss": "7.0.21", + "postcss": "7.0.36", "rework": "1.0.1", "rework-visit": "1.0.0", "source-map": "0.6.1" @@ -33629,9 +34637,9 @@ } }, "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -34084,9 +35092,9 @@ } }, "scheduler": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.1.tgz", - "integrity": "sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -34576,6 +35584,11 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", @@ -35053,6 +36066,11 @@ } } }, + "stylis": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.10.tgz", + "integrity": "sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -35150,9 +36168,9 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "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", @@ -35562,9 +36580,11 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true, + "peer": true }, "type-is": { "version": "1.6.18", @@ -35794,9 +36814,9 @@ } }, "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -36423,9 +37443,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "requires": { "figgy-pudding": "^3.5.1" } @@ -36925,9 +37945,9 @@ } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "requires": { "async-limiter": "~1.0.0" } @@ -37369,9 +38389,9 @@ } }, "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "requires": {} }, "xml-name-validator": { diff --git a/client/package.json b/client/package.json index 2fa9ded..b9358ce 100644 --- a/client/package.json +++ b/client/package.json @@ -1,8 +1,6 @@ { - "homepage": "", "name": "client", "version": "0.1.0", - "description": "", "private": true, "main": "index.js", "license": "ISC", @@ -12,15 +10,18 @@ "eject": "react-scripts eject" }, "dependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "@fontsource/roboto": "^4.5.1", + "@mui/material": "^5.0.1", "axios": "^0.21.1", - "react": "^17.0.1", - "react-dom": "^17.0.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", "react-scripts": "4.0.3" }, "eslintConfig": { "extends": [ - "react-app", - "react-app/jest" + "react-app" ] }, "browserslist": { diff --git a/client/public/android-chrome-192x192.png b/client/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..c5aaaa76b427904569cdb4600dbac8715437c792 GIT binary patch literal 16139 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 literal 0 HcmV?d00001 diff --git a/client/public/android-chrome-512x512.png b/client/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..9ecb1725c21d307cd976fa6fd3e668afabad6304 GIT binary patch literal 40661 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 literal 0 HcmV?d00001 diff --git a/client/public/apple-touch-icon.png b/client/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4773681e31c333792c645a5bdc083da7df5e4a67 GIT binary patch literal 14708 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 literal 0 HcmV?d00001 diff --git a/client/public/favicon-16x16.png b/client/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..bca88019c6486d5584585d6b39f0598e54b3c389 GIT binary patch literal 665 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 VvO|}mWBmXC002ovPDHLkV1f_gOLYJM literal 0 HcmV?d00001 diff --git a/client/public/favicon.ico b/client/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0230c06cf995f8cab065985b638aa1f6e4d19119 GIT binary patch literal 15406 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 literal 0 HcmV?d00001 diff --git a/client/src/App.js b/client/src/App.js index 96cf42b..22cdfbc 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -1,28 +1,24 @@ -import './styles/styles.css'; -import { useAuth } from './contexts/AuthContext'; +import {useAuth} from './contexts/AuthContext' +import Header from './components/Header' export default function App() { - const { isLoggedIn } = useAuth(); + const {isLoggedIn} = useAuth() return (

-

{isLoggedIn ? : }

+
+ + {isLoggedIn ? : }
- ); + ) } -const LoggedInText = () => ( - <> - You are (not really) logged in, -
- check your console.log() - -); +const LoggedInText = () => { + const {account} = useAuth() + + return

Hey, {account.username}! I'm happy to let you know: you are authenticated!

+} const LoggedOutText = () => ( - <> - Don't forget to start your backend server, -
- then hit refresh and see what happens... - -); +

Don't forget to start your backend server, then authenticate yourself.

+) diff --git a/client/src/api/index.js b/client/src/api/index.js index 9a71b58..9566bc6 100644 --- a/client/src/api/index.js +++ b/client/src/api/index.js @@ -1,9 +1,9 @@ -import axios from 'axios'; +import axios from 'axios' // api url (where your serve is hosted at) -export const backendUrl = 'http://localhost:8080'; +export const backendUrl = 'http://localhost:8080' // axios configuration export default axios.create({ baseURL: backendUrl, -}); +}) diff --git a/client/src/components/AuthModal.js b/client/src/components/AuthModal.js new file mode 100644 index 0000000..33ca440 --- /dev/null +++ b/client/src/components/AuthModal.js @@ -0,0 +1,124 @@ +import {Fragment, useState} from 'react' +import {Dialog, DialogTitle, TextField, Button, CircularProgress} from '@mui/material' +import axios from '../api' +import {useAuth} from '../contexts/AuthContext' + +const textFieldSx = {mx: 2, my: 0.5} + +export default function AuthModal({open, close, register, toggleRegister}) { + const {setIsLoggedIn, setToken, setAccount} = useAuth() + + const [formData, setFormData] = useState({}) + const [loading, setLoading] = useState(false) + const [error, setError] = useState('') + + const handleChange = (e) => { + const {name, value} = e.target + setFormData((prev) => ({...prev, [name]: value})) + } + + const clickSubmit = async () => { + setLoading(true) + setError('') + + try { + const requestPath = register ? '/auth/register' : '/auth/login' + const response = await axios.post(requestPath, formData) + + setToken(response.data.token) + setAccount(response.data.data) + setIsLoggedIn(true) + close() + } catch (error) { + console.error(error) + setError(error?.response?.data?.message ?? error.message) + } + + setLoading(false) + } + + const disabledLoginButton = !formData['username'] || !formData['password'] + const disabledRegisterButton = !formData['username'] || !formData['password'] + + return ( + + {register ? ( + + ) : ( + + )} + + {error && {error}} + + {loading ? ( +
+ +
+ ) : ( + + )} + + +
+ ) +} + +function LoginForm({formData, handleChange}) { + return ( + + Login to your account + + + + + ) +} + +function RegisterForm({formData, handleChange}) { + return ( + + Create a new account + + + + + ) +} diff --git a/client/src/components/Header.js b/client/src/components/Header.js new file mode 100644 index 0000000..628735e --- /dev/null +++ b/client/src/components/Header.js @@ -0,0 +1,77 @@ +import {Fragment, useState} from 'react' +import {IconButton, Avatar, Popover, List, ListSubheader, ListItemButton} from '@mui/material' +import OnlineIndicator from './OnlineIndicator' +import AuthModal from './AuthModal' +import {useAuth} from '../contexts/AuthContext' + +export default function Header() { + const {isLoggedIn, account, logout} = useAuth() + + const [anchorEl, setAnchorEl] = useState(null) + const [popover, setPopover] = useState(false) + const [authModal, setAuthModal] = useState(false) + const [register, setRegister] = useState(false) + + const openPopover = (e) => { + setPopover(true) + setAnchorEl(e.currentTarget) + } + + const closePopover = () => { + setPopover(false) + setAnchorEl(null) + } + + const clickLogin = () => { + setRegister(false) + setAuthModal(true) + closePopover() + } + + const clickRegister = () => { + setRegister(true) + setAuthModal(true) + closePopover() + } + + return ( +
+

Web App

+ + + + + + + + + + + Hello, {isLoggedIn ? 'Ben' : 'Guest'} + + + {isLoggedIn ? ( + Logout + ) : ( + + Login + Reigster + + )} + + + + setAuthModal(false)} + register={register} + toggleRegister={() => setRegister((prev) => !prev)} + /> +
+ ) +} diff --git a/client/src/components/OnlineIndicator.js b/client/src/components/OnlineIndicator.js new file mode 100644 index 0000000..e0b2935 --- /dev/null +++ b/client/src/components/OnlineIndicator.js @@ -0,0 +1,63 @@ +import {styled} from '@mui/material/styles' +import {Badge, Avatar} from '@mui/material' + +const StyledBadge = styled(Badge)(({theme}) => ({ + '& .MuiBadge-badge': { + backgroundColor: 'black', + color: 'black', + boxShadow: `0 0 0 2px ${theme.palette.background.paper}`, + '&::after': { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%', + borderRadius: '50%', + animation: 'ripple 1.2s infinite ease-in-out', + border: '1px solid currentColor', + content: '""', + }, + }, + '@keyframes ripple': { + '0%': { + transform: 'scale(.8)', + opacity: 1, + }, + '100%': { + transform: 'scale(2.4)', + opacity: 0, + }, + }, +})) + +const OnlineBadge = styled(StyledBadge)(({theme}) => ({ + '& .MuiBadge-badge': { + backgroundColor: 'var(--online)', + color: 'var(--online)', + }, +})) + +const OfflineBadge = styled(StyledBadge)(({theme}) => ({ + '& .MuiBadge-badge': { + backgroundColor: 'var(--offline)', + color: 'var(--offline)', + }, +})) + +export default function OnlineIndicator({online = false, children = }) { + return online ? ( + + {children} + + ) : ( + + {children} + + ) +} diff --git a/client/src/contexts/AuthContext.js b/client/src/contexts/AuthContext.js index 742158f..1802ca0 100644 --- a/client/src/contexts/AuthContext.js +++ b/client/src/contexts/AuthContext.js @@ -1,37 +1,60 @@ -import { createContext, useContext, useState, useEffect } from 'react'; -import axios, { backendUrl } from '../api'; +import {createContext, useContext, useState, useEffect} from 'react' +import axios from '../api' // init context -const AuthContext = createContext(); +const AuthContext = createContext() // export the consumer export function useAuth() { - return useContext(AuthContext); + return useContext(AuthContext) } // export the provider (handle all the logic here) -export function AuthProvider({ children }) { - const [isLoggedIn, setIsLoggedIn] = useState(false); +export function AuthProvider({children}) { + const [token, setToken] = useState(localStorage.getItem('token') ?? null) + const [account, setAccount] = useState(null) + const [isLoggedIn, setIsLoggedIn] = useState(false) - // + const logout = () => { + setToken(null) + setAccount(null) + setIsLoggedIn(false) + } + + // This side effect keeps local storage updated with recent token value, + // making sure it can be re-used upon refresh or re-open browser useEffect(() => { - (async () => { - try { - const response = await axios.get('/auth/account'); - setIsLoggedIn(true); + if (token) { + localStorage.setItem('token', token) + } else { + localStorage.removeItem('token') + } + }, [token]) - // Did you know? You can use CSS in the console! - console.log( - `%cExample of using your backend routes %c(${backendUrl}/auth/account)`, - 'color: lime;', - 'color: unset;', - response, - ); - } catch (error) { - console.error(error.message); - } - })(); - }, []); + // This side effect runs only if we have a token, but no account or logged-in boolean. + // This "if" statement applies only when refreshed, or re-opened the browser, + // if true, it will then ask the backend for the account information (and will get them if the token hasn't expired) + useEffect(() => { + if (!isLoggedIn && !account && token) { + ;(async () => { + try { + const headers = {headers: {authorization: `Bearer ${token}`}} + const response = await axios.get('/auth/account', headers) - return {children}; + setAccount(response.data.data) + setIsLoggedIn(true) + } catch (error) { + console.error(error) + if (error?.response?.statusCode === 401) setToken(null) + } + })() + } + }, [isLoggedIn, account, token]) // eslint-disable-line react-hooks/exhaustive-deps + + return ( + + {children} + + ) } diff --git a/client/src/index.js b/client/src/index.js index 66e83be..dadf1eb 100644 --- a/client/src/index.js +++ b/client/src/index.js @@ -1,13 +1,17 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import App from './App'; -import { AuthProvider } from './contexts/AuthContext'; +import React from 'react' +import ReactDOM from 'react-dom' +import App from './App' +import {AuthProvider} from './contexts/AuthContext' +import CssBaseline from '@mui/material/CssBaseline' +import '@fontsource/roboto' +import './styles/index.css' ReactDOM.render( + , document.getElementById('root'), -); +) diff --git a/client/src/styles/styles.css b/client/src/styles/index.css similarity index 62% rename from client/src/styles/styles.css rename to client/src/styles/index.css index 69132ed..8ec2680 100644 --- a/client/src/styles/styles.css +++ b/client/src/styles/index.css @@ -1,9 +1,11 @@ +:root { + --online: #44b700; + --offline: rgb(183, 68, 0); +} + body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', - 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + font-family: 'Roboto'; + font-size: 16px; } .App { @@ -12,7 +14,19 @@ body { display: flex; flex-direction: column; align-items: center; - justify-content: center; +} + +.header { + width: 100%; + padding: 0 1rem; + display: flex; + align-items: center; + justify-content: space-between; +} + +.error { + margin: 0.5rem; + color: red; text-align: center; } diff --git a/package-lock.json b/package-lock.json index 4f0d19c..f0199cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,1098 @@ "name": "mern-application", "version": "0.1.0", "hasInstallScript": true, - "license": "ISC" + "license": "ISC", + "devDependencies": { + "concurrently": "^6.2.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk": { + "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": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concurrently": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.1.tgz", + "integrity": "sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "read-pkg": "^5.2.0", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/date-fns": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.24.0.tgz", + "integrity": "sha512-6ujwvwgPID6zbI0o7UbURi2vlLDR9uP26+tW6Lg+Ji3w7dd0i3DOcjcClLjLPranT60SSEFBwdSyYwn/ZkPIuw==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "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/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "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/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concurrently": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.1.tgz", + "integrity": "sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "read-pkg": "^5.2.0", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + } + }, + "date-fns": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.24.0.tgz", + "integrity": "sha512-6ujwvwgPID6zbI0o7UbURi2vlLDR9uP26+tW6Lg+Ji3w7dd0i3DOcjcClLjLPranT60SSEFBwdSyYwn/ZkPIuw==", + "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 + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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 + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "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" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } } diff --git a/package.json b/package.json index db48f9b..ba1e17d 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,27 @@ { + "homepage": "https://github.com/belferink1996/MERN-template#readme", "name": "mern-application", "version": "0.1.0", - "scripts": { - "install": "cd ./server && npm install && cd ./../client && npm install" + "description": "", + "private": true, + "main": "", + "license": "ISC", + "keywords": [], + "author": "Ben Elferink (https://www.linkedin.com/in/ben-elferink-37ba251b9)", + "repository": { + "type": "git", + "url": "https://github.com/belferink1996/MERN-template.git" }, - "author": "Ben Elferink", - "license": "ISC" + "bugs": { + "url": "https://github.com/belferink1996/MERN-template/issues", + "email": "ben.elferink@icloud.com" + }, + "scripts": { + "install": "concurrently \"cd ./server && npm i\" \"cd ./client && npm i\"", + "start": "concurrently \"cd ./server && npm start\" \"cd ./client && npm start\"", + "delete-modules": "rm -r ./node_modules && cd ./server && rm -r ./node_modules && cd ../client && rm -r ./node_modules" + }, + "devDependencies": { + "concurrently": "^6.2.1" + } } diff --git a/server/.env.example b/server/.env.example index 238b404..10158ba 100644 --- a/server/.env.example +++ b/server/.env.example @@ -1 +1,3 @@ -MONGO_URI = "MongoDB connection URL" \ No newline at end of file +PORT = "" +MONGO_URI = "" +JWT_SECRET = "" \ No newline at end of file diff --git a/server/api/controllers/authControllers.js b/server/api/controllers/authControllers.js deleted file mode 100644 index 5b34974..0000000 --- a/server/api/controllers/authControllers.js +++ /dev/null @@ -1,38 +0,0 @@ -import Account from '../models/Account.js'; -// more about response status codes ---> https://restapitutorial.com/httpstatuscodes.html - -export async function registerAccount(request, response, next) { - try { - // Handle your logic here... - - // return something to the client-side - response.status(201).json({ message: 'Account registered' }); - } catch (error) { - console.error(error); - response.status(500).send(); - } -} - -export async function loginAccount(request, response, next) { - try { - // Handle your logic here... - - // return something to the client-side - response.status(200).json({ message: 'Account logged-in' }); - } catch (error) { - console.error(error); - response.status(500).send(); - } -} - -export async function getAccount(request, response, next) { - try { - // Handle your logic here... - - // return something to the client-side - response.status(200).json({ message: 'Account fetched' }); - } catch (error) { - console.error(error); - response.status(500).send(); - } -} diff --git a/server/api/routes/authRoutes.js b/server/api/routes/authRoutes.js deleted file mode 100644 index a295929..0000000 --- a/server/api/routes/authRoutes.js +++ /dev/null @@ -1,24 +0,0 @@ -import express from 'express'; -import { registerAccount, loginAccount, getAccount } from '../controllers/authControllers.js'; - -// initialize router -const router = express.Router(); - -// example: empty middleware -const middleware = (request, response, next) => next(); - -/* - request methods ---> https://www.tutorialspoint.com/http/http_methods.htm - 1st param = extended url path - 2nd param = middlewares (optional) - 3rd param = request & response function (controller) -*/ - -// POST at route: http://localhost:8080/auth/register -router.post('/register', middleware, registerAccount); -// POST at path: http://localhost:8080/auth/login -router.post('/login', middleware, loginAccount); -// GET at path: http://localhost:8080/auth/account -router.get('/account', middleware, getAccount); - -export default router; diff --git a/server/constants/index.js b/server/constants/index.js new file mode 100644 index 0000000..9472c84 --- /dev/null +++ b/server/constants/index.js @@ -0,0 +1,16 @@ +const ORIGIN = '*' +const PORT = process.env.PORT || 8080 + +// for "atlas" edit MONGO_URI in -> .env file || for "community server" edit +const MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017/MyDatabase' +const MONGO_OPTIONS = {} + +const JWT_SECRET = process.env.JWT_SECRET || 'unsafe_secret' + +module.exports = { + ORIGIN, + PORT, + MONGO_URI, + MONGO_OPTIONS, + JWT_SECRET, +} diff --git a/server/controllers/auth/get-account.js b/server/controllers/auth/get-account.js new file mode 100644 index 0000000..125b340 --- /dev/null +++ b/server/controllers/auth/get-account.js @@ -0,0 +1,20 @@ +const Account = require('../../models/Account') + +async function getAccount(request, response, next) { + try { + const {uid} = request.auth + + // Get account from DB, existance not verified because we are already authorized at this point + const foundAccount = await Account.findOne({_id: uid}).select('-password') + + response.status(200).json({ + message: 'Account fetched', + data: foundAccount, + }) + } catch (error) { + console.error(error) + response.status(500).send() + } +} + +module.exports = getAccount diff --git a/server/controllers/auth/login.js b/server/controllers/auth/login.js new file mode 100644 index 0000000..b524776 --- /dev/null +++ b/server/controllers/auth/login.js @@ -0,0 +1,59 @@ +const joi = require('joi') +const bcrypt = require('bcrypt') +const Account = require('../../models/Account') +const {signToken} = require('../../middlewares/jsonwebtoken') + +async function login(request, response, next) { + try { + // Validate request data + await joi + .object({ + username: joi.string().required(), + password: joi.string().required(), + }) + .validateAsync(request.body) + } catch (error) { + return response.status(400).json({ + error: 'ValidationError', + message: error.message, + }) + } + + try { + const {username, password} = request.body + + // Get account from DB, and verify existance + const foundAccount = await Account.findOne({username}) + if (!foundAccount) { + return response.status(400).json({ + message: 'Bad credentials', + }) + } + + // Decrypt and verify password + const passOk = await bcrypt.compare(password, foundAccount.password) + if (!passOk) { + return response.status(400).json({ + message: 'Bad credentials', + }) + } + + // Remove password from response data + foundAccount.password = undefined + delete foundAccount.password + + // Generate access token + const token = signToken({uid: foundAccount._id}) + + response.status(200).json({ + message: 'Succesfully logged-in', + data: foundAccount, + token, + }) + } catch (error) { + console.error(error) + response.status(500).send() + } +} + +module.exports = login diff --git a/server/controllers/auth/register.js b/server/controllers/auth/register.js new file mode 100644 index 0000000..41e588e --- /dev/null +++ b/server/controllers/auth/register.js @@ -0,0 +1,60 @@ +const joi = require('joi') +const bcrypt = require('bcrypt') +const Account = require('../../models/Account') +const {signToken} = require('../../middlewares/jsonwebtoken') + +async function register(request, response, next) { + try { + // Validate request data + await joi + .object({ + username: joi.string().required(), + password: joi.string().required(), + }) + .validateAsync(request.body) + } catch (error) { + return response.status(400).json({ + error: 'ValidationError', + message: error.message, + }) + } + + try { + const {username, password} = request.body + + // Verify account username as unique + const existingAccount = await Account.findOne({username}) + if (existingAccount) { + return response.status(400).json({ + error: username, + message: 'An account already exists with that "username"', + }) + } + + // Encrypt password + const salt = await bcrypt.genSalt(10) + const hash = await bcrypt.hash(password, salt) + + // Create account + const newAccount = new Account({username, password: hash}) + await newAccount.save() + + // Remove password from response data + newAccount.password = undefined + delete newAccount.password + + // Generate access token + const token = signToken({uid: newAccount._id}) + + response.status(201).json({ + message: 'Succesfully registered', + data: newAccount, + token, + }) + } catch (error) { + console.error(error) + return response.status(500).send() + } +} + +module.exports = register diff --git a/server/index.js b/server/index.js index 6de608c..360d086 100644 --- a/server/index.js +++ b/server/index.js @@ -1,42 +1,19 @@ -import mongoose from 'mongoose'; // MongoDB (database) -import express from 'express'; // Backend App (server) -import dotenv from 'dotenv'; // Secures variables -import cors from 'cors'; // HTTP headers (enable requests) -import morgan from 'morgan'; // Logs incoming requests -import authRoutes from './api/routes/authRoutes.js'; -// ^ ^ ^ how to use imported route(s) +require('dotenv').config() // Secures variables +const app = require('./utils/app') // Backend App (server) +const mongo = require('./utils/mongo') // MongoDB (database) +const {PORT} = require('./constants') +const authRoutes = require('./routes/auth') -// initialize app -const app = express(); -const origin = '*'; // allow source of requests (* --> everywhere) +async function bootstrap() { + await mongo.connect() -// middlewares -dotenv.config(); -app.use(cors({ origin })); -app.use(express.json({ limit: '1mb', extended: false })); // body parser -app.use(express.urlencoded({ limit: '1mb', extended: false })); // url parser -app.use(morgan('common')); + app.get('/', (req, res) => res.status(200).json({message: 'Hello World!'})) + app.get('/healthz', (req, res) => res.status(200).send()) + app.use('/auth', authRoutes) -// configure db: -// for "atlas" edit MONGO_URI in -> .env file || for "community server" edit -const CONNECTION_URL = process.env.MONGO_URI || 'mongodb://localhost:27017/'; -const DEPRECATED_FIX = { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true }; + app.listen(PORT, () => { + console.log(`✅ Server is listening on port: ${PORT}`) + }) +} -// connect to db -mongoose - .connect(CONNECTION_URL, DEPRECATED_FIX) - .catch((error) => console.log('❌ MongoDB connection error', error)); // listen for errors on initial connection - -const db = mongoose.connection; -db.on('connected', () => console.log('✅ MongoDB connected')); // connected -db.on('disconnected', () => console.log('❌ MongoDB disconnected')); // disconnected -db.on('error', (error) => console.log('❌ MongoDB connection error', error)); // listen for errors during the session - -// define routes -app.get('/', (request, response, next) => response.status(200).json({ message: 'Hello World!' })); -app.use('/auth', authRoutes); -// ^ ^ ^ how to use imported route(s) - -// listen for requests -const PORT = process.env.PORT || 8080; -app.listen(PORT, () => console.log(`✅ Server is listening on port: ${PORT}`)); +bootstrap() diff --git a/server/middlewares/jsonwebtoken.js b/server/middlewares/jsonwebtoken.js new file mode 100644 index 0000000..a60d1f9 --- /dev/null +++ b/server/middlewares/jsonwebtoken.js @@ -0,0 +1,39 @@ +const jwt = require('jsonwebtoken') +const {JWT_SECRET} = require('../constants') + +const signToken = (payload = {}, expiresIn = '12h') => { + const token = jwt.sign(payload, JWT_SECRET, {expiresIn}) + + return token +} + +const authorizeBearerToken = (request, response, next) => { + try { + const token = request.headers.authorization?.split(' ')[1] + if (!token) { + return response.status(400).json({ + message: 'Token not provided', + }) + } + + const auth = jwt.verify(token, JWT_SECRET) + if (!auth) { + return response.status(401).json({ + message: 'Unauthorized - invalid token', + }) + } + + request.auth = auth + next() + } catch (error) { + console.error(error) + return response.status(401).json({ + message: 'Unauthorized - invalid token', + }) + } +} + +module.exports = { + authorizeBearerToken, + signToken, +} diff --git a/server/api/models/Account.js b/server/models/Account.js similarity index 54% rename from server/api/models/Account.js rename to server/models/Account.js index 2704c18..782b5ff 100644 --- a/server/api/models/Account.js +++ b/server/models/Account.js @@ -1,4 +1,4 @@ -import mongoose from 'mongoose'; +const mongoose = require('mongoose') const instance = new mongoose.Schema( { @@ -7,22 +7,23 @@ const instance = new mongoose.Schema( _id: mongoose.Schema.Types.ObjectId, */ - // key: Type, - email: String, - password: String, + username: { + type: String, + required: true, + unique: true, + }, + password: { + type: String, + required: true, + }, }, { timestamps: true, - // ^ ^ ^ this creates and maintains: - // { - // createdAt: Date, - // updatedAt: Date, - // } }, -); +) // NOTE! use a singular model name, mongoose automatically creates a collection like so: // model: 'Account' === collection: 'accounts' -const modelName = 'Account'; +const modelName = 'Account' -export default mongoose.model(modelName, instance); +module.exports = mongoose.model(modelName, instance) diff --git a/server/package-lock.json b/server/package-lock.json index 07f35af..246c394 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -8,34 +8,140 @@ "version": "0.1.0", "license": "ISC", "dependencies": { + "bcrypt": "^5.0.1", "cors": "^2.8.5", - "dotenv": "^8.2.0", + "dotenv": "^10.0.0", "express": "^4.17.1", - "mongoose": "^5.12.0", - "morgan": "^1.10.0" + "joi": "^17.4.2", + "jsonwebtoken": "^8.5.1", + "mongoose": "^6.0.7" + }, + "devDependencies": { + "nodemon": "^2.0.13" } }, - "node_modules/@types/bson": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", - "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", + "node_modules/@hapi/hoek": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", + "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dependencies": { - "@types/node": "*" + "@hapi/hoek": "^9.0.0" } }, - "node_modules/@types/mongodb": { - "version": "3.6.9", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.9.tgz", - "integrity": "sha512-2XSGr/+IOKeFQ5tU9ATcIiIr7bpHqWyOXNGLOOhp0kg2NnfEvoKZF1SZ25j4zvJRqM2WeSUjfWSvymFJ3HBGJQ==", + "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==", "dependencies": { - "@types/bson": "*", - "@types/node": "*" + "detect-libc": "^1.0.3", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.1", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "rimraf": "^3.0.2", + "semver": "^7.3.4", + "tar": "^6.1.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", + "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" } }, "node_modules/@types/node": { - "version": "14.14.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.34.tgz", - "integrity": "sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA==" + "version": "16.9.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.6.tgz", + "integrity": "sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ==" + }, + "node_modules/@types/webidl-conversions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", + "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/accepts": { "version": "1.3.7", @@ -49,36 +155,199 @@ "node": ">= 0.6" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "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==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "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==", + "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/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 + }, + "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" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/bcrypt": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", + "integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==", + "hasInstallScript": true, "dependencies": { - "safe-buffer": "5.1.2" + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^3.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 10.0.0" } }, - "node_modules/bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, "node_modules/body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -99,14 +368,88 @@ "node": ">= 0.8" } }, - "node_modules/bson": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==", + "node_modules/boxen": { + "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": "^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": ">=0.6.19" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.5.2.tgz", + "integrity": "sha512-8CEMJpwc7qlQtrn2rney38jQSEeMar847lz0LyitwRmVknAW8iHXrzW4fTjHfyWm0E3sukyD/zppdH+QU1QefA==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, "node_modules/bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -115,6 +458,206 @@ "node": ">= 0.8" } }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "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": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "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", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "node_modules/content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -148,9 +691,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", @@ -164,6 +707,15 @@ "node": ">= 0.10" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -172,10 +724,42 @@ "ms": "2.0.0" } }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "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" } @@ -193,19 +777,62 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "node_modules/dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, "engines": { "node": ">=8" } }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "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/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -214,6 +841,24 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -267,6 +912,18 @@ "node": ">= 0.10.0" } }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -300,6 +957,209 @@ "node": ">= 0.6" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/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=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "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", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "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": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "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/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, "node_modules/http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -315,6 +1175,39 @@ "node": ">= 0.6" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -326,11 +1219,72 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "node_modules/ini": { + "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", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -339,16 +1293,298 @@ "node": ">= 0.10" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "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": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "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": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "node_modules/joi": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.2.tgz", + "integrity": "sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/kareem": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -406,156 +1642,161 @@ "node": ">= 0.6" } }, - "node_modules/mongodb": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.4.tgz", - "integrity": "sha512-Y+Ki9iXE9jI+n9bVtbTOOdK0B95d6wVGSucwtBkvQ+HIvVdTCfpVRp01FDC24uhC/Q2WXQ8Lpq3/zwtB5Op9Qw==", - "dependencies": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2" - }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, "engines": { "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/minipass": { + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mongodb": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.1.tgz", + "integrity": "sha512-fbACrWEyvr6yl0sSiCGV0sqEiBwTtDJ8iSojmkDjAfw9JnOZSAkUyv9seFSPYhPPKwxp1PDtyjvBNfMDz0WBLQ==", + "dependencies": { + "bson": "^4.5.1", + "denque": "^1.5.0", + "mongodb-connection-string-url": "^2.0.0" + }, + "engines": { + "node": ">=12.9.0" }, "optionalDependencies": { "saslprep": "^1.0.0" - }, - "peerDependenciesMeta": { - "aws4": { - "optional": true - }, - "bson-ext": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "mongodb-extjson": { - "optional": true - }, - "snappy": { - "optional": true - } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.1.0.tgz", + "integrity": "sha512-Qf9Zw7KGiRljWvMrrUFDdVqo46KIEiDuCzvEN97rh/PcKzk2bd6n9KuzEwBwW9xo5glwx69y1mI6s+jFUD/aIQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^9.1.0" } }, "node_modules/mongoose": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.0.tgz", - "integrity": "sha512-s0Qpgf5lOk3AXtKnE+FA0HZhFKa2hesGVcTmx1wfTQ+7Q7ph0E79B6KUp1ZQERQyCwuE8WQ4wWllEhd7VPkxOg==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.0.7.tgz", + "integrity": "sha512-44STDcV6awu0zfo1Z3NyKPHZwfVrGU93/QgR0gYbt4bik/nEa7lI1RRGcq5oyGM0YE7l63i2j80v1OhvrlFvYw==", "dependencies": { - "@types/mongodb": "^3.5.27", - "bson": "^1.1.4", + "bson": "^4.2.2", "kareem": "2.3.2", - "mongodb": "3.6.4", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", - "mquery": "3.2.4", + "mongodb": "4.1.1", + "mpath": "0.8.4", + "mquery": "4.0.0", "ms": "2.1.2", "regexp-clone": "1.0.0", - "safe-buffer": "5.2.1", - "sift": "7.0.1", + "sift": "13.5.2", "sliced": "1.0.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mongoose" } }, - "node_modules/mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", - "peerDependencies": { - "mongoose": "*" - } - }, "node_modules/mongoose/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/mongoose/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/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/morgan/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/mpath": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", - "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", + "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==", "engines": { "node": ">=4.0.0" } }, "node_modules/mquery": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.4.tgz", - "integrity": "sha512-uOLpp7iRX0BV1Uu6YpsqJ5b42LwYnmu0WeF/f8qgD/On3g0XDaQM6pfn0m6UxO6SM8DioZ9Bk6xxbWIGHm2zHg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.0.tgz", + "integrity": "sha512-nGjm89lHja+T/b8cybAby6H0YgA4qYC/lx6UlwvHGqvTq8bDaNeCwl1sY8uRELrNbVWJzIihxVd+vphGGn1vBw==", "dependencies": { - "bluebird": "3.5.1", - "debug": "3.1.0", + "debug": "4.x", "regexp-clone": "^1.0.0", - "safe-buffer": "5.1.2", "sliced": "1.0.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=12.0.0" } }, "node_modules/mquery/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dependencies": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -569,6 +1810,137 @@ "node": ">= 0.6" } }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + }, + "node_modules/node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/node-fetch/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/node-fetch/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": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/nodemon": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.13.tgz", + "integrity": "sha512-UMXMpsZsv1UXUttCn6gv8eQPhn6DR4BW+txnL3IN5IHqrCwcrT/yWHfL35UsClGXknTH79r5xbu+6J1zNHuSyA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^5.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "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=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -588,12 +1960,45 @@ "node": ">= 0.8" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, "node_modules/parseurl": { @@ -604,11 +2009,40 @@ "node": ">= 0.8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -626,6 +2060,42 @@ "node": ">= 0.10" } }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -656,6 +2126,27 @@ "node": ">= 0.8" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "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": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -670,26 +2161,68 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/regexp-clone": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" }, - "node_modules/require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, "dependencies": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/safe-buffer": { @@ -722,6 +2255,27 @@ "semver": "bin/semver" } }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -764,15 +2318,25 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "node_modules/setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, "node_modules/sift": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", - "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", + "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + }, + "node_modules/signal-exit": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz", + "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==" }, "node_modules/sliced": { "version": "1.0.1", @@ -804,6 +2368,90 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar": { + "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", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -812,6 +2460,41 @@ "node": ">=0.6" } }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-fest": { + "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": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -824,6 +2507,36 @@ "node": ">= 0.6" } }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "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" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -832,6 +2545,61 @@ "node": ">= 0.8" } }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "dependencies": { + "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.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "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": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -852,30 +2620,239 @@ "engines": { "node": ">= 0.8" } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-url": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", + "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", + "dependencies": { + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-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=", + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } }, "dependencies": { - "@types/bson": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", - "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", + "@hapi/hoek": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", + "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "requires": { - "@types/node": "*" + "@hapi/hoek": "^9.0.0" } }, - "@types/mongodb": { - "version": "3.6.9", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.9.tgz", - "integrity": "sha512-2XSGr/+IOKeFQ5tU9ATcIiIr7bpHqWyOXNGLOOhp0kg2NnfEvoKZF1SZ25j4zvJRqM2WeSUjfWSvymFJ3HBGJQ==", + "@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==", "requires": { - "@types/bson": "*", - "@types/node": "*" + "detect-libc": "^1.0.3", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.1", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "rimraf": "^3.0.2", + "semver": "^7.3.4", + "tar": "^6.1.0" + }, + "dependencies": { + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@sideway/address": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", + "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" } }, "@types/node": { - "version": "14.14.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.34.tgz", - "integrity": "sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA==" + "version": "16.9.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.6.tgz", + "integrity": "sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ==" + }, + "@types/webidl-conversions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + }, + "@types/whatwg-url": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", + "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", + "requires": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.7", @@ -886,32 +2863,146 @@ "negotiator": "0.6.2" } }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "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 + }, + "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 + }, + "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" + } + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", + "integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==", "requires": { - "safe-buffer": "5.1.2" + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^3.1.0" } }, - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true }, "body-parser": { "version": "1.19.0", @@ -930,16 +3021,218 @@ "type-is": "~1.6.17" } }, + "boxen": { + "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": "^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": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "bson": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.5.2.tgz", + "integrity": "sha512-8CEMJpwc7qlQtrn2rney38jQSEeMar847lz0LyitwRmVknAW8iHXrzW4fTjHfyWm0E3sukyD/zppdH+QU1QefA==", + "requires": { + "buffer": "^5.6.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "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", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -964,9 +3257,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", @@ -977,6 +3270,12 @@ "vary": "^1" } }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -985,10 +3284,36 @@ "ms": "2.0.0" } }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "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", @@ -1000,21 +3325,70 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "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 + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1062,6 +3436,15 @@ "vary": "~1.1.2" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -1086,6 +3469,162 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "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" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "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", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "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": "2.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -1098,6 +3637,30 @@ "toidentifier": "1.0.0" } }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1106,26 +3669,292 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "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 + }, + "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==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "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": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-npm": { + "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": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "joi": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.2.tgz", + "integrity": "sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw==", + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "kareem": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1165,35 +3994,81 @@ "mime-db": "1.46.0" } }, - "mongodb": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.4.tgz", - "integrity": "sha512-Y+Ki9iXE9jI+n9bVtbTOOdK0B95d6wVGSucwtBkvQ+HIvVdTCfpVRp01FDC24uhC/Q2WXQ8Lpq3/zwtB5Op9Qw==", + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minipass": { + "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" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "mongodb": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.1.tgz", + "integrity": "sha512-fbACrWEyvr6yl0sSiCGV0sqEiBwTtDJ8iSojmkDjAfw9JnOZSAkUyv9seFSPYhPPKwxp1PDtyjvBNfMDz0WBLQ==", + "requires": { + "bson": "^4.5.1", + "denque": "^1.5.0", + "mongodb-connection-string-url": "^2.0.0", "saslprep": "^1.0.0" } }, - "mongoose": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.0.tgz", - "integrity": "sha512-s0Qpgf5lOk3AXtKnE+FA0HZhFKa2hesGVcTmx1wfTQ+7Q7ph0E79B6KUp1ZQERQyCwuE8WQ4wWllEhd7VPkxOg==", + "mongodb-connection-string-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.1.0.tgz", + "integrity": "sha512-Qf9Zw7KGiRljWvMrrUFDdVqo46KIEiDuCzvEN97rh/PcKzk2bd6n9KuzEwBwW9xo5glwx69y1mI6s+jFUD/aIQ==", "requires": { - "@types/mongodb": "^3.5.27", - "bson": "^1.1.4", + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^9.1.0" + } + }, + "mongoose": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.0.7.tgz", + "integrity": "sha512-44STDcV6awu0zfo1Z3NyKPHZwfVrGU93/QgR0gYbt4bik/nEa7lI1RRGcq5oyGM0YE7l63i2j80v1OhvrlFvYw==", + "requires": { + "bson": "^4.2.2", "kareem": "2.3.2", - "mongodb": "3.6.4", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", - "mquery": "3.2.4", + "mongodb": "4.1.1", + "mpath": "0.8.4", + "mquery": "4.0.0", "ms": "2.1.2", "regexp-clone": "1.0.0", - "safe-buffer": "5.2.1", - "sift": "7.0.1", + "sift": "13.5.2", "sliced": "1.0.1" }, "dependencies": { @@ -1201,63 +4076,36 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "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==" - } - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", - "requires": {} - }, - "morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "requires": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" } } }, "mpath": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", - "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", + "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==" }, "mquery": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.4.tgz", - "integrity": "sha512-uOLpp7iRX0BV1Uu6YpsqJ5b42LwYnmu0WeF/f8qgD/On3g0XDaQM6pfn0m6UxO6SM8DioZ9Bk6xxbWIGHm2zHg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.0.tgz", + "integrity": "sha512-nGjm89lHja+T/b8cybAby6H0YgA4qYC/lx6UlwvHGqvTq8bDaNeCwl1sY8uRELrNbVWJzIihxVd+vphGGn1vBw==", "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", + "debug": "4.x", "regexp-clone": "^1.0.0", - "safe-buffer": "5.1.2", "sliced": "1.0.1" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -1271,6 +4119,112 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + }, + "node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "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": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "nodemon": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.13.tgz", + "integrity": "sha512-UMXMpsZsv1UXUttCn6gv8eQPhn6DR4BW+txnL3IN5IHqrCwcrT/yWHfL35UsClGXknTH79r5xbu+6J1zNHuSyA==", + "dev": true, + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^5.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "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==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "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", @@ -1284,21 +4238,67 @@ "ee-first": "1.1.1" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -1313,6 +4313,36 @@ "ipaddr.js": "1.9.1" } }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -1334,6 +4364,26 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "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": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -1348,24 +4398,54 @@ "util-deprecate": "~1.0.1" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "regexp-clone": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" + "rc": "^1.2.8" } }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } }, "safe-buffer": { "version": "5.1.2", @@ -1391,6 +4471,23 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -1429,15 +4526,25 @@ "send": "0.17.1" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, "sift": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", - "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", + "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + }, + "signal-exit": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz", + "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==" }, "sliced": { "version": "1.0.1", @@ -1466,11 +4573,97 @@ "safe-buffer": "~5.1.0" } }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "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", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "requires": { + "punycode": "^2.1.1" + } + }, + "type-fest": { + "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": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1480,11 +4673,80 @@ "mime-types": "~2.1.24" } }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "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" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "requires": { + "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.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -1499,6 +4761,105 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "whatwg-url": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", + "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", + "requires": { + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "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=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "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", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } } diff --git a/server/package.json b/server/package.json index 0314b66..6c77bd0 100644 --- a/server/package.json +++ b/server/package.json @@ -1,19 +1,22 @@ { - "homepage": "", "name": "server", "version": "0.1.0", - "description": "", + "private": true, "main": "index.js", - "type": "module", - "scripts": { - "start": "nodemon server.js || node index.js" - }, "license": "ISC", + "scripts": { + "start": "nodemon index.js || node index.js" + }, "dependencies": { + "bcrypt": "^5.0.1", "cors": "^2.8.5", - "dotenv": "^8.2.0", + "dotenv": "^10.0.0", "express": "^4.17.1", - "mongoose": "^5.12.0", - "morgan": "^1.10.0" + "joi": "^17.4.2", + "jsonwebtoken": "^8.5.1", + "mongoose": "^6.0.7" + }, + "devDependencies": { + "nodemon": "^2.0.13" } } diff --git a/server/routes/auth.js b/server/routes/auth.js new file mode 100644 index 0000000..034d043 --- /dev/null +++ b/server/routes/auth.js @@ -0,0 +1,19 @@ +const express = require('express') +const {authorizeBearerToken} = require('../middlewares/jsonwebtoken') +const register = require('../controllers/auth/register') +const login = require('../controllers/auth/login') +const getAccount = require('../controllers/auth/get-account') + +// initialize router +const router = express.Router() + +// POST at route: http://localhost:8080/auth/register +router.post('/register', [], register) + +// POST at path: http://localhost:8080/auth/login +router.post('/login', [], login) + +// GET at path: http://localhost:8080/auth/account +router.get('/account', [authorizeBearerToken], getAccount) + +module.exports = router diff --git a/server/utils/app.js b/server/utils/app.js new file mode 100644 index 0000000..9dd3732 --- /dev/null +++ b/server/utils/app.js @@ -0,0 +1,20 @@ +const express = require('express') // Backend App (server) +const cors = require('cors') // HTTP headers (enable requests) +const {ORIGIN} = require('../constants') + +// initialize app +const app = express() + +// middlewares +app.use(cors({origin: ORIGIN})) +app.use(express.json({extended: true})) // body parser +app.use(express.urlencoded({extended: false})) // url parser + +// error handling +app.use((err, req, res, next) => { + console.error(err) + res.status(500).send() + next() +}) + +module.exports = app diff --git a/server/utils/mongo.js b/server/utils/mongo.js new file mode 100644 index 0000000..b2ffed6 --- /dev/null +++ b/server/utils/mongo.js @@ -0,0 +1,32 @@ +const mongoose = require('mongoose') +const {MONGO_URI} = require('../constants') +const {MONGO_OPTIONS} = require('../constants') + +class MongoDB { + constructor() { + this.mongoose = mongoose + this.isConnected = false + this.MONGO_URI = MONGO_URI + this.MONGO_OPTIONS = MONGO_OPTIONS + } + + async connect() { + if (this.isConnected) return + + try { + const db = await this.mongoose.connect(this.MONGO_URI, this.MONGO_OPTIONS) + const connection = db.connection + + this.isConnected = connection.readyState === 1 + if (this.isConnected) console.log('✅ MongoDB connected') + + connection.on('connected', () => console.log('✅ MongoDB connected')) // re-connected + connection.on('disconnected', () => console.log('❌ MongoDB disconnected')) // disconnected + connection.on('error', (error) => console.log('❌ MongoDB connection error', error)) // listen for errors during the session + } catch (error) { + console.log('❌ MongoDB connection error:', error.message) + } + } +} + +module.exports = new MongoDB()