diff --git a/.env b/.env
index 0bdfbe73..b86458d7 100644
--- a/.env
+++ b/.env
@@ -20,6 +20,9 @@ JWT_SECRET=Lendas contam que o Rui foi membro do IEEE.
# Frontend Password Recovery Base Route
PASSWORD_RECOVERY_LINK=https://localhost:3000/recover
+# Frontend Application Confirmation Base Route
+APPLICATION_CONFIRMATION_LINK=https://localhost:3000/apply/
+
# Specifies the port in which the app will be exposed
PORT=8087
@@ -45,12 +48,12 @@ ACCESS_CONTROL_ALLOW_ORIGINS=
MAIL_FROM=
# Password for email above
-MAIL_FROM_PASSWORD=
+MAIL_FROM_PASSWORD=
# Cloudinary API URL to save images
CLOUDINARY_URL=
-# Hostname of the application (where the webserver will be served) - without the trailing '/'
+# Hostname of the application (where the webserver will be served) - without the trailing '/'
WEBSERVER_HOST=https://localhost:8087
# Path to save file uploads, the path must be relative to the root of the project - Defaults to static
diff --git a/.eslintrc b/.eslintrc
index 8ff0b7eb..5aa42c22 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,4 +1,4 @@
-{
+{
"extends": [
"eslint:recommended"
],
@@ -99,6 +99,6 @@
"no-var": "error",
"prefer-const": ["error", { "destructuring": "all" }],
"prefer-template": "error",
- "template-curly-spacing": "error",
+ "template-curly-spacing": "error"
}
}
diff --git a/documentation/docs-index.js b/documentation/docs-index.js
index cce0cb47..1134eed7 100644
--- a/documentation/docs-index.js
+++ b/documentation/docs-index.js
@@ -28,13 +28,15 @@ module.exports = {
"companies/disable",
"companies/enable",
"companies/delete",
- "companies/concurrent-offers"
+ "companies/concurrent-offers",
+ "companies/get-application"
],
Applications: [
"applications/create",
"applications/search",
"applications/approve",
- "applications/reject"
+ "applications/reject",
+ "applications/validate"
],
Auth: [
"auth/login",
diff --git a/documentation/docs/applications/approve.md b/documentation/docs/applications/approve.md
index f771615d..160f2510 100644
--- a/documentation/docs/applications/approve.md
+++ b/documentation/docs/applications/approve.md
@@ -13,6 +13,7 @@ import Highlight from "../../src/highlight.js"
## Details
This endpoint is used to approve a company Application, specified by applicationId.
+It changes all the companies offers to not pending.
**URL** : `/applications/company/:applicationId/approve`
@@ -169,3 +170,39 @@ values={[
+
+### Example 5 - Application is not verified
+
+**Code** : 409 CONFLICT
+
+
+
+
+
+```bash
+/applications/company/631a18cf8e61e0acea76e5e1/approve
+```
+
+
+
+
+
+```json
+{
+ "error_code": 1,
+ "errors": [
+ {
+ "msg": "application-must-be-verified"
+ }
+ ]
+}
+```
+
+
+
diff --git a/documentation/docs/applications/create.md b/documentation/docs/applications/create.md
index 3524f1ae..953d12d8 100644
--- a/documentation/docs/applications/create.md
+++ b/documentation/docs/applications/create.md
@@ -13,8 +13,8 @@ import Highlight from "../../src/highlight.js"
## Details
This endpoint is used to create company applications.
-In order of a Company to use its account, the application must be accepted by an Admin and then the Company should
-finish its registration.
+In order for a Company to use its account, the company must verify its application by clicking in a link sent
+by email after its creation. After that the Company should finish its registration.
**URL** : `/apply/company`
@@ -36,7 +36,11 @@ see [register](../auth/register).
Email used for the company application and subsequent account.
Must be in a valid email format.
-Can't already be in use for accounts or other applications.
+Can't already be in use on any account.
+
+:::info
+After creating an application, if another application is created with the same email after 10 minutes, the existing one will be replaced. Creating the new application before the 10 minute mark will result in an error.
+:::
### password
@@ -181,7 +185,7 @@ values={[
"password": "password123",
"companyName": "Company",
"motivation": "We wish to revolutionize the industry with young engineers."
-}
+}ara quem usa o timetable-bruteforcer
```
@@ -249,7 +253,48 @@ values={[
-### Example 5 - Invalid Password
+### Example 5 - Application with the same email created recently
+
+**Code** : 403 FORBIDDEN
+
+
+
+
+
+```json
+{
+ "email": "company@company.com",
+ "password": "password123",
+ "companyName": "Company",
+ "motivation": "We wish to revolutionize the industry with young engineers."
+}
+```
+
+
+
+
+
+```json
+{
+ "error_code": 1,
+ "errors": [
+ {
+ "msg": "company-application-recently-created",
+ }
+ ]
+}
+```
+
+
+
+
+### Example 6 - Invalid Password
**Code** : 422 UNPROCESSABLE ENTITY
diff --git a/documentation/docs/applications/reject.md b/documentation/docs/applications/reject.md
index c9e3b9a7..1ef7a3a9 100644
--- a/documentation/docs/applications/reject.md
+++ b/documentation/docs/applications/reject.md
@@ -197,3 +197,42 @@ values={[
+
+### Example 5 - Application is not verified
+
+**Code** : 409 CONFLICT
+
+
+
+
+
+```json
+{
+ "rejectReason": "The motivation of the company is not convincing"
+}
+```
+
+
+
+
+
+```json
+{
+ "error_code": 1,
+ "errors": [
+ {
+ "msg": "application-must-be-verified"
+ }
+ ]
+}
+```
+
+
+
+
diff --git a/documentation/docs/applications/search.md b/documentation/docs/applications/search.md
index dc8227d4..574f52f2 100644
--- a/documentation/docs/applications/search.md
+++ b/documentation/docs/applications/search.md
@@ -66,7 +66,7 @@ Filters the applications by the name of the respective companies.
Array of strings which filters the application by their state.
:::caution
-Must be a valid state (currently `["PENDING", "APPROVED", "REJECTED"]`).
+Must be a valid state (currently `["UNVERIFIED", "PENDING", "APPROVED", "REJECTED"]`).
:::
### submissionDateFrom
@@ -153,6 +153,7 @@ values={[
"companyName": "Company name",
"motivation": "We wish to revolutionize the industry with young engineers.",
"submittedAt": "2022-09-08T16:31:11.784Z",
+ "isVerified": true,
"__v": 0,
"state": "PENDING"
},
@@ -162,6 +163,7 @@ values={[
"companyName": "Example Company",
"motivation": "We are a brand new tech company in Porto, Portugal",
"submittedAt": "2022-09-07T13:15:15.971Z",
+ "isVerified": true,
"__v": 0,
"approvedAt": "2022-09-07T13:17:30.908Z",
"state": "APPROVED"
@@ -172,13 +174,24 @@ values={[
"companyName": "Bad Company",
"motivation": "We want to exploit workers.",
"submittedAt": "2022-09-07T13:15:15.971Z",
+ "isVerified": true,
"__v": 0,
"rejectedAt": "2022-09-07T13:17:30.908Z",
"rejectReason": "Motivation doesn't seem right",
"state": "REJECTED"
+ },
+ {
+ "_id": "63189963541e53a45a423dce",
+ "email": "notVerified@company.com",
+ "companyName": "Unverified",
+ "motivation": "We are a new company in Lisbon",
+ "submittedAt": "2022-09-07T13:15:15.971Z",
+ "isVerified": false,
+ "__v": 0,
+ "state": "UNVERIFIED"
}
],
- "docCount": 3
+ "docCount": 4
}
```
diff --git a/documentation/docs/applications/validate.md b/documentation/docs/applications/validate.md
new file mode 100644
index 00000000..526798a2
--- /dev/null
+++ b/documentation/docs/applications/validate.md
@@ -0,0 +1,161 @@
+---
+id: validate
+title: Validate Application
+sidebar_label: Validate Application
+slug: /applications/validate
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+import Highlight from "../../src/highlight.js"
+
+## Details
+
+This endpoint is used to validate an application using a previous created token.
+The token is generated with the [ create ](./create) endpoint and is sent to the user by email.
+
+
+**URL** : `/apply/company/:token/validate`
+
+**Method** : POST
+
+## Request examples
+
+### Example 1 - Valid Request
+
+**Code** : 200 OK
+
+
+
+
+
+```bash
+/apply/company/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im5pQGFlZmV1cC5wdCIsImlhdCI6MTY2MzAxMzg0OSwiZXhwIjoxNjYzMDE0NDQ5fQ.k5Z_nBpqt_Hs8JBhLH0ZXTl2-BG-utdIAUdhKXEFuFc/validate
+```
+
+
+
+
+
+```json
+{}
+```
+
+
+
+
+### Example 2 - Invalid Token
+
+**Code** : 404 NOT_FOUND
+
+
+
+
+
+```bash
+/apply/company/invalid/validate
+
+```
+
+
+
+
+
+```json
+{
+ "error_code": 3,
+ "errors": [
+ {
+ "msg": "invalid-token"
+ }
+ ]
+}
+```
+
+
+
+
+### Example 3 - Expired Token
+
+**Code** : 410 GONE
+
+
+
+
+
+```bash
+/apply/company/expired/validate
+```
+
+
+
+
+
+```json
+{
+ "error_code": 3,
+ "errors": [
+ {
+ "msg": "expired-token"
+ }
+ ]
+}
+```
+
+
+
+
+### Example 4 - Application Already Validated
+
+**Code** : 409 CONFLICT
+
+
+
+
+
+```bash
+/apply/company/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im5pQGFlZmV1cC5wdCIsImlhdCI6MTY2MzAxMzg0OSwiZXhwIjoxNjYzMDE0NDQ5fQ.k5Z_nBpqt_Hs8JBhLH0ZXTl2-BG-utdIAUdhKXEFuFc/validate
+```
+
+
+
+
+
+```json
+{
+ "error_code": 3,
+ "errors": [
+ {
+ "msg": "application-already-validated"
+ }
+ ]
+}
+```
+
+
+
diff --git a/documentation/docs/auth/confirm.md b/documentation/docs/auth/confirm.md
index b758f236..254c32a5 100644
--- a/documentation/docs/auth/confirm.md
+++ b/documentation/docs/auth/confirm.md
@@ -52,7 +52,7 @@ values={[
### Example 2 - Invalid Token
-**Code** : 403 FORBIDDEN
+**Code** : 404 NOT_FOUND
+
+### Example 3 - Expired Token
+
+**Code** : 410 GONE
+
+
+
+
+
+```bash
+/auth/recover/expired/confirm
+```
+
+
+
+
+
+```json
+{
+ "error_code": 3,
+ "errors": [
+ {
+ "msg": "expired-token"
+ }
+ ]
+}
+```
+
+
+
+
diff --git a/documentation/docs/auth/finish-recovery.md b/documentation/docs/auth/finish-recovery.md
index bf876184..f3286f39 100644
--- a/documentation/docs/auth/finish-recovery.md
+++ b/documentation/docs/auth/finish-recovery.md
@@ -66,7 +66,7 @@ values={[
### Example 2 - Invalid Token
-**Code** : 403 FORBIDDEN
+**Code** : 404 NOT_FOUND
-### Example 3 - Password Without Numbers
+
+**Code** : 410 GONE
+
+
+
+
+
+```bash
+/auth/recover/expired/confirm
+```
+
+
+
+
+
+```json
+{
+ "error_code": 3,
+ "errors": [
+ {
+ "msg": "expired-token"
+ }
+ ]
+}
+```
+
+
+
+
+### Example 4 - Password Without Numbers
**Code** : 422 UNPROCESSABLE ENTITY
diff --git a/documentation/docs/companies/get-application.md b/documentation/docs/companies/get-application.md
new file mode 100644
index 00000000..165c4082
--- /dev/null
+++ b/documentation/docs/companies/get-application.md
@@ -0,0 +1,190 @@
+---
+id: get-application
+title: Get Company Application by Company Id
+sidebar_label: Get Application by Company Id
+slug: /companies/get-application
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+import Highlight from "../../src/highlight.js"
+
+## Details
+
+This endpoint returns an application of a Company based on the Company ID provided.
+
+**URL** : `/company/:companyId/application`
+
+**Method** : GET
+
+:::caution Authentication
+Auth is required to get the application. Only Admins or owners of the company will have permission. Otherwise, if in god mode, [god_token](#god_token) must be provided.
+:::
+
+## Parameters
+
+### god_token
+
+Body Parameter
+
+Optional
+String
+
+If set, will use this for validating the usage of god mode (in case no session details are available, i.e., no logged-in
+user).
+
+## Request examples
+
+### Example 1 - Valid Request
+
+**Code** : 200 OK
+
+
+
+
+
+```bash
+/company/649a1ac0282d8ea3c574e25f/application
+```
+
+
+
+
+
+```json
+{
+ "_id": "649a1ab4282d8ea3c574e259",
+ "email": "company@example.com",
+ "companyName": "Company",
+ "motivation": "We wish to revolutionize the industry with young engineers.",
+ "submittedAt": "2023-06-26T23:09:40.450Z",
+ "isVerified": true,
+ "__v": 0,
+ "approvedAt": "2023-06-26T23:11:37.488Z",
+ "state": "APPROVED"
+}
+```
+
+
+
+
+### Example 2 - Insufficient permission
+
+**Code** : 401 UNAUTHORIZED
+
+
+
+
+
+```bash
+/company/649a1ac0282d8ea3c574e25f/application
+```
+
+
+
+
+
+```json
+{
+ "error_code": 3,
+ "errors": [
+ {
+ "msg": "insufficient-permissions"
+ }
+ ]
+}
+```
+
+
+
+
+### Example 3 - Invalid ID
+
+**Code** : 422 UNPROCESSABLE ENTITY
+
+
+
+
+
+```bash
+/company/invalid/application
+```
+
+
+
+
+
+```json
+{
+ "error_code": 1,
+ "errors": [
+ {
+ "value": "invalid",
+ "msg": "must-be-a-valid-id",
+ "param": "companyId",
+ "location": "params"
+ }
+ ]
+}
+```
+
+
+
+
+### Example 4 - Non-Existing Company
+
+**Code** : 422 UNPROCESSABLE ENTITY
+
+
+
+
+
+```bash
+/company/649a1ac0282d8ea3c574e26f/application
+```
+
+
+
+
+
+```json
+{
+ "error_code": 1,
+ "errors": [
+ {
+ "value": "649a1ac0282d8ea3c574e26f",
+ "msg": "no-company-found-with-id:649a1ac0282d8ea3c574e26f",
+ "param": "companyId",
+ "location": "params"
+ }
+ ]
+}
+```
+
+
+
diff --git a/documentation/docs/offers/create.md b/documentation/docs/offers/create.md
index a5c6bb25..231daa04 100644
--- a/documentation/docs/offers/create.md
+++ b/documentation/docs/offers/create.md
@@ -13,6 +13,7 @@ import Highlight from "../../src/highlight.js"
## Details
This endpoint is used to create offers. Both Admins and Companies can use it.
+Companies which are yet to be approved will have its offer pending.
:::info
If the logged-in user is a Company, that account will be the Offer owner. Otherwise, the creation will be done in
diff --git a/documentation/docs/offers/search.md b/documentation/docs/offers/search.md
index f9e67689..aeb078b7 100644
--- a/documentation/docs/offers/search.md
+++ b/documentation/docs/offers/search.md
@@ -14,6 +14,7 @@ import Highlight from "../../src/highlight.js"
This endpoint returns offers based on search criteria. It allows for _Full-Text Search_ as well as results filtering.
Perfect for a search component!
+Only returns offers that are not pending.
**URL** : `/offers`
@@ -271,6 +272,7 @@ values={[
"React Native"
],
"isHidden": false,
+ "isPending": false,
"isArchived": false,
"requirements": [
"Recent graduate/master's degree in Computer Science, Engineering or similar areas"
diff --git a/package-lock.json b/package-lock.json
index 5d461e75..c5e6d437 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,7 +1,7 @@
{
"name": "nijobs-be",
"version": "1.0.0",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
@@ -15,6 +15,7 @@
"bcrypt": "^5.1.0",
"cloudinary": "^1.32.0",
"dotenv-flow": "^3.2.0",
+ "expect": "^29.5.0",
"express": "^4.18.2",
"express-rate-limit": "^6.7.0",
"express-session": "^1.17.3",
@@ -161,49 +162,49 @@
"optional": true
},
"node_modules/@aws-sdk/client-cognito-identity": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.461.0.tgz",
- "integrity": "sha512-rttO5tsvNqZghQwUgPk67LSo+0Yy4ItmsI3sgl81WDUP2A9Q4rwB8L99gLWroUz1uJtBujQ/HoYu6GN4kRa3MQ==",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.438.0.tgz",
+ "integrity": "sha512-ZaMx8S2Uex5UXk1R5Qje2aE8lhXz1bw5Pk0Kjjz/8mo+CBiQDgtHu5SrS9ccLfBrFIcz6HtDWsJazEQaBaLplQ==",
"optional": true,
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/client-sts": "3.461.0",
- "@aws-sdk/core": "3.451.0",
- "@aws-sdk/credential-provider-node": "3.460.0",
- "@aws-sdk/middleware-host-header": "3.460.0",
- "@aws-sdk/middleware-logger": "3.460.0",
- "@aws-sdk/middleware-recursion-detection": "3.460.0",
- "@aws-sdk/middleware-signing": "3.461.0",
- "@aws-sdk/middleware-user-agent": "3.460.0",
- "@aws-sdk/region-config-resolver": "3.451.0",
- "@aws-sdk/types": "3.460.0",
- "@aws-sdk/util-endpoints": "3.460.0",
- "@aws-sdk/util-user-agent-browser": "3.460.0",
- "@aws-sdk/util-user-agent-node": "3.460.0",
- "@smithy/config-resolver": "^2.0.18",
- "@smithy/fetch-http-handler": "^2.2.6",
- "@smithy/hash-node": "^2.0.15",
- "@smithy/invalid-dependency": "^2.0.13",
- "@smithy/middleware-content-length": "^2.0.15",
- "@smithy/middleware-endpoint": "^2.2.0",
- "@smithy/middleware-retry": "^2.0.20",
- "@smithy/middleware-serde": "^2.0.13",
- "@smithy/middleware-stack": "^2.0.7",
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/node-http-handler": "^2.1.9",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/smithy-client": "^2.1.15",
- "@smithy/types": "^2.5.0",
- "@smithy/url-parser": "^2.0.13",
- "@smithy/util-base64": "^2.0.1",
+ "@aws-sdk/client-sts": "3.438.0",
+ "@aws-sdk/core": "3.436.0",
+ "@aws-sdk/credential-provider-node": "3.438.0",
+ "@aws-sdk/middleware-host-header": "3.433.0",
+ "@aws-sdk/middleware-logger": "3.433.0",
+ "@aws-sdk/middleware-recursion-detection": "3.433.0",
+ "@aws-sdk/middleware-signing": "3.433.0",
+ "@aws-sdk/middleware-user-agent": "3.438.0",
+ "@aws-sdk/region-config-resolver": "3.433.0",
+ "@aws-sdk/types": "3.433.0",
+ "@aws-sdk/util-endpoints": "3.438.0",
+ "@aws-sdk/util-user-agent-browser": "3.433.0",
+ "@aws-sdk/util-user-agent-node": "3.437.0",
+ "@smithy/config-resolver": "^2.0.16",
+ "@smithy/fetch-http-handler": "^2.2.4",
+ "@smithy/hash-node": "^2.0.12",
+ "@smithy/invalid-dependency": "^2.0.12",
+ "@smithy/middleware-content-length": "^2.0.14",
+ "@smithy/middleware-endpoint": "^2.1.3",
+ "@smithy/middleware-retry": "^2.0.18",
+ "@smithy/middleware-serde": "^2.0.12",
+ "@smithy/middleware-stack": "^2.0.6",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/node-http-handler": "^2.1.8",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/smithy-client": "^2.1.12",
+ "@smithy/types": "^2.4.0",
+ "@smithy/url-parser": "^2.0.12",
+ "@smithy/util-base64": "^2.0.0",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.19",
- "@smithy/util-defaults-mode-node": "^2.0.25",
- "@smithy/util-endpoints": "^1.0.4",
- "@smithy/util-retry": "^2.0.6",
- "@smithy/util-utf8": "^2.0.2",
+ "@smithy/util-defaults-mode-browser": "^2.0.16",
+ "@smithy/util-defaults-mode-node": "^2.0.21",
+ "@smithy/util-endpoints": "^1.0.2",
+ "@smithy/util-retry": "^2.0.5",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -211,46 +212,46 @@
}
},
"node_modules/@aws-sdk/client-sso": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.460.0.tgz",
- "integrity": "sha512-p5D9C8LKJs5yoBn5cCs2Wqzrp5YP5BYcP774bhGMFEu/LCIUyWzudwN3+/AObSiq8R8SSvBY2zQD4h+k3NjgTQ==",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.438.0.tgz",
+ "integrity": "sha512-L/xKq+K78PShLku8x5gM6lZDUp7LhFJ2ksKH7Vll+exSZq+QUaxuzjp4gqdzh6B0oIshv2jssQlUa0ScOmVRMg==",
"optional": true,
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/core": "3.451.0",
- "@aws-sdk/middleware-host-header": "3.460.0",
- "@aws-sdk/middleware-logger": "3.460.0",
- "@aws-sdk/middleware-recursion-detection": "3.460.0",
- "@aws-sdk/middleware-user-agent": "3.460.0",
- "@aws-sdk/region-config-resolver": "3.451.0",
- "@aws-sdk/types": "3.460.0",
- "@aws-sdk/util-endpoints": "3.460.0",
- "@aws-sdk/util-user-agent-browser": "3.460.0",
- "@aws-sdk/util-user-agent-node": "3.460.0",
- "@smithy/config-resolver": "^2.0.18",
- "@smithy/fetch-http-handler": "^2.2.6",
- "@smithy/hash-node": "^2.0.15",
- "@smithy/invalid-dependency": "^2.0.13",
- "@smithy/middleware-content-length": "^2.0.15",
- "@smithy/middleware-endpoint": "^2.2.0",
- "@smithy/middleware-retry": "^2.0.20",
- "@smithy/middleware-serde": "^2.0.13",
- "@smithy/middleware-stack": "^2.0.7",
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/node-http-handler": "^2.1.9",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/smithy-client": "^2.1.15",
- "@smithy/types": "^2.5.0",
- "@smithy/url-parser": "^2.0.13",
- "@smithy/util-base64": "^2.0.1",
+ "@aws-sdk/core": "3.436.0",
+ "@aws-sdk/middleware-host-header": "3.433.0",
+ "@aws-sdk/middleware-logger": "3.433.0",
+ "@aws-sdk/middleware-recursion-detection": "3.433.0",
+ "@aws-sdk/middleware-user-agent": "3.438.0",
+ "@aws-sdk/region-config-resolver": "3.433.0",
+ "@aws-sdk/types": "3.433.0",
+ "@aws-sdk/util-endpoints": "3.438.0",
+ "@aws-sdk/util-user-agent-browser": "3.433.0",
+ "@aws-sdk/util-user-agent-node": "3.437.0",
+ "@smithy/config-resolver": "^2.0.16",
+ "@smithy/fetch-http-handler": "^2.2.4",
+ "@smithy/hash-node": "^2.0.12",
+ "@smithy/invalid-dependency": "^2.0.12",
+ "@smithy/middleware-content-length": "^2.0.14",
+ "@smithy/middleware-endpoint": "^2.1.3",
+ "@smithy/middleware-retry": "^2.0.18",
+ "@smithy/middleware-serde": "^2.0.12",
+ "@smithy/middleware-stack": "^2.0.6",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/node-http-handler": "^2.1.8",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/smithy-client": "^2.1.12",
+ "@smithy/types": "^2.4.0",
+ "@smithy/url-parser": "^2.0.12",
+ "@smithy/util-base64": "^2.0.0",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.19",
- "@smithy/util-defaults-mode-node": "^2.0.25",
- "@smithy/util-endpoints": "^1.0.4",
- "@smithy/util-retry": "^2.0.6",
- "@smithy/util-utf8": "^2.0.2",
+ "@smithy/util-defaults-mode-browser": "^2.0.16",
+ "@smithy/util-defaults-mode-node": "^2.0.21",
+ "@smithy/util-endpoints": "^1.0.2",
+ "@smithy/util-retry": "^2.0.5",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -258,49 +259,49 @@
}
},
"node_modules/@aws-sdk/client-sts": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.461.0.tgz",
- "integrity": "sha512-1u+t31m23vuc9zkiUk51L4QbwuRQEuBeMArHK/thmq4V+A0VmjoAr/x2D0eQ0deOuBqG5YC62oaqUfIhj03SIw==",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.438.0.tgz",
+ "integrity": "sha512-UBxLZKVVvbR4LHwSNSqaKx22YBSOGkavrh4SyDP8o8XOlXeRxTCllfSfjL9K5Mktp+ZwQ2NiubNcwmvUcGKbbg==",
"optional": true,
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/core": "3.451.0",
- "@aws-sdk/credential-provider-node": "3.460.0",
- "@aws-sdk/middleware-host-header": "3.460.0",
- "@aws-sdk/middleware-logger": "3.460.0",
- "@aws-sdk/middleware-recursion-detection": "3.460.0",
- "@aws-sdk/middleware-sdk-sts": "3.461.0",
- "@aws-sdk/middleware-signing": "3.461.0",
- "@aws-sdk/middleware-user-agent": "3.460.0",
- "@aws-sdk/region-config-resolver": "3.451.0",
- "@aws-sdk/types": "3.460.0",
- "@aws-sdk/util-endpoints": "3.460.0",
- "@aws-sdk/util-user-agent-browser": "3.460.0",
- "@aws-sdk/util-user-agent-node": "3.460.0",
- "@smithy/config-resolver": "^2.0.18",
- "@smithy/fetch-http-handler": "^2.2.6",
- "@smithy/hash-node": "^2.0.15",
- "@smithy/invalid-dependency": "^2.0.13",
- "@smithy/middleware-content-length": "^2.0.15",
- "@smithy/middleware-endpoint": "^2.2.0",
- "@smithy/middleware-retry": "^2.0.20",
- "@smithy/middleware-serde": "^2.0.13",
- "@smithy/middleware-stack": "^2.0.7",
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/node-http-handler": "^2.1.9",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/smithy-client": "^2.1.15",
- "@smithy/types": "^2.5.0",
- "@smithy/url-parser": "^2.0.13",
- "@smithy/util-base64": "^2.0.1",
+ "@aws-sdk/core": "3.436.0",
+ "@aws-sdk/credential-provider-node": "3.438.0",
+ "@aws-sdk/middleware-host-header": "3.433.0",
+ "@aws-sdk/middleware-logger": "3.433.0",
+ "@aws-sdk/middleware-recursion-detection": "3.433.0",
+ "@aws-sdk/middleware-sdk-sts": "3.433.0",
+ "@aws-sdk/middleware-signing": "3.433.0",
+ "@aws-sdk/middleware-user-agent": "3.438.0",
+ "@aws-sdk/region-config-resolver": "3.433.0",
+ "@aws-sdk/types": "3.433.0",
+ "@aws-sdk/util-endpoints": "3.438.0",
+ "@aws-sdk/util-user-agent-browser": "3.433.0",
+ "@aws-sdk/util-user-agent-node": "3.437.0",
+ "@smithy/config-resolver": "^2.0.16",
+ "@smithy/fetch-http-handler": "^2.2.4",
+ "@smithy/hash-node": "^2.0.12",
+ "@smithy/invalid-dependency": "^2.0.12",
+ "@smithy/middleware-content-length": "^2.0.14",
+ "@smithy/middleware-endpoint": "^2.1.3",
+ "@smithy/middleware-retry": "^2.0.18",
+ "@smithy/middleware-serde": "^2.0.12",
+ "@smithy/middleware-stack": "^2.0.6",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/node-http-handler": "^2.1.8",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/smithy-client": "^2.1.12",
+ "@smithy/types": "^2.4.0",
+ "@smithy/url-parser": "^2.0.12",
+ "@smithy/util-base64": "^2.0.0",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.19",
- "@smithy/util-defaults-mode-node": "^2.0.25",
- "@smithy/util-endpoints": "^1.0.4",
- "@smithy/util-retry": "^2.0.6",
- "@smithy/util-utf8": "^2.0.2",
+ "@smithy/util-defaults-mode-browser": "^2.0.16",
+ "@smithy/util-defaults-mode-node": "^2.0.21",
+ "@smithy/util-endpoints": "^1.0.2",
+ "@smithy/util-retry": "^2.0.5",
+ "@smithy/util-utf8": "^2.0.0",
"fast-xml-parser": "4.2.5",
"tslib": "^2.5.0"
},
@@ -309,28 +310,27 @@
}
},
"node_modules/@aws-sdk/core": {
- "version": "3.451.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.451.0.tgz",
- "integrity": "sha512-SamWW2zHEf1ZKe3j1w0Piauryl8BQIlej0TBS18A4ACzhjhWXhCs13bO1S88LvPR5mBFXok3XOT6zPOnKDFktw==",
+ "version": "3.436.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.436.0.tgz",
+ "integrity": "sha512-vX5/LjXvCejC2XUY6TSg1oozjqK6BvkE75t0ys9dgqyr5PlZyZksMoeAFHUlj0sCjhT3ziWCujP1oiSpPWY9hg==",
"optional": true,
"dependencies": {
- "@smithy/smithy-client": "^2.1.15",
- "tslib": "^2.5.0"
+ "@smithy/smithy-client": "^2.1.12"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-provider-cognito-identity": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.461.0.tgz",
- "integrity": "sha512-D3bayvoEMxxheSpLug0VpAmGiVsDdYU4GsT8ls6389NjgQsAhPrmHd5wAxf1AtZYxghO9cT2rsZK60u0VQ1Q1w==",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.438.0.tgz",
+ "integrity": "sha512-/HgSPPvzIQ25SMII0vYlarJbijOAsXZCjayKWZ7+hilzju22hMB0ZTPM1E3QopWoZ6os76K59aAACfjhVAfIUg==",
"optional": true,
"dependencies": {
- "@aws-sdk/client-cognito-identity": "3.461.0",
- "@aws-sdk/types": "3.460.0",
+ "@aws-sdk/client-cognito-identity": "3.438.0",
+ "@aws-sdk/types": "3.433.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.5.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -338,14 +338,14 @@
}
},
"node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.460.0.tgz",
- "integrity": "sha512-WWdaRJFuYRc2Ue9NKDy2NIf8pQRNx/QRVmrsk6EkIID8uWlQIOePk3SWTVV0TZIyPrbfSEaSnJRZoShphJ6PAg==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.433.0.tgz",
+ "integrity": "sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
+ "@aws-sdk/types": "3.433.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.5.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -353,19 +353,19 @@
}
},
"node_modules/@aws-sdk/credential-provider-http": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.460.0.tgz",
- "integrity": "sha512-tLnuLDsGcBRemj8jxt1MkerjwsQlYdwnlfQXvrYOO8qMrbFP2sEjAx165GeCbsjmY/y0w1UFQEV+xRpFg5dxUw==",
+ "version": "3.435.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.435.0.tgz",
+ "integrity": "sha512-i07YSy3+IrXwAzp3goCMo2OYzAwqRGIWPNMUX5ziFgA1eMlRWNC2slnbqJzax6xHrU8HdpNESAfflnQvUVBqYQ==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/fetch-http-handler": "^2.2.6",
- "@smithy/node-http-handler": "^2.1.9",
+ "@aws-sdk/types": "3.433.0",
+ "@smithy/fetch-http-handler": "^2.2.4",
+ "@smithy/node-http-handler": "^2.1.8",
"@smithy/property-provider": "^2.0.0",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/smithy-client": "^2.1.15",
- "@smithy/types": "^2.5.0",
- "@smithy/util-stream": "^2.0.20",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/smithy-client": "^2.1.12",
+ "@smithy/types": "^2.4.0",
+ "@smithy/util-stream": "^2.0.17",
"tslib": "^2.5.0"
},
"engines": {
@@ -373,20 +373,20 @@
}
},
"node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.460.0.tgz",
- "integrity": "sha512-1IEUmyaWzt2M3mONO8QyZtPy0f9ccaEjCo48ZQLgptWxUI+Ohga9gPK0mqu1kTJOjv4JJGACYHzLwEnnpltGlA==",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.438.0.tgz",
+ "integrity": "sha512-WYPQR3pXoHJjn9/RMWipUhsUNFy6zhOiII6u8LJ5w84aNqIjV4+BdRYztRNGJD98jdtekhbkX0YKoSuZqP+unQ==",
"optional": true,
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.460.0",
- "@aws-sdk/credential-provider-process": "3.460.0",
- "@aws-sdk/credential-provider-sso": "3.460.0",
- "@aws-sdk/credential-provider-web-identity": "3.460.0",
- "@aws-sdk/types": "3.460.0",
+ "@aws-sdk/credential-provider-env": "3.433.0",
+ "@aws-sdk/credential-provider-process": "3.433.0",
+ "@aws-sdk/credential-provider-sso": "3.438.0",
+ "@aws-sdk/credential-provider-web-identity": "3.433.0",
+ "@aws-sdk/types": "3.433.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.5.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -394,21 +394,21 @@
}
},
"node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.460.0.tgz",
- "integrity": "sha512-PbPo92WIgNlF6V4eWKehYGYjTqf0gU9vr09LeQUc3bTm1DJhJw1j+HU/3PfQ8LwTkBQePO7MbJ5A2n6ckMwfMg==",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.438.0.tgz",
+ "integrity": "sha512-uaw3D2R0svyrC32qyZ2aOv/l0AT9eClh+eQsZJTQD3Kz9q+2VdeOBThQ8fsMfRtm26nUbZo6A/CRwxkm6okI+w==",
"optional": true,
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.460.0",
- "@aws-sdk/credential-provider-ini": "3.460.0",
- "@aws-sdk/credential-provider-process": "3.460.0",
- "@aws-sdk/credential-provider-sso": "3.460.0",
- "@aws-sdk/credential-provider-web-identity": "3.460.0",
- "@aws-sdk/types": "3.460.0",
+ "@aws-sdk/credential-provider-env": "3.433.0",
+ "@aws-sdk/credential-provider-ini": "3.438.0",
+ "@aws-sdk/credential-provider-process": "3.433.0",
+ "@aws-sdk/credential-provider-sso": "3.438.0",
+ "@aws-sdk/credential-provider-web-identity": "3.433.0",
+ "@aws-sdk/types": "3.433.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.5.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -416,15 +416,15 @@
}
},
"node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.460.0.tgz",
- "integrity": "sha512-ng+0FMc4EaxLAwdttCwf2nzNf4AgcqAHZ8pKXUf8qF/KVkoyTt3UZKW7P2FJI01zxwP+V4yAwVt95PBUKGn4YQ==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.433.0.tgz",
+ "integrity": "sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
+ "@aws-sdk/types": "3.433.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.5.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -432,17 +432,17 @@
}
},
"node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.460.0.tgz",
- "integrity": "sha512-KnrQieOw17+aHEzE3SwfxjeSQ5ZTe2HeAzxkaZF++GxhNul/PkVnLzjGpIuB9bn71T9a2oNfG3peDUA+m2l2kw==",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.438.0.tgz",
+ "integrity": "sha512-Xykli/64xR18cBV5P0XFxcH120omtfAjC/cFy/9nFU/+dPvbk0uu1yEOZYteWHyGGkPN4PkHmbh60GiUCLQkWQ==",
"optional": true,
"dependencies": {
- "@aws-sdk/client-sso": "3.460.0",
- "@aws-sdk/token-providers": "3.460.0",
- "@aws-sdk/types": "3.460.0",
+ "@aws-sdk/client-sso": "3.438.0",
+ "@aws-sdk/token-providers": "3.438.0",
+ "@aws-sdk/types": "3.433.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.5.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -450,14 +450,14 @@
}
},
"node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.460.0.tgz",
- "integrity": "sha512-7OeaZgC3HmJZGE0I0ZiKInUMF2LyA0IZiW85AYFnAZzAIfv1cXk/1UnDAoFIQhOZfnUBXivStagz892s480ryw==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.433.0.tgz",
+ "integrity": "sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
+ "@aws-sdk/types": "3.433.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.5.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -465,26 +465,26 @@
}
},
"node_modules/@aws-sdk/credential-providers": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.461.0.tgz",
- "integrity": "sha512-sJjGjJxs0KajPK+WbdIRSuidWqm1xobX/Uv0x7TTQCCj1Fsuyq03pNP1aLRbJnLazKx+qyJef7rEFwQeFEAiNA==",
- "optional": true,
- "dependencies": {
- "@aws-sdk/client-cognito-identity": "3.461.0",
- "@aws-sdk/client-sso": "3.460.0",
- "@aws-sdk/client-sts": "3.461.0",
- "@aws-sdk/credential-provider-cognito-identity": "3.461.0",
- "@aws-sdk/credential-provider-env": "3.460.0",
- "@aws-sdk/credential-provider-http": "3.460.0",
- "@aws-sdk/credential-provider-ini": "3.460.0",
- "@aws-sdk/credential-provider-node": "3.460.0",
- "@aws-sdk/credential-provider-process": "3.460.0",
- "@aws-sdk/credential-provider-sso": "3.460.0",
- "@aws-sdk/credential-provider-web-identity": "3.460.0",
- "@aws-sdk/types": "3.460.0",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.438.0.tgz",
+ "integrity": "sha512-EBtcczPtUyXsN/yNGvZxGU/Ildl8kJeq7Vt7MsFLtOmYXDWoMsSIEVuSYbBdzBal1z03fmd/Mmjr0DhYiSAqMg==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/client-cognito-identity": "3.438.0",
+ "@aws-sdk/client-sso": "3.438.0",
+ "@aws-sdk/client-sts": "3.438.0",
+ "@aws-sdk/credential-provider-cognito-identity": "3.438.0",
+ "@aws-sdk/credential-provider-env": "3.433.0",
+ "@aws-sdk/credential-provider-http": "3.435.0",
+ "@aws-sdk/credential-provider-ini": "3.438.0",
+ "@aws-sdk/credential-provider-node": "3.438.0",
+ "@aws-sdk/credential-provider-process": "3.433.0",
+ "@aws-sdk/credential-provider-sso": "3.438.0",
+ "@aws-sdk/credential-provider-web-identity": "3.433.0",
+ "@aws-sdk/types": "3.433.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.5.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -492,14 +492,14 @@
}
},
"node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.460.0.tgz",
- "integrity": "sha512-qBeDyuJkEuHe87Xk6unvFO9Zg5j6zM8bQOOZITocTLfu9JN0u5V4GQ/yopvpv+nQHmC/MGr0G7p+kIXMrg/Q2A==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.433.0.tgz",
+ "integrity": "sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/types": "^2.5.0",
+ "@aws-sdk/types": "3.433.0",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -507,13 +507,13 @@
}
},
"node_modules/@aws-sdk/middleware-logger": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.460.0.tgz",
- "integrity": "sha512-w2AJ6HOJ+Ggx9+VDKuWBHk5S0ZxYEo2EY2IFh0qtCQ1RDix/ur1QEzOOL5vNjHlZKPv/dseIwhgsTCac8UHXbQ==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.433.0.tgz",
+ "integrity": "sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/types": "^2.5.0",
+ "@aws-sdk/types": "3.433.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -521,14 +521,14 @@
}
},
"node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.460.0.tgz",
- "integrity": "sha512-wmzm1/2NzpcCVCAsGqqiTBK+xNyLmQwTOq63rcW6eeq6gYOO0cyTZROOkVRrrsKWPBigrSFFHvDrEvonOMtKAg==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.433.0.tgz",
+ "integrity": "sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/types": "^2.5.0",
+ "@aws-sdk/types": "3.433.0",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -536,14 +536,14 @@
}
},
"node_modules/@aws-sdk/middleware-sdk-sts": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.461.0.tgz",
- "integrity": "sha512-sgNxkwKdJ/NZm7SJZBnbYPkbspmzn3lDyRSJH7PTCvyzDBzY2PB6yS/dfnGkitR+PYwromuOYMha37W4su2SOw==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.433.0.tgz",
+ "integrity": "sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==",
"optional": true,
"dependencies": {
- "@aws-sdk/middleware-signing": "3.461.0",
- "@aws-sdk/types": "3.460.0",
- "@smithy/types": "^2.5.0",
+ "@aws-sdk/middleware-signing": "3.433.0",
+ "@aws-sdk/types": "3.433.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -551,17 +551,17 @@
}
},
"node_modules/@aws-sdk/middleware-signing": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.461.0.tgz",
- "integrity": "sha512-aM/7VupHlsgeRG1UZSAQMWJX+2Jam4GG8ZGVAbLfBr9yh9cBwnUUndpUpYI9rU7atA8n+vISr162EbR7WTiFhQ==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.433.0.tgz",
+ "integrity": "sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
+ "@aws-sdk/types": "3.433.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/protocol-http": "^3.0.9",
+ "@smithy/protocol-http": "^3.0.8",
"@smithy/signature-v4": "^2.0.0",
- "@smithy/types": "^2.5.0",
- "@smithy/util-middleware": "^2.0.6",
+ "@smithy/types": "^2.4.0",
+ "@smithy/util-middleware": "^2.0.5",
"tslib": "^2.5.0"
},
"engines": {
@@ -569,15 +569,15 @@
}
},
"node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.460.0.tgz",
- "integrity": "sha512-0gBSOCr+RtwRUCSRLn9H3RVnj9ercvk/QKTHIr33CgfEdyZtIGpHWUSs6uqiQydPTRzjCm5SfUa6ESGhRVMM6A==",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.438.0.tgz",
+ "integrity": "sha512-a+xHT1wOxT6EA6YyLmrfaroKWOkwwyiktUfXKM0FsUutGzNi4fKhb5NZ2al58NsXzHgHFrasSDp+Lqbd/X2cEw==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
- "@aws-sdk/util-endpoints": "3.460.0",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/types": "^2.5.0",
+ "@aws-sdk/types": "3.433.0",
+ "@aws-sdk/util-endpoints": "3.438.0",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -585,15 +585,15 @@
}
},
"node_modules/@aws-sdk/region-config-resolver": {
- "version": "3.451.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.451.0.tgz",
- "integrity": "sha512-3iMf4OwzrFb4tAAmoROXaiORUk2FvSejnHIw/XHvf/jjR4EqGGF95NZP/n/MeFZMizJWVssrwS412GmoEyoqhg==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.433.0.tgz",
+ "integrity": "sha512-xpjRjCZW+CDFdcMmmhIYg81ST5UAnJh61IHziQEk0FXONrg4kjyYPZAOjEdzXQ+HxJQuGQLKPhRdzxmQnbX7pg==",
"optional": true,
"dependencies": {
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/types": "^2.5.0",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/types": "^2.4.0",
"@smithy/util-config-provider": "^2.0.0",
- "@smithy/util-middleware": "^2.0.6",
+ "@smithy/util-middleware": "^2.0.5",
"tslib": "^2.5.0"
},
"engines": {
@@ -601,47 +601,47 @@
}
},
"node_modules/@aws-sdk/token-providers": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.460.0.tgz",
- "integrity": "sha512-EvSIPMI1gXk3gEkdtbZCW+p3Bjmt2gOR1m7ibQD7qLj4l0dKXhp4URgTqB1ExH3S4qUq0M/XSGKbGLZpvunHNg==",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.438.0.tgz",
+ "integrity": "sha512-G2fUfTtU6/1ayYRMu0Pd9Ln4qYSvwJOWCqJMdkDgvXSwdgcOSOLsnAIk1AHGJDAvgLikdCzuyOsdJiexr9Vnww==",
"optional": true,
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/middleware-host-header": "3.460.0",
- "@aws-sdk/middleware-logger": "3.460.0",
- "@aws-sdk/middleware-recursion-detection": "3.460.0",
- "@aws-sdk/middleware-user-agent": "3.460.0",
- "@aws-sdk/region-config-resolver": "3.451.0",
- "@aws-sdk/types": "3.460.0",
- "@aws-sdk/util-endpoints": "3.460.0",
- "@aws-sdk/util-user-agent-browser": "3.460.0",
- "@aws-sdk/util-user-agent-node": "3.460.0",
- "@smithy/config-resolver": "^2.0.18",
- "@smithy/fetch-http-handler": "^2.2.6",
- "@smithy/hash-node": "^2.0.15",
- "@smithy/invalid-dependency": "^2.0.13",
- "@smithy/middleware-content-length": "^2.0.15",
- "@smithy/middleware-endpoint": "^2.2.0",
- "@smithy/middleware-retry": "^2.0.20",
- "@smithy/middleware-serde": "^2.0.13",
- "@smithy/middleware-stack": "^2.0.7",
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/node-http-handler": "^2.1.9",
+ "@aws-sdk/middleware-host-header": "3.433.0",
+ "@aws-sdk/middleware-logger": "3.433.0",
+ "@aws-sdk/middleware-recursion-detection": "3.433.0",
+ "@aws-sdk/middleware-user-agent": "3.438.0",
+ "@aws-sdk/region-config-resolver": "3.433.0",
+ "@aws-sdk/types": "3.433.0",
+ "@aws-sdk/util-endpoints": "3.438.0",
+ "@aws-sdk/util-user-agent-browser": "3.433.0",
+ "@aws-sdk/util-user-agent-node": "3.437.0",
+ "@smithy/config-resolver": "^2.0.16",
+ "@smithy/fetch-http-handler": "^2.2.4",
+ "@smithy/hash-node": "^2.0.12",
+ "@smithy/invalid-dependency": "^2.0.12",
+ "@smithy/middleware-content-length": "^2.0.14",
+ "@smithy/middleware-endpoint": "^2.1.3",
+ "@smithy/middleware-retry": "^2.0.18",
+ "@smithy/middleware-serde": "^2.0.12",
+ "@smithy/middleware-stack": "^2.0.6",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/node-http-handler": "^2.1.8",
"@smithy/property-provider": "^2.0.0",
- "@smithy/protocol-http": "^3.0.9",
+ "@smithy/protocol-http": "^3.0.8",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/smithy-client": "^2.1.15",
- "@smithy/types": "^2.5.0",
- "@smithy/url-parser": "^2.0.13",
- "@smithy/util-base64": "^2.0.1",
+ "@smithy/smithy-client": "^2.1.12",
+ "@smithy/types": "^2.4.0",
+ "@smithy/url-parser": "^2.0.12",
+ "@smithy/util-base64": "^2.0.0",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.19",
- "@smithy/util-defaults-mode-node": "^2.0.25",
- "@smithy/util-endpoints": "^1.0.4",
- "@smithy/util-retry": "^2.0.6",
- "@smithy/util-utf8": "^2.0.2",
+ "@smithy/util-defaults-mode-browser": "^2.0.16",
+ "@smithy/util-defaults-mode-node": "^2.0.21",
+ "@smithy/util-endpoints": "^1.0.2",
+ "@smithy/util-retry": "^2.0.5",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -649,12 +649,12 @@
}
},
"node_modules/@aws-sdk/types": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.460.0.tgz",
- "integrity": "sha512-MyZSWS/FV8Bnux5eD9en7KLgVxevlVrGNEP3X2D7fpnUlLhl0a7k8+OpSI2ozEQB8hIU2DLc/XXTKRerHSefxQ==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.433.0.tgz",
+ "integrity": "sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.5.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -662,13 +662,13 @@
}
},
"node_modules/@aws-sdk/util-endpoints": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.460.0.tgz",
- "integrity": "sha512-myH6kM5WP4IWULHDHMYf2Q+BCYVGlzqJgiBmO10kQEtJSeAGZZ49eoFFYgKW8ZAYB5VnJ+XhXVB1TRA+vR4l5A==",
+ "version": "3.438.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.438.0.tgz",
+ "integrity": "sha512-6VyPTq1kN3GWxwFt5DdZfOsr6cJZPLjWh0troY/0uUv3hK74C9o3Y0Xf/z8UAUvQFkVqZse12O0/BgPVMImvfA==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/util-endpoints": "^1.0.4",
+ "@aws-sdk/types": "3.433.0",
+ "@smithy/util-endpoints": "^1.0.2",
"tslib": "^2.5.0"
},
"engines": {
@@ -688,26 +688,26 @@
}
},
"node_modules/@aws-sdk/util-user-agent-browser": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.460.0.tgz",
- "integrity": "sha512-FRCzW+TyjKnvxsargPVrjayBfp/rvObYHZyZ2OSqrVw8lkkPCb4e/WZOeIiXZuhdhhoah7wMuo6zGwtFF3bYKg==",
+ "version": "3.433.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.433.0.tgz",
+ "integrity": "sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/types": "^2.5.0",
+ "@aws-sdk/types": "3.433.0",
+ "@smithy/types": "^2.4.0",
"bowser": "^2.11.0",
"tslib": "^2.5.0"
}
},
"node_modules/@aws-sdk/util-user-agent-node": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.460.0.tgz",
- "integrity": "sha512-+kSoR9ABGpJ5Xc7v0VwpgTQbgyI4zuezC8K4pmKAGZsSsVWg4yxptoy2bDqoFL7qfRlWviMVTkQRMvR4D44WxA==",
+ "version": "3.437.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.437.0.tgz",
+ "integrity": "sha512-JVEcvWaniamtYVPem4UthtCNoTBCfFTwYj7Y3CrWZ2Qic4TqrwLkAfaBGtI2TGrhIClVr77uzLI6exqMTN7orA==",
"optional": true,
"dependencies": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/types": "^2.5.0",
+ "@aws-sdk/types": "3.433.0",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -732,11 +732,11 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
- "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
"dependencies": {
- "@babel/highlight": "^7.23.4",
+ "@babel/highlight": "^7.22.13",
"chalk": "^2.4.2"
},
"engines": {
@@ -791,27 +791,20 @@
"url": "https://opencollective.com/babel"
}
},
- "node_modules/@babel/core/node_modules/debug": {
- "version": "4.3.1",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/@babel/generator": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz",
- "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
+ "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
"dependencies": {
- "@babel/types": "^7.23.5",
+ "@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -871,6 +864,14 @@
"@babel/core": "^7.0.0"
}
},
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.20.5",
"dev": true,
@@ -922,20 +923,13 @@
"@babel/core": "^7.4.0-0"
}
},
- "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": {
- "version": "4.3.4",
+ "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/@babel/helper-environment-visitor": {
@@ -1100,9 +1094,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
- "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
"engines": {
"node": ">=6.9.0"
}
@@ -1149,9 +1143,9 @@
}
},
"node_modules/@babel/highlight": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
- "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
@@ -1175,9 +1169,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz",
- "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
+ "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -2236,6 +2230,15 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/preset-env/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/@babel/preset-modules": {
"version": "0.1.5",
"dev": true,
@@ -2276,18 +2279,18 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz",
- "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
+ "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dependencies": {
- "@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.5",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.5",
- "@babel/types": "^7.23.5",
+ "@babel/parser": "^7.23.0",
+ "@babel/types": "^7.23.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -2295,27 +2298,12 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/traverse/node_modules/debug": {
- "version": "4.3.1",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/@babel/types": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz",
- "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
+ "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"dependencies": {
- "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
@@ -2355,22 +2343,6 @@
"dev": true,
"license": "Python-2.0"
},
- "node_modules/@eslint/eslintrc/node_modules/debug": {
- "version": "4.3.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/@eslint/eslintrc/node_modules/globals": {
"version": "13.19.0",
"dev": true,
@@ -2409,22 +2381,6 @@
"node": ">=10.10.0"
}
},
- "node_modules/@humanwhocodes/config-array/node_modules/debug": {
- "version": "4.3.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"dev": true,
@@ -2554,11 +2510,11 @@
}
},
"node_modules/@jest/expect-utils": {
- "version": "29.3.1",
- "dev": true,
- "license": "MIT",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dependencies": {
- "jest-get-type": "^29.2.0"
+ "jest-get-type": "^29.6.3"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -2637,11 +2593,11 @@
}
},
"node_modules/@jest/schemas": {
- "version": "29.0.0",
- "dev": true,
- "license": "MIT",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
"dependencies": {
- "@sinclair/typebox": "^0.24.1"
+ "@sinclair/typebox": "^0.27.8"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -2719,11 +2675,11 @@
"license": "MIT"
},
"node_modules/@jest/types": {
- "version": "29.3.1",
- "dev": true,
- "license": "MIT",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dependencies": {
- "@jest/schemas": "^29.0.0",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -2789,20 +2745,6 @@
"node-pre-gyp": "bin/node-pre-gyp"
}
},
- "node_modules/@mapbox/node-pre-gyp/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@mongodb-js/saslprep": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz",
@@ -2845,9 +2787,9 @@
}
},
"node_modules/@sinclair/typebox": {
- "version": "0.24.51",
- "dev": true,
- "license": "MIT"
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="
},
"node_modules/@sinonjs/commons": {
"version": "1.8.6",
@@ -2866,12 +2808,12 @@
}
},
"node_modules/@smithy/abort-controller": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.14.tgz",
- "integrity": "sha512-zXtteuYLWbSXnzI3O6xq3FYvigYZFW8mdytGibfarLL2lxHto9L3ILtGVnVGmFZa7SDh62l39EnU5hesLN87Fw==",
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.12.tgz",
+ "integrity": "sha512-YIJyefe1mi3GxKdZxEBEuzYOeQ9xpYfqnFmWzojCssRAuR7ycxwpoRQgp965vuW426xUAQhCV5rCaWElQ7XsaA==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -2879,15 +2821,15 @@
}
},
"node_modules/@smithy/config-resolver": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.19.tgz",
- "integrity": "sha512-JsghnQ5zjWmjEVY8TFOulLdEOCj09SjRLugrHlkPZTIBBm7PQitCFVLThbsKPZQOP7N3ME1DU1nKUc1UaVnBog==",
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.16.tgz",
+ "integrity": "sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ==",
"optional": true,
"dependencies": {
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/types": "^2.6.0",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/types": "^2.4.0",
"@smithy/util-config-provider": "^2.0.0",
- "@smithy/util-middleware": "^2.0.7",
+ "@smithy/util-middleware": "^2.0.5",
"tslib": "^2.5.0"
},
"engines": {
@@ -2895,15 +2837,15 @@
}
},
"node_modules/@smithy/credential-provider-imds": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.2.tgz",
- "integrity": "sha512-Y62jBWdoLPSYjr9fFvJf+KwTa1EunjVr6NryTEWCnwIY93OJxwV4t0qxjwdPl/XMsUkq79ppNJSEQN6Ohnhxjw==",
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.18.tgz",
+ "integrity": "sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g==",
"optional": true,
"dependencies": {
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/property-provider": "^2.0.15",
- "@smithy/types": "^2.6.0",
- "@smithy/url-parser": "^2.0.14",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/property-provider": "^2.0.13",
+ "@smithy/types": "^2.4.0",
+ "@smithy/url-parser": "^2.0.12",
"tslib": "^2.5.0"
},
"engines": {
@@ -2911,39 +2853,39 @@
}
},
"node_modules/@smithy/eventstream-codec": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.14.tgz",
- "integrity": "sha512-g/OU/MeWGfHDygoXgMWfG/Xb0QqDnAGcM9t2FRrVAhleXYRddGOEnfanR5cmHgB9ue52MJsyorqFjckzXsylaA==",
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.12.tgz",
+ "integrity": "sha512-ZZQLzHBJkbiAAdj2C5K+lBlYp/XJ+eH2uy+jgJgYIFW/o5AM59Hlj7zyI44/ZTDIQWmBxb3EFv/c5t44V8/g8A==",
"optional": true,
"dependencies": {
"@aws-crypto/crc32": "3.0.0",
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"@smithy/util-hex-encoding": "^2.0.0",
"tslib": "^2.5.0"
}
},
"node_modules/@smithy/fetch-http-handler": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.7.tgz",
- "integrity": "sha512-iSDBjxuH9TgrtMYAr7j5evjvkvgwLY3y+9D547uep+JNkZ1ZT+BaeU20j6I/bO/i26ilCWFImrlXTPsfQtZdIQ==",
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.4.tgz",
+ "integrity": "sha512-gIPRFEGi+c6V52eauGKrjDzPWF2Cu7Z1r5F8A3j2wcwz25sPG/t8kjsbEhli/tS/2zJp/ybCZXe4j4ro3yv/HA==",
"optional": true,
"dependencies": {
- "@smithy/protocol-http": "^3.0.10",
- "@smithy/querystring-builder": "^2.0.14",
- "@smithy/types": "^2.6.0",
- "@smithy/util-base64": "^2.0.1",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/querystring-builder": "^2.0.12",
+ "@smithy/types": "^2.4.0",
+ "@smithy/util-base64": "^2.0.0",
"tslib": "^2.5.0"
}
},
"node_modules/@smithy/hash-node": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.16.tgz",
- "integrity": "sha512-Wbi9A0PacMYUOwjAulQP90Wl3mQ6NDwnyrZQzFjDz+UzjXOSyQMgBrTkUBz+pVoYVlX3DUu24gWMZBcit+wOGg==",
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.12.tgz",
+ "integrity": "sha512-fDZnTr5j9t5qcbeJ037aMZXxMka13Znqwrgy3PAqYj6Dm3XHXHftTH3q+NWgayUxl1992GFtQt1RuEzRMy3NnQ==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"@smithy/util-buffer-from": "^2.0.0",
- "@smithy/util-utf8": "^2.0.2",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -2951,12 +2893,12 @@
}
},
"node_modules/@smithy/invalid-dependency": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.14.tgz",
- "integrity": "sha512-d8ohpwZo9RzTpGlAfsWtfm1SHBSU7+N4iuZ6MzR10xDTujJJWtmXYHK1uzcr7rggbpUTaWyHpPFgnf91q0EFqQ==",
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.12.tgz",
+ "integrity": "sha512-p5Y+iMHV3SoEpy3VSR7mifbreHQwVSvHSAz/m4GdoXfOzKzaYC8hYv10Ks7Deblkf7lhas8U+lAp9ThbBM+ZXA==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
}
},
@@ -2973,13 +2915,13 @@
}
},
"node_modules/@smithy/middleware-content-length": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.16.tgz",
- "integrity": "sha512-9ddDia3pp1d3XzLXKcm7QebGxLq9iwKf+J1LapvlSOhpF8EM9SjMeSrMOOFgG+2TfW5K3+qz4IAJYYm7INYCng==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.14.tgz",
+ "integrity": "sha512-poUNgKTw9XwPXfX9nEHpVgrMNVpaSMZbshqvPxFVoalF4wp6kRzYKOfdesSVectlQ51VtigoLfbXcdyPwvxgTg==",
"optional": true,
"dependencies": {
- "@smithy/protocol-http": "^3.0.10",
- "@smithy/types": "^2.6.0",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -2987,17 +2929,17 @@
}
},
"node_modules/@smithy/middleware-endpoint": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.1.tgz",
- "integrity": "sha512-dVDS7HNJl/wb0lpByXor6whqDbb1YlLoaoWYoelyYzLHioXOE7y/0iDwJWtDcN36/tVCw9EPBFZ3aans84jLpg==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.3.tgz",
+ "integrity": "sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ==",
"optional": true,
"dependencies": {
- "@smithy/middleware-serde": "^2.0.14",
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/shared-ini-file-loader": "^2.2.5",
- "@smithy/types": "^2.6.0",
- "@smithy/url-parser": "^2.0.14",
- "@smithy/util-middleware": "^2.0.7",
+ "@smithy/middleware-serde": "^2.0.12",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/shared-ini-file-loader": "^2.2.2",
+ "@smithy/types": "^2.4.0",
+ "@smithy/url-parser": "^2.0.12",
+ "@smithy/util-middleware": "^2.0.5",
"tslib": "^2.5.0"
},
"engines": {
@@ -3005,17 +2947,17 @@
}
},
"node_modules/@smithy/middleware-retry": {
- "version": "2.0.21",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.21.tgz",
- "integrity": "sha512-EZS1EXv1k6IJX6hyu/0yNQuPcPaXwG8SWljQHYueyRbOxmqYgoWMWPtfZj0xRRQ4YtLawQSpBgAeiJltq8/MPw==",
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.18.tgz",
+ "integrity": "sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA==",
"optional": true,
"dependencies": {
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/protocol-http": "^3.0.10",
- "@smithy/service-error-classification": "^2.0.7",
- "@smithy/types": "^2.6.0",
- "@smithy/util-middleware": "^2.0.7",
- "@smithy/util-retry": "^2.0.7",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/service-error-classification": "^2.0.5",
+ "@smithy/types": "^2.4.0",
+ "@smithy/util-middleware": "^2.0.5",
+ "@smithy/util-retry": "^2.0.5",
"tslib": "^2.5.0",
"uuid": "^8.3.2"
},
@@ -3024,12 +2966,12 @@
}
},
"node_modules/@smithy/middleware-serde": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.14.tgz",
- "integrity": "sha512-hFi3FqoYWDntCYA2IGY6gJ6FKjq2gye+1tfxF2HnIJB5uW8y2DhpRNBSUMoqP+qvYzRqZ6ntv4kgbG+o3pX57g==",
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.12.tgz",
+ "integrity": "sha512-IBeco157lIScecq2Z+n0gq56i4MTnfKxS7rbfrAORveDJgnbBAaEQgYqMqp/cYqKrpvEXcyTjwKHrBjCCIZh2A==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3037,12 +2979,12 @@
}
},
"node_modules/@smithy/middleware-stack": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.8.tgz",
- "integrity": "sha512-7/N59j0zWqVEKExJcA14MrLDZ/IeN+d6nbkN8ucs+eURyaDUXWYlZrQmMOd/TyptcQv0+RDlgag/zSTTV62y/Q==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.6.tgz",
+ "integrity": "sha512-YSvNZeOKWLJ0M/ycxwDIe2Ztkp6Qixmcml1ggsSv2fdHKGkBPhGrX5tMzPGMI1yyx55UEYBi2OB4s+RriXX48A==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3050,14 +2992,14 @@
}
},
"node_modules/@smithy/node-config-provider": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.6.tgz",
- "integrity": "sha512-HLqTs6O78m3M3z1cPLFxddxhEPv5MkVatfPuxoVO3A+cHZanNd/H5I6btcdHy6N2CB1MJ/lihJC92h30SESsBA==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.3.tgz",
+ "integrity": "sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ==",
"optional": true,
"dependencies": {
- "@smithy/property-provider": "^2.0.15",
- "@smithy/shared-ini-file-loader": "^2.2.5",
- "@smithy/types": "^2.6.0",
+ "@smithy/property-provider": "^2.0.13",
+ "@smithy/shared-ini-file-loader": "^2.2.2",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3065,15 +3007,15 @@
}
},
"node_modules/@smithy/node-http-handler": {
- "version": "2.1.10",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.10.tgz",
- "integrity": "sha512-lkALAwtN6odygIM4nB8aHDahINM6WXXjNrZmWQAh0RSossySRT2qa31cFv0ZBuAYVWeprskRk13AFvvLmf1WLw==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.8.tgz",
+ "integrity": "sha512-KZylM7Wff/So5SmCiwg2kQNXJ+RXgz34wkxS7WNwIUXuZrZZpY/jKJCK+ZaGyuESDu3TxcaY+zeYGJmnFKbQsA==",
"optional": true,
"dependencies": {
- "@smithy/abort-controller": "^2.0.14",
- "@smithy/protocol-http": "^3.0.10",
- "@smithy/querystring-builder": "^2.0.14",
- "@smithy/types": "^2.6.0",
+ "@smithy/abort-controller": "^2.0.12",
+ "@smithy/protocol-http": "^3.0.8",
+ "@smithy/querystring-builder": "^2.0.12",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3081,12 +3023,12 @@
}
},
"node_modules/@smithy/property-provider": {
- "version": "2.0.15",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.15.tgz",
- "integrity": "sha512-YbRFBn8oiiC3o1Kn3a4KjGa6k47rCM9++5W9cWqYn9WnkyH+hBWgfJAckuxpyA2Hq6Ys4eFrWzXq6fqHEw7iew==",
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.13.tgz",
+ "integrity": "sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3094,12 +3036,12 @@
}
},
"node_modules/@smithy/protocol-http": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.10.tgz",
- "integrity": "sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg==",
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.8.tgz",
+ "integrity": "sha512-SHJvYeWq8q0FK8xHk+xjV9dzDUDjFMT+G1pZbV+XB6OVoac/FSVshlMNPeUJ8AmSkcDKHRu5vASnRqZHgD3qhw==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3107,12 +3049,12 @@
}
},
"node_modules/@smithy/querystring-builder": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.14.tgz",
- "integrity": "sha512-lQ4pm9vTv9nIhl5jt6uVMPludr6syE2FyJmHsIJJuOD7QPIJnrf9HhUGf1iHh9KJ4CUv21tpOU3X6s0rB6uJ0g==",
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.12.tgz",
+ "integrity": "sha512-cDbF07IuCjiN8CdGvPzfJjXIrmDSelScRfyJYrYBNBbKl2+k7QD/KqiHhtRyEKgID5mmEVrV6KE6L/iPJ98sFw==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"@smithy/util-uri-escape": "^2.0.0",
"tslib": "^2.5.0"
},
@@ -3121,12 +3063,12 @@
}
},
"node_modules/@smithy/querystring-parser": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.14.tgz",
- "integrity": "sha512-+cbtXWI9tNtQjlgQg3CA+pvL3zKTAxPnG3Pj6MP89CR3vi3QMmD0SOWoq84tqZDnJCxlsusbgIXk1ngMReXo+A==",
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.12.tgz",
+ "integrity": "sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3134,24 +3076,24 @@
}
},
"node_modules/@smithy/service-error-classification": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.7.tgz",
- "integrity": "sha512-LLxgW12qGz8doYto15kZ4x1rHjtXl0BnCG6T6Wb8z2DI4PT9cJfOSvzbuLzy7+5I24PAepKgFeWHRd9GYy3Z9w==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.5.tgz",
+ "integrity": "sha512-M0SeJnEgD2ywJyV99Fb1yKFzmxDe9JfpJiYTVSRMyRLc467BPU0qsuuDPzMCdB1mU8M8u1rVOdkqdoyFN8UFTw==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0"
+ "@smithy/types": "^2.4.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@smithy/shared-ini-file-loader": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.5.tgz",
- "integrity": "sha512-LHA68Iu7SmNwfAVe8egmjDCy648/7iJR/fK1UnVw+iAOUJoEYhX2DLgVd5pWllqdDiRbQQzgaHLcRokM+UFR1w==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.2.tgz",
+ "integrity": "sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3159,18 +3101,18 @@
}
},
"node_modules/@smithy/signature-v4": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.16.tgz",
- "integrity": "sha512-ilLY85xS2kZZzTb83diQKYLIYALvart0KnBaKnIRnMBHAGEio5aHSlANQoxVn0VsonwmQ3CnWhnCT0sERD8uTg==",
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.12.tgz",
+ "integrity": "sha512-6Kc2lCZEVmb1nNYngyNbWpq0d82OZwITH11SW/Q0U6PX5fH7B2cIcFe7o6eGEFPkTZTP8itTzmYiGcECL0D0Lw==",
"optional": true,
"dependencies": {
- "@smithy/eventstream-codec": "^2.0.14",
+ "@smithy/eventstream-codec": "^2.0.12",
"@smithy/is-array-buffer": "^2.0.0",
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"@smithy/util-hex-encoding": "^2.0.0",
- "@smithy/util-middleware": "^2.0.7",
+ "@smithy/util-middleware": "^2.0.5",
"@smithy/util-uri-escape": "^2.0.0",
- "@smithy/util-utf8": "^2.0.2",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3178,14 +3120,14 @@
}
},
"node_modules/@smithy/smithy-client": {
- "version": "2.1.16",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.16.tgz",
- "integrity": "sha512-Lw67+yQSpLl4YkDLUzI2KgS8TXclXmbzSeOJUmRFS4ueT56B4pw3RZRF/SRzvgyxM/HxgkUan8oSHXCujPDafQ==",
+ "version": "2.1.12",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.12.tgz",
+ "integrity": "sha512-XXqhridfkKnpj+lt8vM6HRlZbqUAqBjVC74JIi13F/AYQd/zTj9SOyGfxnbp4mjY9q28LityxIuV8CTinr9r5w==",
"optional": true,
"dependencies": {
- "@smithy/middleware-stack": "^2.0.8",
- "@smithy/types": "^2.6.0",
- "@smithy/util-stream": "^2.0.21",
+ "@smithy/middleware-stack": "^2.0.6",
+ "@smithy/types": "^2.4.0",
+ "@smithy/util-stream": "^2.0.17",
"tslib": "^2.5.0"
},
"engines": {
@@ -3193,9 +3135,9 @@
}
},
"node_modules/@smithy/types": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.6.0.tgz",
- "integrity": "sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.4.0.tgz",
+ "integrity": "sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g==",
"optional": true,
"dependencies": {
"tslib": "^2.5.0"
@@ -3205,20 +3147,20 @@
}
},
"node_modules/@smithy/url-parser": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.14.tgz",
- "integrity": "sha512-kbu17Y1AFXi5lNlySdDj7ZzmvupyWKCX/0jNZ8ffquRyGdbDZb+eBh0QnWqsSmnZa/ctyWaTf7n4l/pXLExrnw==",
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.12.tgz",
+ "integrity": "sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA==",
"optional": true,
"dependencies": {
- "@smithy/querystring-parser": "^2.0.14",
- "@smithy/types": "^2.6.0",
+ "@smithy/querystring-parser": "^2.0.12",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
}
},
"node_modules/@smithy/util-base64": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz",
- "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz",
+ "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==",
"optional": true,
"dependencies": {
"@smithy/util-buffer-from": "^2.0.0",
@@ -3275,14 +3217,14 @@
}
},
"node_modules/@smithy/util-defaults-mode-browser": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.20.tgz",
- "integrity": "sha512-QJtnbTIl0/BbEASkx1MUFf6EaoWqWW1/IM90N++8NNscePvPf77GheYfpoPis6CBQawUWq8QepTP2QUSAdrVkw==",
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.16.tgz",
+ "integrity": "sha512-Uv5Cu8nVkuvLn0puX+R9zWbSNpLIR3AxUlPoLJ7hC5lvir8B2WVqVEkJLwtixKAncVLasnTVjPDCidtAUTGEQw==",
"optional": true,
"dependencies": {
- "@smithy/property-provider": "^2.0.15",
- "@smithy/smithy-client": "^2.1.16",
- "@smithy/types": "^2.6.0",
+ "@smithy/property-provider": "^2.0.13",
+ "@smithy/smithy-client": "^2.1.12",
+ "@smithy/types": "^2.4.0",
"bowser": "^2.11.0",
"tslib": "^2.5.0"
},
@@ -3291,17 +3233,17 @@
}
},
"node_modules/@smithy/util-defaults-mode-node": {
- "version": "2.0.26",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.26.tgz",
- "integrity": "sha512-lGFPOFCHv1ql019oegYqa54BZH7HREw6EBqjDLbAr0wquMX0BDi2sg8TJ6Eq+JGLijkZbJB73m4+aK8OFAapMg==",
+ "version": "2.0.21",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.21.tgz",
+ "integrity": "sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw==",
"optional": true,
"dependencies": {
- "@smithy/config-resolver": "^2.0.19",
- "@smithy/credential-provider-imds": "^2.1.2",
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/property-provider": "^2.0.15",
- "@smithy/smithy-client": "^2.1.16",
- "@smithy/types": "^2.6.0",
+ "@smithy/config-resolver": "^2.0.16",
+ "@smithy/credential-provider-imds": "^2.0.18",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/property-provider": "^2.0.13",
+ "@smithy/smithy-client": "^2.1.12",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3309,13 +3251,13 @@
}
},
"node_modules/@smithy/util-endpoints": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.5.tgz",
- "integrity": "sha512-K7qNuCOD5K/90MjHvHm9kJldrfm40UxWYQxNEShMFxV/lCCCRIg8R4uu1PFAxRvPxNpIdcrh1uK6I1ISjDXZJw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.2.tgz",
+ "integrity": "sha512-QEdq+sP68IJHAMVB2ugKVVZEWeKQtZLuf+akHzc8eTVElsZ2ZdVLWC6Cp+uKjJ/t4yOj1qu6ZzyxJQEQ8jdEjg==",
"optional": true,
"dependencies": {
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/types": "^2.6.0",
+ "@smithy/node-config-provider": "^2.1.3",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3335,12 +3277,12 @@
}
},
"node_modules/@smithy/util-middleware": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.7.tgz",
- "integrity": "sha512-tRINOTlf1G9B0ECarFQAtTgMhpnrMPSa+5j4ZEwEawCLfTFTavk6757sxhE4RY5RMlD/I3x+DCS8ZUiR8ho9Pw==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.5.tgz",
+ "integrity": "sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw==",
"optional": true,
"dependencies": {
- "@smithy/types": "^2.6.0",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3348,13 +3290,13 @@
}
},
"node_modules/@smithy/util-retry": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.7.tgz",
- "integrity": "sha512-fIe5yARaF0+xVT1XKcrdnHKTJ1Vc4+3e3tLDjCuIcE9b6fkBzzGFY7AFiX4M+vj6yM98DrwkuZeHf7/hmtVp0Q==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.5.tgz",
+ "integrity": "sha512-x3t1+MQAJ6QONk3GTbJNcugCFDVJ+Bkro5YqQQK1EyVesajNDqxFtCx9WdOFNGm/Cbm7tUdwVEmfKQOJoU2Vtw==",
"optional": true,
"dependencies": {
- "@smithy/service-error-classification": "^2.0.7",
- "@smithy/types": "^2.6.0",
+ "@smithy/service-error-classification": "^2.0.5",
+ "@smithy/types": "^2.4.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3362,18 +3304,18 @@
}
},
"node_modules/@smithy/util-stream": {
- "version": "2.0.21",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.21.tgz",
- "integrity": "sha512-0BUE16d7n1x7pi1YluXJdB33jOTyBChT0j/BlOkFa9uxfg6YqXieHxjHNuCdJRARa7AZEj32LLLEPJ1fSa4inA==",
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.17.tgz",
+ "integrity": "sha512-fP/ZQ27rRvHsqItds8yB7jerwMpZFTL3QqbQbidUiG0+mttMoKdP0ZqnvM8UK5q0/dfc3/pN7g4XKPXOU7oRWw==",
"optional": true,
"dependencies": {
- "@smithy/fetch-http-handler": "^2.2.7",
- "@smithy/node-http-handler": "^2.1.10",
- "@smithy/types": "^2.6.0",
- "@smithy/util-base64": "^2.0.1",
+ "@smithy/fetch-http-handler": "^2.2.4",
+ "@smithy/node-http-handler": "^2.1.8",
+ "@smithy/types": "^2.4.0",
+ "@smithy/util-base64": "^2.0.0",
"@smithy/util-buffer-from": "^2.0.0",
"@smithy/util-hex-encoding": "^2.0.0",
- "@smithy/util-utf8": "^2.0.2",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -3393,9 +3335,9 @@
}
},
"node_modules/@smithy/util-utf8": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz",
- "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz",
+ "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==",
"optional": true,
"dependencies": {
"@smithy/util-buffer-from": "^2.0.0",
@@ -3452,12 +3394,10 @@
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.4",
- "dev": true,
"license": "MIT"
},
"node_modules/@types/istanbul-lib-report": {
"version": "3.0.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"@types/istanbul-lib-coverage": "*"
@@ -3465,7 +3405,6 @@
},
"node_modules/@types/istanbul-reports": {
"version": "3.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"@types/istanbul-lib-report": "*"
@@ -3492,13 +3431,12 @@
},
"node_modules/@types/stack-utils": {
"version": "2.0.1",
- "dev": true,
"license": "MIT"
},
"node_modules/@types/webidl-conversions": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
- "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.2.tgz",
+ "integrity": "sha512-uNv6b/uGRLlCVmelat2rA8bcVd3k/42mV2EmjhPh6JLkd35T5bgwR/t6xy7a9MWhd9sixIeBUzhBenvk3NO+DQ=="
},
"node_modules/@types/whatwg-url": {
"version": "8.2.2",
@@ -3511,7 +3449,6 @@
},
"node_modules/@types/yargs": {
"version": "17.0.17",
- "dev": true,
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -3519,7 +3456,6 @@
},
"node_modules/@types/yargs-parser": {
"version": "21.0.0",
- "dev": true,
"license": "MIT"
},
"node_modules/abbrev": {
@@ -3538,9 +3474,10 @@
}
},
"node_modules/acorn": {
- "version": "8.8.1",
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
"dev": true,
- "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -3566,21 +3503,6 @@
"node": ">= 6.0.0"
}
},
- "node_modules/agent-base/node_modules/debug": {
- "version": "4.3.4",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/ajv": {
"version": "6.12.6",
"dev": true,
@@ -3775,6 +3697,15 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/babel-plugin-polyfill-corejs3": {
"version": "0.6.0",
"dev": true,
@@ -3978,7 +3909,6 @@
},
"node_modules/braces": {
"version": "3.0.2",
- "dev": true,
"license": "MIT",
"dependencies": {
"fill-range": "^7.0.1"
@@ -4118,7 +4048,6 @@
},
"node_modules/chalk": {
"version": "4.1.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -4133,7 +4062,6 @@
},
"node_modules/chalk/node_modules/ansi-styles": {
"version": "4.3.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -4147,7 +4075,6 @@
},
"node_modules/chalk/node_modules/color-convert": {
"version": "2.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -4158,12 +4085,10 @@
},
"node_modules/chalk/node_modules/color-name": {
"version": "1.1.4",
- "dev": true,
"license": "MIT"
},
"node_modules/chalk/node_modules/has-flag": {
"version": "4.0.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -4171,7 +4096,6 @@
},
"node_modules/chalk/node_modules/supports-color": {
"version": "7.2.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@@ -4223,7 +4147,6 @@
},
"node_modules/ci-info": {
"version": "3.7.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -4302,9 +4225,9 @@
}
},
"node_modules/cloudinary": {
- "version": "1.41.0",
- "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-1.41.0.tgz",
- "integrity": "sha512-qFf2McjvILJITePf4VF1PrY/8c2zy+/q5FVV6V3VWrP/gpIZsusPqXL4QZ6ZKXibPRukzMYqsQEhaSQgJHKKow==",
+ "version": "1.38.0",
+ "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-1.38.0.tgz",
+ "integrity": "sha512-s5Sh/uButN0M7lxTYvrvPcImaieI1aYh1qmgyhO0wbPUMfb0BSb+mBa5SETFJpzQGCAqP46yxapkPeEFyGZX9A==",
"dependencies": {
"cloudinary-core": "^2.13.0",
"core-js": "^3.30.1",
@@ -4463,9 +4386,9 @@
"dev": true
},
"node_modules/core-js": {
- "version": "3.33.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.3.tgz",
- "integrity": "sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==",
+ "version": "3.31.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.1.tgz",
+ "integrity": "sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==",
"hasInstallScript": true,
"funding": {
"type": "opencollective",
@@ -4526,11 +4449,19 @@
}
},
"node_modules/debug": {
- "version": "3.2.7",
- "dev": true,
- "license": "MIT",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
"node_modules/dedent": {
@@ -4610,9 +4541,9 @@
}
},
"node_modules/diff-sequences": {
- "version": "29.3.1",
- "dev": true,
- "license": "MIT",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
@@ -4871,22 +4802,6 @@
"dev": true,
"license": "Python-2.0"
},
- "node_modules/eslint/node_modules/debug": {
- "version": "4.3.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/eslint/node_modules/escape-string-regexp": {
"version": "4.0.0",
"dev": true,
@@ -5107,15 +5022,15 @@
}
},
"node_modules/expect": {
- "version": "29.3.1",
- "dev": true,
- "license": "MIT",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dependencies": {
- "@jest/expect-utils": "^29.3.1",
- "jest-get-type": "^29.2.0",
- "jest-matcher-utils": "^29.3.1",
- "jest-message-util": "^29.3.1",
- "jest-util": "^29.3.1"
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -5375,7 +5290,6 @@
},
"node_modules/fill-range": {
"version": "7.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
@@ -5755,21 +5669,6 @@
"node": ">= 6"
}
},
- "node_modules/https-proxy-agent/node_modules/debug": {
- "version": "4.3.4",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/human-signals": {
"version": "2.1.0",
"dev": true,
@@ -5882,9 +5781,9 @@
"license": "ISC"
},
"node_modules/ip": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
- "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz",
+ "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ=="
},
"node_modules/ipaddr.js": {
"version": "1.9.1",
@@ -5956,7 +5855,6 @@
},
"node_modules/is-number": {
"version": "7.0.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
@@ -6013,8 +5911,17 @@
"node": ">=8"
}
},
- "node_modules/istanbul-lib-report": {
- "version": "3.0.0",
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -6058,22 +5965,6 @@
"node": ">=10"
}
},
- "node_modules/istanbul-lib-source-maps/node_modules/debug": {
- "version": "4.3.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/istanbul-reports": {
"version": "3.1.5",
"dev": true,
@@ -6230,14 +6121,14 @@
}
},
"node_modules/jest-diff": {
- "version": "29.3.1",
- "dev": true,
- "license": "MIT",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dependencies": {
"chalk": "^4.0.0",
- "diff-sequences": "^29.3.1",
- "jest-get-type": "^29.2.0",
- "pretty-format": "^29.3.1"
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -6286,9 +6177,9 @@
}
},
"node_modules/jest-get-type": {
- "version": "29.2.0",
- "dev": true,
- "license": "MIT",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
@@ -6330,31 +6221,31 @@
}
},
"node_modules/jest-matcher-utils": {
- "version": "29.3.1",
- "dev": true,
- "license": "MIT",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^29.3.1",
- "jest-get-type": "^29.2.0",
- "pretty-format": "^29.3.1"
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-message-util": {
- "version": "29.3.1",
- "dev": true,
- "license": "MIT",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.3.1",
+ "@jest/types": "^29.6.3",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.3.1",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -6527,27 +6418,12 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/jest-util": {
- "version": "29.3.1",
- "dev": true,
- "license": "MIT",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dependencies": {
- "@jest/types": "^29.3.1",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -6716,20 +6592,6 @@
"npm": ">=6"
}
},
- "node_modules/jsonwebtoken/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/jwa": {
"version": "1.4.1",
"license": "MIT",
@@ -6855,6 +6717,14 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/makeerror": {
"version": "1.0.12",
"dev": true,
@@ -6893,7 +6763,6 @@
},
"node_modules/micromatch": {
"version": "4.0.5",
- "dev": true,
"license": "MIT",
"dependencies": {
"braces": "^3.0.2",
@@ -7071,9 +6940,9 @@
}
},
"node_modules/mongoose": {
- "version": "6.12.3",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.12.3.tgz",
- "integrity": "sha512-MNJymaaXali7w7rHBxVUoQ3HzHHMk/7I/+yeeoSa4rUzdjZwIWQznBNvVgc0A8ghuJwsuIkb5LyLV6gSjGjWyQ==",
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.12.2.tgz",
+ "integrity": "sha512-3XXhSAB4PcJBd0sfqyi+LdVb3brVoIFh5kB/gpnrKcD54tmWdEI4Y8xjiiBx773U9IV3Mv4GxFVCy9/lvXMMyg==",
"dependencies": {
"bson": "^4.7.2",
"kareem": "2.5.1",
@@ -7175,21 +7044,6 @@
"node": ">=12.0.0"
}
},
- "node_modules/mquery/node_modules/debug": {
- "version": "4.3.4",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/ms": {
"version": "2.1.2",
"license": "MIT"
@@ -7258,8 +7112,9 @@
"license": "MIT"
},
"node_modules/nodemailer": {
- "version": "6.8.0",
- "license": "MIT",
+ "version": "6.9.12",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.12.tgz",
+ "integrity": "sha512-pnLo7g37Br3jXbF0bl5DekBJihm2q+3bB3l2o/B060sWmb5l+VqeScAQCBqaQ+5ezRZFzW5SciZNGdRDEbq89w==",
"engines": {
"node": ">=6.0.0"
}
@@ -7272,13 +7127,13 @@
}
},
"node_modules/nodemon": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz",
- "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz",
+ "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==",
"dev": true,
"dependencies": {
"chokidar": "^3.5.2",
- "debug": "^3.2.7",
+ "debug": "^4",
"ignore-by-default": "^1.0.1",
"minimatch": "^3.1.2",
"pstree.remy": "^1.1.8",
@@ -7299,21 +7154,6 @@
"url": "https://opencollective.com/nodemon"
}
},
- "node_modules/nodemon/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/nopt": {
"version": "5.0.0",
"license": "ISC",
@@ -7619,7 +7459,6 @@
},
"node_modules/picomatch": {
"version": "2.3.1",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8.6"
@@ -7656,11 +7495,11 @@
}
},
"node_modules/pretty-format": {
- "version": "29.3.1",
- "dev": true,
- "license": "MIT",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dependencies": {
- "@jest/schemas": "^29.0.0",
+ "@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
@@ -7670,7 +7509,6 @@
},
"node_modules/pretty-format/node_modules/ansi-styles": {
"version": "5.2.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
@@ -7796,7 +7634,6 @@
},
"node_modules/react-is": {
"version": "18.2.0",
- "dev": true,
"license": "MIT"
},
"node_modules/readable-stream": {
@@ -8017,11 +7854,17 @@
}
},
"node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
"semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/send": {
@@ -8143,21 +7986,6 @@
"node": ">=10"
}
},
- "node_modules/simple-update-notifier/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/sisteransi": {
"version": "1.0.5",
"dev": true,
@@ -8165,7 +7993,6 @@
},
"node_modules/slash": {
"version": "3.0.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -8224,7 +8051,6 @@
},
"node_modules/stack-utils": {
"version": "2.0.6",
- "dev": true,
"license": "MIT",
"dependencies": {
"escape-string-regexp": "^2.0.0"
@@ -8235,7 +8061,6 @@
},
"node_modules/stack-utils/node_modules/escape-string-regexp": {
"version": "2.0.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -8348,22 +8173,6 @@
"node": ">=6.4.0 <13 || >=14"
}
},
- "node_modules/superagent/node_modules/debug": {
- "version": "4.3.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/superagent/node_modules/mime": {
"version": "2.6.0",
"dev": true,
@@ -8375,21 +8184,6 @@
"node": ">=4.0.0"
}
},
- "node_modules/superagent/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/supertest": {
"version": "6.3.3",
"dev": true,
@@ -8480,7 +8274,6 @@
},
"node_modules/to-regex-range": {
"version": "5.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
@@ -8523,9 +8316,9 @@
"license": "MIT"
},
"node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz",
+ "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==",
"devOptional": true
},
"node_modules/twostep": {
@@ -8775,9 +8568,9 @@
}
},
"node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz",
+ "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -8904,5872 +8697,5 @@
"url": "https://github.com/sponsors/sindresorhus"
}
}
- },
- "dependencies": {
- "@ampproject/remapping": {
- "version": "2.2.0",
- "requires": {
- "@jridgewell/gen-mapping": "^0.1.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@aws-crypto/crc32": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz",
- "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==",
- "optional": true,
- "requires": {
- "@aws-crypto/util": "^3.0.0",
- "@aws-sdk/types": "^3.222.0",
- "tslib": "^1.11.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
- }
- },
- "@aws-crypto/ie11-detection": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz",
- "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==",
- "optional": true,
- "requires": {
- "tslib": "^1.11.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
- }
- },
- "@aws-crypto/sha256-browser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz",
- "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==",
- "optional": true,
- "requires": {
- "@aws-crypto/ie11-detection": "^3.0.0",
- "@aws-crypto/sha256-js": "^3.0.0",
- "@aws-crypto/supports-web-crypto": "^3.0.0",
- "@aws-crypto/util": "^3.0.0",
- "@aws-sdk/types": "^3.222.0",
- "@aws-sdk/util-locate-window": "^3.0.0",
- "@aws-sdk/util-utf8-browser": "^3.0.0",
- "tslib": "^1.11.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
- }
- },
- "@aws-crypto/sha256-js": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz",
- "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==",
- "optional": true,
- "requires": {
- "@aws-crypto/util": "^3.0.0",
- "@aws-sdk/types": "^3.222.0",
- "tslib": "^1.11.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
- }
- },
- "@aws-crypto/supports-web-crypto": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz",
- "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==",
- "optional": true,
- "requires": {
- "tslib": "^1.11.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
- }
- },
- "@aws-crypto/util": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz",
- "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "^3.222.0",
- "@aws-sdk/util-utf8-browser": "^3.0.0",
- "tslib": "^1.11.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
- }
- },
- "@aws-sdk/client-cognito-identity": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.461.0.tgz",
- "integrity": "sha512-rttO5tsvNqZghQwUgPk67LSo+0Yy4ItmsI3sgl81WDUP2A9Q4rwB8L99gLWroUz1uJtBujQ/HoYu6GN4kRa3MQ==",
- "optional": true,
- "requires": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/client-sts": "3.461.0",
- "@aws-sdk/core": "3.451.0",
- "@aws-sdk/credential-provider-node": "3.460.0",
- "@aws-sdk/middleware-host-header": "3.460.0",
- "@aws-sdk/middleware-logger": "3.460.0",
- "@aws-sdk/middleware-recursion-detection": "3.460.0",
- "@aws-sdk/middleware-signing": "3.461.0",
- "@aws-sdk/middleware-user-agent": "3.460.0",
- "@aws-sdk/region-config-resolver": "3.451.0",
- "@aws-sdk/types": "3.460.0",
- "@aws-sdk/util-endpoints": "3.460.0",
- "@aws-sdk/util-user-agent-browser": "3.460.0",
- "@aws-sdk/util-user-agent-node": "3.460.0",
- "@smithy/config-resolver": "^2.0.18",
- "@smithy/fetch-http-handler": "^2.2.6",
- "@smithy/hash-node": "^2.0.15",
- "@smithy/invalid-dependency": "^2.0.13",
- "@smithy/middleware-content-length": "^2.0.15",
- "@smithy/middleware-endpoint": "^2.2.0",
- "@smithy/middleware-retry": "^2.0.20",
- "@smithy/middleware-serde": "^2.0.13",
- "@smithy/middleware-stack": "^2.0.7",
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/node-http-handler": "^2.1.9",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/smithy-client": "^2.1.15",
- "@smithy/types": "^2.5.0",
- "@smithy/url-parser": "^2.0.13",
- "@smithy/util-base64": "^2.0.1",
- "@smithy/util-body-length-browser": "^2.0.0",
- "@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.19",
- "@smithy/util-defaults-mode-node": "^2.0.25",
- "@smithy/util-endpoints": "^1.0.4",
- "@smithy/util-retry": "^2.0.6",
- "@smithy/util-utf8": "^2.0.2",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/client-sso": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.460.0.tgz",
- "integrity": "sha512-p5D9C8LKJs5yoBn5cCs2Wqzrp5YP5BYcP774bhGMFEu/LCIUyWzudwN3+/AObSiq8R8SSvBY2zQD4h+k3NjgTQ==",
- "optional": true,
- "requires": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/core": "3.451.0",
- "@aws-sdk/middleware-host-header": "3.460.0",
- "@aws-sdk/middleware-logger": "3.460.0",
- "@aws-sdk/middleware-recursion-detection": "3.460.0",
- "@aws-sdk/middleware-user-agent": "3.460.0",
- "@aws-sdk/region-config-resolver": "3.451.0",
- "@aws-sdk/types": "3.460.0",
- "@aws-sdk/util-endpoints": "3.460.0",
- "@aws-sdk/util-user-agent-browser": "3.460.0",
- "@aws-sdk/util-user-agent-node": "3.460.0",
- "@smithy/config-resolver": "^2.0.18",
- "@smithy/fetch-http-handler": "^2.2.6",
- "@smithy/hash-node": "^2.0.15",
- "@smithy/invalid-dependency": "^2.0.13",
- "@smithy/middleware-content-length": "^2.0.15",
- "@smithy/middleware-endpoint": "^2.2.0",
- "@smithy/middleware-retry": "^2.0.20",
- "@smithy/middleware-serde": "^2.0.13",
- "@smithy/middleware-stack": "^2.0.7",
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/node-http-handler": "^2.1.9",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/smithy-client": "^2.1.15",
- "@smithy/types": "^2.5.0",
- "@smithy/url-parser": "^2.0.13",
- "@smithy/util-base64": "^2.0.1",
- "@smithy/util-body-length-browser": "^2.0.0",
- "@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.19",
- "@smithy/util-defaults-mode-node": "^2.0.25",
- "@smithy/util-endpoints": "^1.0.4",
- "@smithy/util-retry": "^2.0.6",
- "@smithy/util-utf8": "^2.0.2",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/client-sts": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.461.0.tgz",
- "integrity": "sha512-1u+t31m23vuc9zkiUk51L4QbwuRQEuBeMArHK/thmq4V+A0VmjoAr/x2D0eQ0deOuBqG5YC62oaqUfIhj03SIw==",
- "optional": true,
- "requires": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/core": "3.451.0",
- "@aws-sdk/credential-provider-node": "3.460.0",
- "@aws-sdk/middleware-host-header": "3.460.0",
- "@aws-sdk/middleware-logger": "3.460.0",
- "@aws-sdk/middleware-recursion-detection": "3.460.0",
- "@aws-sdk/middleware-sdk-sts": "3.461.0",
- "@aws-sdk/middleware-signing": "3.461.0",
- "@aws-sdk/middleware-user-agent": "3.460.0",
- "@aws-sdk/region-config-resolver": "3.451.0",
- "@aws-sdk/types": "3.460.0",
- "@aws-sdk/util-endpoints": "3.460.0",
- "@aws-sdk/util-user-agent-browser": "3.460.0",
- "@aws-sdk/util-user-agent-node": "3.460.0",
- "@smithy/config-resolver": "^2.0.18",
- "@smithy/fetch-http-handler": "^2.2.6",
- "@smithy/hash-node": "^2.0.15",
- "@smithy/invalid-dependency": "^2.0.13",
- "@smithy/middleware-content-length": "^2.0.15",
- "@smithy/middleware-endpoint": "^2.2.0",
- "@smithy/middleware-retry": "^2.0.20",
- "@smithy/middleware-serde": "^2.0.13",
- "@smithy/middleware-stack": "^2.0.7",
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/node-http-handler": "^2.1.9",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/smithy-client": "^2.1.15",
- "@smithy/types": "^2.5.0",
- "@smithy/url-parser": "^2.0.13",
- "@smithy/util-base64": "^2.0.1",
- "@smithy/util-body-length-browser": "^2.0.0",
- "@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.19",
- "@smithy/util-defaults-mode-node": "^2.0.25",
- "@smithy/util-endpoints": "^1.0.4",
- "@smithy/util-retry": "^2.0.6",
- "@smithy/util-utf8": "^2.0.2",
- "fast-xml-parser": "4.2.5",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/core": {
- "version": "3.451.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.451.0.tgz",
- "integrity": "sha512-SamWW2zHEf1ZKe3j1w0Piauryl8BQIlej0TBS18A4ACzhjhWXhCs13bO1S88LvPR5mBFXok3XOT6zPOnKDFktw==",
- "optional": true,
- "requires": {
- "@smithy/smithy-client": "^2.1.15",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/credential-provider-cognito-identity": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.461.0.tgz",
- "integrity": "sha512-D3bayvoEMxxheSpLug0VpAmGiVsDdYU4GsT8ls6389NjgQsAhPrmHd5wAxf1AtZYxghO9cT2rsZK60u0VQ1Q1w==",
- "optional": true,
- "requires": {
- "@aws-sdk/client-cognito-identity": "3.461.0",
- "@aws-sdk/types": "3.460.0",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/credential-provider-env": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.460.0.tgz",
- "integrity": "sha512-WWdaRJFuYRc2Ue9NKDy2NIf8pQRNx/QRVmrsk6EkIID8uWlQIOePk3SWTVV0TZIyPrbfSEaSnJRZoShphJ6PAg==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/credential-provider-http": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.460.0.tgz",
- "integrity": "sha512-tLnuLDsGcBRemj8jxt1MkerjwsQlYdwnlfQXvrYOO8qMrbFP2sEjAx165GeCbsjmY/y0w1UFQEV+xRpFg5dxUw==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/fetch-http-handler": "^2.2.6",
- "@smithy/node-http-handler": "^2.1.9",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/smithy-client": "^2.1.15",
- "@smithy/types": "^2.5.0",
- "@smithy/util-stream": "^2.0.20",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/credential-provider-ini": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.460.0.tgz",
- "integrity": "sha512-1IEUmyaWzt2M3mONO8QyZtPy0f9ccaEjCo48ZQLgptWxUI+Ohga9gPK0mqu1kTJOjv4JJGACYHzLwEnnpltGlA==",
- "optional": true,
- "requires": {
- "@aws-sdk/credential-provider-env": "3.460.0",
- "@aws-sdk/credential-provider-process": "3.460.0",
- "@aws-sdk/credential-provider-sso": "3.460.0",
- "@aws-sdk/credential-provider-web-identity": "3.460.0",
- "@aws-sdk/types": "3.460.0",
- "@smithy/credential-provider-imds": "^2.0.0",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/credential-provider-node": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.460.0.tgz",
- "integrity": "sha512-PbPo92WIgNlF6V4eWKehYGYjTqf0gU9vr09LeQUc3bTm1DJhJw1j+HU/3PfQ8LwTkBQePO7MbJ5A2n6ckMwfMg==",
- "optional": true,
- "requires": {
- "@aws-sdk/credential-provider-env": "3.460.0",
- "@aws-sdk/credential-provider-ini": "3.460.0",
- "@aws-sdk/credential-provider-process": "3.460.0",
- "@aws-sdk/credential-provider-sso": "3.460.0",
- "@aws-sdk/credential-provider-web-identity": "3.460.0",
- "@aws-sdk/types": "3.460.0",
- "@smithy/credential-provider-imds": "^2.0.0",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/credential-provider-process": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.460.0.tgz",
- "integrity": "sha512-ng+0FMc4EaxLAwdttCwf2nzNf4AgcqAHZ8pKXUf8qF/KVkoyTt3UZKW7P2FJI01zxwP+V4yAwVt95PBUKGn4YQ==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/credential-provider-sso": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.460.0.tgz",
- "integrity": "sha512-KnrQieOw17+aHEzE3SwfxjeSQ5ZTe2HeAzxkaZF++GxhNul/PkVnLzjGpIuB9bn71T9a2oNfG3peDUA+m2l2kw==",
- "optional": true,
- "requires": {
- "@aws-sdk/client-sso": "3.460.0",
- "@aws-sdk/token-providers": "3.460.0",
- "@aws-sdk/types": "3.460.0",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/credential-provider-web-identity": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.460.0.tgz",
- "integrity": "sha512-7OeaZgC3HmJZGE0I0ZiKInUMF2LyA0IZiW85AYFnAZzAIfv1cXk/1UnDAoFIQhOZfnUBXivStagz892s480ryw==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/credential-providers": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.461.0.tgz",
- "integrity": "sha512-sJjGjJxs0KajPK+WbdIRSuidWqm1xobX/Uv0x7TTQCCj1Fsuyq03pNP1aLRbJnLazKx+qyJef7rEFwQeFEAiNA==",
- "optional": true,
- "requires": {
- "@aws-sdk/client-cognito-identity": "3.461.0",
- "@aws-sdk/client-sso": "3.460.0",
- "@aws-sdk/client-sts": "3.461.0",
- "@aws-sdk/credential-provider-cognito-identity": "3.461.0",
- "@aws-sdk/credential-provider-env": "3.460.0",
- "@aws-sdk/credential-provider-http": "3.460.0",
- "@aws-sdk/credential-provider-ini": "3.460.0",
- "@aws-sdk/credential-provider-node": "3.460.0",
- "@aws-sdk/credential-provider-process": "3.460.0",
- "@aws-sdk/credential-provider-sso": "3.460.0",
- "@aws-sdk/credential-provider-web-identity": "3.460.0",
- "@aws-sdk/types": "3.460.0",
- "@smithy/credential-provider-imds": "^2.0.0",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/middleware-host-header": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.460.0.tgz",
- "integrity": "sha512-qBeDyuJkEuHe87Xk6unvFO9Zg5j6zM8bQOOZITocTLfu9JN0u5V4GQ/yopvpv+nQHmC/MGr0G7p+kIXMrg/Q2A==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/middleware-logger": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.460.0.tgz",
- "integrity": "sha512-w2AJ6HOJ+Ggx9+VDKuWBHk5S0ZxYEo2EY2IFh0qtCQ1RDix/ur1QEzOOL5vNjHlZKPv/dseIwhgsTCac8UHXbQ==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/middleware-recursion-detection": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.460.0.tgz",
- "integrity": "sha512-wmzm1/2NzpcCVCAsGqqiTBK+xNyLmQwTOq63rcW6eeq6gYOO0cyTZROOkVRrrsKWPBigrSFFHvDrEvonOMtKAg==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/middleware-sdk-sts": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.461.0.tgz",
- "integrity": "sha512-sgNxkwKdJ/NZm7SJZBnbYPkbspmzn3lDyRSJH7PTCvyzDBzY2PB6yS/dfnGkitR+PYwromuOYMha37W4su2SOw==",
- "optional": true,
- "requires": {
- "@aws-sdk/middleware-signing": "3.461.0",
- "@aws-sdk/types": "3.460.0",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/middleware-signing": {
- "version": "3.461.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.461.0.tgz",
- "integrity": "sha512-aM/7VupHlsgeRG1UZSAQMWJX+2Jam4GG8ZGVAbLfBr9yh9cBwnUUndpUpYI9rU7atA8n+vISr162EbR7WTiFhQ==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/signature-v4": "^2.0.0",
- "@smithy/types": "^2.5.0",
- "@smithy/util-middleware": "^2.0.6",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/middleware-user-agent": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.460.0.tgz",
- "integrity": "sha512-0gBSOCr+RtwRUCSRLn9H3RVnj9ercvk/QKTHIr33CgfEdyZtIGpHWUSs6uqiQydPTRzjCm5SfUa6ESGhRVMM6A==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@aws-sdk/util-endpoints": "3.460.0",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/region-config-resolver": {
- "version": "3.451.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.451.0.tgz",
- "integrity": "sha512-3iMf4OwzrFb4tAAmoROXaiORUk2FvSejnHIw/XHvf/jjR4EqGGF95NZP/n/MeFZMizJWVssrwS412GmoEyoqhg==",
- "optional": true,
- "requires": {
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/types": "^2.5.0",
- "@smithy/util-config-provider": "^2.0.0",
- "@smithy/util-middleware": "^2.0.6",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/token-providers": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.460.0.tgz",
- "integrity": "sha512-EvSIPMI1gXk3gEkdtbZCW+p3Bjmt2gOR1m7ibQD7qLj4l0dKXhp4URgTqB1ExH3S4qUq0M/XSGKbGLZpvunHNg==",
- "optional": true,
- "requires": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/middleware-host-header": "3.460.0",
- "@aws-sdk/middleware-logger": "3.460.0",
- "@aws-sdk/middleware-recursion-detection": "3.460.0",
- "@aws-sdk/middleware-user-agent": "3.460.0",
- "@aws-sdk/region-config-resolver": "3.451.0",
- "@aws-sdk/types": "3.460.0",
- "@aws-sdk/util-endpoints": "3.460.0",
- "@aws-sdk/util-user-agent-browser": "3.460.0",
- "@aws-sdk/util-user-agent-node": "3.460.0",
- "@smithy/config-resolver": "^2.0.18",
- "@smithy/fetch-http-handler": "^2.2.6",
- "@smithy/hash-node": "^2.0.15",
- "@smithy/invalid-dependency": "^2.0.13",
- "@smithy/middleware-content-length": "^2.0.15",
- "@smithy/middleware-endpoint": "^2.2.0",
- "@smithy/middleware-retry": "^2.0.20",
- "@smithy/middleware-serde": "^2.0.13",
- "@smithy/middleware-stack": "^2.0.7",
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/node-http-handler": "^2.1.9",
- "@smithy/property-provider": "^2.0.0",
- "@smithy/protocol-http": "^3.0.9",
- "@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/smithy-client": "^2.1.15",
- "@smithy/types": "^2.5.0",
- "@smithy/url-parser": "^2.0.13",
- "@smithy/util-base64": "^2.0.1",
- "@smithy/util-body-length-browser": "^2.0.0",
- "@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.19",
- "@smithy/util-defaults-mode-node": "^2.0.25",
- "@smithy/util-endpoints": "^1.0.4",
- "@smithy/util-retry": "^2.0.6",
- "@smithy/util-utf8": "^2.0.2",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/types": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.460.0.tgz",
- "integrity": "sha512-MyZSWS/FV8Bnux5eD9en7KLgVxevlVrGNEP3X2D7fpnUlLhl0a7k8+OpSI2ozEQB8hIU2DLc/XXTKRerHSefxQ==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/util-endpoints": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.460.0.tgz",
- "integrity": "sha512-myH6kM5WP4IWULHDHMYf2Q+BCYVGlzqJgiBmO10kQEtJSeAGZZ49eoFFYgKW8ZAYB5VnJ+XhXVB1TRA+vR4l5A==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/util-endpoints": "^1.0.4",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/util-locate-window": {
- "version": "3.310.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz",
- "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==",
- "optional": true,
- "requires": {
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/util-user-agent-browser": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.460.0.tgz",
- "integrity": "sha512-FRCzW+TyjKnvxsargPVrjayBfp/rvObYHZyZ2OSqrVw8lkkPCb4e/WZOeIiXZuhdhhoah7wMuo6zGwtFF3bYKg==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/types": "^2.5.0",
- "bowser": "^2.11.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/util-user-agent-node": {
- "version": "3.460.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.460.0.tgz",
- "integrity": "sha512-+kSoR9ABGpJ5Xc7v0VwpgTQbgyI4zuezC8K4pmKAGZsSsVWg4yxptoy2bDqoFL7qfRlWviMVTkQRMvR4D44WxA==",
- "optional": true,
- "requires": {
- "@aws-sdk/types": "3.460.0",
- "@smithy/node-config-provider": "^2.1.5",
- "@smithy/types": "^2.5.0",
- "tslib": "^2.5.0"
- }
- },
- "@aws-sdk/util-utf8-browser": {
- "version": "3.259.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz",
- "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==",
- "optional": true,
- "requires": {
- "tslib": "^2.3.1"
- }
- },
- "@babel/code-frame": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
- "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
- "requires": {
- "@babel/highlight": "^7.23.4",
- "chalk": "^2.4.2"
- },
- "dependencies": {
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- }
- }
- },
- "@babel/compat-data": {
- "version": "7.20.5"
- },
- "@babel/core": {
- "version": "7.20.5",
- "requires": {
- "@ampproject/remapping": "^2.1.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.20.5",
- "@babel/helper-compilation-targets": "^7.20.0",
- "@babel/helper-module-transforms": "^7.20.2",
- "@babel/helpers": "^7.20.5",
- "@babel/parser": "^7.20.5",
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.20.5",
- "@babel/types": "^7.20.5",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.1",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.1",
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "@babel/generator": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz",
- "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==",
- "requires": {
- "@babel/types": "^7.23.5",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- }
- }
- },
- "@babel/helper-annotate-as-pure": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-explode-assignable-expression": "^7.18.6",
- "@babel/types": "^7.18.9"
- }
- },
- "@babel/helper-compilation-targets": {
- "version": "7.20.0",
- "requires": {
- "@babel/compat-data": "^7.20.0",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.21.3",
- "semver": "^6.3.0"
- }
- },
- "@babel/helper-create-class-features-plugin": {
- "version": "7.20.5",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.19.0",
- "@babel/helper-member-expression-to-functions": "^7.18.9",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-replace-supers": "^7.19.1",
- "@babel/helper-split-export-declaration": "^7.18.6"
- }
- },
- "@babel/helper-create-regexp-features-plugin": {
- "version": "7.20.5",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "regexpu-core": "^5.2.1"
- }
- },
- "@babel/helper-define-polyfill-provider": {
- "version": "0.3.3",
- "dev": true,
- "requires": {
- "@babel/helper-compilation-targets": "^7.17.7",
- "@babel/helper-plugin-utils": "^7.16.7",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2",
- "semver": "^6.1.2"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA=="
- },
- "@babel/helper-explode-assignable-expression": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
- "requires": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.9"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.18.6",
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.20.2",
- "requires": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.20.2",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.19.1",
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.20.1",
- "@babel/types": "^7.20.2"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.20.2"
- },
- "@babel/helper-remap-async-to-generator": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-wrap-function": "^7.18.9",
- "@babel/types": "^7.18.9"
- }
- },
- "@babel/helper-replace-supers": {
- "version": "7.19.1",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-member-expression-to-functions": "^7.18.9",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/traverse": "^7.19.1",
- "@babel/types": "^7.19.0"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.20.2",
- "requires": {
- "@babel/types": "^7.20.2"
- }
- },
- "@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.20.0",
- "requires": {
- "@babel/types": "^7.20.0"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-string-parser": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
- "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ=="
- },
- "@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
- },
- "@babel/helper-validator-option": {
- "version": "7.18.6"
- },
- "@babel/helper-wrap-function": {
- "version": "7.20.5",
- "dev": true,
- "requires": {
- "@babel/helper-function-name": "^7.19.0",
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.20.5",
- "@babel/types": "^7.20.5"
- }
- },
- "@babel/helpers": {
- "version": "7.20.6",
- "requires": {
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.20.5",
- "@babel/types": "^7.20.5"
- }
- },
- "@babel/highlight": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
- "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- }
- }
- },
- "@babel/parser": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz",
- "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ=="
- },
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9",
- "@babel/plugin-proposal-optional-chaining": "^7.18.9"
- }
- },
- "@babel/plugin-proposal-async-generator-functions": {
- "version": "7.20.1",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-plugin-utils": "^7.19.0",
- "@babel/helper-remap-async-to-generator": "^7.18.9",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
- }
- },
- "@babel/plugin-proposal-class-properties": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-proposal-class-static-block": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-dynamic-import": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-export-namespace-from": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-json-strings": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-json-strings": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-logical-assignment-operators": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
- }
- },
- "@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-numeric-separator": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
- }
- },
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.20.2",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.20.1",
- "@babel/helper-compilation-targets": "^7.20.0",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.20.1"
- }
- },
- "@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-optional-chaining": {
- "version": "7.18.9",
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-private-methods": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-proposal-private-property-in-object": {
- "version": "7.20.5",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-create-class-features-plugin": "^7.20.5",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.12.13"
- }
- },
- "@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-dynamic-import": {
- "version": "7.8.3",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-export-namespace-from": {
- "version": "7.8.3",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-syntax-import-assertions": {
- "version": "7.20.0",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.19.0"
- }
- },
- "@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-typescript": {
- "version": "7.20.0",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.19.0"
- }
- },
- "@babel/plugin-transform-arrow-functions": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-async-to-generator": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-remap-async-to-generator": "^7.18.6"
- }
- },
- "@babel/plugin-transform-block-scoped-functions": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-block-scoping": {
- "version": "7.20.5",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.20.2"
- }
- },
- "@babel/plugin-transform-classes": {
- "version": "7.20.2",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-compilation-targets": "^7.20.0",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.19.0",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-replace-supers": "^7.19.1",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "globals": "^11.1.0"
- }
- },
- "@babel/plugin-transform-computed-properties": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
- }
- },
- "@babel/plugin-transform-destructuring": {
- "version": "7.20.2",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.20.2"
- }
- },
- "@babel/plugin-transform-dotall-regex": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-duplicate-keys": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
- }
- },
- "@babel/plugin-transform-exponentiation-operator": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-for-of": {
- "version": "7.18.8",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-function-name": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-compilation-targets": "^7.18.9",
- "@babel/helper-function-name": "^7.18.9",
- "@babel/helper-plugin-utils": "^7.18.9"
- }
- },
- "@babel/plugin-transform-literals": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
- }
- },
- "@babel/plugin-transform-member-expression-literals": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-modules-amd": {
- "version": "7.19.6",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.19.6",
- "@babel/helper-plugin-utils": "^7.19.0"
- }
- },
- "@babel/plugin-transform-modules-commonjs": {
- "version": "7.19.6",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.19.6",
- "@babel/helper-plugin-utils": "^7.19.0",
- "@babel/helper-simple-access": "^7.19.4"
- }
- },
- "@babel/plugin-transform-modules-systemjs": {
- "version": "7.19.6",
- "dev": true,
- "requires": {
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-module-transforms": "^7.19.6",
- "@babel/helper-plugin-utils": "^7.19.0",
- "@babel/helper-validator-identifier": "^7.19.1"
- }
- },
- "@babel/plugin-transform-modules-umd": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.20.5",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.20.5",
- "@babel/helper-plugin-utils": "^7.20.2"
- }
- },
- "@babel/plugin-transform-new-target": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-object-super": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.6"
- }
- },
- "@babel/plugin-transform-parameters": {
- "version": "7.20.5",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.20.2"
- }
- },
- "@babel/plugin-transform-property-literals": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-regenerator": {
- "version": "7.20.5",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "regenerator-transform": "^0.15.1"
- }
- },
- "@babel/plugin-transform-reserved-words": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-shorthand-properties": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-spread": {
- "version": "7.19.0",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.19.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9"
- }
- },
- "@babel/plugin-transform-sticky-regex": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-template-literals": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
- }
- },
- "@babel/plugin-transform-typeof-symbol": {
- "version": "7.18.9",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
- }
- },
- "@babel/plugin-transform-unicode-escapes": {
- "version": "7.18.10",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
- }
- },
- "@babel/plugin-transform-unicode-regex": {
- "version": "7.18.6",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/preset-env": {
- "version": "7.20.2",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.20.1",
- "@babel/helper-compilation-targets": "^7.20.0",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
- "@babel/plugin-proposal-async-generator-functions": "^7.20.1",
- "@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-class-static-block": "^7.18.6",
- "@babel/plugin-proposal-dynamic-import": "^7.18.6",
- "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
- "@babel/plugin-proposal-json-strings": "^7.18.6",
- "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
- "@babel/plugin-proposal-numeric-separator": "^7.18.6",
- "@babel/plugin-proposal-object-rest-spread": "^7.20.2",
- "@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
- "@babel/plugin-proposal-optional-chaining": "^7.18.9",
- "@babel/plugin-proposal-private-methods": "^7.18.6",
- "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
- "@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.20.0",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5",
- "@babel/plugin-transform-arrow-functions": "^7.18.6",
- "@babel/plugin-transform-async-to-generator": "^7.18.6",
- "@babel/plugin-transform-block-scoped-functions": "^7.18.6",
- "@babel/plugin-transform-block-scoping": "^7.20.2",
- "@babel/plugin-transform-classes": "^7.20.2",
- "@babel/plugin-transform-computed-properties": "^7.18.9",
- "@babel/plugin-transform-destructuring": "^7.20.2",
- "@babel/plugin-transform-dotall-regex": "^7.18.6",
- "@babel/plugin-transform-duplicate-keys": "^7.18.9",
- "@babel/plugin-transform-exponentiation-operator": "^7.18.6",
- "@babel/plugin-transform-for-of": "^7.18.8",
- "@babel/plugin-transform-function-name": "^7.18.9",
- "@babel/plugin-transform-literals": "^7.18.9",
- "@babel/plugin-transform-member-expression-literals": "^7.18.6",
- "@babel/plugin-transform-modules-amd": "^7.19.6",
- "@babel/plugin-transform-modules-commonjs": "^7.19.6",
- "@babel/plugin-transform-modules-systemjs": "^7.19.6",
- "@babel/plugin-transform-modules-umd": "^7.18.6",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
- "@babel/plugin-transform-new-target": "^7.18.6",
- "@babel/plugin-transform-object-super": "^7.18.6",
- "@babel/plugin-transform-parameters": "^7.20.1",
- "@babel/plugin-transform-property-literals": "^7.18.6",
- "@babel/plugin-transform-regenerator": "^7.18.6",
- "@babel/plugin-transform-reserved-words": "^7.18.6",
- "@babel/plugin-transform-shorthand-properties": "^7.18.6",
- "@babel/plugin-transform-spread": "^7.19.0",
- "@babel/plugin-transform-sticky-regex": "^7.18.6",
- "@babel/plugin-transform-template-literals": "^7.18.9",
- "@babel/plugin-transform-typeof-symbol": "^7.18.9",
- "@babel/plugin-transform-unicode-escapes": "^7.18.10",
- "@babel/plugin-transform-unicode-regex": "^7.18.6",
- "@babel/preset-modules": "^0.1.5",
- "@babel/types": "^7.20.2",
- "babel-plugin-polyfill-corejs2": "^0.3.3",
- "babel-plugin-polyfill-corejs3": "^0.6.0",
- "babel-plugin-polyfill-regenerator": "^0.4.1",
- "core-js-compat": "^3.25.1",
- "semver": "^6.3.0"
- }
- },
- "@babel/preset-modules": {
- "version": "0.1.5",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
- "@babel/plugin-transform-dotall-regex": "^7.4.4",
- "@babel/types": "^7.4.4",
- "esutils": "^2.0.2"
- }
- },
- "@babel/runtime": {
- "version": "7.20.6",
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.11"
- }
- },
- "@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
- "requires": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
- }
- },
- "@babel/traverse": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz",
- "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==",
- "requires": {
- "@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.5",
- "@babel/types": "^7.23.5",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.1",
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "@babel/types": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz",
- "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==",
- "requires": {
- "@babel/helper-string-parser": "^7.23.4",
- "@babel/helper-validator-identifier": "^7.22.20",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@bcoe/v8-coverage": {
- "version": "0.2.3",
- "dev": true
- },
- "@eslint/eslintrc": {
- "version": "1.3.3",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.4.0",
- "globals": "^13.15.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "dev": true
- },
- "debug": {
- "version": "4.3.4",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "globals": {
- "version": "13.19.0",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "js-yaml": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- }
- }
- },
- "@humanwhocodes/config-array": {
- "version": "0.11.7",
- "dev": true,
- "requires": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.5"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "dev": true
- },
- "@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "dev": true
- },
- "@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- }
- },
- "@istanbuljs/schema": {
- "version": "0.1.3",
- "dev": true
- },
- "@jest/console": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/types": "^29.3.1",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^29.3.1",
- "jest-util": "^29.3.1",
- "slash": "^3.0.0"
- }
- },
- "@jest/core": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/console": "^29.3.1",
- "@jest/reporters": "^29.3.1",
- "@jest/test-result": "^29.3.1",
- "@jest/transform": "^29.3.1",
- "@jest/types": "^29.3.1",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.2.0",
- "jest-config": "^29.3.1",
- "jest-haste-map": "^29.3.1",
- "jest-message-util": "^29.3.1",
- "jest-regex-util": "^29.2.0",
- "jest-resolve": "^29.3.1",
- "jest-resolve-dependencies": "^29.3.1",
- "jest-runner": "^29.3.1",
- "jest-runtime": "^29.3.1",
- "jest-snapshot": "^29.3.1",
- "jest-util": "^29.3.1",
- "jest-validate": "^29.3.1",
- "jest-watcher": "^29.3.1",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.3.1",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "@jest/environment": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/fake-timers": "^29.3.1",
- "@jest/types": "^29.3.1",
- "@types/node": "*",
- "jest-mock": "^29.3.1"
- }
- },
- "@jest/expect": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "expect": "^29.3.1",
- "jest-snapshot": "^29.3.1"
- }
- },
- "@jest/expect-utils": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "jest-get-type": "^29.2.0"
- }
- },
- "@jest/fake-timers": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/types": "^29.3.1",
- "@sinonjs/fake-timers": "^9.1.2",
- "@types/node": "*",
- "jest-message-util": "^29.3.1",
- "jest-mock": "^29.3.1",
- "jest-util": "^29.3.1"
- }
- },
- "@jest/globals": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/environment": "^29.3.1",
- "@jest/expect": "^29.3.1",
- "@jest/types": "^29.3.1",
- "jest-mock": "^29.3.1"
- }
- },
- "@jest/reporters": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.3.1",
- "@jest/test-result": "^29.3.1",
- "@jest/transform": "^29.3.1",
- "@jest/types": "^29.3.1",
- "@jridgewell/trace-mapping": "^0.3.15",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^5.1.0",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.3.1",
- "jest-util": "^29.3.1",
- "jest-worker": "^29.3.1",
- "slash": "^3.0.0",
- "string-length": "^4.0.1",
- "strip-ansi": "^6.0.0",
- "v8-to-istanbul": "^9.0.1"
- }
- },
- "@jest/schemas": {
- "version": "29.0.0",
- "dev": true,
- "requires": {
- "@sinclair/typebox": "^0.24.1"
- }
- },
- "@jest/source-map": {
- "version": "29.2.0",
- "dev": true,
- "requires": {
- "@jridgewell/trace-mapping": "^0.3.15",
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.9"
- }
- },
- "@jest/test-result": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/console": "^29.3.1",
- "@jest/types": "^29.3.1",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- }
- },
- "@jest/test-sequencer": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/test-result": "^29.3.1",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.3.1",
- "slash": "^3.0.0"
- }
- },
- "@jest/transform": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@babel/core": "^7.11.6",
- "@jest/types": "^29.3.1",
- "@jridgewell/trace-mapping": "^0.3.15",
- "babel-plugin-istanbul": "^6.1.1",
- "chalk": "^4.0.0",
- "convert-source-map": "^2.0.0",
- "fast-json-stable-stringify": "^2.1.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.3.1",
- "jest-regex-util": "^29.2.0",
- "jest-util": "^29.3.1",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.4",
- "slash": "^3.0.0",
- "write-file-atomic": "^4.0.1"
- },
- "dependencies": {
- "convert-source-map": {
- "version": "2.0.0",
- "dev": true
- }
- }
- },
- "@jest/types": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.0.0",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "requires": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.1.0"
- },
- "@jridgewell/set-array": {
- "version": "1.1.2"
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.14"
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.17",
- "requires": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
- }
- },
- "@mapbox/node-pre-gyp": {
- "version": "1.0.10",
- "requires": {
- "detect-libc": "^2.0.0",
- "https-proxy-agent": "^5.0.0",
- "make-dir": "^3.1.0",
- "node-fetch": "^2.6.7",
- "nopt": "^5.0.0",
- "npmlog": "^5.0.1",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.11"
- },
- "dependencies": {
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "@mongodb-js/saslprep": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz",
- "integrity": "sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==",
- "optional": true,
- "requires": {
- "sparse-bitfield": "^3.0.3"
- }
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@sinclair/typebox": {
- "version": "0.24.51",
- "dev": true
- },
- "@sinonjs/commons": {
- "version": "1.8.6",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "9.1.2",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "@smithy/abort-controller": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.14.tgz",
- "integrity": "sha512-zXtteuYLWbSXnzI3O6xq3FYvigYZFW8mdytGibfarLL2lxHto9L3ILtGVnVGmFZa7SDh62l39EnU5hesLN87Fw==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/config-resolver": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.19.tgz",
- "integrity": "sha512-JsghnQ5zjWmjEVY8TFOulLdEOCj09SjRLugrHlkPZTIBBm7PQitCFVLThbsKPZQOP7N3ME1DU1nKUc1UaVnBog==",
- "optional": true,
- "requires": {
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/types": "^2.6.0",
- "@smithy/util-config-provider": "^2.0.0",
- "@smithy/util-middleware": "^2.0.7",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/credential-provider-imds": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.2.tgz",
- "integrity": "sha512-Y62jBWdoLPSYjr9fFvJf+KwTa1EunjVr6NryTEWCnwIY93OJxwV4t0qxjwdPl/XMsUkq79ppNJSEQN6Ohnhxjw==",
- "optional": true,
- "requires": {
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/property-provider": "^2.0.15",
- "@smithy/types": "^2.6.0",
- "@smithy/url-parser": "^2.0.14",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/eventstream-codec": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.14.tgz",
- "integrity": "sha512-g/OU/MeWGfHDygoXgMWfG/Xb0QqDnAGcM9t2FRrVAhleXYRddGOEnfanR5cmHgB9ue52MJsyorqFjckzXsylaA==",
- "optional": true,
- "requires": {
- "@aws-crypto/crc32": "3.0.0",
- "@smithy/types": "^2.6.0",
- "@smithy/util-hex-encoding": "^2.0.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/fetch-http-handler": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.7.tgz",
- "integrity": "sha512-iSDBjxuH9TgrtMYAr7j5evjvkvgwLY3y+9D547uep+JNkZ1ZT+BaeU20j6I/bO/i26ilCWFImrlXTPsfQtZdIQ==",
- "optional": true,
- "requires": {
- "@smithy/protocol-http": "^3.0.10",
- "@smithy/querystring-builder": "^2.0.14",
- "@smithy/types": "^2.6.0",
- "@smithy/util-base64": "^2.0.1",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/hash-node": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.16.tgz",
- "integrity": "sha512-Wbi9A0PacMYUOwjAulQP90Wl3mQ6NDwnyrZQzFjDz+UzjXOSyQMgBrTkUBz+pVoYVlX3DUu24gWMZBcit+wOGg==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "@smithy/util-buffer-from": "^2.0.0",
- "@smithy/util-utf8": "^2.0.2",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/invalid-dependency": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.14.tgz",
- "integrity": "sha512-d8ohpwZo9RzTpGlAfsWtfm1SHBSU7+N4iuZ6MzR10xDTujJJWtmXYHK1uzcr7rggbpUTaWyHpPFgnf91q0EFqQ==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/is-array-buffer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz",
- "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==",
- "optional": true,
- "requires": {
- "tslib": "^2.5.0"
- }
- },
- "@smithy/middleware-content-length": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.16.tgz",
- "integrity": "sha512-9ddDia3pp1d3XzLXKcm7QebGxLq9iwKf+J1LapvlSOhpF8EM9SjMeSrMOOFgG+2TfW5K3+qz4IAJYYm7INYCng==",
- "optional": true,
- "requires": {
- "@smithy/protocol-http": "^3.0.10",
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/middleware-endpoint": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.1.tgz",
- "integrity": "sha512-dVDS7HNJl/wb0lpByXor6whqDbb1YlLoaoWYoelyYzLHioXOE7y/0iDwJWtDcN36/tVCw9EPBFZ3aans84jLpg==",
- "optional": true,
- "requires": {
- "@smithy/middleware-serde": "^2.0.14",
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/shared-ini-file-loader": "^2.2.5",
- "@smithy/types": "^2.6.0",
- "@smithy/url-parser": "^2.0.14",
- "@smithy/util-middleware": "^2.0.7",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/middleware-retry": {
- "version": "2.0.21",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.21.tgz",
- "integrity": "sha512-EZS1EXv1k6IJX6hyu/0yNQuPcPaXwG8SWljQHYueyRbOxmqYgoWMWPtfZj0xRRQ4YtLawQSpBgAeiJltq8/MPw==",
- "optional": true,
- "requires": {
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/protocol-http": "^3.0.10",
- "@smithy/service-error-classification": "^2.0.7",
- "@smithy/types": "^2.6.0",
- "@smithy/util-middleware": "^2.0.7",
- "@smithy/util-retry": "^2.0.7",
- "tslib": "^2.5.0",
- "uuid": "^8.3.2"
- }
- },
- "@smithy/middleware-serde": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.14.tgz",
- "integrity": "sha512-hFi3FqoYWDntCYA2IGY6gJ6FKjq2gye+1tfxF2HnIJB5uW8y2DhpRNBSUMoqP+qvYzRqZ6ntv4kgbG+o3pX57g==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/middleware-stack": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.8.tgz",
- "integrity": "sha512-7/N59j0zWqVEKExJcA14MrLDZ/IeN+d6nbkN8ucs+eURyaDUXWYlZrQmMOd/TyptcQv0+RDlgag/zSTTV62y/Q==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/node-config-provider": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.6.tgz",
- "integrity": "sha512-HLqTs6O78m3M3z1cPLFxddxhEPv5MkVatfPuxoVO3A+cHZanNd/H5I6btcdHy6N2CB1MJ/lihJC92h30SESsBA==",
- "optional": true,
- "requires": {
- "@smithy/property-provider": "^2.0.15",
- "@smithy/shared-ini-file-loader": "^2.2.5",
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/node-http-handler": {
- "version": "2.1.10",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.10.tgz",
- "integrity": "sha512-lkALAwtN6odygIM4nB8aHDahINM6WXXjNrZmWQAh0RSossySRT2qa31cFv0ZBuAYVWeprskRk13AFvvLmf1WLw==",
- "optional": true,
- "requires": {
- "@smithy/abort-controller": "^2.0.14",
- "@smithy/protocol-http": "^3.0.10",
- "@smithy/querystring-builder": "^2.0.14",
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/property-provider": {
- "version": "2.0.15",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.15.tgz",
- "integrity": "sha512-YbRFBn8oiiC3o1Kn3a4KjGa6k47rCM9++5W9cWqYn9WnkyH+hBWgfJAckuxpyA2Hq6Ys4eFrWzXq6fqHEw7iew==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/protocol-http": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.10.tgz",
- "integrity": "sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/querystring-builder": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.14.tgz",
- "integrity": "sha512-lQ4pm9vTv9nIhl5jt6uVMPludr6syE2FyJmHsIJJuOD7QPIJnrf9HhUGf1iHh9KJ4CUv21tpOU3X6s0rB6uJ0g==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "@smithy/util-uri-escape": "^2.0.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/querystring-parser": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.14.tgz",
- "integrity": "sha512-+cbtXWI9tNtQjlgQg3CA+pvL3zKTAxPnG3Pj6MP89CR3vi3QMmD0SOWoq84tqZDnJCxlsusbgIXk1ngMReXo+A==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/service-error-classification": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.7.tgz",
- "integrity": "sha512-LLxgW12qGz8doYto15kZ4x1rHjtXl0BnCG6T6Wb8z2DI4PT9cJfOSvzbuLzy7+5I24PAepKgFeWHRd9GYy3Z9w==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0"
- }
- },
- "@smithy/shared-ini-file-loader": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.5.tgz",
- "integrity": "sha512-LHA68Iu7SmNwfAVe8egmjDCy648/7iJR/fK1UnVw+iAOUJoEYhX2DLgVd5pWllqdDiRbQQzgaHLcRokM+UFR1w==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/signature-v4": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.16.tgz",
- "integrity": "sha512-ilLY85xS2kZZzTb83diQKYLIYALvart0KnBaKnIRnMBHAGEio5aHSlANQoxVn0VsonwmQ3CnWhnCT0sERD8uTg==",
- "optional": true,
- "requires": {
- "@smithy/eventstream-codec": "^2.0.14",
- "@smithy/is-array-buffer": "^2.0.0",
- "@smithy/types": "^2.6.0",
- "@smithy/util-hex-encoding": "^2.0.0",
- "@smithy/util-middleware": "^2.0.7",
- "@smithy/util-uri-escape": "^2.0.0",
- "@smithy/util-utf8": "^2.0.2",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/smithy-client": {
- "version": "2.1.16",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.16.tgz",
- "integrity": "sha512-Lw67+yQSpLl4YkDLUzI2KgS8TXclXmbzSeOJUmRFS4ueT56B4pw3RZRF/SRzvgyxM/HxgkUan8oSHXCujPDafQ==",
- "optional": true,
- "requires": {
- "@smithy/middleware-stack": "^2.0.8",
- "@smithy/types": "^2.6.0",
- "@smithy/util-stream": "^2.0.21",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/types": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.6.0.tgz",
- "integrity": "sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g==",
- "optional": true,
- "requires": {
- "tslib": "^2.5.0"
- }
- },
- "@smithy/url-parser": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.14.tgz",
- "integrity": "sha512-kbu17Y1AFXi5lNlySdDj7ZzmvupyWKCX/0jNZ8ffquRyGdbDZb+eBh0QnWqsSmnZa/ctyWaTf7n4l/pXLExrnw==",
- "optional": true,
- "requires": {
- "@smithy/querystring-parser": "^2.0.14",
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-base64": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz",
- "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==",
- "optional": true,
- "requires": {
- "@smithy/util-buffer-from": "^2.0.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-body-length-browser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz",
- "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==",
- "optional": true,
- "requires": {
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-body-length-node": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz",
- "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==",
- "optional": true,
- "requires": {
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-buffer-from": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz",
- "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==",
- "optional": true,
- "requires": {
- "@smithy/is-array-buffer": "^2.0.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-config-provider": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz",
- "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==",
- "optional": true,
- "requires": {
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-defaults-mode-browser": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.20.tgz",
- "integrity": "sha512-QJtnbTIl0/BbEASkx1MUFf6EaoWqWW1/IM90N++8NNscePvPf77GheYfpoPis6CBQawUWq8QepTP2QUSAdrVkw==",
- "optional": true,
- "requires": {
- "@smithy/property-provider": "^2.0.15",
- "@smithy/smithy-client": "^2.1.16",
- "@smithy/types": "^2.6.0",
- "bowser": "^2.11.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-defaults-mode-node": {
- "version": "2.0.26",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.26.tgz",
- "integrity": "sha512-lGFPOFCHv1ql019oegYqa54BZH7HREw6EBqjDLbAr0wquMX0BDi2sg8TJ6Eq+JGLijkZbJB73m4+aK8OFAapMg==",
- "optional": true,
- "requires": {
- "@smithy/config-resolver": "^2.0.19",
- "@smithy/credential-provider-imds": "^2.1.2",
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/property-provider": "^2.0.15",
- "@smithy/smithy-client": "^2.1.16",
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-endpoints": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.5.tgz",
- "integrity": "sha512-K7qNuCOD5K/90MjHvHm9kJldrfm40UxWYQxNEShMFxV/lCCCRIg8R4uu1PFAxRvPxNpIdcrh1uK6I1ISjDXZJw==",
- "optional": true,
- "requires": {
- "@smithy/node-config-provider": "^2.1.6",
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-hex-encoding": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz",
- "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==",
- "optional": true,
- "requires": {
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-middleware": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.7.tgz",
- "integrity": "sha512-tRINOTlf1G9B0ECarFQAtTgMhpnrMPSa+5j4ZEwEawCLfTFTavk6757sxhE4RY5RMlD/I3x+DCS8ZUiR8ho9Pw==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-retry": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.7.tgz",
- "integrity": "sha512-fIe5yARaF0+xVT1XKcrdnHKTJ1Vc4+3e3tLDjCuIcE9b6fkBzzGFY7AFiX4M+vj6yM98DrwkuZeHf7/hmtVp0Q==",
- "optional": true,
- "requires": {
- "@smithy/service-error-classification": "^2.0.7",
- "@smithy/types": "^2.6.0",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-stream": {
- "version": "2.0.21",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.21.tgz",
- "integrity": "sha512-0BUE16d7n1x7pi1YluXJdB33jOTyBChT0j/BlOkFa9uxfg6YqXieHxjHNuCdJRARa7AZEj32LLLEPJ1fSa4inA==",
- "optional": true,
- "requires": {
- "@smithy/fetch-http-handler": "^2.2.7",
- "@smithy/node-http-handler": "^2.1.10",
- "@smithy/types": "^2.6.0",
- "@smithy/util-base64": "^2.0.1",
- "@smithy/util-buffer-from": "^2.0.0",
- "@smithy/util-hex-encoding": "^2.0.0",
- "@smithy/util-utf8": "^2.0.2",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-uri-escape": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz",
- "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==",
- "optional": true,
- "requires": {
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-utf8": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz",
- "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==",
- "optional": true,
- "requires": {
- "@smithy/util-buffer-from": "^2.0.0",
- "tslib": "^2.5.0"
- }
- },
- "@types/babel__core": {
- "version": "7.1.16",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "@types/babel__generator": {
- "version": "7.6.3",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0"
- }
- },
- "@types/babel__template": {
- "version": "7.4.1",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "@types/babel__traverse": {
- "version": "7.11.0",
- "dev": true,
- "requires": {
- "@babel/types": "^7.3.0"
- }
- },
- "@types/graceful-fs": {
- "version": "4.1.5",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/istanbul-lib-coverage": {
- "version": "2.0.4",
- "dev": true
- },
- "@types/istanbul-lib-report": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "@types/istanbul-reports": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "@types/jest": {
- "version": "29.4.0",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz",
- "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==",
- "dev": true,
- "requires": {
- "expect": "^29.0.0",
- "pretty-format": "^29.0.0"
- }
- },
- "@types/node": {
- "version": "14.14.12"
- },
- "@types/prettier": {
- "version": "2.7.1",
- "dev": true
- },
- "@types/stack-utils": {
- "version": "2.0.1",
- "dev": true
- },
- "@types/webidl-conversions": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
- "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="
- },
- "@types/whatwg-url": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
- "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
- "requires": {
- "@types/node": "*",
- "@types/webidl-conversions": "*"
- }
- },
- "@types/yargs": {
- "version": "17.0.17",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
- "@types/yargs-parser": {
- "version": "21.0.0",
- "dev": true
- },
- "abbrev": {
- "version": "1.1.1"
- },
- "accepts": {
- "version": "1.3.8",
- "requires": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- }
- },
- "acorn": {
- "version": "8.8.1",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.3.2",
- "dev": true,
- "requires": {}
- },
- "agent-base": {
- "version": "6.0.2",
- "requires": {
- "debug": "4"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "ajv": {
- "version": "6.12.6",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-escapes": {
- "version": "4.3.2",
- "dev": true,
- "requires": {
- "type-fest": "^0.21.3"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.21.3",
- "dev": true
- }
- }
- },
- "ansi-regex": {
- "version": "5.0.1"
- },
- "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==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "anymatch": {
- "version": "3.1.3",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "append-field": {
- "version": "1.0.0"
- },
- "aproba": {
- "version": "2.0.0"
- },
- "are-we-there-yet": {
- "version": "2.0.0",
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "argparse": {
- "version": "1.0.10",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "array-flatten": {
- "version": "1.1.1"
- },
- "asap": {
- "version": "2.0.6",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "dev": true
- },
- "babel": {
- "version": "6.23.0"
- },
- "babel-jest": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/transform": "^29.3.1",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.2.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "slash": "^3.0.0"
- }
- },
- "babel-plugin-istanbul": {
- "version": "6.1.1",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
- "test-exclude": "^6.0.0"
- }
- },
- "babel-plugin-jest-hoist": {
- "version": "29.2.0",
- "dev": true,
- "requires": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.1.14",
- "@types/babel__traverse": "^7.0.6"
- }
- },
- "babel-plugin-polyfill-corejs2": {
- "version": "0.3.3",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.17.7",
- "@babel/helper-define-polyfill-provider": "^0.3.3",
- "semver": "^6.1.1"
- }
- },
- "babel-plugin-polyfill-corejs3": {
- "version": "0.6.0",
- "dev": true,
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.3.3",
- "core-js-compat": "^3.25.1"
- }
- },
- "babel-plugin-polyfill-regenerator": {
- "version": "0.4.1",
- "dev": true,
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.3.3"
- }
- },
- "babel-plugin-transform-import-meta": {
- "version": "2.2.0",
- "dev": true,
- "requires": {
- "@babel/template": "^7.4.4",
- "tslib": "^2.4.0"
- }
- },
- "babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-top-level-await": "^7.8.3"
- }
- },
- "babel-preset-jest": {
- "version": "29.2.0",
- "dev": true,
- "requires": {
- "babel-plugin-jest-hoist": "^29.2.0",
- "babel-preset-current-node-syntax": "^1.0.0"
- }
- },
- "balanced-match": {
- "version": "1.0.0"
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
- },
- "base64url": {
- "version": "3.0.1"
- },
- "basic-auth": {
- "version": "2.0.1",
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "bcrypt": {
- "version": "5.1.0",
- "requires": {
- "@mapbox/node-pre-gyp": "^1.0.10",
- "node-addon-api": "^5.0.0"
- }
- },
- "binary-extensions": {
- "version": "2.2.0",
- "dev": true
- },
- "bl": {
- "version": "2.2.1",
- "requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- }
- },
- "body-parser": {
- "version": "1.20.1",
- "requires": {
- "bytes": "3.1.2",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.11.0",
- "raw-body": "2.5.1",
- "type-is": "~1.6.18",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0"
- },
- "on-finished": {
- "version": "2.4.1",
- "requires": {
- "ee-first": "1.1.1"
- }
- }
- }
- },
- "boolbase": {
- "version": "1.0.0"
- },
- "bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browserslist": {
- "version": "4.21.4",
- "requires": {
- "caniuse-lite": "^1.0.30001400",
- "electron-to-chromium": "^1.4.251",
- "node-releases": "^2.0.6",
- "update-browserslist-db": "^1.0.9"
- }
- },
- "bser": {
- "version": "2.1.1",
- "dev": true,
- "requires": {
- "node-int64": "^0.4.0"
- }
- },
- "bson": {
- "version": "1.1.5"
- },
- "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"
- },
- "buffer-from": {
- "version": "1.1.1"
- },
- "busboy": {
- "version": "1.6.0",
- "requires": {
- "streamsearch": "^1.1.0"
- }
- },
- "bytes": {
- "version": "3.1.2"
- },
- "call-bind": {
- "version": "1.0.2",
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "callsites": {
- "version": "3.1.0",
- "dev": true
- },
- "camelcase": {
- "version": "5.3.1",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30001439"
- },
- "chalk": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "char-regex": {
- "version": "1.0.2",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.3",
- "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"
- },
- "ci-info": {
- "version": "3.7.0",
- "dev": true
- },
- "cjs-module-lexer": {
- "version": "1.2.2",
- "dev": true
- },
- "cli-table3": {
- "version": "0.5.1",
- "dev": true,
- "requires": {
- "colors": "^1.1.2",
- "object-assign": "^4.1.0",
- "string-width": "^2.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.1",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "cliui": {
- "version": "8.0.1",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- }
- },
- "cloudinary": {
- "version": "1.41.0",
- "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-1.41.0.tgz",
- "integrity": "sha512-qFf2McjvILJITePf4VF1PrY/8c2zy+/q5FVV6V3VWrP/gpIZsusPqXL4QZ6ZKXibPRukzMYqsQEhaSQgJHKKow==",
- "requires": {
- "cloudinary-core": "^2.13.0",
- "core-js": "^3.30.1",
- "lodash": "^4.17.21",
- "q": "^1.5.1"
- }
- },
- "cloudinary-core": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/cloudinary-core/-/cloudinary-core-2.13.0.tgz",
- "integrity": "sha512-Nt0Q5I2FtenmJghtC4YZ3MZZbGg1wLm84SsxcuVwZ83OyJqG9CNIGp86CiI6iDv3QobaqBUpOT7vg+HqY5HxEA==",
- "requires": {}
- },
- "co": {
- "version": "4.6.0",
- "dev": true
- },
- "collect-v8-coverage": {
- "version": "1.0.1",
- "dev": true
- },
- "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==",
- "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
- },
- "color-support": {
- "version": "1.1.3"
- },
- "colors": {
- "version": "1.4.0",
- "dev": true,
- "optional": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "component-emitter": {
- "version": "1.3.0",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1"
- },
- "concat-stream": {
- "version": "1.6.2",
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "console-control-strings": {
- "version": "1.1.0"
- },
- "content-disposition": {
- "version": "0.5.4",
- "requires": {
- "safe-buffer": "5.2.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1"
- }
- }
- },
- "content-type": {
- "version": "1.0.4"
- },
- "convert-source-map": {
- "version": "1.7.0",
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "cookie": {
- "version": "0.4.2"
- },
- "cookie-signature": {
- "version": "1.0.6"
- },
- "cookiejar": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
- "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
- "dev": true
- },
- "core-js": {
- "version": "3.33.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.3.tgz",
- "integrity": "sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw=="
- },
- "core-js-compat": {
- "version": "3.26.1",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4"
- }
- },
- "core-util-is": {
- "version": "1.0.2"
- },
- "cross-spawn": {
- "version": "7.0.3",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "css-select": {
- "version": "5.1.0",
- "requires": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- }
- },
- "css-what": {
- "version": "6.1.0"
- },
- "debug": {
- "version": "3.2.7",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "dedent": {
- "version": "0.7.0",
- "dev": true
- },
- "deep-is": {
- "version": "0.1.3",
- "dev": true
- },
- "deepmerge": {
- "version": "4.2.2",
- "dev": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "dev": true
- },
- "delegates": {
- "version": "1.0.0"
- },
- "denque": {
- "version": "1.4.1"
- },
- "depd": {
- "version": "2.0.0"
- },
- "destroy": {
- "version": "1.2.0"
- },
- "detect-libc": {
- "version": "2.0.1"
- },
- "detect-newline": {
- "version": "3.1.0",
- "dev": true
- },
- "dezalgo": {
- "version": "1.0.4",
- "dev": true,
- "requires": {
- "asap": "^2.0.0",
- "wrappy": "1"
- }
- },
- "diff-sequences": {
- "version": "29.3.1",
- "dev": true
- },
- "doctrine": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "dom-serializer": {
- "version": "2.0.0",
- "requires": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- }
- },
- "domelementtype": {
- "version": "2.3.0"
- },
- "domhandler": {
- "version": "5.0.3",
- "requires": {
- "domelementtype": "^2.3.0"
- }
- },
- "domutils": {
- "version": "3.0.1",
- "requires": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.1"
- }
- },
- "dotenv": {
- "version": "8.2.0"
- },
- "dotenv-flow": {
- "version": "3.2.0",
- "requires": {
- "dotenv": "^8.0.0"
- }
- },
- "ecdsa-sig-formatter": {
- "version": "1.0.11",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "ee-first": {
- "version": "1.1.1"
- },
- "electron-to-chromium": {
- "version": "1.4.284"
- },
- "emittery": {
- "version": "0.13.1",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0"
- },
- "encodeurl": {
- "version": "1.0.2"
- },
- "entities": {
- "version": "4.4.0"
- },
- "error-ex": {
- "version": "1.3.2",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "escalade": {
- "version": "3.1.1"
- },
- "escape-html": {
- "version": "1.0.3"
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
- },
- "eslint": {
- "version": "8.29.0",
- "dev": true,
- "requires": {
- "@eslint/eslintrc": "^1.3.3",
- "@humanwhocodes/config-array": "^0.11.6",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.1.1",
- "eslint-utils": "^3.0.0",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.4.0",
- "esquery": "^1.4.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.15.0",
- "grapheme-splitter": "^1.0.4",
- "ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "regexpp": "^3.2.0",
- "strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "dev": true
- },
- "debug": {
- "version": "4.3.2",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "dev": true
- },
- "find-up": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "glob-parent": {
- "version": "6.0.2",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.3"
- },
- "dependencies": {
- "is-glob": {
- "version": "4.0.3",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- }
- }
- },
- "globals": {
- "version": "13.19.0",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "js-yaml": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "optionator": {
- "version": "0.9.1",
- "dev": true,
- "requires": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- }
- }
- },
- "eslint-scope": {
- "version": "7.1.1",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- }
- },
- "eslint-utils": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^2.0.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "2.1.0",
- "dev": true
- }
- }
- },
- "eslint-visitor-keys": {
- "version": "3.3.0",
- "dev": true
- },
- "espree": {
- "version": "9.4.1",
- "dev": true,
- "requires": {
- "acorn": "^8.8.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "dev": true
- },
- "esquery": {
- "version": "1.4.0",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- }
- },
- "estraverse": {
- "version": "5.2.0",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "dev": true
- },
- "etag": {
- "version": "1.8.1"
- },
- "execa": {
- "version": "5.1.1",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- }
- },
- "exit": {
- "version": "0.1.2",
- "dev": true
- },
- "expect": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/expect-utils": "^29.3.1",
- "jest-get-type": "^29.2.0",
- "jest-matcher-utils": "^29.3.1",
- "jest-message-util": "^29.3.1",
- "jest-util": "^29.3.1"
- }
- },
- "express": {
- "version": "4.18.2",
- "requires": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "1.20.1",
- "content-disposition": "0.5.4",
- "content-type": "~1.0.4",
- "cookie": "0.5.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.2.0",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.7",
- "qs": "6.11.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "cookie": {
- "version": "0.5.0"
- },
- "debug": {
- "version": "2.6.9",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0"
- },
- "on-finished": {
- "version": "2.4.1",
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "safe-buffer": {
- "version": "5.2.1"
- }
- }
- },
- "express-handlebars": {
- "version": "6.0.2",
- "requires": {
- "glob": "^7.2.0",
- "graceful-fs": "^4.2.8",
- "handlebars": "^4.7.7"
- },
- "dependencies": {
- "glob": {
- "version": "7.2.0",
- "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"
- }
- }
- }
- },
- "express-rate-limit": {
- "version": "6.7.0",
- "requires": {}
- },
- "express-session": {
- "version": "1.17.3",
- "requires": {
- "cookie": "0.4.2",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-headers": "~1.0.2",
- "parseurl": "~1.3.3",
- "safe-buffer": "5.2.1",
- "uid-safe": "~2.1.5"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0"
- },
- "safe-buffer": {
- "version": "5.2.1"
- }
- }
- },
- "express-validator": {
- "version": "6.14.2",
- "requires": {
- "lodash": "^4.17.21",
- "validator": "^13.7.0"
- }
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "dev": true
- },
- "fast-safe-stringify": {
- "version": "2.1.1",
- "dev": true
- },
- "fast-xml-parser": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
- "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==",
- "optional": true,
- "requires": {
- "strnum": "^1.0.5"
- }
- },
- "fastq": {
- "version": "1.14.0",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "fb-watchman": {
- "version": "2.0.2",
- "dev": true,
- "requires": {
- "bser": "2.1.1"
- }
- },
- "file-entry-cache": {
- "version": "6.0.1",
- "dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "finalhandler": {
- "version": "1.2.0",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "unpipe": "~1.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0"
- },
- "on-finished": {
- "version": "2.4.1",
- "requires": {
- "ee-first": "1.1.1"
- }
- }
- }
- },
- "find-up": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat-cache": {
- "version": "3.0.4",
- "dev": true,
- "requires": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- }
- },
- "flatted": {
- "version": "3.2.2",
- "dev": true
- },
- "form-data": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "formidable": {
- "version": "2.1.1",
- "dev": true,
- "requires": {
- "dezalgo": "^1.0.4",
- "hexoid": "^1.0.0",
- "once": "^1.4.0",
- "qs": "^6.11.0"
- }
- },
- "forwarded": {
- "version": "0.2.0"
- },
- "fresh": {
- "version": "0.5.2"
- },
- "fs-minipass": {
- "version": "2.1.0",
- "requires": {
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0"
- },
- "function-bind": {
- "version": "1.1.1"
- },
- "gauge": {
- "version": "3.0.2",
- "requires": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.2",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.1",
- "object-assign": "^4.1.1",
- "signal-exit": "^3.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.2"
- }
- },
- "gensync": {
- "version": "1.0.0-beta.2"
- },
- "get-caller-file": {
- "version": "2.0.5",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.1.1",
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
- },
- "get-package-type": {
- "version": "0.1.0",
- "dev": true
- },
- "get-stdin": {
- "version": "8.0.0",
- "dev": true
- },
- "get-stream": {
- "version": "6.0.1",
- "dev": true
- },
- "glob": {
- "version": "7.1.6",
- "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",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globals": {
- "version": "11.12.0"
- },
- "graceful-fs": {
- "version": "4.2.10"
- },
- "grapheme-splitter": {
- "version": "1.0.4",
- "dev": true
- },
- "handlebars": {
- "version": "4.7.7",
- "requires": {
- "minimist": "^1.2.5",
- "neo-async": "^2.6.0",
- "source-map": "^0.6.1",
- "uglify-js": "^3.1.4",
- "wordwrap": "^1.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "3.0.0"
- },
- "has-symbols": {
- "version": "1.0.2"
- },
- "has-unicode": {
- "version": "2.0.1"
- },
- "helmet": {
- "version": "6.0.1"
- },
- "hexoid": {
- "version": "1.0.0",
- "dev": true
- },
- "html-escaper": {
- "version": "2.0.2",
- "dev": true
- },
- "htmlparser2": {
- "version": "8.0.1",
- "requires": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "entities": "^4.3.0"
- }
- },
- "http-errors": {
- "version": "2.0.0",
- "requires": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- }
- },
- "http-status-codes": {
- "version": "2.2.0"
- },
- "https-proxy-agent": {
- "version": "5.0.1",
- "requires": {
- "agent-base": "6",
- "debug": "4"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "human-signals": {
- "version": "2.1.0",
- "dev": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "requires": {
- "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": {
- "version": "5.2.1",
- "dev": true
- },
- "ignore-by-default": {
- "version": "1.0.1",
- "dev": true
- },
- "import-fresh": {
- "version": "3.3.0",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "4.0.0",
- "dev": true
- }
- }
- },
- "import-local": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4"
- },
- "ip": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
- "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
- },
- "ipaddr.js": {
- "version": "1.9.1"
- },
- "is-arrayish": {
- "version": "0.2.1",
- "dev": true
- },
- "is-binary-path": {
- "version": "2.1.0",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-core-module": {
- "version": "2.11.0",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0"
- },
- "is-generator-fn": {
- "version": "2.1.0",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "dev": true
- },
- "is-path-inside": {
- "version": "3.0.3",
- "dev": true
- },
- "is-stream": {
- "version": "2.0.1",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0"
- },
- "isexe": {
- "version": "2.0.0",
- "dev": true
- },
- "istanbul-lib-coverage": {
- "version": "3.2.0",
- "dev": true
- },
- "istanbul-lib-instrument": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
- }
- },
- "istanbul-lib-report": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "istanbul-reports": {
- "version": "3.1.5",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- }
- },
- "jest": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/core": "^29.3.1",
- "@jest/types": "^29.3.1",
- "import-local": "^3.0.2",
- "jest-cli": "^29.3.1"
- }
- },
- "jest-changed-files": {
- "version": "29.2.0",
- "dev": true,
- "requires": {
- "execa": "^5.0.0",
- "p-limit": "^3.1.0"
- }
- },
- "jest-circus": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/environment": "^29.3.1",
- "@jest/expect": "^29.3.1",
- "@jest/test-result": "^29.3.1",
- "@jest/types": "^29.3.1",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^0.7.0",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^29.3.1",
- "jest-matcher-utils": "^29.3.1",
- "jest-message-util": "^29.3.1",
- "jest-runtime": "^29.3.1",
- "jest-snapshot": "^29.3.1",
- "jest-util": "^29.3.1",
- "p-limit": "^3.1.0",
- "pretty-format": "^29.3.1",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- }
- },
- "jest-cli": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/core": "^29.3.1",
- "@jest/test-result": "^29.3.1",
- "@jest/types": "^29.3.1",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "import-local": "^3.0.2",
- "jest-config": "^29.3.1",
- "jest-util": "^29.3.1",
- "jest-validate": "^29.3.1",
- "prompts": "^2.0.1",
- "yargs": "^17.3.1"
- }
- },
- "jest-config": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.3.1",
- "@jest/types": "^29.3.1",
- "babel-jest": "^29.3.1",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-circus": "^29.3.1",
- "jest-environment-node": "^29.3.1",
- "jest-get-type": "^29.2.0",
- "jest-regex-util": "^29.2.0",
- "jest-resolve": "^29.3.1",
- "jest-runner": "^29.3.1",
- "jest-util": "^29.3.1",
- "jest-validate": "^29.3.1",
- "micromatch": "^4.0.4",
- "parse-json": "^5.2.0",
- "pretty-format": "^29.3.1",
- "slash": "^3.0.0",
- "strip-json-comments": "^3.1.1"
- }
- },
- "jest-diff": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "diff-sequences": "^29.3.1",
- "jest-get-type": "^29.2.0",
- "pretty-format": "^29.3.1"
- }
- },
- "jest-docblock": {
- "version": "29.2.0",
- "dev": true,
- "requires": {
- "detect-newline": "^3.0.0"
- }
- },
- "jest-each": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/types": "^29.3.1",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.2.0",
- "jest-util": "^29.3.1",
- "pretty-format": "^29.3.1"
- }
- },
- "jest-environment-node": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/environment": "^29.3.1",
- "@jest/fake-timers": "^29.3.1",
- "@jest/types": "^29.3.1",
- "@types/node": "*",
- "jest-mock": "^29.3.1",
- "jest-util": "^29.3.1"
- }
- },
- "jest-get-type": {
- "version": "29.2.0",
- "dev": true
- },
- "jest-haste-map": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/types": "^29.3.1",
- "@types/graceful-fs": "^4.1.3",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "fsevents": "^2.3.2",
- "graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.2.0",
- "jest-util": "^29.3.1",
- "jest-worker": "^29.3.1",
- "micromatch": "^4.0.4",
- "walker": "^1.0.8"
- }
- },
- "jest-leak-detector": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "jest-get-type": "^29.2.0",
- "pretty-format": "^29.3.1"
- }
- },
- "jest-matcher-utils": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "jest-diff": "^29.3.1",
- "jest-get-type": "^29.2.0",
- "pretty-format": "^29.3.1"
- }
- },
- "jest-message-util": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.3.1",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.3.1",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- }
- },
- "jest-mock": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/types": "^29.3.1",
- "@types/node": "*",
- "jest-util": "^29.3.1"
- }
- },
- "jest-pnp-resolver": {
- "version": "1.2.3",
- "dev": true,
- "requires": {}
- },
- "jest-regex-util": {
- "version": "29.2.0",
- "dev": true
- },
- "jest-resolve": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.3.1",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.3.1",
- "jest-validate": "^29.3.1",
- "resolve": "^1.20.0",
- "resolve.exports": "^1.1.0",
- "slash": "^3.0.0"
- }
- },
- "jest-resolve-dependencies": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "jest-regex-util": "^29.2.0",
- "jest-snapshot": "^29.3.1"
- }
- },
- "jest-runner": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/console": "^29.3.1",
- "@jest/environment": "^29.3.1",
- "@jest/test-result": "^29.3.1",
- "@jest/transform": "^29.3.1",
- "@jest/types": "^29.3.1",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "graceful-fs": "^4.2.9",
- "jest-docblock": "^29.2.0",
- "jest-environment-node": "^29.3.1",
- "jest-haste-map": "^29.3.1",
- "jest-leak-detector": "^29.3.1",
- "jest-message-util": "^29.3.1",
- "jest-resolve": "^29.3.1",
- "jest-runtime": "^29.3.1",
- "jest-util": "^29.3.1",
- "jest-watcher": "^29.3.1",
- "jest-worker": "^29.3.1",
- "p-limit": "^3.1.0",
- "source-map-support": "0.5.13"
- }
- },
- "jest-runtime": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/environment": "^29.3.1",
- "@jest/fake-timers": "^29.3.1",
- "@jest/globals": "^29.3.1",
- "@jest/source-map": "^29.2.0",
- "@jest/test-result": "^29.3.1",
- "@jest/transform": "^29.3.1",
- "@jest/types": "^29.3.1",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.3.1",
- "jest-message-util": "^29.3.1",
- "jest-mock": "^29.3.1",
- "jest-regex-util": "^29.2.0",
- "jest-resolve": "^29.3.1",
- "jest-snapshot": "^29.3.1",
- "jest-util": "^29.3.1",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0"
- }
- },
- "jest-snapshot": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@babel/core": "^7.11.6",
- "@babel/generator": "^7.7.2",
- "@babel/plugin-syntax-jsx": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
- "@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.3.1",
- "@jest/transform": "^29.3.1",
- "@jest/types": "^29.3.1",
- "@types/babel__traverse": "^7.0.6",
- "@types/prettier": "^2.1.5",
- "babel-preset-current-node-syntax": "^1.0.0",
- "chalk": "^4.0.0",
- "expect": "^29.3.1",
- "graceful-fs": "^4.2.9",
- "jest-diff": "^29.3.1",
- "jest-get-type": "^29.2.0",
- "jest-haste-map": "^29.3.1",
- "jest-matcher-utils": "^29.3.1",
- "jest-message-util": "^29.3.1",
- "jest-util": "^29.3.1",
- "natural-compare": "^1.4.0",
- "pretty-format": "^29.3.1",
- "semver": "^7.3.5"
- },
- "dependencies": {
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "jest-util": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/types": "^29.3.1",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.9",
- "picomatch": "^2.2.3"
- }
- },
- "jest-validate": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/types": "^29.3.1",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.2.0",
- "leven": "^3.1.0",
- "pretty-format": "^29.3.1"
- },
- "dependencies": {
- "camelcase": {
- "version": "6.3.0",
- "dev": true
- }
- }
- },
- "jest-watcher": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/test-result": "^29.3.1",
- "@jest/types": "^29.3.1",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "jest-util": "^29.3.1",
- "string-length": "^4.0.1"
- }
- },
- "jest-worker": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "jest-util": "^29.3.1",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "js-sdsl": {
- "version": "4.2.0",
- "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=="
- },
- "js-yaml": {
- "version": "3.14.0",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsesc": {
- "version": "2.5.2"
- },
- "json-parse-even-better-errors": {
- "version": "2.3.1",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "dev": true
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
- },
- "jsonwebtoken": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
- "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
- "requires": {
- "jws": "^3.2.2",
- "lodash": "^4.17.21",
- "ms": "^2.1.1",
- "semver": "^7.3.8"
- },
- "dependencies": {
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "jwa": {
- "version": "1.4.1",
- "requires": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "jws": {
- "version": "3.2.2",
- "requires": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "kareem": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
- "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA=="
- },
- "kleur": {
- "version": "3.0.3",
- "dev": true
- },
- "leven": {
- "version": "3.1.0",
- "dev": true
- },
- "levn": {
- "version": "0.4.1",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "lines-and-columns": {
- "version": "1.2.4",
- "dev": true
- },
- "linkedom": {
- "version": "0.14.21",
- "requires": {
- "css-select": "^5.1.0",
- "cssom": "^0.5.0",
- "html-escaper": "^3.0.3",
- "htmlparser2": "^8.0.1",
- "uhyphen": "^0.1.0"
- },
- "dependencies": {
- "cssom": {
- "version": "0.5.0"
- },
- "html-escaper": {
- "version": "3.0.3"
- }
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "lodash": {
- "version": "4.17.21"
- },
- "lodash.debounce": {
- "version": "4.0.8",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "makeerror": {
- "version": "1.0.12",
- "dev": true,
- "requires": {
- "tmpl": "1.0.5"
- }
- },
- "media-typer": {
- "version": "0.3.0"
- },
- "memory-pager": {
- "version": "1.5.0",
- "optional": true
- },
- "merge-descriptors": {
- "version": "1.0.1"
- },
- "merge-stream": {
- "version": "2.0.0",
- "dev": true
- },
- "methods": {
- "version": "1.1.2"
- },
- "micromatch": {
- "version": "4.0.5",
- "dev": true,
- "requires": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- }
- },
- "mime": {
- "version": "1.6.0"
- },
- "mime-db": {
- "version": "1.52.0"
- },
- "mime-types": {
- "version": "2.1.35",
- "requires": {
- "mime-db": "1.52.0"
- }
- },
- "mimic-fn": {
- "version": "2.1.0",
- "dev": true
- },
- "minimatch": {
- "version": "3.1.2",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.6"
- },
- "minipass": {
- "version": "4.0.0",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "minizlib": {
- "version": "2.1.2",
- "requires": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
- },
- "mkdirp": {
- "version": "0.5.6",
- "requires": {
- "minimist": "^1.2.6"
- }
- },
- "mongodb": {
- "version": "3.6.11",
- "requires": {
- "bl": "^2.2.1",
- "bson": "^1.1.4",
- "denque": "^1.4.1",
- "optional-require": "^1.0.3",
- "safe-buffer": "^5.1.2",
- "saslprep": "^1.0.0"
- }
- },
- "mongodb-connection-string-url": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
- "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
- "requires": {
- "@types/whatwg-url": "^8.2.1",
- "whatwg-url": "^11.0.0"
- },
- "dependencies": {
- "tr46": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "requires": {
- "punycode": "^2.1.1"
- }
- },
- "webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
- },
- "whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "requires": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- }
- }
- }
- },
- "mongoose": {
- "version": "6.12.3",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.12.3.tgz",
- "integrity": "sha512-MNJymaaXali7w7rHBxVUoQ3HzHHMk/7I/+yeeoSa4rUzdjZwIWQznBNvVgc0A8ghuJwsuIkb5LyLV6gSjGjWyQ==",
- "requires": {
- "bson": "^4.7.2",
- "kareem": "2.5.1",
- "mongodb": "4.17.1",
- "mpath": "0.9.0",
- "mquery": "4.0.3",
- "ms": "2.1.3",
- "sift": "16.0.1"
- },
- "dependencies": {
- "bson": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz",
- "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==",
- "requires": {
- "buffer": "^5.6.0"
- }
- },
- "mongodb": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz",
- "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==",
- "requires": {
- "@aws-sdk/credential-providers": "^3.186.0",
- "@mongodb-js/saslprep": "^1.1.0",
- "bson": "^4.7.2",
- "mongodb-connection-string-url": "^2.6.0",
- "socks": "^2.7.1"
- }
- },
- "ms": {
- "version": "2.1.3"
- }
- }
- },
- "mongoose-unique-array": {
- "version": "0.4.2",
- "requires": {}
- },
- "morgan": {
- "version": "1.10.0",
- "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": {
- "debug": {
- "version": "2.6.9",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0"
- }
- }
- },
- "mpath": {
- "version": "0.9.0"
- },
- "mquery": {
- "version": "4.0.3",
- "requires": {
- "debug": "4.x"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "ms": {
- "version": "2.1.2"
- },
- "multer": {
- "version": "1.4.5-lts.1",
- "requires": {
- "append-field": "^1.0.0",
- "busboy": "^1.0.0",
- "concat-stream": "^1.5.2",
- "mkdirp": "^0.5.4",
- "object-assign": "^4.1.1",
- "type-is": "^1.6.4",
- "xtend": "^4.0.0"
- }
- },
- "natural-compare": {
- "version": "1.4.0",
- "dev": true
- },
- "negotiator": {
- "version": "0.6.3"
- },
- "neo-async": {
- "version": "2.6.2"
- },
- "node-addon-api": {
- "version": "5.0.0"
- },
- "node-fetch": {
- "version": "2.6.7",
- "requires": {
- "whatwg-url": "^5.0.0"
- }
- },
- "node-int64": {
- "version": "0.4.0",
- "dev": true
- },
- "node-releases": {
- "version": "2.0.7"
- },
- "nodemailer": {
- "version": "6.8.0"
- },
- "nodemailer-express-handlebars": {
- "version": "5.0.0",
- "requires": {
- "express-handlebars": "^6.0.0"
- }
- },
- "nodemon": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz",
- "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==",
- "dev": true,
- "requires": {
- "chokidar": "^3.5.2",
- "debug": "^3.2.7",
- "ignore-by-default": "^1.0.1",
- "minimatch": "^3.1.2",
- "pstree.remy": "^1.1.8",
- "semver": "^7.5.3",
- "simple-update-notifier": "^2.0.0",
- "supports-color": "^5.5.0",
- "touch": "^3.1.0",
- "undefsafe": "^2.0.5"
- },
- "dependencies": {
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "nopt": {
- "version": "5.0.0",
- "requires": {
- "abbrev": "1"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "dev": true
- },
- "npm-audit-helper": {
- "version": "3.1.1",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "get-stdin": "^8.0.0",
- "lodash": "^4.17.20",
- "minimist": "^1.2.5",
- "npm-audit-report": "npm:npm-audit-report@^1.3.3",
- "npm-audit-report-v2": "npm:npm-audit-report@^2.1.4"
- },
- "dependencies": {
- "npm-audit-report-v2": {
- "version": "npm:npm-audit-report@2.1.5",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0"
- }
- }
- }
- },
- "npm-audit-report": {
- "version": "1.3.3",
- "dev": true,
- "requires": {
- "cli-table3": "^0.5.0",
- "console-control-strings": "^1.1.0"
- }
- },
- "npm-run-path": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- },
- "npmlog": {
- "version": "5.0.1",
- "requires": {
- "are-we-there-yet": "^2.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^3.0.0",
- "set-blocking": "^2.0.0"
- }
- },
- "nth-check": {
- "version": "2.1.1",
- "requires": {
- "boolbase": "^1.0.0"
- }
- },
- "object-assign": {
- "version": "4.1.1"
- },
- "object-inspect": {
- "version": "1.12.2"
- },
- "on-finished": {
- "version": "2.3.0",
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.2"
- },
- "once": {
- "version": "1.4.0",
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "5.1.2",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "optional-require": {
- "version": "1.0.3"
- },
- "p-limit": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- },
- "dependencies": {
- "p-limit": {
- "version": "2.3.0",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- }
- }
- },
- "p-try": {
- "version": "2.2.0",
- "dev": true
- },
- "parent-module": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "5.2.0",
- "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"
- }
- },
- "parseurl": {
- "version": "1.3.3"
- },
- "passport": {
- "version": "0.6.0",
- "requires": {
- "passport-strategy": "1.x.x",
- "pause": "0.0.1",
- "utils-merge": "^1.0.1"
- }
- },
- "passport-local": {
- "version": "1.0.0",
- "requires": {
- "passport-strategy": "1.x.x"
- }
- },
- "passport-strategy": {
- "version": "1.0.0"
- },
- "path-exists": {
- "version": "4.0.0",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1"
- },
- "path-key": {
- "version": "3.1.1",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7",
- "dev": true
- },
- "path-to-regexp": {
- "version": "0.1.7"
- },
- "pause": {
- "version": "0.0.1"
- },
- "picocolors": {
- "version": "1.0.0"
- },
- "picomatch": {
- "version": "2.3.1",
- "dev": true
- },
- "pirates": {
- "version": "4.0.5",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "prelude-ls": {
- "version": "1.2.1",
- "dev": true
- },
- "pretty-format": {
- "version": "29.3.1",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.0.0",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "5.2.0",
- "dev": true
- }
- }
- },
- "process-nextick-args": {
- "version": "2.0.1"
- },
- "prompts": {
- "version": "2.4.2",
- "dev": true,
- "requires": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- }
- },
- "proxy-addr": {
- "version": "2.0.7",
- "requires": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- }
- },
- "pstree.remy": {
- "version": "1.1.8",
- "dev": true
- },
- "punycode": {
- "version": "2.1.1"
- },
- "q": {
- "version": "1.5.1"
- },
- "qs": {
- "version": "6.11.0",
- "requires": {
- "side-channel": "^1.0.4"
- }
- },
- "queue-microtask": {
- "version": "1.2.3",
- "dev": true
- },
- "random-bytes": {
- "version": "1.0.0"
- },
- "range-parser": {
- "version": "1.2.1"
- },
- "rate-limit-mongo": {
- "version": "2.3.2",
- "requires": {
- "mongodb": "^3.6.7",
- "twostep": "0.4.2",
- "underscore": "1.12.1"
- }
- },
- "raw-body": {
- "version": "2.5.1",
- "requires": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
- "react-is": {
- "version": "18.2.0",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "regenerate": {
- "version": "1.4.2",
- "dev": true
- },
- "regenerate-unicode-properties": {
- "version": "10.1.0",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.2"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.11",
- "dev": true
- },
- "regenerator-transform": {
- "version": "0.15.1",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.8.4"
- }
- },
- "regexpp": {
- "version": "3.2.0",
- "dev": true
- },
- "regexpu-core": {
- "version": "5.2.2",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.1.0",
- "regjsgen": "^0.7.1",
- "regjsparser": "^0.9.1",
- "unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.1.0"
- }
- },
- "regjsgen": {
- "version": "0.7.1",
- "dev": true
- },
- "regjsparser": {
- "version": "0.9.1",
- "dev": true,
- "requires": {
- "jsesc": "~0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "dev": true
- }
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "dev": true
- },
- "resolve": {
- "version": "1.22.1",
- "dev": true,
- "requires": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "resolve-cwd": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "resolve-from": "^5.0.0"
- }
- },
- "resolve-from": {
- "version": "5.0.0",
- "dev": true
- },
- "resolve.exports": {
- "version": "1.1.0",
- "dev": true
- },
- "reusify": {
- "version": "1.0.4",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "safe-buffer": {
- "version": "5.1.2"
- },
- "safer-buffer": {
- "version": "2.1.2"
- },
- "saslprep": {
- "version": "1.0.3",
- "optional": true,
- "requires": {
- "sparse-bitfield": "^3.0.3"
- }
- },
- "semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
- },
- "send": {
- "version": "0.18.0",
- "requires": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0"
- }
- }
- },
- "ms": {
- "version": "2.1.3"
- },
- "on-finished": {
- "version": "2.4.1",
- "requires": {
- "ee-first": "1.1.1"
- }
- }
- }
- },
- "serve-static": {
- "version": "1.15.0",
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.18.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0"
- },
- "setprototypeof": {
- "version": "1.2.0"
- },
- "shebang-command": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "dev": true
- },
- "side-channel": {
- "version": "1.0.4",
- "requires": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- }
- },
- "sift": {
- "version": "16.0.1"
- },
- "signal-exit": {
- "version": "3.0.7"
- },
- "simple-update-notifier": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
- "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
- "dev": true,
- "requires": {
- "semver": "^7.5.3"
- },
- "dependencies": {
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "sisteransi": {
- "version": "1.0.5",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "dev": true
- },
- "smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
- },
- "socks": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
- "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
- "requires": {
- "ip": "^2.0.0",
- "smart-buffer": "^4.2.0"
- }
- },
- "source-map": {
- "version": "0.6.1"
- },
- "source-map-support": {
- "version": "0.5.13",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "sparse-bitfield": {
- "version": "3.0.3",
- "optional": true,
- "requires": {
- "memory-pager": "^1.0.2"
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "dev": true
- },
- "stack-utils": {
- "version": "2.0.6",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^2.0.0"
- },
- "dependencies": {
- "escape-string-regexp": {
- "version": "2.0.0",
- "dev": true
- }
- }
- },
- "statuses": {
- "version": "2.0.1"
- },
- "streamsearch": {
- "version": "1.1.0"
- },
- "string_decoder": {
- "version": "1.1.1",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "string-length": {
- "version": "4.0.2",
- "dev": true,
- "requires": {
- "char-regex": "^1.0.2",
- "strip-ansi": "^6.0.0"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-bom": {
- "version": "4.0.0",
- "dev": true
- },
- "strip-final-newline": {
- "version": "2.0.0",
- "dev": true
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "dev": true
- },
- "strnum": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
- "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
- "optional": true
- },
- "superagent": {
- "version": "8.0.6",
- "dev": true,
- "requires": {
- "component-emitter": "^1.3.0",
- "cookiejar": "^2.1.3",
- "debug": "^4.3.4",
- "fast-safe-stringify": "^2.1.1",
- "form-data": "^4.0.0",
- "formidable": "^2.1.1",
- "methods": "^1.1.2",
- "mime": "2.6.0",
- "qs": "^6.11.0",
- "semver": "^7.3.8"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "mime": {
- "version": "2.6.0",
- "dev": true
- },
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "supertest": {
- "version": "6.3.3",
- "dev": true,
- "requires": {
- "methods": "^1.1.2",
- "superagent": "^8.0.5"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "dev": true
- },
- "tar": {
- "version": "6.1.13",
- "requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^4.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "mkdirp": {
- "version": "1.0.4"
- }
- }
- },
- "test-exclude": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "dev": true
- },
- "tmpl": {
- "version": "1.0.5",
- "dev": true
- },
- "to-fast-properties": {
- "version": "2.0.0"
- },
- "to-regex-range": {
- "version": "5.0.1",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "toidentifier": {
- "version": "1.0.1"
- },
- "touch": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "nopt": "~1.0.10"
- },
- "dependencies": {
- "nopt": {
- "version": "1.0.10",
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- }
- }
- },
- "tr46": {
- "version": "0.0.3"
- },
- "tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
- "devOptional": true
- },
- "twostep": {
- "version": "0.4.2"
- },
- "type-check": {
- "version": "0.4.0",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- },
- "type-detect": {
- "version": "4.0.8",
- "dev": true
- },
- "type-fest": {
- "version": "0.20.2",
- "dev": true
- },
- "type-is": {
- "version": "1.6.18",
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- }
- },
- "typedarray": {
- "version": "0.0.6"
- },
- "uglify-js": {
- "version": "3.15.2",
- "optional": true
- },
- "uhyphen": {
- "version": "0.1.0"
- },
- "uid-safe": {
- "version": "2.1.5",
- "requires": {
- "random-bytes": "~1.0.0"
- }
- },
- "undefsafe": {
- "version": "2.0.5",
- "dev": true
- },
- "underscore": {
- "version": "1.12.1"
- },
- "unicode-canonical-property-names-ecmascript": {
- "version": "2.0.0",
- "dev": true
- },
- "unicode-match-property-ecmascript": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- }
- },
- "unicode-match-property-value-ecmascript": {
- "version": "2.1.0",
- "dev": true
- },
- "unicode-property-aliases-ecmascript": {
- "version": "2.1.0",
- "dev": true
- },
- "unpipe": {
- "version": "1.0.0"
- },
- "update-browserslist-db": {
- "version": "1.0.10",
- "requires": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- }
- },
- "uri-js": {
- "version": "4.4.1",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2"
- },
- "utils-merge": {
- "version": "1.0.1"
- },
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "optional": true
- },
- "v8-to-istanbul": {
- "version": "9.0.1",
- "dev": true,
- "requires": {
- "@jridgewell/trace-mapping": "^0.3.12",
- "@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0"
- }
- },
- "validator": {
- "version": "13.7.0"
- },
- "vary": {
- "version": "1.1.2"
- },
- "walker": {
- "version": "1.0.8",
- "dev": true,
- "requires": {
- "makeerror": "1.0.12"
- }
- },
- "webidl-conversions": {
- "version": "3.0.1"
- },
- "whatwg-url": {
- "version": "5.0.0",
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "wide-align": {
- "version": "1.1.5",
- "requires": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
- }
- },
- "word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true
- },
- "wordwrap": {
- "version": "1.0.0"
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "dev": true
- }
- }
- },
- "wrappy": {
- "version": "1.0.2"
- },
- "write-file-atomic": {
- "version": "4.0.2",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.7"
- }
- },
- "xtend": {
- "version": "4.0.2"
- },
- "y18n": {
- "version": "5.0.8",
- "dev": true
- },
- "yallist": {
- "version": "4.0.0"
- },
- "yargs": {
- "version": "17.6.2",
- "dev": true,
- "requires": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- }
- },
- "yargs-parser": {
- "version": "21.1.1",
- "dev": true
- },
- "yocto-queue": {
- "version": "0.1.0",
- "dev": true
- }
}
}
diff --git a/package.json b/package.json
index f40ee259..86e2371e 100644
--- a/package.json
+++ b/package.json
@@ -39,6 +39,7 @@
"bcrypt": "^5.1.0",
"cloudinary": "^1.32.0",
"dotenv-flow": "^3.2.0",
+ "expect": "^29.5.0",
"express": "^4.18.2",
"express-rate-limit": "^6.7.0",
"express-session": "^1.17.3",
diff --git a/src/api/middleware/application.js b/src/api/middleware/application.js
new file mode 100644
index 00000000..66c181f7
--- /dev/null
+++ b/src/api/middleware/application.js
@@ -0,0 +1,13 @@
+import CompanyApplication, { CompanyApplicationRules } from "../../models/CompanyApplication.js";
+import { APIError, ErrorTypes } from "./errorHandler.js";
+import { StatusCodes as HTTPStatus } from "http-status-codes/build/cjs/status-codes.js";
+import { VALIDATION_LINK_EXPIRATION } from "../../models/constants/ApplicationStatus.js";
+import { SECOND_IN_MS } from "../../models/constants/TimeConstants.js";
+
+export const exceededCreationTimeLimit = async (req, res, next) => {
+ const application = await CompanyApplication.findOne({ email: req.body.email, isVerified: false });
+ if (application !== null && Date.now() < application.submittedAt.getTime() + (VALIDATION_LINK_EXPIRATION * SECOND_IN_MS)) {
+ return next(new APIError(HTTPStatus.FORBIDDEN, ErrorTypes.FORBIDDEN, CompanyApplicationRules.APPLICATION_RECENTLY_CREATED.msg));
+ }
+ return next();
+};
diff --git a/src/api/middleware/auth.js b/src/api/middleware/auth.js
index a469b1e5..65cd2355 100644
--- a/src/api/middleware/auth.js
+++ b/src/api/middleware/auth.js
@@ -78,15 +78,26 @@ export const hasAdminPrivileges = async (req, res, next) => {
};
export const validToken = (req, res, next) => {
- const decoded = verifyAndDecodeToken(req.params.token, config.jwt_secret);
+ try {
+ const decoded = verifyAndDecodeToken(req.params.token, config.jwt_secret);
- if (!decoded) {
- return next(new APIError(HTTPStatus.FORBIDDEN, ErrorTypes.FORBIDDEN, ValidationReasons.INVALID_TOKEN));
- }
+ storeInLocals(req, {
+ token: decoded,
+ });
- storeInLocals(req, {
- token: decoded,
- });
+ return next();
+ } catch (jwtErr) {
+ if (jwtErr.name === "TokenExpiredError") {
+ return next(new APIError(HTTPStatus.FORBIDDEN, ErrorTypes.FORBIDDEN, ValidationReasons.EXPIRED_TOKEN));
+ } else {
+ return next(new APIError(HTTPStatus.NOT_FOUND, ErrorTypes.FORBIDDEN, ValidationReasons.INVALID_TOKEN));
+ }
+ }
+};
+export const hasCompanyAccess = (companyId) => (req, res, next) => {
+ if (!req.user?.company?._id.equals(companyId)) {
+ return next(new APIError(HTTPStatus.UNAUTHORIZED, ErrorTypes.FORBIDDEN, ValidationReasons.MUST_BE_ADMIN));
+ }
return next();
};
diff --git a/src/api/middleware/validators/application.js b/src/api/middleware/validators/application.js
index 59cd85c9..c78203e2 100644
--- a/src/api/middleware/validators/application.js
+++ b/src/api/middleware/validators/application.js
@@ -112,3 +112,13 @@ export const search = useExpressValidators([
.custom(sortByParamValidator)
.customSanitizer(parseSortByField),
]);
+
+
+export const token = param("token", ValidationReasons.DEFAULT)
+ .exists().withMessage(ValidationReasons.REQUIRED).bail()
+ .isString().withMessage(ValidationReasons.STRING)
+ .trim();
+
+export const finishValidation = useExpressValidators([
+ token.exists().withMessage(ValidationReasons.NON_EXISTING_APPLICATION).bail(),
+]);
diff --git a/src/api/middleware/validators/company.js b/src/api/middleware/validators/company.js
index de202522..4648eedf 100644
--- a/src/api/middleware/validators/company.js
+++ b/src/api/middleware/validators/company.js
@@ -132,3 +132,7 @@ export const edit = useExpressValidators([
body("logo", ValidationReasons.DEFAULT)
.optional()
]);
+
+export const getApplication = useExpressValidators([
+ existingCompanyParamValidator,
+]);
diff --git a/src/api/middleware/validators/validationReasons.js b/src/api/middleware/validators/validationReasons.js
index 7a38a793..99066a19 100644
--- a/src/api/middleware/validators/validationReasons.js
+++ b/src/api/middleware/validators/validationReasons.js
@@ -41,6 +41,7 @@ const ValidationReasons = Object.freeze({
OFFER_EDIT_PERIOD_OVER: (value) => `offer-edit-period-over:${value}-hours`,
INVALID_QUERY_TOKEN: "invalid-query-token",
INVALID_TOKEN: "invalid-token",
+ EXPIRED_TOKEN: "expired-token",
JOB_MIN_DURATION_NOT_SPECIFIED: "job-max-duration-requires-job-min-duration",
REGISTRATION_FINISHED: "registration-already-finished",
REGISTRATION_NOT_FINISHED: "registration-not-finished-yet",
@@ -48,8 +49,10 @@ const ValidationReasons = Object.freeze({
IMAGE_FORMAT: "formats-supported-png-jpeg-jpg",
OFFER_BLOCKED_ADMIN: "offer-blocked-by-admin",
OFFER_HIDDEN: "offer-is-hidden",
+ NON_EXISTING_APPLICATION: "application-does-not-exist",
FILE_TOO_LARGE: (max) => `file-cant-be-larger-than-${max}MB`,
MUST_BE_GREATER_THAN_OR_EQUAL_TO: (field) => `must-be-greater-than-or-equal-to:${field}`,
+
});
export default ValidationReasons;
diff --git a/src/api/routes/application.js b/src/api/routes/application.js
index d129b452..a2acbf3b 100644
--- a/src/api/routes/application.js
+++ b/src/api/routes/application.js
@@ -1,7 +1,10 @@
import { Router } from "express";
-
import * as validators from "../middleware/validators/application.js";
-import ApplicationService from "../../services/application.js";
+import ApplicationService, { CompanyApplicationAlreadyValidated } from "../../services/application.js";
+import * as applicationMiddleware from "../middleware/application.js";
+import { validToken } from "../middleware/auth.js";
+import { StatusCodes as HTTPStatus } from "http-status-codes/build/cjs/status-codes.js";
+import { buildErrorResponse, ErrorTypes } from "../middleware/errorHandler.js";
const router = Router();
@@ -11,15 +14,34 @@ export default (app) => {
/**
* Creates a new Company Application
*/
- router.post("/", validators.create, async (req, res, next) => {
-
+ router.post("/", validators.create, applicationMiddleware.exceededCreationTimeLimit, async (req, res, next) => {
try {
- // This is safe since the service is destructuring the passed object and the fields have been validated
- const application = await (new ApplicationService()).create(req.body);
+ const applicationService = new ApplicationService();
+ const application = await applicationService.updateOrCreate({ email: req.body.email }, req.body);
return res.json(application);
} catch (err) {
console.error(err);
return next(err);
}
});
+
+ /**
+ * Validates application
+ */
+ router.post("/:token/validate", validators.finishValidation, validToken, async (req, res, next) => {
+ const { _id: id } = req.locals.token;
+ try {
+ await new ApplicationService().validateApplication(id);
+ return res.status(HTTPStatus.OK).json({});
+ } catch (err) {
+ if (err instanceof CompanyApplicationAlreadyValidated) {
+ return res
+ .status(HTTPStatus.CONFLICT)
+ .json(buildErrorResponse(ErrorTypes.FORBIDDEN, [{ msg: err.message }]));
+ }
+ console.error(err);
+ return next(err);
+ }
+ });
+
};
diff --git a/src/api/routes/company.js b/src/api/routes/company.js
index fa1ff69b..1c815697 100644
--- a/src/api/routes/company.js
+++ b/src/api/routes/company.js
@@ -17,6 +17,9 @@ import * as fileMiddleware from "../middleware/files.js";
import OfferService from "../../services/offer.js";
import AccountService from "../../services/account.js";
import Offer from "../../models/Offer.js";
+import Account from "../../models/Account.js";
+import CompanyApplication from "../../models/CompanyApplication.js";
+
const router = Router();
@@ -254,4 +257,27 @@ export default (app) => {
}
}
);
+
+ /**
+ * Get the application of a company with its id
+ */
+ router.get("/:companyId/application",
+ or([
+ authMiddleware.isAdmin,
+ authMiddleware.isGod,
+ (req, res, next) => authMiddleware.hasCompanyAccess(req.params.companyId)(req, res, next),
+ ], { status_code: HTTPStatus.UNAUTHORIZED, error_code: ErrorTypes.FORBIDDEN, msg: ValidationReasons.INSUFFICIENT_PERMISSIONS }),
+ validators.getApplication,
+
+ async (req, res, next) => {
+
+ try {
+ const account = await Account.findOne({ "company": req.params.companyId });
+ const application = (await CompanyApplication.findOne({ "email": account.email })).toObject();
+ return res.json(application);
+ } catch (err) {
+ console.error(err);
+ return next(err);
+ }
+ });
};
diff --git a/src/api/routes/offer.js b/src/api/routes/offer.js
index 0e8b3db7..252d6b8c 100644
--- a/src/api/routes/offer.js
+++ b/src/api/routes/offer.js
@@ -11,6 +11,9 @@ import ValidationReasons from "../middleware/validators/validationReasons.js";
import { or, when } from "../middleware/utils.js";
import OfferConstants from "../../models/constants/Offer.js";
import * as companyValidators from "../middleware/validators/company.js";
+import CompanyApplication from "../../models/CompanyApplication.js";
+import Account from "../../models/Account.js";
+import ApplicationStatus from "../../models/constants/ApplicationStatus.js";
const router = Router();
@@ -98,14 +101,14 @@ export default (app) => {
validators.offersDateSanitizers,
async (req, res, next) => {
try {
-
+ const account = await Account.findOne({ company: req.targetOwner });
+ const application = await CompanyApplication.findOne({ email: account.email });
const params = {
...req.body,
- owner: req.targetOwner
+ owner: req.targetOwner,
+ isPending: application.state !== ApplicationStatus.APPROVED,
};
-
const offer = await (new OfferService()).create(params);
-
return res.json(offer);
} catch (err) {
console.error(err);
diff --git a/src/api/routes/review.js b/src/api/routes/review.js
index 27b459ea..89965f98 100644
--- a/src/api/routes/review.js
+++ b/src/api/routes/review.js
@@ -5,11 +5,12 @@ import * as authMiddleware from "../middleware/auth.js";
import * as companyApplicationValidators from "../middleware/validators/application.js";
import ApplicationService, {
CompanyApplicationAlreadyReviewed,
- CompanyApplicationEmailAlreadyInUse,
- CompanyApplicationNotFound
+ CompanyApplicationNotFound, CompanyApplicationUnverified
} from "../../services/application.js";
import { buildErrorResponse, ErrorTypes } from "../middleware/errorHandler.js";
+import Company from "../../models/Company.js";
+import CompanyService from "../../services/company.js";
const router = Router();
@@ -82,7 +83,9 @@ export default (app) => {
async (req, res, next) => {
try {
- const { account } = await (new ApplicationService()).approve(req.params.id);
+ const account = await (new ApplicationService()).approve(req.params.id);
+ const company = await Company.findOne({ _id: account.company });
+ await (new CompanyService()).releaseOffers(company._id);
return res.json(account);
} catch (err) {
console.error(err);
@@ -92,7 +95,7 @@ export default (app) => {
.json(buildErrorResponse(ErrorTypes.VALIDATION_ERROR, [{ msg: err.message }]));
} else if (
err instanceof CompanyApplicationAlreadyReviewed ||
- err instanceof CompanyApplicationEmailAlreadyInUse
+ err instanceof CompanyApplicationUnverified
) {
return res
.status(HTTPStatus.CONFLICT)
@@ -121,7 +124,10 @@ export default (app) => {
return res
.status(HTTPStatus.NOT_FOUND)
.json(buildErrorResponse(ErrorTypes.VALIDATION_ERROR, [{ msg: err.message }]));
- } else if (err instanceof CompanyApplicationAlreadyReviewed) {
+ } else if (
+ err instanceof CompanyApplicationAlreadyReviewed ||
+ err instanceof CompanyApplicationUnverified
+ ) {
return res
.status(HTTPStatus.CONFLICT)
.json(buildErrorResponse(ErrorTypes.VALIDATION_ERROR, [{ msg: err.message }]));
diff --git a/src/config/env.js b/src/config/env.js
index b910e901..78a36ffa 100644
--- a/src/config/env.js
+++ b/src/config/env.js
@@ -23,6 +23,7 @@ export default Object.freeze({
session_secret: process.env.SESSION_SECRET,
jwt_secret: process.env.JWT_SECRET,
password_recovery_link: process.env.PASSWORD_RECOVERY_LINK,
+ application_confirmation_link: process.env.APPLICATION_CONFIRMATION_LINK,
port: process.env.PORT,
god_token: process.env.GOD_TOKEN,
test_log_requests: JSON.parse(process.env.TEST_LOG_REQUESTS),
diff --git a/src/email-templates/approval_notification.handlebars b/src/email-templates/approval_notification.handlebars
index cc7c3806..cb4d8aa8 100644
--- a/src/email-templates/approval_notification.handlebars
+++ b/src/email-templates/approval_notification.handlebars
@@ -1,9 +1,8 @@
-
Glad to have you on board, {{companyName}}!
-We decided to accept your application, and you are just one step away from being able to use NIJobs!
-Now, you can log in to NIJobs and complete your registration.
-Once you finish, you'll be able to place some work offers!
+We are delighted to have you on board, {{companyName}}!
+We are pleased to inform you that your application has been accepted, and all the offers you have created are now accessible to the public!
+From now on, any offer you create will be immediately available to the public audience.
-If you need anything else, don't hesitate to contact us!
+If you have any further questions, don't hesitate to contact us at nijobs@aefeup.pt!
Sincerely,
-NIJobs team at NIAEFEUP
\ No newline at end of file
+NIJobs team at NIAEFEUP
diff --git a/src/email-templates/companyApplicationApproval.js b/src/email-templates/companyApplicationApproval.js
index 626aba37..078677d4 100644
--- a/src/email-templates/companyApplicationApproval.js
+++ b/src/email-templates/companyApplicationApproval.js
@@ -8,6 +8,11 @@ export const NEW_COMPANY_APPLICATION_COMPANY = (companyName, applicationId) => (
template: "new_company_application_company",
context: { companyName, applicationId },
});
+export const APPLICATION_CONFIRMATION = (link) => ({
+ subject: "Confirm your NIJobs application",
+ template: "confirm-application",
+ context: { link },
+});
export const APPROVAL_NOTIFICATION = (companyName) => ({
subject: "Welcome to NIJobs!",
template: "approval_notification",
diff --git a/src/email-templates/confirm-application.handlebars b/src/email-templates/confirm-application.handlebars
new file mode 100644
index 00000000..4dae304b
--- /dev/null
+++ b/src/email-templates/confirm-application.handlebars
@@ -0,0 +1,6 @@
+Confirm your NIJobs application
+We have received your application successfully!
+To complete the process, please click on this link. Kindly note that the link will expire in 10 minutes.
+If you did not make this request or require any further assistance, please reach out to us at nijobs@aefeup.pt!
+Sincerely,
+NIJobs team at NIAEFEUP
diff --git a/src/email-templates/new_company_application_company.handlebars b/src/email-templates/new_company_application_company.handlebars
index 8966ef10..9d2c616a 100644
--- a/src/email-templates/new_company_application_company.handlebars
+++ b/src/email-templates/new_company_application_company.handlebars
@@ -1,8 +1,11 @@
-We have successfully received your application!
-We will now review your application, and in case you're approved, you will receive another email with further instructions in order to complete your registration.
-Your Application ID is {{applicationId}} and you registered {{companyName}}
+Your application has been validated!
+ We will now review your application.
+ In the meantime, you can complete your registration by logging into your account and begin creating offers.
+ Please note that your offers will remain hidden from the public until your company is approved.
+Your Application ID is {{applicationId}} and you registered {{companyName}}.
+Once you are approved, you will receive an email notification, and your offers will become visible to the public.
If you did not request this or if you need anything else, don't hesitate to contact us at nijobs@aefeup.pt!
Sincerely,
-NIJobs team at NIAEFEUP
\ No newline at end of file
+NIJobs team at NIAEFEUP
diff --git a/src/lib/token.js b/src/lib/token.js
index 171906bf..be8ed801 100644
--- a/src/lib/token.js
+++ b/src/lib/token.js
@@ -6,10 +6,4 @@ export const generateToken = (data, secret, expiresInSeconds) => jwt.sign(
{ expiresIn: `${expiresInSeconds} seconds`, algorithm: "HS256" }
);
-export const verifyAndDecodeToken = (token, secret) => {
- try {
- return jwt.verify(token, secret, { algorithm: "HS256" });
- } catch (err) {
- return null;
- }
-};
+export const verifyAndDecodeToken = (token, secret) => jwt.verify(token, secret, { algorithm: "HS256" });
diff --git a/src/models/Account.js b/src/models/Account.js
index 2430a4e7..b3dd067d 100644
--- a/src/models/Account.js
+++ b/src/models/Account.js
@@ -35,6 +35,7 @@ const AccountSchema = new Schema({
},
},
+
});
AccountSchema.methods.validatePassword = async function(password) {
diff --git a/src/models/CompanyApplication.js b/src/models/CompanyApplication.js
index 766f8962..36ac5f4c 100644
--- a/src/models/CompanyApplication.js
+++ b/src/models/CompanyApplication.js
@@ -2,6 +2,8 @@ import mongoose from "mongoose";
import ApplicationStatus from "./constants/ApplicationStatus.js";
import CompanyApplicationConstants from "./constants/CompanyApplication.js";
import { checkDuplicatedEmail } from "../api/middleware/validators/validatorUtils.js";
+import { CompanyApplicationAlreadyReviewed, CompanyApplicationUnverified } from "../services/application.js";
+
const { Schema } = mongoose;
@@ -33,6 +35,15 @@ export const CompanyApplicationRules = Object.freeze({
CANNOT_REVIEW_TWICE: {
msg: "company-application-already-reviewed",
},
+ APPLICATION_RECENTLY_CREATED: {
+ msg: "company-application-recently-created",
+ },
+ APPLICATION_ALREADY_VALIDATED: {
+ msg: "application-already-validated",
+ },
+ MUST_BE_VERIFIED: {
+ msg: "application-must-be-verified",
+ }
});
export const CompanyApplicationProps = {
@@ -80,6 +91,10 @@ export const CompanyApplicationProps = {
return !!this.rejectedAt;
},
},
+ isVerified: {
+ type: Boolean,
+ default: true,
+ },
};
const CompanyApplicationSchema = new Schema(CompanyApplicationProps);
@@ -87,7 +102,8 @@ const CompanyApplicationSchema = new Schema(CompanyApplicationProps);
CompanyApplicationSchema.index({ companyName: "text" });
CompanyApplicationSchema.virtual("state").get(function() {
- if (!this.approvedAt && !this.rejectedAt) return ApplicationStatus.PENDING;
+ if (!this.isVerified) return ApplicationStatus.UNVERIFIED;
+ else if (!this.approvedAt && !this.rejectedAt) return ApplicationStatus.PENDING;
else if (this.approvedAt) return ApplicationStatus.APPROVED;
else return ApplicationStatus.REJECTED;
});
@@ -117,7 +133,7 @@ export const applicationUniqueness = async (email) => {
const existingApplications = await CompanyApplication.find({ email });
if (existingApplications.some((application) =>
application.state === ApplicationStatus.PENDING ||
- application.state === ApplicationStatus.APPROVED)
+ application.state === ApplicationStatus.APPROVED)
) {
throw new Error(CompanyApplicationRules.ONLY_ONE_APPLICATION_ACTIVE_PER_EMAIL.msg);
}
@@ -136,20 +152,35 @@ async function validateSingleActiveApplication(value) {
export const isApprovable = (application) => {
+ if (application.state === ApplicationStatus.UNVERIFIED)
+ throw new CompanyApplicationUnverified(CompanyApplicationRules.MUST_BE_VERIFIED.msg);
+
if (application.state !== ApplicationStatus.PENDING)
- throw new Error(CompanyApplicationRules.CANNOT_REVIEW_TWICE.msg);
+ throw new CompanyApplicationAlreadyReviewed(CompanyApplicationRules.CANNOT_REVIEW_TWICE.msg);
return true;
};
export const isRejectable = (application) => {
+ if (application.state === ApplicationStatus.UNVERIFIED)
+ throw new CompanyApplicationUnverified(CompanyApplicationRules.MUST_BE_VERIFIED.msg);
+
if (application.state !== ApplicationStatus.PENDING)
- throw new Error(CompanyApplicationRules.CANNOT_REVIEW_TWICE.msg);
+ throw new CompanyApplicationAlreadyReviewed(CompanyApplicationRules.CANNOT_REVIEW_TWICE.msg);
return true;
};
+
+CompanyApplicationSchema.methods.verifyCompany = function() {
+ if (this.isVerified)
+ throw new Error(CompanyApplicationRules.APPLICATION_ALREADY_VALIDATED.msg);
+
+ this.isVerified = true;
+ return this.save({ validateModifiedOnly: true });
+};
+
CompanyApplicationSchema.methods.approve = function() {
isApprovable(this);
this.approvedAt = Date.now();
diff --git a/src/models/Offer.js b/src/models/Offer.js
index f8b53fd9..51645b3f 100644
--- a/src/models/Offer.js
+++ b/src/models/Offer.js
@@ -83,6 +83,10 @@ const OfferSchema = new Schema({
type: Boolean,
default: false
},
+ isPending: {
+ type: Boolean,
+ default: false,
+ },
isArchived: {
type: Boolean,
default: false
@@ -161,6 +165,10 @@ OfferSchema.query.current = function() {
return this.where(this.model.filterCurrent());
};
+OfferSchema.query.notPending = function() {
+ return this.where({ isPending: false });
+};
+
/**
* Currently active and non-hidden Offers
*/
diff --git a/src/models/constants/ApplicationStatus.js b/src/models/constants/ApplicationStatus.js
index a6f504ca..72f35baf 100644
--- a/src/models/constants/ApplicationStatus.js
+++ b/src/models/constants/ApplicationStatus.js
@@ -1,7 +1,10 @@
const ApplicationStatus = Object.freeze({
+ "UNVERIFIED": "UNVERIFIED",
"PENDING": "PENDING",
"APPROVED": "APPROVED",
"REJECTED": "REJECTED",
});
export default ApplicationStatus;
+
+export const VALIDATION_LINK_EXPIRATION = 600;
diff --git a/src/services/account.js b/src/services/account.js
index bb9572bb..b66ef251 100644
--- a/src/services/account.js
+++ b/src/services/account.js
@@ -29,16 +29,11 @@ class AccountService {
const company = await Company.create({ name: companyName });
- const account = await Account.create({
+ await Account.create({
email,
password,
company,
});
-
- return {
- email: account.email,
- companyName: account.company.name,
- };
}
async updatePassword(email, password) {
diff --git a/src/services/application.js b/src/services/application.js
index abc0bc8c..5bb60d90 100644
--- a/src/services/application.js
+++ b/src/services/application.js
@@ -1,5 +1,7 @@
import CompanyApplication, { CompanyApplicationRules } from "../models/CompanyApplication.js";
+import { generateToken } from "../lib/token.js";
import hash from "../lib/passwordHashing.js";
+import { VALIDATION_LINK_EXPIRATION } from "../models/constants/ApplicationStatus.js";
import AccountService from "./account.js";
import EmailService from "../lib/emailService.js";
import {
@@ -7,8 +9,11 @@ import {
NEW_COMPANY_APPLICATION_COMPANY,
APPROVAL_NOTIFICATION,
REJECTION_NOTIFICATION,
+ APPLICATION_CONFIRMATION
} from "../email-templates/companyApplicationApproval.js";
import config from "../config/env.js";
+import Account from "../models/Account.js";
+
export class CompanyApplicationNotFound extends Error {
constructor(msg) {
@@ -28,6 +33,17 @@ export class CompanyApplicationEmailAlreadyInUse extends Error {
}
}
+export class CompanyApplicationAlreadyValidated extends Error {
+ constructor(msg) {
+ super(msg);
+ }
+}
+export class CompanyApplicationUnverified extends Error {
+ constructor(msg) {
+ super(msg);
+ }
+}
+
class CompanyApplicationService {
async create({
@@ -39,18 +55,13 @@ class CompanyApplicationService {
companyName,
motivation,
submittedAt: Date.now(),
+ isVerified: false,
});
-
+ const link = this.buildConfirmationLink(application._id);
await EmailService.sendMail({
- to: config.mail_from,
- ...NEW_COMPANY_APPLICATION_ADMINS(application.email, companyName, motivation)
+ to: email,
+ ...APPLICATION_CONFIRMATION(link),
});
-
- await EmailService.sendMail({
- to: application.email,
- ...NEW_COMPANY_APPLICATION_COMPANY(companyName, application._id.toString())
- });
-
return application.toObject();
}
@@ -172,31 +183,18 @@ class CompanyApplicationService {
const application = await CompanyApplication.findById(id, {}, options);
if (!application) throw new CompanyApplicationNotFound(CompanyApplicationRules.MUST_EXIST_TO_APPROVE.msg);
try {
- application.approve();
- } catch (e) {
- console.error(e);
- throw new CompanyApplicationAlreadyReviewed(CompanyApplicationRules.CANNOT_REVIEW_TWICE.msg);
- }
-
- try {
- const account = await (new AccountService()).registerCompany(application.email, application.password, application.companyName);
-
+ await application.approve();
await EmailService.sendMail({
to: application.email,
...APPROVAL_NOTIFICATION(application.companyName),
});
-
- return { application, account };
-
} catch (err) {
- console.error(`Error creating account for approved Company Application, rolling back approval of ${application._id}`, err);
- application.undoApproval();
- if (err.name === "MongoServerError" && /E11000\s.*collection:\s.*\.accounts.*/.test(err.errmsg)) {
- throw new CompanyApplicationEmailAlreadyInUse(CompanyApplicationRules.EMAIL_ALREADY_IN_USE.msg);
- } else {
- throw err;
- }
+ if (!(err instanceof CompanyApplicationUnverified || err instanceof CompanyApplicationAlreadyReviewed))
+ await application.undoApproval();
+ console.error("Error while approving company ", err.msg);
+ throw err;
}
+ return Account.findOne({ email: application.email });
}
async reject(id, reason, options) {
@@ -213,9 +211,53 @@ class CompanyApplicationService {
return application.toObject();
} catch (e) {
console.error(e);
- throw new CompanyApplicationAlreadyReviewed(CompanyApplicationRules.CANNOT_REVIEW_TWICE.msg);
+ throw e;
}
}
+
+ buildConfirmationLink(id) {
+ const token = generateToken({ _id: id }, config.jwt_secret, VALIDATION_LINK_EXPIRATION);
+ return `${config.application_confirmation_link}${token}/validate`;
+ }
+
+ async validateApplication(id) {
+ const application = await this.findById(id);
+
+ try {
+ application.verifyCompany();
+ await EmailService.sendMail({
+ to: config.mail_from,
+ ...NEW_COMPANY_APPLICATION_ADMINS(application.email, application.companyName, application.motivation)
+ });
+
+ await EmailService.sendMail({
+ to: application.email,
+ ...NEW_COMPANY_APPLICATION_COMPANY(application.companyName, application._id.toString())
+ });
+ } catch (err) {
+ console.error(err);
+ throw new CompanyApplicationAlreadyValidated(CompanyApplicationRules.APPLICATION_ALREADY_VALIDATED.msg);
+ }
+
+ try {
+ await (new AccountService()).registerCompany(application.email, application.password, application.companyName);
+ } catch (err) {
+ console.error("Error creating account for validated Company Application", err);
+ throw err;
+
+ }
+ }
+
+ async updateOrCreate(query, update) {
+ let application = await CompanyApplication.findOne(query);
+ if (!application) application = await this.create(update);
+ else application = await CompanyApplication.findOneAndUpdate(query, update, { new: true });
+ return application;
+ }
+ async deleteApplications(email) {
+ await CompanyApplication.deleteMany({ email: email, isVerified: false });
+ }
}
+
export default CompanyApplicationService;
diff --git a/src/services/company.js b/src/services/company.js
index c3e42490..5fa8a8bd 100644
--- a/src/services/company.js
+++ b/src/services/company.js
@@ -8,6 +8,8 @@ import {
import EmailService from "../lib/emailService.js";
import Account from "../models/Account.js";
import Company from "../models/Company.js";
+import Offer from "../models/Offer.js";
+
class CompanyService {
getOffersInTimePeriod(owner, publishDate, publishEndDate, OfferModel) {
return OfferModel.find({
@@ -196,6 +198,16 @@ class CompanyService {
throw err;
}
}
+
+
+ async releaseOffers(companyId) {
+ try {
+ await Offer.updateMany({ owner: companyId }, { $set: { "isPending": false } });
+ } catch (err) {
+ console.error(err);
+ throw err;
+ }
+ }
}
export default CompanyService;
diff --git a/src/services/offer.js b/src/services/offer.js
index e0991cc4..aa318514 100644
--- a/src/services/offer.js
+++ b/src/services/offer.js
@@ -35,6 +35,7 @@ class OfferService {
fields,
technologies,
isHidden,
+ isPending,
owner,
location,
coordinates,
@@ -58,6 +59,7 @@ class OfferService {
fields,
technologies,
isHidden,
+ isPending,
owner,
ownerName,
ownerLogo,
@@ -386,6 +388,7 @@ class OfferService {
selectSearchOffers(offers, showHidden, showAdminReason) {
offers.current();
+ offers.notPending();
if (!showHidden) offers.withoutHidden();
if (!showAdminReason) offers.select("-adminReason");
diff --git a/test/end-to-end/application.js b/test/end-to-end/application.js
index 28fb316f..37c4afab 100644
--- a/test/end-to-end/application.js
+++ b/test/end-to-end/application.js
@@ -1,4 +1,3 @@
-import EmailService from "../../src/lib/emailService";
import { StatusCodes as HTTPStatus } from "http-status-codes";
import CompanyApplication, { CompanyApplicationRules } from "../../src/models/CompanyApplication";
import Account from "../../src/models/Account";
@@ -7,9 +6,6 @@ import ValidationReasons from "../../src/api/middleware/validators/validationRea
import CompanyApplicationConstants from "../../src/models/constants/CompanyApplication";
import AccountConstants from "../../src/models/constants/Account";
import CompanyConstants from "../../src/models/constants/Company";
-import { NEW_COMPANY_APPLICATION_ADMINS, NEW_COMPANY_APPLICATION_COMPANY } from "../../src/email-templates/companyApplicationApproval";
-import config from "../../src/config/env";
-
describe("Company application endpoint test", () => {
describe("POST /application", () => {
@@ -87,39 +83,6 @@ describe("Company application endpoint test", () => {
expect(created_application).toHaveProperty("submittedAt", mockCurrentDate);
});
- test("Should send an email to admin and to company user", async () => {
- const application = {
- email: "test2@test.com",
- password: "password123",
- companyName: "Testing company",
- motivation: "This company has a very valid motivation because otherwise, the tests would not exist.",
- };
- const res = await request()
- .post("/apply/company")
- .send(application);
-
- expect(res.status).toBe(HTTPStatus.OK);
-
- const adminEmailOptions = NEW_COMPANY_APPLICATION_ADMINS(
- application.email, application.companyName, application.motivation);
- const companyEmailOptions = NEW_COMPANY_APPLICATION_COMPANY(
- application.companyName, res.body._id);
-
- expect(EmailService.sendMail).toHaveBeenCalledWith(expect.objectContaining({
- subject: adminEmailOptions.subject,
- to: config.mail_from,
- template: adminEmailOptions.template,
- context: adminEmailOptions.context,
- }));
-
- expect(EmailService.sendMail).toHaveBeenCalledWith(expect.objectContaining({
- subject: companyEmailOptions.subject,
- to: application.email,
- template: companyEmailOptions.template,
- context: { ...companyEmailOptions.context },
- }));
- });
-
describe("Invalid input", () => {
test("Should fail while using an email with an associated Account", async () => {
const application = {
diff --git a/test/end-to-end/applications/company/:id/approve.js b/test/end-to-end/applications/company/:id/approve.js
new file mode 100644
index 00000000..a09822e8
--- /dev/null
+++ b/test/end-to-end/applications/company/:id/approve.js
@@ -0,0 +1,237 @@
+import AccountService from "../../../../../src/services/account.js";
+jest.mock("../../../../../src/lib/emailService");
+import { StatusCodes } from "http-status-codes";
+import { APPROVAL_NOTIFICATION } from "../../../../../src/email-templates/companyApplicationApproval";
+import EmailService, { EmailService as EmailServiceClass } from "../../../../../src/lib/emailService";
+import hash from "../../../../../src/lib/passwordHashing";
+import Account from "../../../../../src/models/Account";
+import CompanyApplication, { CompanyApplicationRules } from "../../../../../src/models/CompanyApplication";
+import ApplicationStatus from "../../../../../src/models/constants/ApplicationStatus";
+jest.spyOn(EmailServiceClass.prototype, "verifyConnection").mockImplementation(() => Promise.resolve());
+
+import mongoose from "mongoose";
+import ValidationReasons from "../../../../../src/api/middleware/validators/validationReasons.js";
+
+const { ObjectId } = mongoose.Types;
+
+describe("POST /applications/company/:id/approve", () => {
+
+ const test_agent = agent();
+
+ const test_user_admin = {
+ email: "admin@email.com",
+ password: "password123",
+ };
+
+ beforeAll(async () => {
+ await CompanyApplication.deleteMany({});
+
+ await Account.deleteMany({});
+ await Account.create({
+ email: test_user_admin.email,
+ password: await hash(test_user_admin.password),
+ isAdmin: true
+ });
+ });
+
+ afterAll(async () => {
+ await Account.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ });
+
+ beforeEach(async () => {
+ // default login
+ await test_agent
+ .post("/auth/login")
+ .send(test_user_admin)
+ .expect(StatusCodes.OK);
+ });
+
+ describe("ID Validation", () => {
+ test("Should fail if trying to approve not existent application", async () => {
+
+ const id = new ObjectId();
+
+ await test_agent
+ .post(`/applications/company/${id}/approve`)
+ .expect(StatusCodes.NOT_FOUND);
+
+ });
+ });
+
+ describe("Without previous applications", () => {
+
+ const pendingApplication1Data = {
+ email: "pending1@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ };
+ const pendingApplication2Data = {
+ email: "pending2@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ };
+ const pendingApplication3Data = {
+ email: "pending3@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ };
+ const unverifiedApplicationData = {
+ email: "unverified@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ isVerified: false
+ };
+
+ let pendingApplication1, pendingApplication2, pendingApplication3, unverifiedApplication;
+
+ beforeAll(async () => {
+ await CompanyApplication.deleteMany({});
+
+ [
+ pendingApplication1,
+ pendingApplication2,
+ pendingApplication3,
+ unverifiedApplication
+
+ ] = await CompanyApplication.create([
+ pendingApplication1Data,
+ pendingApplication2Data,
+ pendingApplication3Data,
+ unverifiedApplicationData
+ ]);
+
+ await (new AccountService()).registerCompany(
+ pendingApplication1Data.email,
+ pendingApplication1Data.password,
+ pendingApplication1Data.companyName
+ );
+
+ await (new AccountService()).registerCompany(
+ pendingApplication2Data.email,
+ pendingApplication2Data.password,
+ pendingApplication2Data.companyName
+ );
+ await (new AccountService()).registerCompany(
+ pendingApplication3Data.email,
+ pendingApplication3Data.password,
+ pendingApplication3Data.companyName
+ );
+ });
+
+ afterAll(async () => {
+ await CompanyApplication.deleteMany({});
+ });
+
+ test("Should approve pending application", async () => {
+
+ const res = await test_agent
+ .post(`/applications/company/${pendingApplication1._id}/approve`)
+ .expect(StatusCodes.OK);
+
+ expect(res.body).toHaveProperty("email", pendingApplication1Data.email);
+ const approved_application = await CompanyApplication.findById(pendingApplication1._id);
+ expect(approved_application.state).toBe(ApplicationStatus.APPROVED);
+ });
+
+ test("Should send approval email to company email", async () => {
+
+ await test_agent
+ .post(`/applications/company/${pendingApplication2._id}/approve`)
+ .expect(StatusCodes.OK);
+
+ const emailOptions = APPROVAL_NOTIFICATION(pendingApplication2.companyName);
+
+ expect(EmailService.sendMail).toHaveBeenCalledWith({
+ subject: emailOptions.subject,
+ to: pendingApplication2.email,
+ template: emailOptions.template,
+ context: emailOptions.context,
+ });
+ });
+
+ test("Should fail to approve unverified application", async () => {
+
+ const res = await test_agent
+ .post(`/applications/company/${unverifiedApplication._id}/approve`)
+ .expect(StatusCodes.CONFLICT);
+
+ expect(res.body.errors).toContainEqual(CompanyApplicationRules.MUST_BE_VERIFIED);
+ const approved_application = await CompanyApplication.findById(unverifiedApplication._id);
+ expect(approved_application.state).toBe(ApplicationStatus.UNVERIFIED);
+ });
+ test("if email fails to be sent application should not be approved", async () => {
+ jest.spyOn(EmailServiceClass.prototype, "sendMail").mockImplementation(() => {
+ throw Error();
+ });
+ const res = await test_agent
+ .post(`/applications/company/${pendingApplication3._id}/approve`)
+ .expect(StatusCodes.INTERNAL_SERVER_ERROR);
+
+ jest.spyOn(EmailServiceClass.prototype, "sendMail").mockClear();
+ expect(res.body.errors).toContainEqual({ msg: ValidationReasons.UNKNOWN });
+ const pending_application = await CompanyApplication.findById(pendingApplication3._id);
+ expect(pending_application.state).toBe(ApplicationStatus.PENDING);
+ });
+ });
+
+ describe("With previous applications", () => {
+
+ const approvedApplicationData = {
+ email: "approved@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ approvedAt: new Date("2019-11-26"),
+ rejectReason: null
+ };
+ const rejectedApplicationData = {
+ email: "rejected@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ rejectedAt: new Date("2019-11-26"),
+ rejectReason: "test-reason"
+ };
+
+ let approvedApplication, rejectedApplication;
+
+ beforeAll(async () => {
+ await CompanyApplication.deleteMany({});
+
+ [
+ approvedApplication,
+ rejectedApplication,
+ ] = await CompanyApplication.create([
+ approvedApplicationData,
+ rejectedApplicationData,
+ ]);
+ });
+
+ afterAll(async () => {
+ await CompanyApplication.deleteMany({});
+ });
+
+ test("Should fail if trying to approve already approved application", async () => {
+ await test_agent
+ .post(`/applications/company/${approvedApplication._id}/approve`)
+ .expect(StatusCodes.CONFLICT);
+ });
+
+ test("Should fail if trying to approve already rejected application", async () => {
+ await test_agent
+ .post(`/applications/company/${rejectedApplication._id}/approve`)
+ .expect(StatusCodes.CONFLICT);
+ });
+ });
+});
diff --git a/test/end-to-end/applications/company/:id/reject.js b/test/end-to-end/applications/company/:id/reject.js
new file mode 100644
index 00000000..1bad155d
--- /dev/null
+++ b/test/end-to-end/applications/company/:id/reject.js
@@ -0,0 +1,204 @@
+jest.mock("../../../../../src/lib/emailService");
+import EmailService, { EmailService as EmailServiceClass } from "../../../../../src/lib/emailService";
+jest.spyOn(EmailServiceClass.prototype, "verifyConnection").mockImplementation(() => Promise.resolve());
+import { StatusCodes } from "http-status-codes";
+import Account from "../../../../../src/models/Account";
+import CompanyApplication, { CompanyApplicationRules } from "../../../../../src/models/CompanyApplication";
+import hash from "../../../../../src/lib/passwordHashing";
+import { REJECTION_NOTIFICATION } from "../../../../../src/email-templates/companyApplicationApproval";
+
+import mongoose from "mongoose";
+
+const { ObjectId } = mongoose.Types;
+
+describe("POST /applications/company/:id/reject", () => {
+
+ const test_agent = agent();
+
+ const test_user_admin = {
+ email: "admin@email.com",
+ password: "password123",
+ };
+
+ beforeAll(async () => {
+ await CompanyApplication.deleteMany({});
+
+ await Account.deleteMany({});
+ await Account.create({
+ email: test_user_admin.email,
+ password: await hash(test_user_admin.password),
+ isAdmin: true
+ });
+ });
+
+ afterAll(async () => {
+ await Account.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ });
+
+ beforeEach(async () => {
+ // default login
+ await test_agent
+ .post("/auth/login")
+ .send(test_user_admin)
+ .expect(StatusCodes.OK);
+ });
+
+ describe("ID Validation", () => {
+ test("Should fail if trying to reject non existent application", async () => {
+
+ const id = new ObjectId();
+
+ await test_agent
+ .post(`/applications/company/${id}/reject`)
+ .send({ rejectReason: "Some reason which is valid" })
+ .expect(StatusCodes.NOT_FOUND);
+ });
+ });
+
+ describe("Without previous applications", () => {
+
+ const pendingApplication1Data = {
+ email: "pending1@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ };
+ const pendingApplication2Data = {
+ email: "pending2@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ };
+
+ const unverifiedApplicationData = {
+ email: "unverified@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ isVerified: false
+ };
+
+ let pendingApplication1, pendingApplication2, unverifiedApplication;
+
+ beforeAll(async () => {
+ await CompanyApplication.deleteMany({});
+
+ [
+ pendingApplication1,
+ pendingApplication2,
+ unverifiedApplication,
+ ] = await CompanyApplication.create([
+ pendingApplication1Data,
+ pendingApplication2Data,
+ unverifiedApplicationData,
+ ]);
+ });
+
+ afterAll(async () => {
+ await CompanyApplication.deleteMany({});
+ });
+
+ test("Should fail if no rejectReason provided", async () => {
+ const res = await test_agent
+ .post(`/applications/company/${pendingApplication1._id}/reject`);
+
+ expect(res.status).toBe(StatusCodes.UNPROCESSABLE_ENTITY);
+ expect(res.body.errors[0]).toStrictEqual({ location: "body", msg: "required", param: "rejectReason" });
+ });
+
+ test("Should fail if application is not verified", async () => {
+ const res = await test_agent
+ .post(`/applications/company/${unverifiedApplication._id}/reject`)
+ .send({ rejectReason: "Some reason which is valid" })
+ .expect(StatusCodes.CONFLICT);
+
+ expect(res.body.errors).toContainEqual(CompanyApplicationRules.MUST_BE_VERIFIED);
+ });
+
+ test("Should reject pending application", async () => {
+
+ const res = await test_agent
+ .post(`/applications/company/${pendingApplication1._id}/reject`)
+ .send({ rejectReason: "Some reason which is valid" })
+ .expect(StatusCodes.OK);
+
+ expect(res.body).toHaveProperty("email", pendingApplication1Data.email);
+ expect(res.body).toHaveProperty("companyName", pendingApplication1Data.companyName);
+ });
+
+ test("Should send rejection email to company email", async () => {
+
+ await test_agent
+ .post(`/applications/company/${pendingApplication2._id}/reject`)
+ .send({ rejectReason: "Some reason which is valid" })
+ .expect(StatusCodes.OK);
+
+ const emailOptions = REJECTION_NOTIFICATION(pendingApplication2.companyName);
+
+ expect(EmailService.sendMail).toHaveBeenCalledWith({
+ subject: emailOptions.subject,
+ to: pendingApplication2.email,
+ template: emailOptions.template,
+ context: emailOptions.context,
+ });
+ });
+ });
+
+ describe("With previous applications", () => {
+
+ const approvedApplicationData = {
+ email: "approved@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ approvedAt: new Date("2019-11-26"),
+ rejectReason: null
+ };
+ const rejectedApplicationData = {
+ email: "rejected@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ submittedAt: new Date("2019-11-25"),
+ rejectedAt: new Date("2019-11-26"),
+ rejectReason: "test-reason"
+ };
+
+ let approvedApplication, rejectedApplication;
+
+ beforeAll(async () => {
+ await CompanyApplication.deleteMany({});
+
+ [
+ approvedApplication,
+ rejectedApplication,
+ ] = await CompanyApplication.create([
+ approvedApplicationData,
+ rejectedApplicationData,
+ ]);
+ });
+
+ afterAll(async () => {
+ await CompanyApplication.deleteMany({});
+ });
+
+ test("Should fail if trying to reject already approved application", async () => {
+ await test_agent
+ .post(`/applications/company/${approvedApplication._id}/reject`)
+ .send({ rejectReason: "Some reason which is valid" })
+ .expect(StatusCodes.CONFLICT);
+ });
+
+ test("Should fail if trying to reject already rejected application", async () => {
+ await test_agent
+ .post(`/applications/company/${rejectedApplication._id}/reject`)
+ .send({ rejectReason: "Some reason which is valid" })
+ .expect(StatusCodes.CONFLICT);
+ });
+ });
+});
diff --git a/test/end-to-end/apply/company/:token/validate.js b/test/end-to-end/apply/company/:token/validate.js
new file mode 100644
index 00000000..fe6af34b
--- /dev/null
+++ b/test/end-to-end/apply/company/:token/validate.js
@@ -0,0 +1,135 @@
+import EmailService from "../../../../../src/lib/emailService";
+import { StatusCodes } from "http-status-codes";
+import CompanyApplication from "../../../../../src/models/CompanyApplication.js";
+import Account from "../../../../../src/models/Account.js";
+import { NEW_COMPANY_APPLICATION_ADMINS, NEW_COMPANY_APPLICATION_COMPANY }
+ from "../../../../../src/email-templates/companyApplicationApproval";
+import config from "../../../../../src/config/env";
+import * as token from "../../../../../src/lib/token.js";
+import Company from "../../../../../src/models/Company";
+import { VALIDATION_LINK_EXPIRATION } from "../../../../../src/models/constants/ApplicationStatus.js";
+import { SECOND_IN_MS } from "../../../../../src/models/constants/TimeConstants.js";
+const generateTokenSpy = jest.spyOn(token, "generateToken");
+jest.spyOn(token, "verifyAndDecodeToken");
+
+describe("POST /apply/company/:token/validate", () => {
+
+ describe("Validating application", () => {
+ const application = {
+ email: "test@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation because otherwise, the tests would not exist.",
+ };
+
+ beforeAll(async () => {
+ await CompanyApplication.deleteMany({});
+ await Account.deleteMany({});
+ });
+
+ afterEach(async () => {
+ await CompanyApplication.deleteMany({});
+ await Account.deleteMany({});
+ await Company.deleteMany({});
+ });
+
+ test("Should validate application and create its account and company", async () => {
+ await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.OK);
+
+ const generatedToken = generateTokenSpy.mock.results[0].value;
+
+ await request()
+ .post(`/apply/company/${generatedToken}/validate`)
+ .expect(StatusCodes.OK);
+
+ const applicationUpdated = await CompanyApplication.findOne({ application });
+ const account = await Account.findOne({ email: application.email });
+
+ expect(account).not.toBeNull();
+ expect(Company.findOne({ _id: account.company })).toBeTruthy();
+ expect(applicationUpdated.state).toBe("PENDING");
+ });
+
+ test("Should send an email to the company and one to the NIJobs team", async () => {
+ const res = await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.OK);
+
+ const generatedToken = generateTokenSpy.mock.results[0].value;
+
+ await request()
+ .post(`/apply/company/${generatedToken}/validate`)
+ .expect(StatusCodes.OK);
+
+ const adminEmailOptions = NEW_COMPANY_APPLICATION_ADMINS(
+ application.email,
+ application.companyName,
+ application.motivation
+ );
+
+ const companyEmailOptions = NEW_COMPANY_APPLICATION_COMPANY(
+ application.companyName,
+ res.body.id
+ );
+
+ expect(EmailService.sendMail).toHaveBeenNthCalledWith(2, expect.objectContaining({
+ subject: adminEmailOptions.subject,
+ to: config.mail_from,
+ template: adminEmailOptions.template,
+ context: { ...adminEmailOptions.context },
+ }));
+
+ expect(EmailService.sendMail).toHaveBeenNthCalledWith(3, expect.objectContaining({
+ subject: companyEmailOptions.subject,
+ to: application.email,
+ template: companyEmailOptions.template,
+ context: { ...companyEmailOptions.context },
+ }));
+ });
+
+ test("Should fail if application is already validated", async () => {
+ await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.OK);
+
+ const generatedToken = generateTokenSpy.mock.results[0].value;
+
+ await request()
+ .post(`/apply/company/${generatedToken}/validate`)
+ .expect(StatusCodes.OK);
+
+ await request()
+ .post(`/apply/company/${generatedToken}/validate`)
+ .expect(StatusCodes.CONFLICT);
+ });
+
+ test("Should fail if token does not exist", async () => {
+ await request()
+ .post(`/apply/company/${0}/validate`)
+ .expect(StatusCodes.NOT_FOUND);
+
+ });
+
+ test("Should fail if link has expired", async () => {
+ await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.OK);
+
+ const generatedToken = generateTokenSpy.mock.results[0].value;
+ const RealDateNow = Date.now;
+ const mockCurrentDate = new Date(Date.now() + (VALIDATION_LINK_EXPIRATION * SECOND_IN_MS));
+ Date.now = () => mockCurrentDate;
+ await request()
+ .post(`/apply/company/${generatedToken}/validate`)
+ .expect(StatusCodes.FORBIDDEN);
+
+ Date.now = RealDateNow;
+ });
+ });
+});
diff --git a/test/end-to-end/apply/company/index.js b/test/end-to-end/apply/company/index.js
new file mode 100644
index 00000000..28c36163
--- /dev/null
+++ b/test/end-to-end/apply/company/index.js
@@ -0,0 +1,242 @@
+import EmailService from "../../../../src/lib/emailService";
+import { StatusCodes } from "http-status-codes";
+import CompanyApplication, { CompanyApplicationRules } from "../../../../src/models/CompanyApplication";
+import Account from "../../../../src/models/Account";
+import ValidatorTester from "../../../utils/ValidatorTester";
+import ValidationReasons from "../../../../src/api/middleware/validators/validationReasons";
+import CompanyApplicationConstants from "../../../../src/models/constants/CompanyApplication";
+import AccountConstants from "../../../../src/models/constants/Account";
+import CompanyConstants from "../../../../src/models/constants/Company";
+import { APPLICATION_CONFIRMATION }
+ from "../../../../src/email-templates/companyApplicationApproval";
+import config from "../../../../src/config/env";
+import * as token from "../../../../src/lib/token.js";
+import env from "../../../../src/config/env.js";
+import { VALIDATION_LINK_EXPIRATION } from "../../../../src/models/constants/ApplicationStatus.js";
+import mongoose from "mongoose";
+import { SECOND_IN_MS } from "../../../../src/models/constants/TimeConstants.js";
+const generateTokenSpy = jest.spyOn(token, "generateToken");
+jest.spyOn(token, "verifyAndDecodeToken");
+
+describe("POST /apply/company", () => {
+ describe("Input Validation", () => {
+ const EndpointValidatorTester = ValidatorTester((params) => request().post("/apply/company").send(params));
+ const BodyValidatorTester = EndpointValidatorTester("body");
+
+ describe("email", () => {
+ const FieldValidatorTester = BodyValidatorTester("email");
+ FieldValidatorTester.isRequired();
+ FieldValidatorTester.mustBeEmail();
+ });
+
+ describe("password", () => {
+ const FieldValidatorTester = BodyValidatorTester("password");
+ FieldValidatorTester.isRequired();
+ FieldValidatorTester.mustBeString();
+ FieldValidatorTester.hasMinLength(AccountConstants.password.min_length);
+ FieldValidatorTester.hasNumber();
+ });
+
+ describe("motivation", () => {
+ const FieldValidatorTester = BodyValidatorTester("motivation");
+ FieldValidatorTester.isRequired();
+ FieldValidatorTester.mustBeString();
+ FieldValidatorTester.hasMinLength(CompanyApplicationConstants.motivation.min_length);
+ FieldValidatorTester.hasMaxLength(CompanyApplicationConstants.motivation.max_length);
+ });
+
+ describe("companyName", () => {
+ const FieldValidatorTester = BodyValidatorTester("companyName");
+ FieldValidatorTester.isRequired();
+ FieldValidatorTester.mustBeString();
+ FieldValidatorTester.hasMinLength(CompanyConstants.companyName.min_length);
+ FieldValidatorTester.hasMaxLength(CompanyConstants.companyName.max_length);
+ });
+ });
+
+ describe("Without any existing application and accounts", () => {
+
+ const RealDateNow = Date.now;
+ const mockCurrentDate = new Date("2019-11-23");
+
+ beforeAll(async () => {
+ await CompanyApplication.deleteMany({});
+ await Account.deleteMany({});
+
+ Date.now = () => mockCurrentDate.getTime();
+ });
+
+ afterAll(async () => {
+ await CompanyApplication.deleteMany({});
+ await Account.deleteMany({});
+
+ Date.now = RealDateNow;
+ });
+
+ test("Valid creation", async () => {
+ const application = {
+ email: "test@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation because otherwise, the tests would not exist.",
+ };
+ const res = await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.OK);
+
+ // eslint-disable-next-line no-unused-vars
+ const { password, ...rest } = application;
+ expect(res.body).toMatchObject(rest);
+ });
+
+ test("Should send an email to company user after creating application", async () => {
+ const application = {
+ email: "test2@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation because otherwise, the tests would not exist.",
+ };
+
+ const res = await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.OK);
+
+ expect(token.generateToken).toHaveBeenCalledWith(
+ { _id: mongoose.Types.ObjectId(res.body.id) }, env.jwt_secret, VALIDATION_LINK_EXPIRATION
+ );
+
+ const generatedToken = generateTokenSpy.mock.results[0].value;
+
+ const companyEmailOptions = APPLICATION_CONFIRMATION(
+ `${config.application_confirmation_link}${generatedToken}/validate`
+ );
+
+ expect(EmailService.sendMail).toHaveBeenCalledWith(expect.objectContaining({
+ subject: companyEmailOptions.subject,
+ to: application.email,
+ template: companyEmailOptions.template,
+ context: { ...companyEmailOptions.context },
+ }));
+ });
+
+ test("Should update old application if new one is created after 10 minutes", async () => {
+ const application = {
+ email: "test3@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ };
+ const updated_application = {
+ email: "test3@test.com",
+ password: "password123",
+ companyName: "Updated Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ };
+
+ const res1 = await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.OK);
+
+ const TempRealDate = Date.now;
+ const tenMinAfter = new Date(Date.now() + (VALIDATION_LINK_EXPIRATION * SECOND_IN_MS));
+ Date.now = () => tenMinAfter.getTime();
+
+ const res2 = await request()
+ .post("/apply/company")
+ .send(updated_application)
+ .expect(StatusCodes.OK);
+
+ expect(await CompanyApplication.findOne({ _id: res1.body._id })).toBeTruthy();
+ expect(res1.body.id).toBe(res2.body.id);
+ expect(res2.body.companyName).toBe(updated_application.companyName);
+
+ Date.now = TempRealDate;
+ });
+
+
+ describe("Invalid input", () => {
+
+ const application = {
+ email: "test2@test.com",
+ password: "password123",
+ companyName: "Testing company",
+ motivation: "This company has a very valid motivation, because otherwise the tests would not exist.",
+ };
+
+ beforeAll(async () => {
+ await Account.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ });
+
+ afterAll(async () => {
+ await Account.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ });
+
+ test("Should fail while using an email with an associated Account", async () => {
+
+ await Account.create({
+ email: application.email,
+ password: application.password,
+ isAdmin: true,
+ });
+
+ const res = await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.UNPROCESSABLE_ENTITY);
+
+ expect(res.body.errors).toContainEqual({
+ "location": "body",
+ "msg": ValidationReasons.ALREADY_EXISTS("email"),
+ "param": "email",
+ "value": application.email,
+ });
+ });
+
+ test("Should fail while using an email with an associated application that was not rejected", async () => {
+
+ // Guarantees that the company application will succeed regarding account rules
+ await Account.deleteOne({ email: application.email });
+
+ // Existing Application - Default `Pending` state
+ await CompanyApplication.create({
+ ...application,
+ submittedAt: Date.now(),
+ });
+
+ const res = await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.UNPROCESSABLE_ENTITY);
+
+ expect(res.body.errors).toContainEqual({
+ "location": "body",
+ "msg": CompanyApplicationRules.ONLY_ONE_APPLICATION_ACTIVE_PER_EMAIL.msg,
+ "param": "email",
+ "value": application.email,
+ });
+ });
+ test("Should fail while using an email associated with an unverified application 10 minutes before its creation", async () => {
+ await Account.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.OK);
+
+ const res = await request()
+ .post("/apply/company")
+ .send(application)
+ .expect(StatusCodes.FORBIDDEN);
+
+ expect(res.body.errors).toContainEqual({
+ "msg": CompanyApplicationRules.APPLICATION_RECENTLY_CREATED.msg,
+ });
+ });
+ });
+ });
+});
diff --git a/test/end-to-end/auth.js b/test/end-to-end/auth.js
index 3d005b60..601f82ce 100644
--- a/test/end-to-end/auth.js
+++ b/test/end-to-end/auth.js
@@ -145,7 +145,6 @@ describe("Login endpoint test", () => {
email: "user@gmail.com",
password: "password",
});
-
expect(res.status).toBe(HTTPStatus.UNAUTHORIZED);
});
@@ -159,7 +158,7 @@ describe("Login endpoint test", () => {
expect(res.status).toBe(HTTPStatus.OK);
});
- test("should return the informations of the logged in user (admin)", async () => {
+ test("should return the information of the logged in user (admin)", async () => {
await test_agent
.post("/auth/login")
@@ -175,7 +174,7 @@ describe("Login endpoint test", () => {
expect(res.body).not.toHaveProperty("data.company");
});
- test("should return the informations of the logged in user (company)", async () => {
+ test("should return the information of the logged in user (company)", async () => {
await test_agent
.post("/auth/login")
.send(test_user_company);
@@ -192,7 +191,7 @@ describe("Login endpoint test", () => {
));
});
- test("should be successful when loging out the current user", async () => {
+ test("should be successful when logging out the current user", async () => {
const res = await test_agent
.delete("/auth/login")
.send();
@@ -287,7 +286,7 @@ describe("Password recovery endpoint test", () => {
const res = await request()
.get("/auth/recover/token/confirm");
- expect(res.status).toBe(HTTPStatus.FORBIDDEN);
+ expect(res.status).toBe(HTTPStatus.NOT_FOUND);
expect(res.body).toHaveProperty("errors");
expect(res.body.errors[0]).toHaveProperty("msg", ValidationReasons.INVALID_TOKEN);
});
@@ -328,7 +327,7 @@ describe("Password recovery endpoint test", () => {
expect(res.status).toBe(HTTPStatus.FORBIDDEN);
expect(res.body).toHaveProperty("errors");
- expect(res.body.errors[0]).toHaveProperty("msg", ValidationReasons.INVALID_TOKEN);
+ expect(res.body.errors[0]).toHaveProperty("msg", ValidationReasons.EXPIRED_TOKEN);
Date.now = realTime;
});
@@ -340,7 +339,7 @@ describe("Password recovery endpoint test", () => {
.post("/auth/recover/token/confirm")
.send({ password: newPassword });
- expect(res.status).toBe(HTTPStatus.FORBIDDEN);
+ expect(res.status).toBe(HTTPStatus.NOT_FOUND);
expect(res.body).toHaveProperty("errors");
expect(res.body.errors[0]).toHaveProperty("msg", ValidationReasons.INVALID_TOKEN);
});
@@ -383,7 +382,7 @@ describe("Password recovery endpoint test", () => {
expect(res.status).toBe(HTTPStatus.FORBIDDEN);
expect(res.body).toHaveProperty("errors");
- expect(res.body.errors[0]).toHaveProperty("msg", ValidationReasons.INVALID_TOKEN);
+ expect(res.body.errors[0]).toHaveProperty("msg", ValidationReasons.EXPIRED_TOKEN);
Date.now = realTime;
});
diff --git a/test/end-to-end/auth/recover/:token/confirm.js b/test/end-to-end/auth/recover/:token/confirm.js
new file mode 100644
index 00000000..2125fd5d
--- /dev/null
+++ b/test/end-to-end/auth/recover/:token/confirm.js
@@ -0,0 +1,188 @@
+import { StatusCodes } from "http-status-codes";
+import Account from "../../../../../src/models/Account";
+import ValidatorTester from "../../../../utils/ValidatorTester";
+import ValidationReasons from "../../../../../src/api/middleware/validators/validationReasons";
+import hash from "../../../../../src/lib/passwordHashing";
+import AccountConstants, { RECOVERY_LINK_EXPIRATION } from "../../../../../src/models/constants/Account";
+import * as token from "../../../../../src/lib/token";
+import env from "../../../../../src/config/env";
+import { SECOND_IN_MS } from "../../../../../src/models/constants/TimeConstants";
+import { generateToken } from "../../../../../src/lib/token";
+
+const generateTokenSpy = jest.spyOn(token, "generateToken");
+jest.spyOn(token, "verifyAndDecodeToken");
+
+describe("GET /auth/recover/:token/confirm", () => {
+
+ const test_account = {
+ email: "recover_email@gmail.com",
+ password: "password123",
+ };
+
+ beforeEach(async () => {
+ await Account.deleteMany({ email: test_account.email });
+
+ await Account.create({
+ email: test_account.email,
+ password: await hash(test_account.password),
+ isAdmin: true,
+ });
+
+ jest.clearAllMocks();
+ });
+
+ test("should fail if invalid token", async () => {
+ const res = await request()
+ .get("/auth/recover/token/confirm");
+
+ expect(res.status).toBe(StatusCodes.NOT_FOUND);
+ expect(res.body).toHaveProperty("errors");
+ expect(res.body.errors[0]).toHaveProperty("msg", ValidationReasons.INVALID_TOKEN);
+ });
+
+ test("should accept if valid token", async () => {
+ let res = await request()
+ .post("/auth/recover/request")
+ .send({ email: test_account.email });
+
+ expect(token.generateToken).toHaveBeenCalledWith({ email: test_account.email }, env.jwt_secret, RECOVERY_LINK_EXPIRATION);
+
+ const generatedToken = generateTokenSpy.mock.results[0].value;
+ expect(res.status).toBe(StatusCodes.OK);
+
+ res = await request()
+ .get(`/auth/recover/${generatedToken}/confirm`);
+
+ expect(res.status).toBe(StatusCodes.OK);
+ });
+
+ test("should fail if valid token expired", async () => {
+ let res = await request()
+ .post("/auth/recover/request")
+ .send({ email: test_account.email });
+
+ expect(token.generateToken).toHaveBeenCalledWith({ email: test_account.email }, env.jwt_secret, RECOVERY_LINK_EXPIRATION);
+
+ const generatedToken = generateTokenSpy.mock.results[0].value;
+ expect(res.status).toBe(StatusCodes.OK);
+
+
+ const realTime = Date.now;
+ const mockDate = Date.now() + (RECOVERY_LINK_EXPIRATION * SECOND_IN_MS);
+ Date.now = () => mockDate;
+
+ res = await request()
+ .get(`/auth/recover/${generatedToken}/confirm`);
+
+ expect(res.status).toBe(StatusCodes.FORBIDDEN);
+ expect(res.body).toHaveProperty("errors");
+ expect(res.body.errors[0]).toHaveProperty("msg", ValidationReasons.EXPIRED_TOKEN);
+
+ Date.now = realTime;
+ });
+});
+
+describe("POST /auth/recover/:token/confirm", () => {
+
+ const test_account = {
+ email: "recover_email@gmail.com",
+ password: "password123",
+ };
+
+ const newPassword = "new_password_123";
+
+ beforeEach(async () => {
+ await Account.deleteMany({ email: test_account.email });
+
+ await Account.create({
+ email: test_account.email,
+ password: await hash(test_account.password),
+ isAdmin: true,
+ });
+
+ jest.clearAllMocks();
+ });
+
+ afterAll(async () => {
+ await Account.deleteMany({});
+ });
+
+ describe("Input Validation", () => {
+ describe("password", () => {
+ let generatedToken;
+
+ beforeAll(async () => {
+ await request()
+ .post("/auth/recover/request")
+ .send({ email: test_account.email }).expect(StatusCodes.OK);
+
+ expect(token.generateToken).toHaveBeenCalledWith({ email: test_account.email }, env.jwt_secret, RECOVERY_LINK_EXPIRATION);
+
+ generatedToken = generateTokenSpy.mock.results[0].value;
+ });
+
+ const EndpointValidatorTester =
+ ValidatorTester((params) => request().post(`/auth/recover/${generatedToken}/confirm`).send(params));
+ const BodyValidatorTester = EndpointValidatorTester("body");
+ const FieldValidatorTester = BodyValidatorTester("password");
+ FieldValidatorTester.isRequired();
+ FieldValidatorTester.mustBeString();
+ FieldValidatorTester.hasMinLength(AccountConstants.password.min_length);
+ FieldValidatorTester.hasNumber();
+ });
+ });
+
+ test("should fail if invalid token", async () => {
+ const res = await request()
+ .post("/auth/recover/token/confirm")
+ .send({ password: newPassword });
+
+ expect(res.status).toBe(StatusCodes.NOT_FOUND);
+ expect(res.body).toHaveProperty("errors");
+ expect(res.body.errors[0]).toHaveProperty("msg", ValidationReasons.INVALID_TOKEN);
+ });
+
+ test("should accept if valid token", async () => {
+ const generatedToken = generateToken({ email: test_account.email }, env.jwt_secret, RECOVERY_LINK_EXPIRATION);
+
+ const res = await request()
+ .post(`/auth/recover/${generatedToken}/confirm`)
+ .send({ password: newPassword });
+
+ expect(res.status).toBe(StatusCodes.OK);
+ });
+
+ test("should fail if valid token expired", async () => {
+
+ const generatedToken = generateToken({ email: test_account.email }, env.jwt_secret, RECOVERY_LINK_EXPIRATION);
+
+ const realTime = Date.now;
+ const mockDate = Date.now() + (RECOVERY_LINK_EXPIRATION * SECOND_IN_MS);
+ Date.now = () => mockDate;
+
+ const res = await request()
+ .post(`/auth/recover/${generatedToken}/confirm`)
+ .send({ password: newPassword });
+
+ expect(res.status).toBe(StatusCodes.FORBIDDEN);
+ expect(res.body).toHaveProperty("errors");
+ expect(res.body.errors[0]).toHaveProperty("msg", ValidationReasons.EXPIRED_TOKEN);
+
+ Date.now = realTime;
+ });
+
+ test("should succeed to complete the whole password recovery process", async () => {
+ const generatedToken = generateToken({ email: test_account.email }, env.jwt_secret, RECOVERY_LINK_EXPIRATION);
+
+ await request()
+ .post(`/auth/recover/${generatedToken}/confirm`)
+ .send({ password: newPassword })
+ .expect(StatusCodes.OK);
+
+ await request()
+ .post("/auth/login")
+ .send({ email: test_account.email, password: newPassword })
+ .expect(StatusCodes.OK);
+
+ });
+});
diff --git a/test/end-to-end/company/:companyId/application.js b/test/end-to-end/company/:companyId/application.js
new file mode 100644
index 00000000..23458d93
--- /dev/null
+++ b/test/end-to-end/company/:companyId/application.js
@@ -0,0 +1,173 @@
+import { StatusCodes } from "http-status-codes";
+import CompanyApplication from "../../../../src/models/CompanyApplication";
+import Account from "../../../../src/models/Account";
+import Company from "../../../../src/models/Company.js";
+import AccountService from "../../../../src/services/account.js";
+import CompanyApplicationService from "../../../../src/services/application.js";
+import withGodToken from "../../../utils/GodToken.js";
+import hash from "../../../../src/lib/passwordHashing.js";
+
+
+describe("GET /company/:companyId/application", () => {
+ const test_agent = agent();
+
+ let companyId;
+
+ const test_user_company1 = {
+ email: "company1@email.com",
+ password: "password123",
+ };
+
+ describe("Testing permissions", () => {
+
+ const test_user_admin = {
+ email: "admin@email.com",
+ password: "password123",
+ };
+
+ const test_user_company2 = {
+ email: "company2@email.com",
+ password: "password123",
+ };
+
+ beforeAll(async () => {
+ await Account.deleteMany({});
+ await Company.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ await test_agent
+ .delete("/auth/login");
+ const accountService = new AccountService();
+ await (new CompanyApplicationService()).create({
+ email: test_user_company1.email,
+ password: test_user_company1.password,
+ companyName: "test company",
+ motivation: "I want people for job :)"
+ });
+ await accountService.registerAdmin(test_user_admin.email, test_user_admin.password);
+ await accountService.registerCompany(test_user_company1.email, await hash(test_user_company1.password), "test company");
+ await accountService.registerCompany(test_user_company2.email, await hash(test_user_company2.password), "test company 2");
+
+ companyId = (await Company.findOne({ name: "test company" }))._id;
+ });
+
+
+ afterEach(async () => {
+
+ await test_agent
+ .delete("/auth/login");
+ });
+
+ afterAll(async () => {
+ await Account.deleteMany({});
+ await Company.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ });
+
+ test("Should succeed if the user is logged in an admin account", async () => {
+ await test_agent
+ .post("/auth/login")
+ .send(test_user_admin)
+ .expect(StatusCodes.OK);
+
+ const res = await test_agent
+ .get(`/company/${companyId.toString()}/application`);
+
+ expect(res.status).toBe(StatusCodes.OK);
+ });
+
+ test("Should succeed if the user is logged in a god account", async () => {
+ await test_agent.delete("/auth/login");
+ await test_agent
+ .post("/auth/login")
+ .send(test_user_company1)
+ .expect(StatusCodes.OK);
+
+ const res = await test_agent
+ .get(`/company/${companyId}/application`)
+ .send(withGodToken());
+
+ expect(res.status).toBe(StatusCodes.OK);
+ });
+
+ test("Should succeed if the user is logged in to its company account", async () => {
+ await test_agent
+ .post("/auth/login")
+ .send(test_user_company1)
+ .expect(StatusCodes.OK);
+
+ const res = await test_agent
+ .get(`/company/${companyId}/application`);
+
+ expect(res.status).toBe(StatusCodes.OK);
+ });
+
+ test("Should failed if the user is not logged in", async () => {
+ await test_agent
+ .get(`/company/${companyId}/application`).expect(StatusCodes.UNAUTHORIZED);
+
+ });
+
+ test("Should fail if the user is logged in to an account without access to the company", async () => {
+ await test_agent
+ .post("/auth/login")
+ .send(test_user_company2)
+ .expect(StatusCodes.OK);
+
+ await test_agent
+ .get(`/company/${companyId}/application`)
+ .expect(StatusCodes.UNAUTHORIZED);
+ });
+ });
+
+ describe("Testing endpoint's result", () => {
+ let application;
+ const RealDateNow = Date.now;
+ const mockCurrentDate = new Date("2019-11-23");
+ beforeAll(async () => {
+ await Account.deleteMany({});
+ await Company.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ await test_agent
+ .delete("/auth/login");
+ const accountService = new AccountService();
+
+ Date.now = () => mockCurrentDate.getTime();
+
+ application = await (new CompanyApplicationService()).create({
+ email: test_user_company1.email,
+ password: test_user_company1.password,
+ companyName: "test company",
+ motivation: "I want people for job :)",
+ });
+ await accountService.registerCompany(test_user_company1.email, await hash(test_user_company1.password), "test company");
+
+ companyId = (await Company.findOne({ name: "test company" }))._id;
+ Date.now = RealDateNow;
+ });
+
+ afterAll(async () => {
+ await Account.deleteMany({});
+ await Company.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ });
+
+ test("Should return the company's application", async () => {
+ await test_agent
+ .post("/auth/login")
+ .send(test_user_company1)
+ .expect(StatusCodes.OK);
+
+ const res = await test_agent
+ .get(`/company/${companyId}/application`)
+ .expect(StatusCodes.OK);
+
+ expect(res.body).toBeDefined();
+ expect(res.body).toHaveProperty("email", application.email);
+ expect(res.body).toHaveProperty("companyName", application.companyName);
+ expect(res.body).toHaveProperty("motivation", application.motivation);
+ expect(res.body).toHaveProperty("submittedAt", mockCurrentDate.toJSON());
+ expect(res.body).not.toHaveProperty("password", application.password);
+ });
+
+ });
+});
diff --git a/test/end-to-end/offer.js b/test/end-to-end/offer.js
index d79cfe6b..daf54bbe 100644
--- a/test/end-to-end/offer.js
+++ b/test/end-to-end/offer.js
@@ -22,6 +22,7 @@ import EmailService from "../../src/lib/emailService";
import { concurrentOffersNotExceeded } from "../../src/api/middleware/validators/validatorUtils";
import { OFFER_DISABLED_NOTIFICATION } from "../../src/email-templates/companyOfferDisabled";
import base64url from "base64url";
+import CompanyApplication from "../../src/models/CompanyApplication.js";
//----------------------------------------------------------------
describe("Offer endpoint tests", () => {
@@ -60,6 +61,16 @@ describe("Offer endpoint tests", () => {
beforeAll(async () => {
await Company.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ await Account.deleteMany({});
+ await CompanyApplication.create({
+ email: test_user_company.email,
+ password: test_user_company.password,
+ companyName: "test verified company",
+ motivation: "I want people for job :)",
+ isVerified: true,
+ submittedAt: Date.now()
+ });
test_company = await Company.create({
name: "test company",
bio: "a bio",
@@ -67,7 +78,7 @@ describe("Offer endpoint tests", () => {
hasFinishedRegistration: true,
logo: "http://awebsite.com/alogo.jpg",
});
- await Account.deleteMany({});
+
await Account.create({
email: test_user_admin.email,
password: await hash(test_user_admin.password),
@@ -79,6 +90,11 @@ describe("Offer endpoint tests", () => {
company: test_company._id
});
});
+ afterAll(async () => {
+ await Company.deleteMany({});
+ await Account.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ });
describe("POST /offers", () => {
@@ -1062,6 +1078,7 @@ describe("Offer endpoint tests", () => {
owner: test_company._id,
ownerName: test_company.name,
ownerLogo: test_company.logo,
+ isPending: false
};
await Offer.deleteMany({});
diff --git a/test/end-to-end/offers/index.js b/test/end-to-end/offers/index.js
new file mode 100644
index 00000000..efdad084
--- /dev/null
+++ b/test/end-to-end/offers/index.js
@@ -0,0 +1,202 @@
+import Company from "../../../src/models/Company.js";
+import Offer from "../../../src/models/Offer.js";
+import { StatusCodes as HTTPStatus } from "http-status-codes/build/cjs/status-codes.js";
+import { DAY_TO_MS } from "../../utils/TimeConstants.js";
+import CompanyApplication from "../../../src/models/CompanyApplication.js";
+import Account from "../../../src/models/Account.js";
+import hash from "../../../src/lib/passwordHashing.js";
+
+describe("Using already created offer(s)", () => {
+ const generateTestOffer = (params) => ({
+ title: "Test Offer",
+ publishDate: (new Date(Date.now())).toISOString(),
+ publishEndDate: (new Date(Date.now() + (DAY_TO_MS))).toISOString(),
+ description: "For Testing Purposes",
+ contacts: ["geral@niaefeup.pt", "229417766"],
+ jobMinDuration: 1,
+ jobMaxDuration: 6,
+ jobType: "SUMMER INTERNSHIP",
+ fields: ["DEVOPS", "BACKEND", "OTHER"],
+ technologies: ["React", "CSS"],
+ location: "Testing Street, Test City, 123",
+ isHidden: false,
+ isArchived: false,
+ requirements: ["The candidate must be tested", "Fluent in testJS"],
+ vacancies: 2,
+ ...params,
+ });
+
+
+ const test_user_admin = {
+ email: "admin@email.com",
+ password: "password123",
+ };
+
+ const test_user_company = {
+ email: "company@email.com",
+ password: "password123",
+ };
+
+ const approved_test_user_company = {
+ email: "approvedCompany@email.com",
+ password: "password123",
+ };
+
+ let test_company;
+
+ let approved_test_company;
+
+ let test_offer;
+
+ const testPublishDate = "2019-11-22T00:00:00.000Z";
+
+ const testPublishEndDate = "2019-11-28T00:00:00.000Z";
+
+
+ const RealDateNow = Date.now;
+ const mockCurrentDate = new Date("2019-11-23");
+
+
+ beforeAll(async () => {
+ await Company.deleteMany({});
+ await CompanyApplication.deleteMany({});
+
+ await CompanyApplication.create({
+ email: test_user_company.email,
+ password: test_user_company.password,
+ companyName: "test verified company",
+ motivation: "I want people for job :)",
+ isVerified: true,
+ submittedAt: Date.now()
+ });
+
+ await CompanyApplication.create({
+ email: approved_test_user_company.email,
+ password: approved_test_user_company.password,
+ companyName: "approved test company",
+ motivation: "I want people for job :)",
+ isVerified: true,
+ submittedAt: Date.now() - 1,
+ approvedAt: Date.now()
+ });
+
+ test_company = await Company.create({
+ name: "test company",
+ bio: "a bio",
+ contacts: ["a contact"],
+ hasFinishedRegistration: true,
+ logo: "http://awebsite.com/alogo.jpg",
+ });
+
+ approved_test_company = await Company.create({
+ name: "approved test company",
+ bio: "a bio",
+ contacts: ["a contact"],
+ hasFinishedRegistration: true,
+ logo: "http://awebsite.com/alogo.jpg",
+ });
+
+ await Account.deleteMany({});
+
+ await Account.create({
+ email: test_user_admin.email,
+ password: await hash(test_user_admin.password),
+ isAdmin: true
+ });
+
+ await Account.create({
+ email: test_user_company.email,
+ password: await hash(test_user_company.password),
+ company: test_company._id
+ });
+
+ await Account.create({
+ email: approved_test_user_company.email,
+ password: await hash(approved_test_user_company.password),
+ company: approved_test_company._id
+ });
+
+ test_offer = {
+ ...generateTestOffer({
+ "publishDate": testPublishDate,
+ "publishEndDate": testPublishEndDate
+ }),
+ owner: test_company._id,
+ ownerName: test_company.name,
+ ownerLogo: test_company.logo,
+ isPending: false
+ };
+
+ await Offer.deleteMany({});
+ await Offer.create(test_offer);
+ });
+
+ afterAll(async () => {
+ await Company.deleteMany({});
+ await Account.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ await Offer.deleteMany({});
+ });
+
+ beforeEach(() => {
+ Date.now = () => mockCurrentDate.getTime();
+ });
+
+ afterEach(() => {
+ Date.now = RealDateNow;
+ });
+
+ describe("Only current offers are returned", () => {
+
+ const expired_test_offer = generateTestOffer({
+ "publishDate": (new Date(Date.now() - (2 * DAY_TO_MS))).toISOString(),
+ "publishEndDate": (new Date(Date.now() - (DAY_TO_MS))).toISOString()
+ });
+
+ const future_test_offer = generateTestOffer({
+ "publishDate": (new Date(Date.now() + (DAY_TO_MS))).toISOString(),
+ "publishEndDate": (new Date(Date.now() + (2 * DAY_TO_MS))).toISOString()
+ });
+
+ beforeAll(async () => {
+
+ [expired_test_offer, future_test_offer]
+ .forEach((offer) => {
+ offer.owner = test_company._id;
+ offer.ownerName = test_company.name;
+ offer.ownerLogo = test_company.logo;
+ });
+
+ await Offer.create([future_test_offer]);
+ });
+
+ test("should provide only current offer info (no pending offers)", async () => {
+
+ await Offer.create({ ...test_offer, isPending: true, title: "Pending offer" });
+ const res = await request()
+ .get("/offers");
+
+ expect(res.status).toBe(HTTPStatus.OK);
+ expect(res.body?.results).toHaveLength(1);
+
+ // Necessary because jest matchers appear to not be working (expect.any(Number), expect.anything(), etc)
+ const extracted_data = res.body.results.map((elem) => {
+ delete elem["_id"];
+ delete elem["__v"];
+ delete elem["createdAt"];
+ delete elem["updatedAt"];
+ delete elem["score"];
+ delete elem["queryToken"];
+ return elem;
+ });
+
+ const prepared_test_offer = {
+ ...test_offer,
+ isHidden: false,
+ owner: test_offer.owner.toString(),
+ };
+
+ expect(extracted_data).toContainEqual(prepared_test_offer);
+ });
+ });
+});
diff --git a/test/end-to-end/offers/new.js b/test/end-to-end/offers/new.js
new file mode 100644
index 00000000..29ac2094
--- /dev/null
+++ b/test/end-to-end/offers/new.js
@@ -0,0 +1,142 @@
+import { DAY_TO_MS } from "../../utils/TimeConstants.js";
+import Company from "../../../src/models/Company.js";
+import Account from "../../../src/models/Account.js";
+import hash from "../../../src/lib/passwordHashing.js";
+import { StatusCodes as HTTPStatus } from "http-status-codes/build/cjs/status-codes.js";
+import withGodToken from "../../utils/GodToken.js";
+import Offer from "../../../src/models/Offer.js";
+import CompanyApplication from "../../../src/models/CompanyApplication.js";
+
+describe("POST /offers/new", () => {
+ const generateTestOffer = (params) => ({
+ title: "Test Offer",
+ publishDate: (new Date(Date.now())).toISOString(),
+ publishEndDate: (new Date(Date.now() + (DAY_TO_MS))).toISOString(),
+ description: "For Testing Purposes",
+ contacts: ["geral@niaefeup.pt", "229417766"],
+ jobMinDuration: 1,
+ jobMaxDuration: 6,
+ jobType: "SUMMER INTERNSHIP",
+ fields: ["DEVOPS", "BACKEND", "OTHER"],
+ technologies: ["React", "CSS"],
+ location: "Testing Street, Test City, 123",
+ isHidden: false,
+ isArchived: false,
+ requirements: ["The candidate must be tested", "Fluent in testJS"],
+ vacancies: 2,
+ ...params,
+ });
+
+ let test_company, approved_test_company;
+
+
+ const test_user_admin = {
+ email: "admin@email.com",
+ password: "password123",
+ };
+ const test_user_company = {
+ email: "company@email.com",
+ password: "password123",
+ };
+
+ const approved_test_user_company = {
+ email: "approvedCompany@email.com",
+ password: "password123",
+ };
+
+ beforeAll(async () => {
+
+ await Company.deleteMany({});
+
+ await Account.deleteMany({});
+
+ await CompanyApplication.deleteMany({});
+
+ test_company = await Company.create({
+ name: "test company",
+ bio: "a bio",
+ contacts: ["a contact"],
+ hasFinishedRegistration: true,
+ logo: "http://awebsite.com/alogo.jpg",
+ });
+
+ approved_test_company = await Company.create({
+ name: " approved test company",
+ bio: "a bio",
+ contacts: ["a contact"],
+ hasFinishedRegistration: true,
+ logo: "http://awebsite.com/alogo.jpg",
+ });
+
+ await CompanyApplication.create({
+ email: test_user_company.email,
+ password: test_user_company.password,
+ companyName: "test verified company",
+ motivation: "I want people for job :)",
+ isVerified: true,
+ submittedAt: Date.now()
+ });
+
+ await CompanyApplication.create({
+ email: approved_test_user_company.email,
+ password: approved_test_user_company.password,
+ companyName: "approved test company",
+ motivation: "I want people for job :)",
+ isVerified: true,
+ submittedAt: Date.now() - 1,
+ approvedAt: Date.now(),
+ });
+
+ await Account.create({
+ email: test_user_admin.email,
+ password: await hash(test_user_admin.password),
+ isAdmin: true
+ });
+
+ await Account.create({
+ email: test_user_company.email,
+ password: await hash(test_user_company.password),
+ company: test_company._id,
+ });
+
+ await Account.create({
+ email: approved_test_user_company.email,
+ password: await hash(approved_test_user_company.password),
+ company: approved_test_company._id,
+ });
+
+ });
+
+ afterAll(async () => {
+ await Company.deleteMany({});
+ await Account.deleteMany({});
+ await CompanyApplication.deleteMany({});
+ });
+
+ describe("Without pre-existing offers", () => {
+ beforeAll(async () => {
+ await Offer.deleteMany({});
+ });
+
+ beforeEach(async () => {
+ await Offer.deleteMany({});
+ });
+
+ test("Offer should be pending if the company hasn't been approved", async () => {
+ const offer = generateTestOffer({ owner: test_company._id });
+ const res = await request()
+ .post("/offers/new")
+ .send(withGodToken(offer)).expect(HTTPStatus.OK);
+ expect(res.body.isPending).toBe(true);
+ });
+
+ test("Offer should not be pending if the company has been approved", async () => {
+ const offer = generateTestOffer({ owner: approved_test_company._id });
+ const res = await request()
+ .post("/offers/new")
+ .send(withGodToken(offer)).expect(HTTPStatus.OK);
+ expect(res.body.isPending).toBe(false);
+ });
+ });
+
+});
diff --git a/test/end-to-end/review.js b/test/end-to-end/review.js
index aab25cdc..b5917da8 100644
--- a/test/end-to-end/review.js
+++ b/test/end-to-end/review.js
@@ -1,14 +1,16 @@
+
+
jest.mock("../../src/lib/emailService");
import EmailService, { EmailService as EmailServiceClass } from "../../src/lib/emailService";
jest.spyOn(EmailServiceClass.prototype, "verifyConnection").mockImplementation(() => Promise.resolve());
import { StatusCodes as HTTPStatus } from "http-status-codes";
-import CompanyApplication, { CompanyApplicationRules } from "../../src/models/CompanyApplication";
+import CompanyApplication from "../../src/models/CompanyApplication";
import hash from "../../src/lib/passwordHashing";
import Account from "../../src/models/Account";
-import { ErrorTypes } from "../../src/api/middleware/errorHandler";
import ApplicationStatus from "../../src/models/constants/ApplicationStatus";
import { APPROVAL_NOTIFICATION, REJECTION_NOTIFICATION } from "../../src/email-templates/companyApplicationApproval";
import mongoose from "mongoose";
+import AccountService from "../../src/services/account.js";
const { ObjectId } = mongoose.Types;
@@ -141,7 +143,7 @@ describe("Company application review endpoint test", () => {
expect(wrongFormatQuery.status).toBe(HTTPStatus.UNPROCESSABLE_ENTITY);
expect(wrongFormatQuery.body.errors[0]).toStrictEqual({
location: "query",
- msg: "must-be-in:[PENDING,APPROVED,REJECTED]",
+ msg: "must-be-in:[UNVERIFIED,PENDING,APPROVED,REJECTED]",
param: "state",
value: [`<["${ApplicationStatus.APPROVED}"]`]
});
@@ -291,6 +293,12 @@ describe("Company application review endpoint test", () => {
beforeEach(async () => {
await Account.deleteMany({ email: pendingApplication.email });
application = await CompanyApplication.create(pendingApplication);
+ await (new AccountService()).registerCompany(
+ pendingApplication.email,
+ pendingApplication.password,
+ pendingApplication.companyName
+ );
+
});
afterEach(async () => {
@@ -298,13 +306,14 @@ describe("Company application review endpoint test", () => {
});
test("Should approve pending application", async () => {
-
const res = await test_agent
.post(`/applications/company/${application._id}/approve`);
expect(res.status).toBe(HTTPStatus.OK);
expect(res.body.email).toBe(pendingApplication.email);
- expect(res.body.companyName).toBe(pendingApplication.companyName);
+ const approved_application = await CompanyApplication.findById(application._id);
+ expect(approved_application.state).toBe(ApplicationStatus.APPROVED);
+
});
test("Should send approval email to company email", async () => {
@@ -348,26 +357,12 @@ describe("Company application review endpoint test", () => {
.post(`/applications/company/${application._id}/reject`)
.send({ rejectReason: "Some reason which is valid" });
-
const res = await test_agent
.post(`/applications/company/${application._id}/approve`);
expect(res.status).toBe(HTTPStatus.CONFLICT);
});
- test("Should fail if approving application with an existing account with same email, and then rollback", async () => {
- await Account.create({ email: application.email, password: "passwordHashedButNotReally", isAdmin: true });
-
- const res = await test_agent
- .post(`/applications/company/${application._id}/approve`);
-
- expect(res.status).toBe(HTTPStatus.CONFLICT);
- expect(res.body.error_code).toBe(ErrorTypes.VALIDATION_ERROR);
- expect(res.body.errors[0].msg).toBe(CompanyApplicationRules.EMAIL_ALREADY_IN_USE.msg);
-
- const result_application = await CompanyApplication.findById(application._id);
- expect(result_application.state).toBe(ApplicationStatus.PENDING);
- });
});
describe("Reject application", () => {
diff --git a/test/unit/token.js b/test/unit/token.js
index d52461d4..dfa8d422 100644
--- a/test/unit/token.js
+++ b/test/unit/token.js
@@ -1,5 +1,7 @@
import { verifyAndDecodeToken, generateToken } from "../../src/lib/token";
import { SECOND_IN_MS } from "../../src/models/constants/TimeConstants";
+import { JsonWebTokenError } from "jsonwebtoken";
+
describe("JWT Token tests", () => {
const data = {
@@ -20,7 +22,9 @@ describe("JWT Token tests", () => {
});
test("should fail to decode token if invalid secret", () => {
- expect(verifyAndDecodeToken(token, `${secret}o`)).toBeNull();
+ expect(() => verifyAndDecodeToken(token, `${secret}o`)).toThrow(JsonWebTokenError);
+ expect(() => verifyAndDecodeToken(token, `${secret}o`)).toThrow("invalid signature");
+
});
test("should fail to decode token if expired", () => {
@@ -28,7 +32,8 @@ describe("JWT Token tests", () => {
const mockDate = Date.now() + (11 * SECOND_IN_MS);
Date.now = () => mockDate;
- expect(verifyAndDecodeToken(token, `${secret}`)).toBeNull();
+ expect(() => verifyAndDecodeToken(token, `${secret}`)).toThrow(JsonWebTokenError);
+ expect(() => verifyAndDecodeToken(token, `${secret}`)).toThrow("jwt expired");
Date.now = realTime;
});