diff --git a/.github/workflows/main.yaml b/.github/workflows/all-merges.yaml
similarity index 70%
rename from .github/workflows/main.yaml
rename to .github/workflows/all-merges.yaml
index b7dea006a..d00f4824d 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/all-merges.yaml
@@ -1,23 +1,14 @@
name: Build VMRS App
on:
- push:
- branches: [development]
pull_request:
branches: [development]
jobs:
- test-and-push-docker:
+ push-docker-container:
runs-on: ubuntu-latest
+ if: github.event.pull_request.merged == true
steps:
- uses: actions/checkout@v2
- - name: Build the backend container
- run: docker-compose -f docker-compose-ci.yaml build backend
- - name: Run backend test suite
- run: docker-compose -f docker-compose-ci.yaml run --rm backend yarn run test --testPathIgnorePatterns=routers
- - name: Build the frontend container
- run: docker-compose build client
- - name: Run frontend test suite
- run: docker-compose run --rm client yarn run test
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
@@ -27,17 +18,8 @@ jobs:
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- - name: Build and push backend
- uses: docker/build-push-action@v2
- with:
- context: ./backend
- file: ./backend/Dockerfile.api
- target: api-production
- platforms: linux/amd64
- push: true
- tags: |
- vrmsdeploy/vrms:backend
- name: Build and push client
+ id: client_build
uses: docker/build-push-action@v2
with:
context: ./client
@@ -48,8 +30,25 @@ jobs:
push: true
tags: |
vrmsdeploy/vrms:client
+ - name: Client digest
+ run: echo ${{ steps.client_build.outputs.digest }}
+ - name: Build and push backend
+ id: backend_build
+ uses: docker/build-push-action@v2
+ with:
+ context: ./backend
+ file: ./backend/Dockerfile.api
+ platforms: linux/amd64
+ target: api-production
+ stdin_open: true
+ push: true
+ tags: |
+ vrmsdeploy/vrms:backend
+ - name: Backend digest
+ run: echo ${{ steps.backend_build.outputs.digest }}
- name: Build and push nginx
uses: docker/build-push-action@v2
+ id: nginx_build
with:
context: ./nginx
file: ./nginx/Dockerfile.nginx
@@ -57,5 +56,5 @@ jobs:
push: true
tags: |
vrmsdeploy/vrms:nginx
- - name: Image digest
- run: echo ${{ steps.docker_build.outputs.digest }}
+ - name: Nginx digest
+ run: echo ${{ steps.nginx_build.outputs.digest }}
diff --git a/.github/workflows/all-prs.yaml b/.github/workflows/all-prs.yaml
new file mode 100644
index 000000000..6390ed37d
--- /dev/null
+++ b/.github/workflows/all-prs.yaml
@@ -0,0 +1,18 @@
+name: Build VMRS App
+on:
+ pull_request:
+ branches: [development]
+
+jobs:
+ run-unit-tests:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Build the backend container
+ run: docker-compose -f docker-compose-ci.yaml build backend
+ - name: Run backend test suite
+ run: docker-compose -f docker-compose-ci.yaml run --rm backend yarn run test --testPathIgnorePatterns=routers
+ - name: Build the frontend container
+ run: docker-compose build client
+ - name: Run frontend test suite
+ run: docker-compose run --rm client yarn run test
diff --git a/backend/README.md b/backend/README.md
index f1018a210..4362a1695 100644
--- a/backend/README.md
+++ b/backend/README.md
@@ -16,32 +16,19 @@ You will need to be in the backend directory for this to work.
To maintain idempotent tests, we have opted to use in memory test databases. Jest, like
most test runners, has hooks or methods for you to call before or after tests. We can
-call the `beforeAll` and `afterAll` methods setup and tear down our database before each
-test.
+can setup our db and tear it down by importing the `setupDB` module.
```js
// You will need to require the db-handler file.
- const dbHandler = require("./db-handler");
+ const { setupDB } = require("../setup-test");
- // Call the dbHanlder methods in your beforeAll and afterAll methods.
- beforeAll(async () => await dbHandler.connect());
- afterAll(async () => await dbHandler.closeDatabase());
+ // You will need to name the in memory DB for this test.
+ setupDB("api-auth");
```
-In addition to hooks to call after the file is completed, Jest also has hooks/methods to
-call before and after each test case. **At this time, the `dbHandler` method for clearing
-the database does not work, so you can remove each collection manually if needed.
-
- ```js
- // You will need to require the db-handler file.
- const dbHandler = require("./db-handler");
-
- // You will need to get the Model.
- const Event = require("../models/event.model.js");
-
- // Then you can delete the Collection in the db beforeAll or afterAll.
- afterEach(async () => await Event.remove({}));
- ```
+If you are unsure of where to start, then find a test that does something similar to your
+aims. Copy, tweak, and run that test until you have your desired outcome. Also make sure
+to give your test it's own name.
### Unit Tests
diff --git a/backend/app.js b/backend/app.js
index a71513857..c515787dc 100644
--- a/backend/app.js
+++ b/backend/app.js
@@ -7,6 +7,7 @@ const cron = require("node-cron");
const fetch = require("node-fetch");
const morgan = require("morgan");
const path = require("path");
+const cookieParser = require("cookie-parser");
require("dotenv").config();
@@ -17,6 +18,9 @@ const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
+// Used to save JWT token from MagicLink
+app.use(cookieParser());
+
// HTTP Request Logger
app.use(morgan("dev"));
diff --git a/backend/config/auth.config.js b/backend/config/auth.config.js
index 74d8c4e1d..fb968cd21 100644
--- a/backend/config/auth.config.js
+++ b/backend/config/auth.config.js
@@ -3,5 +3,6 @@ module.exports = {
SECRET:
'c0d7d0716e4cecffe9dcc77ff90476d98f5aace08ea40f5516bd982b06401021191f0f24cd6759f7d8ca41b64f68d0b3ad19417453bddfd1dbe8fcb197245079',
CUSTOM_REQUEST_HEADER: process.env.CUSTOM_REQUEST_HEADER,
+ TOKEN_EXPIRATION_SEC: 900,
};
/* eslint-enable */
\ No newline at end of file
diff --git a/backend/controllers/email.controller.js b/backend/controllers/email.controller.js
index c2af33431..578669ee4 100644
--- a/backend/controllers/email.controller.js
+++ b/backend/controllers/email.controller.js
@@ -45,7 +45,7 @@ async function mailServer(email, token) {
});
}
const encodedToken = encodeURIComponent(token);
- const emailLink = `https://tinyurl.com/2drxdk/auth/me?token=${encodedToken}`;
+ const emailLink = `https://tinyurl.com/nyqxd/handleauth?token=${encodedToken}&signIn=true`;
const encodedUri = encodeURI(emailLink);
const mailOptions = {
from: EMAIL_ACCOUNT,
@@ -54,7 +54,7 @@ async function mailServer(email, token) {
html: `
LOGIN HERE
`,
- text: `Magic link: ${encodedUri}`,
+ text: `Magic link: ${emailLink}`,
};
const localhostEmail = async () => {
diff --git a/backend/controllers/user.controller.js b/backend/controllers/user.controller.js
index eeadf5657..9395d15c3 100644
--- a/backend/controllers/user.controller.js
+++ b/backend/controllers/user.controller.js
@@ -8,10 +8,11 @@ const DB = require('../models');
const User = DB.user;
-
function generateAccessToken(user) {
// expires after half and hour (1800 seconds = 30 minutes)
- return jwt.sign({ id: user.id }, CONFIG.SECRET, { expiresIn: '1800s' });
+ return jwt.sign({ id: user.id, role: user.accessLevel }, CONFIG.SECRET, {
+ expiresIn: `${CONFIG.TOKEN_EXPIRATION_SEC}s`,
+ });
}
function createUser(req, res) {
@@ -28,9 +29,8 @@ function createUser(req, res) {
user.save((err, usr) => {
if (err) {
return res.status(500).send({ message: err });
- }
- return res.status(200).send({ message: 'User was registered successfully!' });
-
+ }
+ return res.status(200).send({ message: 'User was registered successfully!' });
});
const jsonToken = generateAccessToken(user);
@@ -57,10 +57,34 @@ function signin(req, res) {
});
}
+function verifySignIn(req, res) {
+ let token = req.headers['x-access-token'] || req.headers['authorization'];
+
+ if (!token) {
+ return res.status(403).send({ message: 'Auth token is not supplied' });
+ }
+ if (token.startsWith('Bearer ')) {
+ // Remove Bearer from string
+ token = token.slice(7, token.length);
+ }
+
+ jwt.verify(token, CONFIG.SECRET, (err, decoded) => {
+ if (err) {
+ return res.status(401).send({ message: err });
+ }
+ res.cookie('token', token, { httpOnly: true });
+ res.sendStatus(200);
+ });
+}
+
+function verifyMe(req, res) {
+ res.send(200);
+}
+
async function validateCreateUserAPICall(req, res, next) {
await body('name.firstName').not().isEmpty().trim().escape().run(req);
await body('name.lastName').not().isEmpty().trim().escape().run(req);
- await body('email', 'Invalid email').exists().isEmail().normalizeEmail().run(req);
+ await body('email', 'Invalid email').exists().isEmail().normalizeEmail({ gmail_remove_dots: false }).run(req);
// Finds the validation errors in this request and wraps them in an object with handy functions
const errors = validationResult(req);
@@ -72,7 +96,7 @@ async function validateCreateUserAPICall(req, res, next) {
}
async function validateSigninUserAPICall(req, res, next) {
- await body('email', 'Invalid email').exists().isEmail().normalizeEmail().run(req);
+ await body('email', 'Invalid email').exists().isEmail().normalizeEmail({ gmail_remove_dots: false }).run(req);
// Finds the validation errors in this request and wraps them in an object with handy functions
const errors = validationResult(req);
@@ -88,6 +112,8 @@ const userController = {
validateSigninUserAPICall,
createUser,
signin,
+ verifySignIn,
+ verifyMe,
};
module.exports = userController;
diff --git a/backend/middleware/authJwt.js b/backend/middleware/authJwt.js
index ceb05e26f..85ac7a835 100644
--- a/backend/middleware/authJwt.js
+++ b/backend/middleware/authJwt.js
@@ -2,23 +2,41 @@ const jwt = require('jsonwebtoken');
const CONFIG = require('../config/auth.config.js');
function verifyToken(req, res, next) {
- const token = req.headers['x-access-token'];
+ let token = req.headers['x-access-token'] || req.headers['authorization'];
if (!token) {
- return res.status(403).send({ message: 'No token provided!' });
+ return res.status(403).send({ message: 'Auth token is not supplied' });
+ }
+ if (token.startsWith('Bearer ')) {
+ // Remove Bearer from string
+ token = token.slice(7, token.length);
}
jwt.verify(token, CONFIG.SECRET, (err, decoded) => {
if (err) {
- return res.status(401).send({ message: 'Unauthorized!' });
+ return res.status(401).send({ message: err });
}
+ res.cookie('token', token, { httpOnly: true });
req.userId = decoded.id;
return next();
});
return next();
}
+function verifyCookie(req, res, next) {
+ jwt.verify(req.cookies.token, CONFIG.SECRET, (err, decoded) => {
+ if (err) {
+ return res.status(401).send({ message: err });
+ }
+ req.userId = decoded.id;
+ req.role = decoded.accessLevel;
+
+ next();
+ });
+}
+
const authJwt = {
verifyToken,
+ verifyCookie,
};
module.exports = authJwt;
diff --git a/backend/middleware/verifyUser.js b/backend/middleware/verifyUser.js
index 9c4a466df..4bfc77b65 100644
--- a/backend/middleware/verifyUser.js
+++ b/backend/middleware/verifyUser.js
@@ -15,7 +15,7 @@ function checkDuplicateEmail(req, res, next) {
});
}
-function isAdmin(req, res, next) {
+function isAdminByEmail(req, res, next) {
User.findOne({ email: req.body.email }).then((user) => {
if (!user) {
res.status(400).send({
@@ -38,7 +38,7 @@ function isAdmin(req, res, next) {
const verifyUser = {
checkDuplicateEmail,
- isAdmin,
+ isAdminByEmail,
};
module.exports = verifyUser;
diff --git a/backend/package.json b/backend/package.json
index 53227c164..13bf81b5e 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -38,6 +38,7 @@
"@slack/bolt": "^2.2.3",
"async": "^3.2.0",
"body-parser": "^1.19.0",
+ "cookie-parser": "^1.4.5",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
diff --git a/backend/routers/auth.router.js b/backend/routers/auth.router.js
index 9c72c4456..d1cd4469e 100644
--- a/backend/routers/auth.router.js
+++ b/backend/routers/auth.router.js
@@ -1,5 +1,5 @@
const express = require('express');
-const { verifyUser } = require('../middleware');
+const { authJwt, verifyUser } = require('../middleware');
const userController = require('../controllers/user.controller');
const router = express.Router();
@@ -17,9 +17,13 @@ router.post(
);
router.post(
- '/signin',
- [userController.validateSigninUserAPICall, verifyUser.isAdmin],
- userController.signin,
+ "/signin",
+ [userController.validateSigninUserAPICall, verifyUser.isAdminByEmail],
+ userController.signin
);
+router.post("/verify-signin", userController.verifySignIn);
+
+router.post('/me', [authJwt.verifyCookie], userController.verifyMe);
+
module.exports = router;
diff --git a/backend/yarn.lock b/backend/yarn.lock
index f210acba8..536ed32b3 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -318,93 +318,93 @@
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
-"@jest/console@^26.3.0":
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.3.0.tgz#ed04063efb280c88ba87388b6f16427c0a85c856"
- integrity sha512-/5Pn6sJev0nPUcAdpJHMVIsA8sKizL2ZkcKPE5+dJrCccks7tcM7c9wbgHudBJbxXLoTbqsHkG1Dofoem4F09w==
+"@jest/console@^26.5.2":
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.5.2.tgz#94fc4865b1abed7c352b5e21e6c57be4b95604a6"
+ integrity sha512-lJELzKINpF1v74DXHbCRIkQ/+nUV1M+ntj+X1J8LxCgpmJZjfLmhFejiMSbjjD66fayxl5Z06tbs3HMyuik6rw==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
"@types/node" "*"
chalk "^4.0.0"
- jest-message-util "^26.3.0"
- jest-util "^26.3.0"
+ jest-message-util "^26.5.2"
+ jest-util "^26.5.2"
slash "^3.0.0"
-"@jest/core@^26.4.2":
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.4.2.tgz#85d0894f31ac29b5bab07aa86806d03dd3d33edc"
- integrity sha512-sDva7YkeNprxJfepOctzS8cAk9TOekldh+5FhVuXS40+94SHbiicRO1VV2tSoRtgIo+POs/Cdyf8p76vPTd6dg==
+"@jest/core@^26.5.3":
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.5.3.tgz#712ed4adb64c3bda256a3f400ff1d3eb2a031f13"
+ integrity sha512-CiU0UKFF1V7KzYTVEtFbFmGLdb2g4aTtY0WlyUfLgj/RtoTnJFhh50xKKr7OYkdmBUlGFSa2mD1TU3UZ6OLd4g==
dependencies:
- "@jest/console" "^26.3.0"
- "@jest/reporters" "^26.4.1"
- "@jest/test-result" "^26.3.0"
- "@jest/transform" "^26.3.0"
- "@jest/types" "^26.3.0"
+ "@jest/console" "^26.5.2"
+ "@jest/reporters" "^26.5.3"
+ "@jest/test-result" "^26.5.2"
+ "@jest/transform" "^26.5.2"
+ "@jest/types" "^26.5.2"
"@types/node" "*"
ansi-escapes "^4.2.1"
chalk "^4.0.0"
exit "^0.1.2"
graceful-fs "^4.2.4"
- jest-changed-files "^26.3.0"
- jest-config "^26.4.2"
- jest-haste-map "^26.3.0"
- jest-message-util "^26.3.0"
+ jest-changed-files "^26.5.2"
+ jest-config "^26.5.3"
+ jest-haste-map "^26.5.2"
+ jest-message-util "^26.5.2"
jest-regex-util "^26.0.0"
- jest-resolve "^26.4.0"
- jest-resolve-dependencies "^26.4.2"
- jest-runner "^26.4.2"
- jest-runtime "^26.4.2"
- jest-snapshot "^26.4.2"
- jest-util "^26.3.0"
- jest-validate "^26.4.2"
- jest-watcher "^26.3.0"
+ jest-resolve "^26.5.2"
+ jest-resolve-dependencies "^26.5.3"
+ jest-runner "^26.5.3"
+ jest-runtime "^26.5.3"
+ jest-snapshot "^26.5.3"
+ jest-util "^26.5.2"
+ jest-validate "^26.5.3"
+ jest-watcher "^26.5.2"
micromatch "^4.0.2"
p-each-series "^2.1.0"
rimraf "^3.0.0"
slash "^3.0.0"
strip-ansi "^6.0.0"
-"@jest/environment@^26.3.0":
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.3.0.tgz#e6953ab711ae3e44754a025f838bde1a7fd236a0"
- integrity sha512-EW+MFEo0DGHahf83RAaiqQx688qpXgl99wdb8Fy67ybyzHwR1a58LHcO376xQJHfmoXTu89M09dH3J509cx2AA==
+"@jest/environment@^26.5.2":
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.5.2.tgz#eba3cfc698f6e03739628f699c28e8a07f5e65fe"
+ integrity sha512-YjhCD/Zhkz0/1vdlS/QN6QmuUdDkpgBdK4SdiVg4Y19e29g4VQYN5Xg8+YuHjdoWGY7wJHMxc79uDTeTOy9Ngw==
dependencies:
- "@jest/fake-timers" "^26.3.0"
- "@jest/types" "^26.3.0"
+ "@jest/fake-timers" "^26.5.2"
+ "@jest/types" "^26.5.2"
"@types/node" "*"
- jest-mock "^26.3.0"
+ jest-mock "^26.5.2"
-"@jest/fake-timers@^26.3.0":
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.3.0.tgz#f515d4667a6770f60ae06ae050f4e001126c666a"
- integrity sha512-ZL9ytUiRwVP8ujfRepffokBvD2KbxbqMhrXSBhSdAhISCw3gOkuntisiSFv+A6HN0n0fF4cxzICEKZENLmW+1A==
+"@jest/fake-timers@^26.5.2":
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.5.2.tgz#1291ac81680ceb0dc7daa1f92c059307eea6400a"
+ integrity sha512-09Hn5Oraqt36V1akxQeWMVL0fR9c6PnEhpgLaYvREXZJAh2H2Y+QLCsl0g7uMoJeoWJAuz4tozk1prbR1Fc1sw==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
"@sinonjs/fake-timers" "^6.0.1"
"@types/node" "*"
- jest-message-util "^26.3.0"
- jest-mock "^26.3.0"
- jest-util "^26.3.0"
+ jest-message-util "^26.5.2"
+ jest-mock "^26.5.2"
+ jest-util "^26.5.2"
-"@jest/globals@^26.4.2":
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.4.2.tgz#73c2a862ac691d998889a241beb3dc9cada40d4a"
- integrity sha512-Ot5ouAlehhHLRhc+sDz2/9bmNv9p5ZWZ9LE1pXGGTCXBasmi5jnYjlgYcYt03FBwLmZXCZ7GrL29c33/XRQiow==
+"@jest/globals@^26.5.3":
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.5.3.tgz#90769b40e0af3fa0b28f6d8c5bbe3712467243fd"
+ integrity sha512-7QztI0JC2CuB+Wx1VdnOUNeIGm8+PIaqngYsZXQCkH2QV0GFqzAYc9BZfU0nuqA6cbYrWh5wkuMzyii3P7deug==
dependencies:
- "@jest/environment" "^26.3.0"
- "@jest/types" "^26.3.0"
- expect "^26.4.2"
+ "@jest/environment" "^26.5.2"
+ "@jest/types" "^26.5.2"
+ expect "^26.5.3"
-"@jest/reporters@^26.4.1":
- version "26.4.1"
- resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.4.1.tgz#3b4d6faf28650f3965f8b97bc3d114077fb71795"
- integrity sha512-aROTkCLU8++yiRGVxLsuDmZsQEKO6LprlrxtAuzvtpbIFl3eIjgIf3EUxDKgomkS25R9ZzwGEdB5weCcBZlrpQ==
+"@jest/reporters@^26.5.3":
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.5.3.tgz#e810e9c2b670f33f1c09e9975749260ca12f1c17"
+ integrity sha512-X+vR0CpfMQzYcYmMFKNY9n4jklcb14Kffffp7+H/MqitWnb0440bW2L76NGWKAa+bnXhNoZr+lCVtdtPmfJVOQ==
dependencies:
"@bcoe/v8-coverage" "^0.2.3"
- "@jest/console" "^26.3.0"
- "@jest/test-result" "^26.3.0"
- "@jest/transform" "^26.3.0"
- "@jest/types" "^26.3.0"
+ "@jest/console" "^26.5.2"
+ "@jest/test-result" "^26.5.2"
+ "@jest/transform" "^26.5.2"
+ "@jest/types" "^26.5.2"
chalk "^4.0.0"
collect-v8-coverage "^1.0.0"
exit "^0.1.2"
@@ -415,73 +415,73 @@
istanbul-lib-report "^3.0.0"
istanbul-lib-source-maps "^4.0.0"
istanbul-reports "^3.0.2"
- jest-haste-map "^26.3.0"
- jest-resolve "^26.4.0"
- jest-util "^26.3.0"
- jest-worker "^26.3.0"
+ jest-haste-map "^26.5.2"
+ jest-resolve "^26.5.2"
+ jest-util "^26.5.2"
+ jest-worker "^26.5.0"
slash "^3.0.0"
source-map "^0.6.0"
string-length "^4.0.1"
terminal-link "^2.0.0"
- v8-to-istanbul "^5.0.1"
+ v8-to-istanbul "^6.0.1"
optionalDependencies:
node-notifier "^8.0.0"
-"@jest/source-map@^26.3.0":
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.3.0.tgz#0e646e519883c14c551f7b5ae4ff5f1bfe4fc3d9"
- integrity sha512-hWX5IHmMDWe1kyrKl7IhFwqOuAreIwHhbe44+XH2ZRHjrKIh0LO5eLQ/vxHFeAfRwJapmxuqlGAEYLadDq6ZGQ==
+"@jest/source-map@^26.5.0":
+ version "26.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.5.0.tgz#98792457c85bdd902365cd2847b58fff05d96367"
+ integrity sha512-jWAw9ZwYHJMe9eZq/WrsHlwF8E3hM9gynlcDpOyCb9bR8wEd9ZNBZCi7/jZyzHxC7t3thZ10gO2IDhu0bPKS5g==
dependencies:
callsites "^3.0.0"
graceful-fs "^4.2.4"
source-map "^0.6.0"
-"@jest/test-result@^26.3.0":
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.3.0.tgz#46cde01fa10c0aaeb7431bf71e4a20d885bc7fdb"
- integrity sha512-a8rbLqzW/q7HWheFVMtghXV79Xk+GWwOK1FrtimpI5n1la2SY0qHri3/b0/1F0Ve0/yJmV8pEhxDfVwiUBGtgg==
+"@jest/test-result@^26.5.2":
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.5.2.tgz#cc1a44cfd4db2ecee3fb0bc4e9fe087aa54b5230"
+ integrity sha512-E/Zp6LURJEGSCWpoMGmCFuuEI1OWuI3hmZwmULV0GsgJBh7u0rwqioxhRU95euUuviqBDN8ruX/vP/4bwYolXw==
dependencies:
- "@jest/console" "^26.3.0"
- "@jest/types" "^26.3.0"
+ "@jest/console" "^26.5.2"
+ "@jest/types" "^26.5.2"
"@types/istanbul-lib-coverage" "^2.0.0"
collect-v8-coverage "^1.0.0"
-"@jest/test-sequencer@^26.4.2":
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.4.2.tgz#58a3760a61eec758a2ce6080201424580d97cbba"
- integrity sha512-83DRD8N3M0tOhz9h0bn6Kl6dSp+US6DazuVF8J9m21WAp5x7CqSMaNycMP0aemC/SH/pDQQddbsfHRTBXVUgog==
+"@jest/test-sequencer@^26.5.3":
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.5.3.tgz#9ae0ab9bc37d5171b28424029192e50229814f8d"
+ integrity sha512-Wqzb7aQ13L3T47xHdpUqYMOpiqz6Dx2QDDghp5AV/eUDXR7JieY+E1s233TQlNyl+PqtqgjVokmyjzX/HA51BA==
dependencies:
- "@jest/test-result" "^26.3.0"
+ "@jest/test-result" "^26.5.2"
graceful-fs "^4.2.4"
- jest-haste-map "^26.3.0"
- jest-runner "^26.4.2"
- jest-runtime "^26.4.2"
+ jest-haste-map "^26.5.2"
+ jest-runner "^26.5.3"
+ jest-runtime "^26.5.3"
-"@jest/transform@^26.3.0":
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.3.0.tgz#c393e0e01459da8a8bfc6d2a7c2ece1a13e8ba55"
- integrity sha512-Isj6NB68QorGoFWvcOjlUhpkT56PqNIsXKR7XfvoDlCANn/IANlh8DrKAA2l2JKC3yWSMH5wS0GwuQM20w3b2A==
+"@jest/transform@^26.5.2":
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.5.2.tgz#6a0033a1d24316a1c75184d010d864f2c681bef5"
+ integrity sha512-AUNjvexh+APhhmS8S+KboPz+D3pCxPvEAGduffaAJYxIFxGi/ytZQkrqcKDUU0ERBAo5R7087fyOYr2oms1seg==
dependencies:
"@babel/core" "^7.1.0"
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
babel-plugin-istanbul "^6.0.0"
chalk "^4.0.0"
convert-source-map "^1.4.0"
fast-json-stable-stringify "^2.0.0"
graceful-fs "^4.2.4"
- jest-haste-map "^26.3.0"
+ jest-haste-map "^26.5.2"
jest-regex-util "^26.0.0"
- jest-util "^26.3.0"
+ jest-util "^26.5.2"
micromatch "^4.0.2"
pirates "^4.0.1"
slash "^3.0.0"
source-map "^0.6.1"
write-file-atomic "^3.0.0"
-"@jest/types@^26.3.0":
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.3.0.tgz#97627bf4bdb72c55346eef98e3b3f7ddc4941f71"
- integrity sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ==
+"@jest/types@^26.5.2":
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.5.2.tgz#44c24f30c8ee6c7f492ead9ec3f3c62a5289756d"
+ integrity sha512-QDs5d0gYiyetI8q+2xWdkixVQMklReZr4ltw7GFDtb4fuJIBCE6mzj2LnitGqCuAlLap6wPyb8fpoHgwZz5fdg==
dependencies:
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/istanbul-reports" "^3.0.0"
@@ -610,7 +610,7 @@
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
-"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
version "7.0.15"
resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03"
integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==
@@ -625,11 +625,6 @@
"@types/connect" "*"
"@types/node" "*"
-"@types/color-name@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
- integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
-
"@types/connect@*":
version "3.4.33"
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546"
@@ -758,9 +753,9 @@
"@types/node" "*"
"@types/node@*", "@types/node@>=10", "@types/node@>=6.0.0", "@types/node@>=8.9.0":
- version "14.11.2"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256"
- integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA==
+ version "14.11.8"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.8.tgz#fe2012f2355e4ce08bca44aeb3abbb21cf88d33f"
+ integrity sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw==
"@types/normalize-package-data@^2.4.0":
version "2.4.0"
@@ -773,9 +768,9 @@
integrity sha512-eKAv5Ql6k78dh3ULCsSBxX6bFNuGjTmof5Q/T6PiECDq0Yf8IIn46jCyp3RJvCi8owaEmm3DZH1PEImjBMd/vQ==
"@types/prettier@^2.0.0":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.1.tgz#be148756d5480a84cde100324c03a86ae5739fb5"
- integrity sha512-2zs+O+UkDsJ1Vcp667pd3f8xearMdopz/z54i99wtRDI5KLmngk7vlrYZD0ZjKHaROR03EznlBbVY9PfAEyJIQ==
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.2.tgz#4929992f87a0129f4960a110faeb526210562e7b"
+ integrity sha512-IiPhNnenzkqdSdQH3ifk9LoX7oQe61ZlDdDO4+MUv6FyWdPGDPr26gCPVs3oguZEMq//nFZZpwUZcVuNJsG+DQ==
"@types/promise.allsettled@^1.0.3":
version "1.0.3"
@@ -810,10 +805,10 @@
"@types/express-serve-static-core" "*"
"@types/mime" "*"
-"@types/stack-utils@^1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
- integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+"@types/stack-utils@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff"
+ integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==
"@types/tmp@^0.2.0":
version "0.2.0"
@@ -831,9 +826,9 @@
integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
"@types/yargs@^15.0.0":
- version "15.0.7"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.7.tgz#dad50a7a234a35ef9460737a56024287a3de1d2b"
- integrity sha512-Gf4u3EjaPNcC9cTu4/j2oN14nSVhr8PQ+BvBcBQHAhDZfl0bVIiLgvnRXv/dn58XhTm9UXvBpvJpDlwV65QxOA==
+ version "15.0.8"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.8.tgz#7644904cad7427eb704331ea9bf1ee5499b82e23"
+ integrity sha512-b0BYzFUzBpOhPjpl1wtAHU994jBeKF4TKVlT7ssFv44T617XNcPdRoG4AzHLVshLzlrF7i3lTelH7UbuNYV58Q==
dependencies:
"@types/yargs-parser" "*"
@@ -881,9 +876,9 @@ acorn-walk@^7.1.1:
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
acorn@^7.1.1, acorn@^7.4.0:
- version "7.4.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
- integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
agent-base@6:
version "6.0.1"
@@ -893,9 +888,9 @@ agent-base@6:
debug "4"
ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
- version "6.12.5"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da"
- integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
dependencies:
fast-deep-equal "^3.1.1"
fast-json-stable-stringify "^2.0.0"
@@ -939,11 +934,10 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
color-convert "^1.9.0"
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
- integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
- "@types/color-name" "^1.1.1"
color-convert "^2.0.1"
anymatch@^2.0.0:
@@ -1134,16 +1128,16 @@ babel-eslint@^10.1.0:
eslint-visitor-keys "^1.0.0"
resolve "^1.12.0"
-babel-jest@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.3.0.tgz#10d0ca4b529ca3e7d1417855ef7d7bd6fc0c3463"
- integrity sha512-sxPnQGEyHAOPF8NcUsD0g7hDCnvLL2XyblRBcgrzTWBB/mAIpWow3n1bEL+VghnnZfreLhFSBsFluRoK2tRK4g==
+babel-jest@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.5.2.tgz#164f367a35946c6cf54eaccde8762dec50422250"
+ integrity sha512-U3KvymF3SczA3vOL/cgiUFOznfMET+XDIXiWnoJV45siAp2pLMG8i2+/MGZlAC3f/F6Q40LR4M4qDrWZ9wkK8A==
dependencies:
- "@jest/transform" "^26.3.0"
- "@jest/types" "^26.3.0"
+ "@jest/transform" "^26.5.2"
+ "@jest/types" "^26.5.2"
"@types/babel__core" "^7.1.7"
babel-plugin-istanbul "^6.0.0"
- babel-preset-jest "^26.3.0"
+ babel-preset-jest "^26.5.0"
chalk "^4.0.0"
graceful-fs "^4.2.4"
slash "^3.0.0"
@@ -1159,10 +1153,10 @@ babel-plugin-istanbul@^6.0.0:
istanbul-lib-instrument "^4.0.0"
test-exclude "^6.0.0"
-babel-plugin-jest-hoist@^26.2.0:
- version "26.2.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz#bdd0011df0d3d513e5e95f76bd53b51147aca2dd"
- integrity sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA==
+babel-plugin-jest-hoist@^26.5.0:
+ version "26.5.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.5.0.tgz#3916b3a28129c29528de91e5784a44680db46385"
+ integrity sha512-ck17uZFD3CDfuwCLATWZxkkuGGFhMij8quP8CNhwj8ek1mqFgbFzRJ30xwC04LLscj/aKsVFfRST+b5PT7rSuw==
dependencies:
"@babel/template" "^7.3.3"
"@babel/types" "^7.3.3"
@@ -1186,12 +1180,12 @@ babel-preset-current-node-syntax@^0.1.3:
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
-babel-preset-jest@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.3.0.tgz#ed6344506225c065fd8a0b53e191986f74890776"
- integrity sha512-5WPdf7nyYi2/eRxCbVrE1kKCWxgWY4RsPEbdJWFm7QsesFGqjdkyLeu1zRkwM1cxK6EPIlNd6d2AxLk7J+t4pw==
+babel-preset-jest@^26.5.0:
+ version "26.5.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.5.0.tgz#f1b166045cd21437d1188d29f7fba470d5bdb0e7"
+ integrity sha512-F2vTluljhqkiGSJGBg/jOruA8vIIIL11YrxRcO7nviNTMbbofPSHwnm8mgP7d/wS7wRSexRoI6X1A6T74d4LQA==
dependencies:
- babel-plugin-jest-hoist "^26.2.0"
+ babel-plugin-jest-hoist "^26.5.0"
babel-preset-current-node-syntax "^0.1.3"
balanced-match@^1.0.0:
@@ -1413,9 +1407,9 @@ camelcase@^5.0.0, camelcase@^5.3.1:
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
camelcase@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e"
- integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.1.0.tgz#27dc176173725fb0adf8a48b647f4d7871944d78"
+ integrity sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==
camelize@1.0.0:
version "1.0.0"
@@ -1649,6 +1643,14 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
dependencies:
safe-buffer "~5.1.1"
+cookie-parser@^1.4.5:
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49"
+ integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==
+ dependencies:
+ cookie "0.4.0"
+ cookie-signature "1.0.6"
+
cookie-signature@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
@@ -1896,10 +1898,10 @@ detect-newline@^3.0.0:
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
-diff-sequences@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.3.0.tgz#62a59b1b29ab7fd27cef2a33ae52abe73042d0a2"
- integrity sha512-5j5vdRcw3CNctePNYN0Wy2e/JbWT6cAYnXv5OuqPhDpyCGc0uLu2TK0zOCJWNB9kOIfYMSpIulRaDgIi4HJ6Ig==
+diff-sequences@^26.5.0:
+ version "26.5.0"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.5.0.tgz#ef766cf09d43ed40406611f11c6d8d9dd8b2fefd"
+ integrity sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q==
doctrine@1.5.0:
version "1.5.0"
@@ -2190,15 +2192,15 @@ eslint-plugin-jsx-a11y@^6.3.1:
language-tags "^1.0.5"
eslint-plugin-react@^7.20.6:
- version "7.21.3"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.3.tgz#71655d2af5155b19285ec929dd2cdc67a4470b52"
- integrity sha512-OI4GwTCqyIb4ipaOEGLWdaOHCXZZydStAsBEPB2e1ZfNM37bojpgO1BoOQbFb0eLVz3QLDx7b+6kYcrxCuJfhw==
+ version "7.21.4"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.4.tgz#31060b2e5ff82b12e24a3cc33edb7d12f904775c"
+ integrity sha512-uHeQ8A0hg0ltNDXFu3qSfFqTNPXm1XithH6/SY318UX76CMj7Q599qWpgmMhVQyvhq36pm7qvoN3pb6/3jsTFg==
dependencies:
array-includes "^3.1.1"
array.prototype.flatmap "^1.2.3"
doctrine "^2.1.0"
has "^1.0.3"
- jsx-ast-utils "^2.4.1"
+ jsx-ast-utils "^2.4.1 || ^3.0.0"
object.entries "^1.1.2"
object.fromentries "^2.0.2"
object.values "^1.1.1"
@@ -2226,10 +2228,15 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+eslint-visitor-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
+ integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
+
eslint@^7.9.0:
- version "7.10.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9"
- integrity sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA==
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.11.0.tgz#aaf2d23a0b5f1d652a08edacea0c19f7fadc0b3b"
+ integrity sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==
dependencies:
"@babel/code-frame" "^7.0.0"
"@eslint/eslintrc" "^0.1.3"
@@ -2241,7 +2248,7 @@ eslint@^7.9.0:
enquirer "^2.3.5"
eslint-scope "^5.1.1"
eslint-utils "^2.1.0"
- eslint-visitor-keys "^1.3.0"
+ eslint-visitor-keys "^2.0.0"
espree "^7.3.0"
esquery "^1.2.0"
esutils "^2.0.2"
@@ -2378,16 +2385,16 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-expect@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/expect/-/expect-26.4.2.tgz#36db120928a5a2d7d9736643032de32f24e1b2a1"
- integrity sha512-IlJ3X52Z0lDHm7gjEp+m76uX46ldH5VpqmU0006vqDju/285twh7zaWMRhs67VpQhBwjjMchk+p5aA0VkERCAA==
+expect@^26.5.3:
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-26.5.3.tgz#89d9795036f7358b0a9a5243238eb8086482d741"
+ integrity sha512-kkpOhGRWGOr+TEFUnYAjfGvv35bfP+OlPtqPIJpOCR9DVtv8QV+p8zG0Edqafh80fsjeE+7RBcVUq1xApnYglw==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
ansi-styles "^4.0.0"
jest-get-type "^26.3.0"
- jest-matcher-utils "^26.4.2"
- jest-message-util "^26.3.0"
+ jest-matcher-utils "^26.5.2"
+ jest-message-util "^26.5.2"
jest-regex-util "^26.0.0"
express-validator@^6.6.1:
@@ -2795,9 +2802,9 @@ globals@^12.1.0:
type-fest "^0.8.1"
google-auth-library@^6.0.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.1.0.tgz#db3bbe2b3add5783442c84efdcb1c061721c1bfb"
- integrity sha512-GbalszIADE1YPWhUyfFMrkLhFHnlAgoRcqGVW+MsLDPsuaOB5MRPk7NNafPDv9SherNE4EKzcYuxMJjaxzXMOw==
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.1.1.tgz#e1882ac22e8a073dd7a7296e500d5c0c6dc21933"
+ integrity sha512-0WfExOx3FrLYnY88RICQxvpaNzdwjz44OsHqHkIoAJfjY6Jck6CZRl1ASWadk+wbJ0LhkQ8rNY4zZebKml4Ghg==
dependencies:
arrify "^2.0.0"
base64-js "^1.3.0"
@@ -2805,11 +2812,11 @@ google-auth-library@^6.0.0:
fast-text-encoding "^1.0.0"
gaxios "^3.0.0"
gcp-metadata "^4.1.0"
- gtoken "^5.0.0"
+ gtoken "^5.0.4"
jws "^4.0.0"
lru-cache "^6.0.0"
-google-p12-pem@^3.0.0:
+google-p12-pem@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.0.3.tgz#673ac3a75d3903a87f05878f3c75e06fc151669e"
integrity sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==
@@ -2863,13 +2870,13 @@ growly@^1.3.0:
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
-gtoken@^5.0.0:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.0.3.tgz#b76ef8e9a2fed6fef165e47f7d05b60c498e4d05"
- integrity sha512-Nyd1wZCMRc2dj/mAD0LlfQLcAO06uKdpKJXvK85SGrF5+5+Bpfil9u/2aw35ltvEHjvl0h5FMKN5knEU+9JrOg==
+gtoken@^5.0.4:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.0.4.tgz#e8d7456ad2ff774c70176e56b9d34b1c63fb6f0b"
+ integrity sha512-U9wnSp4GZ7ov6zRdPuRHG4TuqEWqRRgT1gfXGNArhzBUn9byrPeH8uTmBWU/ZiWJJvTEmkjhDIC3mqHWdVi3xQ==
dependencies:
gaxios "^3.0.0"
- google-p12-pem "^3.0.0"
+ google-p12-pem "^3.0.3"
jws "^4.0.0"
mime "^2.2.0"
@@ -3482,67 +3489,67 @@ iterate-value@^1.0.0:
es-get-iterator "^1.0.2"
iterate-iterator "^1.0.1"
-jest-changed-files@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.3.0.tgz#68fb2a7eb125f50839dab1f5a17db3607fe195b1"
- integrity sha512-1C4R4nijgPltX6fugKxM4oQ18zimS7LqQ+zTTY8lMCMFPrxqBFb7KJH0Z2fRQJvw2Slbaipsqq7s1mgX5Iot+g==
+jest-changed-files@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.5.2.tgz#330232c6a5c09a7f040a5870e8f0a9c6abcdbed5"
+ integrity sha512-qSmssmiIdvM5BWVtyK/nqVpN3spR5YyvkvPqz1x3BR1bwIxsWmU/MGwLoCrPNLbkG2ASAKfvmJpOduEApBPh2w==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
execa "^4.0.0"
throat "^5.0.0"
-jest-cli@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.4.2.tgz#24afc6e4dfc25cde4c7ec4226fb7db5f157c21da"
- integrity sha512-zb+lGd/SfrPvoRSC/0LWdaWCnscXc1mGYW//NP4/tmBvRPT3VntZ2jtKUONsRi59zc5JqmsSajA9ewJKFYp8Cw==
+jest-cli@^26.5.3:
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.5.3.tgz#f936b98f247b76b7bc89c7af50af82c88e356a80"
+ integrity sha512-HkbSvtugpSXBf2660v9FrNVUgxvPkssN8CRGj9gPM8PLhnaa6zziFiCEKQAkQS4uRzseww45o0TR+l6KeRYV9A==
dependencies:
- "@jest/core" "^26.4.2"
- "@jest/test-result" "^26.3.0"
- "@jest/types" "^26.3.0"
+ "@jest/core" "^26.5.3"
+ "@jest/test-result" "^26.5.2"
+ "@jest/types" "^26.5.2"
chalk "^4.0.0"
exit "^0.1.2"
graceful-fs "^4.2.4"
import-local "^3.0.2"
is-ci "^2.0.0"
- jest-config "^26.4.2"
- jest-util "^26.3.0"
- jest-validate "^26.4.2"
+ jest-config "^26.5.3"
+ jest-util "^26.5.2"
+ jest-validate "^26.5.3"
prompts "^2.0.1"
- yargs "^15.3.1"
+ yargs "^15.4.1"
-jest-config@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.4.2.tgz#da0cbb7dc2c131ffe831f0f7f2a36256e6086558"
- integrity sha512-QBf7YGLuToiM8PmTnJEdRxyYy3mHWLh24LJZKVdXZ2PNdizSe1B/E8bVm+HYcjbEzGuVXDv/di+EzdO/6Gq80A==
+jest-config@^26.5.3:
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.5.3.tgz#baf51c9be078c2c755c8f8a51ec0f06c762c1d3f"
+ integrity sha512-NVhZiIuN0GQM6b6as4CI5FSCyXKxdrx5ACMCcv/7Pf+TeCajJhJc+6dwgdAVPyerUFB9pRBIz3bE7clSrRge/w==
dependencies:
"@babel/core" "^7.1.0"
- "@jest/test-sequencer" "^26.4.2"
- "@jest/types" "^26.3.0"
- babel-jest "^26.3.0"
+ "@jest/test-sequencer" "^26.5.3"
+ "@jest/types" "^26.5.2"
+ babel-jest "^26.5.2"
chalk "^4.0.0"
deepmerge "^4.2.2"
glob "^7.1.1"
graceful-fs "^4.2.4"
- jest-environment-jsdom "^26.3.0"
- jest-environment-node "^26.3.0"
+ jest-environment-jsdom "^26.5.2"
+ jest-environment-node "^26.5.2"
jest-get-type "^26.3.0"
- jest-jasmine2 "^26.4.2"
+ jest-jasmine2 "^26.5.3"
jest-regex-util "^26.0.0"
- jest-resolve "^26.4.0"
- jest-util "^26.3.0"
- jest-validate "^26.4.2"
+ jest-resolve "^26.5.2"
+ jest-util "^26.5.2"
+ jest-validate "^26.5.3"
micromatch "^4.0.2"
- pretty-format "^26.4.2"
+ pretty-format "^26.5.2"
-jest-diff@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.4.2.tgz#a1b7b303bcc534aabdb3bd4a7caf594ac059f5aa"
- integrity sha512-6T1XQY8U28WH0Z5rGpQ+VqZSZz8EN8rZcBtfvXaOkbwxIEeRre6qnuZQlbY1AJ4MKDxQF8EkrCvK+hL/VkyYLQ==
+jest-diff@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.5.2.tgz#8e26cb32dc598e8b8a1b9deff55316f8313c8053"
+ integrity sha512-HCSWDUGwsov5oTlGzrRM+UPJI/Dpqi9jzeV0fdRNi3Ch5bnoXhnyJMmVg2juv9081zLIy3HGPI5mcuGgXM2xRA==
dependencies:
chalk "^4.0.0"
- diff-sequences "^26.3.0"
+ diff-sequences "^26.5.0"
jest-get-type "^26.3.0"
- pretty-format "^26.4.2"
+ pretty-format "^26.5.2"
jest-docblock@^26.0.0:
version "26.0.0"
@@ -3551,130 +3558,130 @@ jest-docblock@^26.0.0:
dependencies:
detect-newline "^3.0.0"
-jest-each@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.4.2.tgz#bb14f7f4304f2bb2e2b81f783f989449b8b6ffae"
- integrity sha512-p15rt8r8cUcRY0Mvo1fpkOGYm7iI8S6ySxgIdfh3oOIv+gHwrHTy5VWCGOecWUhDsit4Nz8avJWdT07WLpbwDA==
+jest-each@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.5.2.tgz#35e68d6906a7f826d3ca5803cfe91d17a5a34c31"
+ integrity sha512-w7D9FNe0m2D3yZ0Drj9CLkyF/mGhmBSULMQTypzAKR746xXnjUrK8GUJdlLTWUF6dd0ks3MtvGP7/xNFr9Aphg==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
chalk "^4.0.0"
jest-get-type "^26.3.0"
- jest-util "^26.3.0"
- pretty-format "^26.4.2"
+ jest-util "^26.5.2"
+ pretty-format "^26.5.2"
-jest-environment-jsdom@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.3.0.tgz#3b749ba0f3a78e92ba2c9ce519e16e5dd515220c"
- integrity sha512-zra8He2btIMJkAzvLaiZ9QwEPGEetbxqmjEBQwhH3CA+Hhhu0jSiEJxnJMbX28TGUvPLxBt/zyaTLrOPF4yMJA==
+jest-environment-jsdom@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.5.2.tgz#5feab05b828fd3e4b96bee5e0493464ddd2bb4bc"
+ integrity sha512-fWZPx0bluJaTQ36+PmRpvUtUlUFlGGBNyGX1SN3dLUHHMcQ4WseNEzcGGKOw4U5towXgxI4qDoI3vwR18H0RTw==
dependencies:
- "@jest/environment" "^26.3.0"
- "@jest/fake-timers" "^26.3.0"
- "@jest/types" "^26.3.0"
+ "@jest/environment" "^26.5.2"
+ "@jest/fake-timers" "^26.5.2"
+ "@jest/types" "^26.5.2"
"@types/node" "*"
- jest-mock "^26.3.0"
- jest-util "^26.3.0"
- jsdom "^16.2.2"
-
-jest-environment-node@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.3.0.tgz#56c6cfb506d1597f94ee8d717072bda7228df849"
- integrity sha512-c9BvYoo+FGcMj5FunbBgtBnbR5qk3uky8PKyRVpSfe2/8+LrNQMiXX53z6q2kY+j15SkjQCOSL/6LHnCPLVHNw==
- dependencies:
- "@jest/environment" "^26.3.0"
- "@jest/fake-timers" "^26.3.0"
- "@jest/types" "^26.3.0"
+ jest-mock "^26.5.2"
+ jest-util "^26.5.2"
+ jsdom "^16.4.0"
+
+jest-environment-node@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.5.2.tgz#275a0f01b5e47447056f1541a15ed4da14acca03"
+ integrity sha512-YHjnDsf/GKFCYMGF1V+6HF7jhY1fcLfLNBDjhAOvFGvt6d8vXvNdJGVM7uTZ2VO/TuIyEFhPGaXMX5j3h7fsrA==
+ dependencies:
+ "@jest/environment" "^26.5.2"
+ "@jest/fake-timers" "^26.5.2"
+ "@jest/types" "^26.5.2"
"@types/node" "*"
- jest-mock "^26.3.0"
- jest-util "^26.3.0"
+ jest-mock "^26.5.2"
+ jest-util "^26.5.2"
jest-get-type@^26.3.0:
version "26.3.0"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0"
integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==
-jest-haste-map@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.3.0.tgz#c51a3b40100d53ab777bfdad382d2e7a00e5c726"
- integrity sha512-DHWBpTJgJhLLGwE5Z1ZaqLTYqeODQIZpby0zMBsCU9iRFHYyhklYqP4EiG73j5dkbaAdSZhgB938mL51Q5LeZA==
+jest-haste-map@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.5.2.tgz#a15008abfc502c18aa56e4919ed8c96304ceb23d"
+ integrity sha512-lJIAVJN3gtO3k4xy+7i2Xjtwh8CfPcH08WYjZpe9xzveDaqGw9fVNCpkYu6M525wKFVkLmyi7ku+DxCAP1lyMA==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
"@types/graceful-fs" "^4.1.2"
"@types/node" "*"
anymatch "^3.0.3"
fb-watchman "^2.0.0"
graceful-fs "^4.2.4"
jest-regex-util "^26.0.0"
- jest-serializer "^26.3.0"
- jest-util "^26.3.0"
- jest-worker "^26.3.0"
+ jest-serializer "^26.5.0"
+ jest-util "^26.5.2"
+ jest-worker "^26.5.0"
micromatch "^4.0.2"
sane "^4.0.3"
walker "^1.0.7"
optionalDependencies:
fsevents "^2.1.2"
-jest-jasmine2@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.4.2.tgz#18a9d5bec30904267ac5e9797570932aec1e2257"
- integrity sha512-z7H4EpCldHN1J8fNgsja58QftxBSL+JcwZmaXIvV9WKIM+x49F4GLHu/+BQh2kzRKHAgaN/E82od+8rTOBPyPA==
+jest-jasmine2@^26.5.3:
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.5.3.tgz#baad2114ce32d16aff25aeb877d18bb4e332dc4c"
+ integrity sha512-nFlZOpnGlNc7y/+UkkeHnvbOM+rLz4wB1AimgI9QhtnqSZte0wYjbAm8hf7TCwXlXgDwZxAXo6z0a2Wzn9FoOg==
dependencies:
"@babel/traverse" "^7.1.0"
- "@jest/environment" "^26.3.0"
- "@jest/source-map" "^26.3.0"
- "@jest/test-result" "^26.3.0"
- "@jest/types" "^26.3.0"
+ "@jest/environment" "^26.5.2"
+ "@jest/source-map" "^26.5.0"
+ "@jest/test-result" "^26.5.2"
+ "@jest/types" "^26.5.2"
"@types/node" "*"
chalk "^4.0.0"
co "^4.6.0"
- expect "^26.4.2"
+ expect "^26.5.3"
is-generator-fn "^2.0.0"
- jest-each "^26.4.2"
- jest-matcher-utils "^26.4.2"
- jest-message-util "^26.3.0"
- jest-runtime "^26.4.2"
- jest-snapshot "^26.4.2"
- jest-util "^26.3.0"
- pretty-format "^26.4.2"
+ jest-each "^26.5.2"
+ jest-matcher-utils "^26.5.2"
+ jest-message-util "^26.5.2"
+ jest-runtime "^26.5.3"
+ jest-snapshot "^26.5.3"
+ jest-util "^26.5.2"
+ pretty-format "^26.5.2"
throat "^5.0.0"
-jest-leak-detector@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.4.2.tgz#c73e2fa8757bf905f6f66fb9e0070b70fa0f573f"
- integrity sha512-akzGcxwxtE+9ZJZRW+M2o+nTNnmQZxrHJxX/HjgDaU5+PLmY1qnQPnMjgADPGCRPhB+Yawe1iij0REe+k/aHoA==
+jest-leak-detector@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.5.2.tgz#83fcf9a4a6ef157549552cb4f32ca1d6221eea69"
+ integrity sha512-h7ia3dLzBFItmYERaLPEtEKxy3YlcbcRSjj0XRNJgBEyODuu+3DM2o62kvIFvs3PsaYoIIv+e+nLRI61Dj1CNw==
dependencies:
jest-get-type "^26.3.0"
- pretty-format "^26.4.2"
+ pretty-format "^26.5.2"
-jest-matcher-utils@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.4.2.tgz#fa81f3693f7cb67e5fc1537317525ef3b85f4b06"
- integrity sha512-KcbNqWfWUG24R7tu9WcAOKKdiXiXCbMvQYT6iodZ9k1f7065k0keUOW6XpJMMvah+hTfqkhJhRXmA3r3zMAg0Q==
+jest-matcher-utils@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.5.2.tgz#6aa2c76ce8b9c33e66f8856ff3a52bab59e6c85a"
+ integrity sha512-W9GO9KBIC4gIArsNqDUKsLnhivaqf8MSs6ujO/JDcPIQrmY+aasewweXVET8KdrJ6ADQaUne5UzysvF/RR7JYA==
dependencies:
chalk "^4.0.0"
- jest-diff "^26.4.2"
+ jest-diff "^26.5.2"
jest-get-type "^26.3.0"
- pretty-format "^26.4.2"
+ pretty-format "^26.5.2"
-jest-message-util@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.3.0.tgz#3bdb538af27bb417f2d4d16557606fd082d5841a"
- integrity sha512-xIavRYqr4/otGOiLxLZGj3ieMmjcNE73Ui+LdSW/Y790j5acqCsAdDiLIbzHCZMpN07JOENRWX5DcU+OQ+TjTA==
+jest-message-util@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.5.2.tgz#6c4c4c46dcfbabb47cd1ba2f6351559729bc11bb"
+ integrity sha512-Ocp9UYZ5Jl15C5PNsoDiGEk14A4NG0zZKknpWdZGoMzJuGAkVt10e97tnEVMYpk7LnQHZOfuK2j/izLBMcuCZw==
dependencies:
"@babel/code-frame" "^7.0.0"
- "@jest/types" "^26.3.0"
- "@types/stack-utils" "^1.0.1"
+ "@jest/types" "^26.5.2"
+ "@types/stack-utils" "^2.0.0"
chalk "^4.0.0"
graceful-fs "^4.2.4"
micromatch "^4.0.2"
slash "^3.0.0"
stack-utils "^2.0.2"
-jest-mock@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.3.0.tgz#ee62207c3c5ebe5f35b760e1267fee19a1cfdeba"
- integrity sha512-PeaRrg8Dc6mnS35gOo/CbZovoDPKAeB1FICZiuagAgGvbWdNNyjQjkOaGUa/3N3JtpQ/Mh9P4A2D4Fv51NnP8Q==
+jest-mock@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.5.2.tgz#c9302e8ef807f2bfc749ee52e65ad11166a1b6a1"
+ integrity sha512-9SiU4b5PtO51v0MtJwVRqeGEroH66Bnwtq4ARdNP7jNXbpT7+ByeWNAk4NeT/uHfNSVDXEXgQo1XRuwEqS6Rdw==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
"@types/node" "*"
jest-pnp-resolver@^1.2.2:
@@ -3687,170 +3694,171 @@ jest-regex-util@^26.0.0:
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28"
integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==
-jest-resolve-dependencies@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.4.2.tgz#739bdb027c14befb2fe5aabbd03f7bab355f1dc5"
- integrity sha512-ADHaOwqEcVc71uTfySzSowA/RdxUpCxhxa2FNLiin9vWLB1uLPad3we+JSSROq5+SrL9iYPdZZF8bdKM7XABTQ==
+jest-resolve-dependencies@^26.5.3:
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.5.3.tgz#11483f91e534bdcd257ab21e8622799e59701aba"
+ integrity sha512-+KMDeke/BFK+mIQ2IYSyBz010h7zQaVt4Xie6cLqUGChorx66vVeQVv4ErNoMwInnyYHi1Ud73tDS01UbXbfLQ==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
jest-regex-util "^26.0.0"
- jest-snapshot "^26.4.2"
+ jest-snapshot "^26.5.3"
-jest-resolve@^26.4.0:
- version "26.4.0"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.4.0.tgz#6dc0af7fb93e65b73fec0368ca2b76f3eb59a6d7"
- integrity sha512-bn/JoZTEXRSlEx3+SfgZcJAVuTMOksYq9xe9O6s4Ekg84aKBObEaVXKOEilULRqviSLAYJldnoWV9c07kwtiCg==
+jest-resolve@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.5.2.tgz#0d719144f61944a428657b755a0e5c6af4fc8602"
+ integrity sha512-XsPxojXGRA0CoDD7Vis59ucz2p3cQFU5C+19tz3tLEAlhYKkK77IL0cjYjikY9wXnOaBeEdm1rOgSJjbZWpcZg==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
chalk "^4.0.0"
graceful-fs "^4.2.4"
jest-pnp-resolver "^1.2.2"
- jest-util "^26.3.0"
+ jest-util "^26.5.2"
read-pkg-up "^7.0.1"
resolve "^1.17.0"
slash "^3.0.0"
-jest-runner@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.4.2.tgz#c3ec5482c8edd31973bd3935df5a449a45b5b853"
- integrity sha512-FgjDHeVknDjw1gRAYaoUoShe1K3XUuFMkIaXbdhEys+1O4bEJS8Avmn4lBwoMfL8O5oFTdWYKcf3tEJyyYyk8g==
+jest-runner@^26.5.3:
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.5.3.tgz#800787459ea59c68e7505952933e33981dc3db38"
+ integrity sha512-qproP0Pq7IIule+263W57k2+8kWCszVJTC9TJWGUz0xJBr+gNiniGXlG8rotd0XxwonD5UiJloYoSO5vbUr5FQ==
dependencies:
- "@jest/console" "^26.3.0"
- "@jest/environment" "^26.3.0"
- "@jest/test-result" "^26.3.0"
- "@jest/types" "^26.3.0"
+ "@jest/console" "^26.5.2"
+ "@jest/environment" "^26.5.2"
+ "@jest/test-result" "^26.5.2"
+ "@jest/types" "^26.5.2"
"@types/node" "*"
chalk "^4.0.0"
emittery "^0.7.1"
exit "^0.1.2"
graceful-fs "^4.2.4"
- jest-config "^26.4.2"
+ jest-config "^26.5.3"
jest-docblock "^26.0.0"
- jest-haste-map "^26.3.0"
- jest-leak-detector "^26.4.2"
- jest-message-util "^26.3.0"
- jest-resolve "^26.4.0"
- jest-runtime "^26.4.2"
- jest-util "^26.3.0"
- jest-worker "^26.3.0"
+ jest-haste-map "^26.5.2"
+ jest-leak-detector "^26.5.2"
+ jest-message-util "^26.5.2"
+ jest-resolve "^26.5.2"
+ jest-runtime "^26.5.3"
+ jest-util "^26.5.2"
+ jest-worker "^26.5.0"
source-map-support "^0.5.6"
throat "^5.0.0"
-jest-runtime@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.4.2.tgz#94ce17890353c92e4206580c73a8f0c024c33c42"
- integrity sha512-4Pe7Uk5a80FnbHwSOk7ojNCJvz3Ks2CNQWT5Z7MJo4tX0jb3V/LThKvD9tKPNVNyeMH98J/nzGlcwc00R2dSHQ==
- dependencies:
- "@jest/console" "^26.3.0"
- "@jest/environment" "^26.3.0"
- "@jest/fake-timers" "^26.3.0"
- "@jest/globals" "^26.4.2"
- "@jest/source-map" "^26.3.0"
- "@jest/test-result" "^26.3.0"
- "@jest/transform" "^26.3.0"
- "@jest/types" "^26.3.0"
+jest-runtime@^26.5.3:
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.5.3.tgz#5882ae91fd88304310f069549e6bf82f3f198bea"
+ integrity sha512-IDjalmn2s/Tc4GvUwhPHZ0iaXCdMRq5p6taW9P8RpU+FpG01O3+H8z+p3rDCQ9mbyyyviDgxy/LHPLzrIOKBkQ==
+ dependencies:
+ "@jest/console" "^26.5.2"
+ "@jest/environment" "^26.5.2"
+ "@jest/fake-timers" "^26.5.2"
+ "@jest/globals" "^26.5.3"
+ "@jest/source-map" "^26.5.0"
+ "@jest/test-result" "^26.5.2"
+ "@jest/transform" "^26.5.2"
+ "@jest/types" "^26.5.2"
"@types/yargs" "^15.0.0"
chalk "^4.0.0"
collect-v8-coverage "^1.0.0"
exit "^0.1.2"
glob "^7.1.3"
graceful-fs "^4.2.4"
- jest-config "^26.4.2"
- jest-haste-map "^26.3.0"
- jest-message-util "^26.3.0"
- jest-mock "^26.3.0"
+ jest-config "^26.5.3"
+ jest-haste-map "^26.5.2"
+ jest-message-util "^26.5.2"
+ jest-mock "^26.5.2"
jest-regex-util "^26.0.0"
- jest-resolve "^26.4.0"
- jest-snapshot "^26.4.2"
- jest-util "^26.3.0"
- jest-validate "^26.4.2"
+ jest-resolve "^26.5.2"
+ jest-snapshot "^26.5.3"
+ jest-util "^26.5.2"
+ jest-validate "^26.5.3"
slash "^3.0.0"
strip-bom "^4.0.0"
- yargs "^15.3.1"
+ yargs "^15.4.1"
-jest-serializer@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.3.0.tgz#1c9d5e1b74d6e5f7e7f9627080fa205d976c33ef"
- integrity sha512-IDRBQBLPlKa4flg77fqg0n/pH87tcRKwe8zxOVTWISxGpPHYkRZ1dXKyh04JOja7gppc60+soKVZ791mruVdow==
+jest-serializer@^26.5.0:
+ version "26.5.0"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.5.0.tgz#f5425cc4c5f6b4b355f854b5f0f23ec6b962bc13"
+ integrity sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA==
dependencies:
"@types/node" "*"
graceful-fs "^4.2.4"
-jest-snapshot@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.4.2.tgz#87d3ac2f2bd87ea8003602fbebd8fcb9e94104f6"
- integrity sha512-N6Uub8FccKlf5SBFnL2Ri/xofbaA68Cc3MGjP/NuwgnsvWh+9hLIR/DhrxbSiKXMY9vUW5dI6EW1eHaDHqe9sg==
+jest-snapshot@^26.5.3:
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.5.3.tgz#f6b4b4b845f85d4b0dadd7cf119c55d0c1688601"
+ integrity sha512-ZgAk0Wm0JJ75WS4lGaeRfa0zIgpL0KD595+XmtwlIEMe8j4FaYHyZhP1LNOO+8fXq7HJ3hll54+sFV9X4+CGVw==
dependencies:
"@babel/types" "^7.0.0"
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
+ "@types/babel__traverse" "^7.0.4"
"@types/prettier" "^2.0.0"
chalk "^4.0.0"
- expect "^26.4.2"
+ expect "^26.5.3"
graceful-fs "^4.2.4"
- jest-diff "^26.4.2"
+ jest-diff "^26.5.2"
jest-get-type "^26.3.0"
- jest-haste-map "^26.3.0"
- jest-matcher-utils "^26.4.2"
- jest-message-util "^26.3.0"
- jest-resolve "^26.4.0"
+ jest-haste-map "^26.5.2"
+ jest-matcher-utils "^26.5.2"
+ jest-message-util "^26.5.2"
+ jest-resolve "^26.5.2"
natural-compare "^1.4.0"
- pretty-format "^26.4.2"
+ pretty-format "^26.5.2"
semver "^7.3.2"
-jest-util@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.3.0.tgz#a8974b191df30e2bf523ebbfdbaeb8efca535b3e"
- integrity sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw==
+jest-util@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.5.2.tgz#8403f75677902cc52a1b2140f568e91f8ed4f4d7"
+ integrity sha512-WTL675bK+GSSAYgS8z9FWdCT2nccO1yTIplNLPlP0OD8tUk/H5IrWKMMRudIQQ0qp8bb4k+1Qa8CxGKq9qnYdg==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
"@types/node" "*"
chalk "^4.0.0"
graceful-fs "^4.2.4"
is-ci "^2.0.0"
micromatch "^4.0.2"
-jest-validate@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.4.2.tgz#e871b0dfe97747133014dcf6445ee8018398f39c"
- integrity sha512-blft+xDX7XXghfhY0mrsBCYhX365n8K5wNDC4XAcNKqqjEzsRUSXP44m6PL0QJEW2crxQFLLztVnJ4j7oPlQrQ==
+jest-validate@^26.5.3:
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.5.3.tgz#eefd5a5c87059550548c5ad8d6589746c66929e3"
+ integrity sha512-LX07qKeAtY+lsU0o3IvfDdN5KH9OulEGOMN1sFo6PnEf5/qjS1LZIwNk9blcBeW94pQUI9dLN9FlDYDWI5tyaA==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
camelcase "^6.0.0"
chalk "^4.0.0"
jest-get-type "^26.3.0"
leven "^3.1.0"
- pretty-format "^26.4.2"
+ pretty-format "^26.5.2"
-jest-watcher@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.3.0.tgz#f8ef3068ddb8af160ef868400318dc4a898eed08"
- integrity sha512-XnLdKmyCGJ3VoF6G/p5ohbJ04q/vv5aH9ENI+i6BL0uu9WWB6Z7Z2lhQQk0d2AVZcRGp1yW+/TsoToMhBFPRdQ==
+jest-watcher@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.5.2.tgz#2957f4461007e0769d74b537379ecf6b7c696916"
+ integrity sha512-i3m1NtWzF+FXfJ3ljLBB/WQEp4uaNhX7QcQUWMokcifFTUQBDFyUMEwk0JkJ1kopHbx7Een3KX0Q7+9koGM/Pw==
dependencies:
- "@jest/test-result" "^26.3.0"
- "@jest/types" "^26.3.0"
+ "@jest/test-result" "^26.5.2"
+ "@jest/types" "^26.5.2"
"@types/node" "*"
ansi-escapes "^4.2.1"
chalk "^4.0.0"
- jest-util "^26.3.0"
+ jest-util "^26.5.2"
string-length "^4.0.1"
-jest-worker@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f"
- integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==
+jest-worker@^26.5.0:
+ version "26.5.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.5.0.tgz#87deee86dbbc5f98d9919e0dadf2c40e3152fa30"
+ integrity sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==
dependencies:
"@types/node" "*"
merge-stream "^2.0.0"
supports-color "^7.0.0"
jest@^26.4.0:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/jest/-/jest-26.4.2.tgz#7e8bfb348ec33f5459adeaffc1a25d5752d9d312"
- integrity sha512-LLCjPrUh98Ik8CzW8LLVnSCfLaiY+wbK53U7VxnFSX7Q+kWC4noVeDvGWIFw0Amfq1lq2VfGm7YHWSLBV62MJw==
+ version "26.5.3"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-26.5.3.tgz#5e7a322d16f558dc565ca97639e85993ef5affe6"
+ integrity sha512-uJi3FuVSLmkZrWvaDyaVTZGLL8WcfynbRnFXyAHuEtYiSZ+ijDDIMOw1ytmftK+y/+OdAtsG9QrtbF7WIBmOyA==
dependencies:
- "@jest/core" "^26.4.2"
+ "@jest/core" "^26.5.3"
import-local "^3.0.2"
- jest-cli "^26.4.2"
+ jest-cli "^26.5.3"
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
@@ -3870,7 +3878,7 @@ jsbn@~0.1.0:
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
-jsdom@^16.2.2:
+jsdom@^16.4.0:
version "16.4.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb"
integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==
@@ -3997,6 +4005,14 @@ jsx-ast-utils@^2.4.1:
array-includes "^3.1.1"
object.assign "^4.1.0"
+"jsx-ast-utils@^2.4.1 || ^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.0.0.tgz#0f49d5093bafa4b45d3fe02147d8b40ffc6c7438"
+ integrity sha512-sPuicm6EPKYI/UnWpOatvg4pI50qaBo4dSOMGUPutmJ26ttedFKXr0It0XXPk4HKnQ/1X0st4eSS2w2jhFk9Ow==
+ dependencies:
+ array-includes "^3.1.1"
+ object.assign "^4.1.1"
+
jwa@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
@@ -4407,10 +4423,10 @@ mongodb-memory-server-core@6.6.7:
optionalDependencies:
mongodb "^3.5.9"
-mongodb-memory-server-core@6.9.0:
- version "6.9.0"
- resolved "https://registry.yarnpkg.com/mongodb-memory-server-core/-/mongodb-memory-server-core-6.9.0.tgz#309d81bff7e67b4c2c2ac1ce788064dc6d172f67"
- integrity sha512-MVA5lQ6ZULGrkbLJN2NddDaBhnVjb5QkxqsZ6cTj9vdIAACf+MuH/ZWPuBRD/9M6JqcmNc+/JgKW98l08cpd/Q==
+mongodb-memory-server-core@6.9.2:
+ version "6.9.2"
+ resolved "https://registry.yarnpkg.com/mongodb-memory-server-core/-/mongodb-memory-server-core-6.9.2.tgz#a064602e85c065c63776cef20ec7311d2b2da206"
+ integrity sha512-0naMEESKsJNBg4/djN9qc+Argmg5UElJ/EFP9M4opTH//GZ1Rn6SI5S43NFHJrizOPGojAAp21gn7rNOru7Ypw==
dependencies:
"@types/tmp" "^0.2.0"
camelcase "^6.0.0"
@@ -4439,11 +4455,11 @@ mongodb-memory-server@6.6.7:
mongodb-memory-server-core "6.6.7"
mongodb-memory-server@^6.9.0:
- version "6.9.0"
- resolved "https://registry.yarnpkg.com/mongodb-memory-server/-/mongodb-memory-server-6.9.0.tgz#b8266442b1e10f855044cf13c6a047378c9e573e"
- integrity sha512-3KvmVlMqjrzCO8J+Mq71fMRc3YwvA202ptaXhNV08oBsUk5rMkES7c6AIlp3uY7CcdomkoxpiJD7fjLv2Jx8QA==
+ version "6.9.2"
+ resolved "https://registry.yarnpkg.com/mongodb-memory-server/-/mongodb-memory-server-6.9.2.tgz#75880bf5f485deceba2d7df20659b2796ff703cf"
+ integrity sha512-+8axA5PlO+C3H+kgsxt6+6edcKAaY56YjYt+MWj9t1ZiKsEr+7SPsQfJcEoX+Kiz802jt1BOOIbYQVLX+08Hag==
dependencies:
- mongodb-memory-server-core "6.9.0"
+ mongodb-memory-server-core "6.9.2"
mongodb@3.6.2, mongodb@^3.5.9:
version "3.6.2"
@@ -4464,9 +4480,9 @@ mongoose-legacy-pluralize@1.0.2:
integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==
mongoose@^5.10.0:
- version "5.10.7"
- resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.10.7.tgz#5590037f4d9078f4d4edac5c77f27b53829b1c94"
- integrity sha512-oiofFrD4I5p3PhJXn49QyrU1nX5CY01qhPkfMMrXYPhkfGLEJVwFVO+0PsCxD91A2kQP+d/iFyk5U8e86KI8eQ==
+ version "5.10.9"
+ resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.10.9.tgz#23b74debc86d2055cee4fe77f962a9c8a286cdad"
+ integrity sha512-7dkr1d6Uyk87hELzoc6B7Zo7kkPTx8rKummk51Y0je2V2Ttsw0KFPwTp1G8JIbBta7Wpw8j15PJi0d33Ode2nw==
dependencies:
bson "^1.1.4"
kareem "2.3.1"
@@ -5076,12 +5092,12 @@ prettier@^2.1.1:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
-pretty-format@^26.4.2:
- version "26.4.2"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.4.2.tgz#d081d032b398e801e2012af2df1214ef75a81237"
- integrity sha512-zK6Gd8zDsEiVydOCGLkoBoZuqv8VTiHyAbKznXe/gaph/DAeZOmit9yMfgIz5adIgAMMs5XfoYSwAX3jcCO1tA==
+pretty-format@^26.5.2:
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.5.2.tgz#5d896acfdaa09210683d34b6dc0e6e21423cd3e1"
+ integrity sha512-VizyV669eqESlkOikKJI8Ryxl/kPpbdLwNdPs2GrbQs18MpySB5S0Yo0N7zkg2xTRiFq4CFw8ct5Vg4a0xP0og==
dependencies:
- "@jest/types" "^26.3.0"
+ "@jest/types" "^26.5.2"
ansi-regex "^5.0.0"
ansi-styles "^4.0.0"
react-is "^16.12.0"
@@ -6201,9 +6217,9 @@ tsconfig-paths@^3.9.0:
strip-bom "^3.0.0"
tslib@^1.9.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
- integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tsscmp@^1.0.6:
version "1.0.6"
@@ -6391,10 +6407,10 @@ v8-compile-cache@^2.0.3:
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745"
integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==
-v8-to-istanbul@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-5.0.1.tgz#0608f5b49a481458625edb058488607f25498ba5"
- integrity sha512-mbDNjuDajqYe3TXFk5qxcQy8L1msXNE37WTlLoqqpBfRsimbNcrlhQlDPntmECEcUvdC+AQ8CyMMf6EUx1r74Q==
+v8-to-istanbul@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-6.0.1.tgz#7ef0e32faa10f841fe4c1b0f8de96ed067c0be1e"
+ integrity sha512-PzM1WlqquhBvsV+Gco6WSFeg1AGdD53ccMRkFeyHRE/KRZaVacPOmQYP3EeVgDBtKD2BJ8kgynBQ5OtKiHCH+w==
dependencies:
"@types/istanbul-lib-coverage" "^2.0.1"
convert-source-map "^1.6.0"
@@ -6471,9 +6487,9 @@ whatwg-mimetype@^2.3.0:
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
whatwg-url@^8.0.0:
- version "8.3.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.3.0.tgz#d1e11e565334486cdb280d3101b9c3fd1c867582"
- integrity sha512-BQRf/ej5Rp3+n7k0grQXZj9a1cHtsp4lqj01p59xBWFKdezR8sO37XnpafwNqiFac/v2Il12EIMjX/Y4VZtT8Q==
+ version "8.4.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837"
+ integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==
dependencies:
lodash.sortby "^4.7.0"
tr46 "^2.0.2"
@@ -6625,7 +6641,7 @@ yargs@^13.3.0:
y18n "^4.0.0"
yargs-parser "^13.1.2"
-yargs@^15.3.1:
+yargs@^15.4.1:
version "15.4.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
diff --git a/client/package.json b/client/package.json
index b24a63f3f..8edb70e5d 100644
--- a/client/package.json
+++ b/client/package.json
@@ -10,8 +10,8 @@
"cross-var": "^1.1.0",
"d3": "^5.15.1",
"dotenv-cli": "^3.2.0",
- "firebase": "^7.15.1",
"http-proxy-middleware": "^1.0.5",
+ "js-cookie": "^2.2.1",
"local-storage": "^2.0.0",
"mathjs": "^6.6.2",
"minimist": "^1.2.3",
diff --git a/client/src/App.js b/client/src/App.js
index c676295c5..e81e59b22 100644
--- a/client/src/App.js
+++ b/client/src/App.js
@@ -2,8 +2,6 @@ import React from "react";
import { AuthProvider } from "./context/authContext";
import { Route, Redirect, Switch } from "react-router-dom";
-import Firebase from "./firebase";
-
import Home from "./pages/Home";
import Navbar from "./components/Navbar";
import Footer from "./components/Footer";
diff --git a/client/src/components/Footer.js b/client/src/components/Footer.js
index 777b7fab6..2f7452ab8 100644
--- a/client/src/components/Footer.js
+++ b/client/src/components/Footer.js
@@ -1,7 +1,5 @@
import React from 'react';
-import Firebase from '../firebase';
-
import pkg from '../../package.json';
import useAuth from '../hooks/useAuth';
@@ -12,8 +10,9 @@ const Footer = () => {
const handleLogout = (e) => {
e.preventDefault();
- console.log('Trying to logout here!');
- Firebase.logout();
+ // TODO: re-implement logout without firebase
+
+
};
return (
diff --git a/client/src/firebase.js b/client/src/firebase.js
deleted file mode 100644
index 9dc191c95..000000000
--- a/client/src/firebase.js
+++ /dev/null
@@ -1,110 +0,0 @@
-import React from 'react';
-import app from "firebase/app";
-import "firebase/auth";
-
-import { Redirect } from 'react-router-dom';
-
-// Firebase configuration
-const firebaseConfig = {
- apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
- authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
- databaseURL: process.env.REACT_APP_FIREBASE_DATABASE_URL,
- projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
- storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
- messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,
- appId: process.env.REACT_APP_FIREBASE_APP_ID,
- measurementId: process.env.REACT_APP_FIREBASE_MEASUREMENT_ID
-};
-
-// Initialize Firebase class with async methods
-class Firebase {
- constructor() {
- app.initializeApp(firebaseConfig);
- // console.log('Firebase initialized');
-
- this.auth = app.auth();
- // console.log('Auth initialized');
- };
-
- isInitialized() {
- return new Promise(resolve => {
- this.auth.onAuthStateChanged(resolve);
- });
- };
-
- async submitEmail(email) {
- // console.log('Try submitting ' + email + '...');
-
- try {
- const actionCodeSettings = {
- // URL you want to redirect back to. The domain (www.example.com) for this
- // URL must be whitelisted in the Firebase Console.
- url: process.env.REACT_APP_FIREBASE_DEV_REDIRECT_URL,
- // This must be true.
- handleCodeInApp: true,
- };
-
- await this.auth.sendSignInLinkToEmail(email, actionCodeSettings)
- .then(() => {
- // The link was successfully sent. Inform the user.
- // Save the email locally so you don't need to ask the user for it again
- // if they open the link on the same device.
- window.localStorage.setItem('emailForSignIn', email);
-
- return true;
- })
- .catch(error => {
- // Some error occurred, you can inspect the code: error.code
- console.log(error);
-
- return false;
- });
- } catch(error) {
- console.log(error);
-
- return false;
- }
- };
-
- async login() {
- // console.log('Trying to login');
- // Confirm the link is a sign-in with email link.
- try {
- if (this.auth.isSignInWithEmailLink(window.location.href)) {
- // Additional state parameters can also be passed via URL.
- // This can be used to continue the user's intended action before triggering
- // the sign-in operation.
- // Get the email if available. This should be available if the user completes
- // the flow on the same device where they started it.
- let email = window.localStorage.getItem('emailForSignIn');
- console.log("From local storage: " + email);
-
- if (!email) {
- // User opened the link on a different device. To prevent session fixation
- // attacks, ask the user to provide the associated email again. For example:
- email = window.prompt('Please provide your email for confirmation:');
- }
- // The client SDK will parse the code from the link for you.
- const result = await this.auth.signInWithEmailLink(email, window.location.href);
-
- // window.localStorage.removeItem('emailForSignIn', email);
-
- console.log('Login potentially successful?');
-
- return result;
- };
- } catch(error) {
- console.log(error);
- };
- };
-
- logout() {
- return this.auth.signOut();
- };
-
- // getCurrentUsername() {
- // return this.auth.currentUser && this.auth.currentUser.displayName;
- // };
-};
-
-export default new Firebase();
diff --git a/client/src/hooks/useProvideAuth.js b/client/src/hooks/useProvideAuth.js
index 8c86e01b0..acfda0b97 100644
--- a/client/src/hooks/useProvideAuth.js
+++ b/client/src/hooks/useProvideAuth.js
@@ -1,31 +1,27 @@
-import React, { useState, useEffect } from 'react';
-
-import Firebase from '../firebase';
+import { useState, useEffect } from "react";
export default function useProvideAuth() {
- const [isAdmin, setIsAdmin] = useState(null);
- const [user, setUser] = useState();
-
- useEffect(() => {
- if (!user) {
- Firebase.login();
- };
-
- Firebase.auth.onAuthStateChanged(user => {
- // console.log('Handling auth change with ', user);
-
- if (user) {
- setUser(user);
- } else {
- setUser(null);
- };
- });
-
- }, []);
+ const [isAdmin, setIsAdmin] = useState(null);
+ const [user, setUser] = useState();
- // console.log(user);
+ async function checkUser() {
+ try {
+ const response = await fetch("/api/auth/me", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ });
+ setUser(response.status === 200);
+ setIsAdmin(response.status === 200);
+ } catch (err) {
+ console.log(err);
+ }
+ }
- // return { user, isAdmin, login };
- return { user, isAdmin };
-};
+ useEffect(() => {
+ checkUser();
+ }, [user, isAdmin]);
+ return { user, isAdmin };
+}
diff --git a/client/src/pages/AdminLogin.js b/client/src/pages/AdminLogin.js
index 24c324980..6d43bd02e 100644
--- a/client/src/pages/AdminLogin.js
+++ b/client/src/pages/AdminLogin.js
@@ -1,153 +1,149 @@
-import React, { useState } from 'react';
-import { Redirect } from 'react-router-dom';
-
-// import useAuth from '../hooks/useAuth';
-// import { authContext } from '../context/authContext';
-import Firebase from '../firebase';
-import useAuth from '../hooks/useAuth';
-
-import '../sass/AdminLogin.scss';
-// import '../sass/HomeContainer-media-queries.scss';
+import React, { useState } from "react";
+import { Redirect } from "react-router-dom";
+import useAuth from "../hooks/useAuth";
+import "../sass/AdminLogin.scss";
const AdminLogin = (props) => {
- const auth = useAuth();
-
- // const [isLoading, setIsLoading] = useState(false);
- // const [event, setEvent] = useState([]);
- const [isError, setIsError] = useState(false);
- const [errorMessage, setErrorMessage] = useState("");
- const [email, setEmail] = useState("");
-
- // const auth = useAuth();
-
- const handleInputChange = (e) => setEmail(e.currentTarget.value);
-
- const handleLogin = async (e) => {
- e.preventDefault();
-
- if (email === "") {
- setIsError(true);
- setErrorMessage("Please don't leave the field blank.");
- } else if (!email.includes("@") || !email.includes(".")) {
- setIsError(true);
- setErrorMessage("Please format the email address correctly.");
- } else {
- let isAdmin = await checkEmail(e);
-
- if (isAdmin === false) {
- setIsError(true);
- setErrorMessage("You don't have the correct access level.");
-
- } else if (isAdmin === undefined || isAdmin === null) {
- console.log('Something is wrong try again');
-
- } else {
- Firebase.submitEmail(email)
- .then(response => {
- props.history.push('/emailsent');
- })
- .catch(error => {
- console.log(error);
- });
- }
- };
- };
-
- async function checkEmail(e) {
- e.preventDefault();
-
+ const auth = useAuth();
+
+ const [isLoading, setIsLoading] = useState(false);
+ const [isError, setIsError] = useState(false);
+ const [errorMessage, setErrorMessage] = useState("");
+ const [email, setEmail] = useState("");
+
+ const handleInputChange = (e) => setEmail(e.currentTarget.value);
+
+ const handleLogin = async (e) => {
+ e.preventDefault();
+
+ if (email === "") {
+ setIsError(true);
+ setErrorMessage("Please don't leave the field blank.");
+ } else if (!email.includes("@") || !email.includes(".")) {
+ setIsError(true);
+ setErrorMessage("Please format the email address correctly.");
+ } else {
+ let isAdmin = await checkEmail(e);
+
+ if (isAdmin === false) {
+ setIsError(true);
+ setErrorMessage("You don't have the correct access level.");
+ } else if (isAdmin === undefined || isAdmin === null) {
+ console.log("Something is wrong try again");
+ } else {
try {
- // setIsLoading(true);
-
- return await fetch('/api/checkuser', {
- method: "POST",
- headers: {
- "Content-Type": "application/json"
- },
- body: JSON.stringify({ email })
- })
- .then(res => {
- if (res.ok) {
- return res.json();
- }
-
- throw new Error(res.statusText);
- })
- .then(response => {
-
- if (response === false) {
- setIsError(true);
- setErrorMessage("Please enter the correct email address.");
-
- return response;
- } else if (response.accessLevel !== 'admin') {
- setIsError(true);
- setErrorMessage("You don't have the correct access level to view the dashboard.");
- } else {
-
- return response.email;
- }
- })
- .catch(err => {
- console.log(err);
- // setIsLoading(false);
- })
+ await fetch("/api/auth/signin", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({ email: email }),
+ }).then((res) => {
+ if (res.status === 200) {
+ props.history.push("/emailsent");
+ }
+ });
} catch (error) {
- console.log(error);
- // setIsLoading(false);
+ console.log(error);
}
- };
-
- return (
- auth.user
- ?
Redirecting...
-Magic link is valid
; + } else { + text =Magic link is NOT valid
; + } + + return ( +