From c2e394fb329a200fe0ad19240b318400168acfb3 Mon Sep 17 00:00:00 2001 From: Chrtorres Date: Mon, 9 Dec 2024 11:01:15 -0500 Subject: [PATCH 01/18] Fixed update saved search endpoint from performing an incorrect name check preventing an update --- backend/src/xfd_django/xfd_api/api_methods/saved_search.py | 7 ++++--- .../src/xfd_django/xfd_api/schema_models/saved_search.py | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py index ad5c2dde..f2ba5a83 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py +++ b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py @@ -143,15 +143,16 @@ def update_saved_search(request, user): if saved_search.createdById.id != user.id: raise HTTPException(status_code=404, detail="Saved search not found") + name = request["name"].strip() + if name == "": + raise HTTPException(status_code=400, detail="Name cannot be empty") + saved_search.name = request["name"] saved_search.updatedAt = datetime.now(timezone.utc) saved_search.searchTerm = request["searchTerm"] - validate_name(request.get("name")) - saved_search.save() response = { "name": saved_search.name, - "updatedAt": saved_search.updatedAt, "searchTerm": saved_search.searchTerm, "sortDirection": saved_search.sortDirection, "sortField": saved_search.sortField, diff --git a/backend/src/xfd_django/xfd_api/schema_models/saved_search.py b/backend/src/xfd_django/xfd_api/schema_models/saved_search.py index 275c819c..4dcb26ac 100644 --- a/backend/src/xfd_django/xfd_api/schema_models/saved_search.py +++ b/backend/src/xfd_django/xfd_api/schema_models/saved_search.py @@ -29,7 +29,6 @@ class SavedSearchCreate(BaseModel): class SavedSearchUpdate(BaseModel): name: str searchTerm: str - updatedAt: datetime sortDirection: str sortField: str count: int From 40a37a4d0dbc0ef7838d1085218ff83ef77e5d1a Mon Sep 17 00:00:00 2001 From: Chrtorres Date: Mon, 9 Dec 2024 12:06:16 -0500 Subject: [PATCH 02/18] Updated saved search POST request to allow storage of multiple fitlers --- .../xfd_api/api_methods/saved_search.py | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py index f2ba5a83..e36a4194 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py +++ b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py @@ -27,7 +27,33 @@ def validate_name(value: str): def create_saved_search(request): validate_name(request.get("name")) + print(request) try: + # Process filter values when selecting organizations + def process_filter_values(values): + processed_values = [] + for value in values: + if isinstance(value, dict): + # Include only the required fields + processed_values.append({ + "id": value.get("id"), + "name": value.get("name"), + "regionId": value.get("regionId"), + "rootDomains": value.get("rootDomains", []) + }) + else: + processed_values.append(value) + return processed_values + + filters = [ + { + "type": f.type, + "field": f.field, + "values": process_filter_values(f.values) + } + for f in request.get("filters", []) + ] + search = SavedSearch.objects.create( name=request.get("name"), count=request.get("count", 0), # Default to 0 if count does not exist @@ -35,13 +61,7 @@ def create_saved_search(request): sortField=request.get("sortField", ""), searchTerm=request.get("searchTerm", ""), searchPath=request.get("searchPath", ""), - filters=[ - { - "type": "any", - "field": request.get("field", ""), - "values": [request.get("values", "")], - } - ], + filters=filters, createdById=request.get("createdById"), ) From 338fcc9a3e29c369ceefb88e5e99ff0f758918d3 Mon Sep 17 00:00:00 2001 From: Chrtorres Date: Mon, 9 Dec 2024 12:14:31 -0500 Subject: [PATCH 03/18] Fixed PUT request for saved search, allows adding multiple filters to a saved search --- .../xfd_api/api_methods/saved_search.py | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py index e36a4194..710897da 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py +++ b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py @@ -159,6 +159,31 @@ def update_saved_search(request, user): if not uuid.UUID(request["saved_search_id"]): raise HTTPException(status_code=404, detail={"error": "Invalid UUID"}) try: + # Process filter values when selecting organizations + def process_filter_values(values): + processed_values = [] + for value in values: + if isinstance(value, dict): + # Include only the required fields + processed_values.append({ + "id": value.get("id"), + "name": value.get("name"), + "regionId": value.get("regionId"), + "rootDomains": value.get("rootDomains", []) + }) + else: + processed_values.append(value) + return processed_values + + filters = [ + { + "type": f.type, + "field": f.field, + "values": process_filter_values(f.values) + } + for f in request.get("filters", []) + ] + saved_search = SavedSearch.objects.get(id=request["saved_search_id"]) if saved_search.createdById.id != user.id: raise HTTPException(status_code=404, detail="Saved search not found") @@ -177,7 +202,7 @@ def update_saved_search(request, user): "sortDirection": saved_search.sortDirection, "sortField": saved_search.sortField, "count": saved_search.count, - "filters": saved_search.filters, + "filters": filters, "searchPath": saved_search.searchPath, } except User.DoesNotExist: From a772cb417ef09570eb8de90a4017af7f15851779 Mon Sep 17 00:00:00 2001 From: Chrtorres Date: Mon, 9 Dec 2024 14:47:14 -0500 Subject: [PATCH 04/18] Fixed saved search unit tests after merging python backend into integration --- .../xfd_api/api_methods/saved_search.py | 34 +++++++++++-------- .../xfd_api/tests/test_saved_searches.py | 9 +++-- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py index cee4182e..b5f20275 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py +++ b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py @@ -35,12 +35,14 @@ def process_filter_values(values): for value in values: if isinstance(value, dict): # Include only the required fields - processed_values.append({ - "id": value.get("id"), - "name": value.get("name"), - "regionId": value.get("regionId"), - "rootDomains": value.get("rootDomains", []) - }) + processed_values.append( + { + "id": value.get("id"), + "name": value.get("name"), + "regionId": value.get("regionId"), + "rootDomains": value.get("rootDomains", []), + } + ) else: processed_values.append(value) return processed_values @@ -49,7 +51,7 @@ def process_filter_values(values): { "type": f.type, "field": f.field, - "values": process_filter_values(f.values) + "values": process_filter_values(f.values), } for f in request.get("filters", []) ] @@ -168,12 +170,14 @@ def process_filter_values(values): for value in values: if isinstance(value, dict): # Include only the required fields - processed_values.append({ - "id": value.get("id"), - "name": value.get("name"), - "regionId": value.get("regionId"), - "rootDomains": value.get("rootDomains", []) - }) + processed_values.append( + { + "id": value.get("id"), + "name": value.get("name"), + "regionId": value.get("regionId"), + "rootDomains": value.get("rootDomains", []), + } + ) else: processed_values.append(value) return processed_values @@ -182,7 +186,7 @@ def process_filter_values(values): { "type": f.type, "field": f.field, - "values": process_filter_values(f.values) + "values": process_filter_values(f.values), } for f in request.get("filters", []) ] @@ -194,7 +198,7 @@ def process_filter_values(values): name = request["name"].strip() if name == "": raise HTTPException(status_code=400, detail="Name cannot be empty") - + saved_search.name = request["name"] saved_search.updatedAt = datetime.now(timezone.utc) saved_search.searchTerm = request["searchTerm"] diff --git a/backend/src/xfd_django/xfd_api/tests/test_saved_searches.py b/backend/src/xfd_django/xfd_api/tests/test_saved_searches.py index c0f30670..e2b926fe 100644 --- a/backend/src/xfd_django/xfd_api/tests/test_saved_searches.py +++ b/backend/src/xfd_django/xfd_api/tests/test_saved_searches.py @@ -421,8 +421,9 @@ def test_list_saved_searches_by_global_view_returns_none(create_global_view): "/saved-searches", headers={"Authorization": "Bearer " + create_jwt_token(global_view_user)}, ) + assert response.status_code == 200 - assert len(response.json()) == 0 + assert response.json()["count"] == 0 # Cleanup search.delete() @@ -465,9 +466,11 @@ def test_list_saved_searches_by_user_only_gets_their_search( "/saved-searches", headers={"Authorization": "Bearer " + create_jwt_token(primary_user)}, ) + response_data = response.json()["result"] + assert response.status_code == 200 - assert len(response.json()) == 1 - assert response.json()[0]["id"] == str(search.id) + assert response.json()["count"] == 1 + assert response_data[0]["id"] == str(search.id) # Cleanup search.delete() From 30f9d6621a5bb6d3f6ed98f4724c533b2710752a Mon Sep 17 00:00:00 2001 From: Chrtorres Date: Tue, 10 Dec 2024 09:40:22 -0500 Subject: [PATCH 05/18] Code cleanup --- backend/src/xfd_django/xfd_api/api_methods/saved_search.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py index b5f20275..ffdc8166 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py +++ b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py @@ -3,7 +3,6 @@ # Standard Python Libraries from datetime import datetime, timezone -import json import uuid # Third-Party Libraries @@ -11,7 +10,6 @@ from fastapi import HTTPException from ..models import SavedSearch, User -from ..schema_models.saved_search import SavedSearchFilters def validate_name(value: str): From bca5f6dc235ab64dfaf76fa9da60bac5c611e6dd Mon Sep 17 00:00:00 2001 From: Chrtorres Date: Tue, 10 Dec 2024 09:49:05 -0500 Subject: [PATCH 06/18] Removed stray print statements --- backend/src/xfd_django/xfd_api/api_methods/saved_search.py | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py index ffdc8166..77a5d701 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/saved_search.py +++ b/backend/src/xfd_django/xfd_api/api_methods/saved_search.py @@ -25,7 +25,6 @@ def validate_name(value: str): def create_saved_search(request): validate_name(request.get("name")) - print(request) try: # Process filter values when selecting organizations def process_filter_values(values): From 9125c02fff135e995e7a3f681bcb8409d8641d8c Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 14:25:37 -0500 Subject: [PATCH 07/18] Fix stats to handle filters --- .github/workflows/backend.yml | 29 +- backend/Makefile | 15 + backend/package-lock.json | 6274 ++++++++--------- backend/package.json | 2 +- backend/src/tasks/functions.yml | 215 +- .../xfd_django/xfd_api/api_methods/domain.py | 126 +- .../xfd_api/api_methods/organization.py | 91 +- .../xfd_django/xfd_api/api_methods/stats.py | 311 + .../xfd_api/api_methods/stats_ports.py | 40 - .../xfd_api/api_methods/stats_services.py | 51 - .../xfd_api/api_methods/vulnerability.py | 316 +- backend/src/xfd_django/xfd_api/auth.py | 87 +- .../xfd_api/helpers/stats_helpers.py | 117 + ...t_get_most_common_vulnerabilities_cache.py | 71 - ...pect_get_most_common_vulnerabilities_id.py | 0 .../commands/inspect_get_org_memberships.py | 55 - .../commands/inspect_get_ports_user_id.py | 33 - .../commands/inspect_get_user_domain_ids.py | 36 - .../commands/inspect_get_user_domains.py | 37 - .../commands/inspect_get_user_service_ids.py | 75 - .../inspect_latest_vulnerabilities_cache.py | 67 - .../inspect_number_vulnerabilities_cache.py | 60 - .../inspect_vulnerabilities_user_id.py | 48 - .../commands/populate_by_org_cache.py | 14 - ...rabilites.py => populate_by_orgs_cache.py} | 4 +- ...ache.py => populate_latest_vulns_cache.py} | 4 +- ...py => populate_most_common_vulns_cache.py} | 4 +- .../commands/populate_ports_cache.py | 4 +- .../commands/populate_services_cache.py | 4 +- .../commands/populate_severity_count_cache.py | 4 +- .../commands/populate_vulns_cache.py | 11 + .../commands/test_get_org_memberships.py | 53 - .../xfd_api/schema_models/by_org_item.py | 25 - .../xfd_api/schema_models/domain.py | 69 +- .../xfd_api/schema_models/latest_vuln.py | 28 - .../xfd_api/schema_models/most_common_vuln.py | 23 - .../schema_models/organization_schema.py | 14 + .../xfd_api/schema_models/ports_stats.py | 23 - .../xfd_api/schema_models/service.py | 8 - .../xfd_api/schema_models/severity_count.py | 21 - .../xfd_api/schema_models/stat_schema.py | 98 + .../xfd_django/xfd_api/schema_models/stats.py | 98 + .../xfd_api/schema_models/vulnerability.py | 10 - .../xfd_api/tasks/elasticache_tasks.py | 513 +- .../xfd_api/tasks/syncdb_helpers.py | 2 +- backend/src/xfd_django/xfd_api/views.py | 173 +- backend/tools/build-worker.sh | 2 +- docker-compose.yml | 7 + 48 files changed, 4456 insertions(+), 4916 deletions(-) create mode 100644 backend/src/xfd_django/xfd_api/api_methods/stats.py delete mode 100644 backend/src/xfd_django/xfd_api/api_methods/stats_ports.py delete mode 100644 backend/src/xfd_django/xfd_api/api_methods/stats_services.py create mode 100644 backend/src/xfd_django/xfd_api/helpers/stats_helpers.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/inspect_get_most_common_vulnerabilities_cache.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/inspect_get_most_common_vulnerabilities_id.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/inspect_get_org_memberships.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/inspect_get_ports_user_id.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_domain_ids.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_domains.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_service_ids.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/inspect_latest_vulnerabilities_cache.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/inspect_number_vulnerabilities_cache.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/inspect_vulnerabilities_user_id.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/populate_by_org_cache.py rename backend/src/xfd_django/xfd_api/management/commands/{populate_latest_vulnerabilites.py => populate_by_orgs_cache.py} (68%) rename backend/src/xfd_django/xfd_api/management/commands/{populate_vulnerabilities_cache.py => populate_latest_vulns_cache.py} (68%) rename backend/src/xfd_django/xfd_api/management/commands/{populate_most_common_vulnerabilities_cache.py => populate_most_common_vulns_cache.py} (67%) create mode 100644 backend/src/xfd_django/xfd_api/management/commands/populate_vulns_cache.py delete mode 100644 backend/src/xfd_django/xfd_api/management/commands/test_get_org_memberships.py delete mode 100644 backend/src/xfd_django/xfd_api/schema_models/by_org_item.py delete mode 100644 backend/src/xfd_django/xfd_api/schema_models/latest_vuln.py delete mode 100644 backend/src/xfd_django/xfd_api/schema_models/most_common_vuln.py delete mode 100644 backend/src/xfd_django/xfd_api/schema_models/ports_stats.py delete mode 100644 backend/src/xfd_django/xfd_api/schema_models/severity_count.py create mode 100644 backend/src/xfd_django/xfd_api/schema_models/stat_schema.py create mode 100644 backend/src/xfd_django/xfd_api/schema_models/stats.py diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml index 69a58af6..9316d3c5 100644 --- a/.github/workflows/backend.yml +++ b/.github/workflows/backend.yml @@ -116,6 +116,26 @@ jobs: CROSSFEED_COMMAND_OPTIONS: '{"scanName": "test"}' DB_USERNAME: crossfeed DB_PASSWORD: password + + build_worker: + runs-on: ubuntu-latest + timeout-minutes: 90 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Restore npm cache + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} + restore-keys: ${{ runner.os }}-node- + - name: Install dependencies + run: npm ci + - name: Build worker container + run: npm run build-worker + working-directory: ./backend deploy_staging: needs: [lint, test, test_worker] @@ -208,11 +228,18 @@ jobs: SLS_DEBUG: '*' - name: Deploy backend - run: npx sls deploy --stage=integration --force + run: npx sls deploy --stage=integration env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} SLS_DEBUG: '*' + + - name: Deploy worker + run: npm run deploy-worker-integration + working-directory: backend + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: Run syncdb run: | diff --git a/backend/Makefile b/backend/Makefile index 415cfa23..5c7e2a89 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -1,9 +1,24 @@ .PHONY: syncdb +.PHONY: populate-cache # Synchronize and populate the database syncdb: docker compose exec backend python manage.py syncdb +syncdb-populate: + docker compose exec backend python manage.py syncdb --populate + +# Pytest pytest: docker compose exec backend python manage.py makemigrations docker compose exec backend pytest --no-migrations --reuse-db $(FILE) + +# Redis lambdas +populate-cache: + docker compose exec backend python manage.py populate_services_cache + docker compose exec backend python manage.py populate_ports_cache + docker compose exec backend python manage.py populate_vulns_cache + docker compose exec backend python manage.py populate_most_common_vulns_cache + docker compose exec backend python manage.py populate_latest_vulns_cache + docker compose exec backend python manage.py populate_severity_count_cache + docker compose exec backend python manage.py populate_by_orgs_cache diff --git a/backend/package-lock.json b/backend/package-lock.json index 1792dc62..a949d076 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,74 +1,78 @@ { - "name": "crossfeed-backend", - "version": "1.0.0", "lockfileVersion": 3, - "requires": true, + "name": "crossfeed-backend", "packages": { "": { - "name": "crossfeed-backend", - "version": "1.0.0", - "license": "ISC", "devDependencies": { "serverless": "^3.30", "serverless-domain-manager": "^7.0", "serverless-dotenv-plugin": "^6.0.0", "serverless-python-requirements": "^6.1.1" - } + }, + "license": "ISC", + "name": "crossfeed-backend", + "version": "1.0.0" }, - "node_modules/@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==", + "node_modules/2-thenable": { + "dependencies": { + "d": "1", + "es5-ext": "^0.10.47" + }, "dev": true, + "integrity": "sha512-HqiDzaLDFCXkcCO/SwoyhRwqYtINFHF7t9BDRq4x90TOKNAJpiqUt9X5lQ08bwxYzc067HUywDjGySpebHcUpw==", + "resolved": "https://registry.npmjs.org/2-thenable/-/2-thenable-1.0.0.tgz", + "version": "1.0.0" + }, + "node_modules/@aws-crypto/crc32": { "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", "tslib": "^1.11.1" - } + }, + "dev": true, + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "dev": true, "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "version": "1.14.1" }, "node_modules/@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", - "dev": true, "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", "tslib": "^1.11.1" - } + }, + "dev": true, + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/@aws-crypto/crc32c/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "dev": true, "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "version": "1.14.1" }, "node_modules/@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==", - "dev": true, "dependencies": { "tslib": "^1.11.1" - } + }, + "dev": true, + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "dev": true, "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "version": "1.14.1" }, "node_modules/@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", - "dev": true, "dependencies": { "@aws-crypto/ie11-detection": "^3.0.0", "@aws-crypto/supports-web-crypto": "^3.0.0", @@ -77,19 +81,19 @@ "@aws-sdk/util-locate-window": "^3.0.0", "@aws-sdk/util-utf8-browser": "^3.0.0", "tslib": "^1.11.1" - } + }, + "dev": true, + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "dev": true, "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "version": "1.14.1" }, "node_modules/@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==", - "dev": true, "dependencies": { "@aws-crypto/ie11-detection": "^3.0.0", "@aws-crypto/sha256-js": "^3.0.0", @@ -99,68 +103,68 @@ "@aws-sdk/util-locate-window": "^3.0.0", "@aws-sdk/util-utf8-browser": "^3.0.0", "tslib": "^1.11.1" - } + }, + "dev": true, + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "dev": true, "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "version": "1.14.1" }, "node_modules/@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==", - "dev": true, "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", "tslib": "^1.11.1" - } + }, + "dev": true, + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "dev": true, "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "version": "1.14.1" }, "node_modules/@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==", - "dev": true, "dependencies": { "tslib": "^1.11.1" - } + }, + "dev": true, + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "dev": true, "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "version": "1.14.1" }, "node_modules/@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==", - "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-utf8-browser": "^3.0.0", "tslib": "^1.11.1" - } + }, + "dev": true, + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "dev": true, "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "version": "1.14.1" }, "node_modules/@aws-sdk/client-acm": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-acm/-/client-acm-3.398.0.tgz", - "integrity": "sha512-NSrWuzzrGWDBfk3Y5U6sNis+c6fluNFA2y9jPIJxnB4U26F6ntBDxqI3Hiuscknzd8+RGoNVMZxaoMqBPBGccQ==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -200,15 +204,15 @@ "@smithy/util-waiter": "^2.0.5", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-NSrWuzzrGWDBfk3Y5U6sNis+c6fluNFA2y9jPIJxnB4U26F6ntBDxqI3Hiuscknzd8+RGoNVMZxaoMqBPBGccQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-acm/-/client-acm-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/client-api-gateway": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-api-gateway/-/client-api-gateway-3.398.0.tgz", - "integrity": "sha512-WS0f4r2jsTeiGMvnN7JbqV/f6S7Cs4f8FluhgauWCw9mecGOJP5YD6u4oDk4rub3urtNuo+qOpH8TVG3fJ2hVg==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -249,15 +253,15 @@ "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-WS0f4r2jsTeiGMvnN7JbqV/f6S7Cs4f8FluhgauWCw9mecGOJP5YD6u4oDk4rub3urtNuo+qOpH8TVG3fJ2hVg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-api-gateway/-/client-api-gateway-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/client-apigatewayv2": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-apigatewayv2/-/client-apigatewayv2-3.398.0.tgz", - "integrity": "sha512-Au5XNhU7q2sxMbURGTmK6AWvCpwv7mzsTtum6pZk0xSUDBa81GCR/LP7oXkFjSKpbSgDebjBGKX9MNF7E1bWrg==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -297,15 +301,15 @@ "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-Au5XNhU7q2sxMbURGTmK6AWvCpwv7mzsTtum6pZk0xSUDBa81GCR/LP7oXkFjSKpbSgDebjBGKX9MNF7E1bWrg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-apigatewayv2/-/client-apigatewayv2-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/client-cloudformation": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.451.0.tgz", - "integrity": "sha512-rc8MWRsWA1OgOq/hASLONtVTEbRggjf8VFYmW7UdL1g+oRQoDFWEWPv7kW5868UTpS6SmHdjCrXP8YREtR4ZSQ==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -350,15 +354,15 @@ "tslib": "^2.5.0", "uuid": "^8.3.2" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-rc8MWRsWA1OgOq/hASLONtVTEbRggjf8VFYmW7UdL1g+oRQoDFWEWPv7kW5868UTpS6SmHdjCrXP8YREtR4ZSQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/client-sso": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.451.0.tgz", - "integrity": "sha512-KkYSke3Pdv3MfVH/5fT528+MKjMyPKlcLcd4zQb0x6/7Bl7EHrPh1JZYjzPLHelb+UY5X0qN8+cb8iSu1eiwIQ==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -397,15 +401,15 @@ "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-KkYSke3Pdv3MfVH/5fT528+MKjMyPKlcLcd4zQb0x6/7Bl7EHrPh1JZYjzPLHelb+UY5X0qN8+cb8iSu1eiwIQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/client-sts": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.451.0.tgz", - "integrity": "sha512-48NcIRxWBdP1fom6RSjwn2R2u7SE7eeV3p+c4s7ukEOfrHhBxJfn3EpqBVQMGzdiU55qFImy+Fe81iA2lXq3Jw==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -448,30 +452,30 @@ "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-48NcIRxWBdP1fom6RSjwn2R2u7SE7eeV3p+c4s7ukEOfrHhBxJfn3EpqBVQMGzdiU55qFImy+Fe81iA2lXq3Jw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.451.0.tgz", - "integrity": "sha512-9dAav7DcRgaF7xCJEQR5ER9ErXxnu/tdnVJ+UPmb1NPeIZdESv1A3lxFDEq1Fs8c4/lzAj9BpshGyJVIZwZDKg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-9dAav7DcRgaF7xCJEQR5ER9ErXxnu/tdnVJ+UPmb1NPeIZdESv1A3lxFDEq1Fs8c4/lzAj9BpshGyJVIZwZDKg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.451.0.tgz", - "integrity": "sha512-TySt64Ci5/ZbqFw1F9Z0FIGvYx5JSC9e6gqDnizIYd8eMnn8wFRUscRrD7pIHKfrhvVKN5h0GdYovmMO/FMCBw==", - "dev": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.451.0", "@aws-sdk/credential-provider-process": "3.451.0", @@ -484,15 +488,15 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-TySt64Ci5/ZbqFw1F9Z0FIGvYx5JSC9e6gqDnizIYd8eMnn8wFRUscRrD7pIHKfrhvVKN5h0GdYovmMO/FMCBw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.451.0.tgz", - "integrity": "sha512-AEwM1WPyxUdKrKyUsKyFqqRFGU70e4qlDyrtBxJnSU9NRLZI8tfEZ67bN7fHSxBUBODgDXpMSlSvJiBLh5/3pw==", - "dev": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.451.0", "@aws-sdk/credential-provider-ini": "3.451.0", @@ -506,15 +510,15 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-AEwM1WPyxUdKrKyUsKyFqqRFGU70e4qlDyrtBxJnSU9NRLZI8tfEZ67bN7fHSxBUBODgDXpMSlSvJiBLh5/3pw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.451.0.tgz", - "integrity": "sha512-HQywSdKeD5PErcLLnZfSyCJO+6T+ZyzF+Lm/QgscSC+CbSUSIPi//s15qhBRVely/3KBV6AywxwNH+5eYgt4lQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", @@ -522,15 +526,15 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-HQywSdKeD5PErcLLnZfSyCJO+6T+ZyzF+Lm/QgscSC+CbSUSIPi//s15qhBRVely/3KBV6AywxwNH+5eYgt4lQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.451.0.tgz", - "integrity": "sha512-Usm/N51+unOt8ID4HnQzxIjUJDrkAQ1vyTOC0gSEEJ7h64NSSPGD5yhN7il5WcErtRd3EEtT1a8/GTC5TdBctg==", - "dev": true, "dependencies": { "@aws-sdk/client-sso": "3.451.0", "@aws-sdk/token-providers": "3.451.0", @@ -540,89 +544,89 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-Usm/N51+unOt8ID4HnQzxIjUJDrkAQ1vyTOC0gSEEJ7h64NSSPGD5yhN7il5WcErtRd3EEtT1a8/GTC5TdBctg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.451.0.tgz", - "integrity": "sha512-Xtg3Qw65EfDjWNG7o2xD6sEmumPfsy3WDGjk2phEzVg8s7hcZGxf5wYwe6UY7RJvlEKrU0rFA+AMn6Hfj5oOzg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-Xtg3Qw65EfDjWNG7o2xD6sEmumPfsy3WDGjk2phEzVg8s7hcZGxf5wYwe6UY7RJvlEKrU0rFA+AMn6Hfj5oOzg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.451.0.tgz", - "integrity": "sha512-j8a5jAfhWmsK99i2k8oR8zzQgXrsJtgrLxc3js6U+525mcZytoiDndkWTmD5fjJ1byU1U2E5TaPq+QJeDip05Q==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/protocol-http": "^3.0.9", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-j8a5jAfhWmsK99i2k8oR8zzQgXrsJtgrLxc3js6U+525mcZytoiDndkWTmD5fjJ1byU1U2E5TaPq+QJeDip05Q==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-logger": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.451.0.tgz", - "integrity": "sha512-0kHrYEyVeB2QBfP6TfbI240aRtatLZtcErJbhpiNUb+CQPgEL3crIjgVE8yYiJumZ7f0jyjo8HLPkwD1/2APaw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-0kHrYEyVeB2QBfP6TfbI240aRtatLZtcErJbhpiNUb+CQPgEL3crIjgVE8yYiJumZ7f0jyjo8HLPkwD1/2APaw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.451.0.tgz", - "integrity": "sha512-J6jL6gJ7orjHGM70KDRcCP7so/J2SnkN4vZ9YRLTeeZY6zvBuHDjX8GCIgSqPn/nXFXckZO8XSnA7u6+3TAT0w==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/protocol-http": "^3.0.9", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-J6jL6gJ7orjHGM70KDRcCP7so/J2SnkN4vZ9YRLTeeZY6zvBuHDjX8GCIgSqPn/nXFXckZO8XSnA7u6+3TAT0w==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.451.0.tgz", - "integrity": "sha512-UJ6UfVUEgp0KIztxpAeelPXI5MLj9wUtUCqYeIMP7C1ZhoEMNm3G39VLkGN43dNhBf1LqjsV9jkKMZbVfYXuwg==", - "dev": true, "dependencies": { "@aws-sdk/middleware-signing": "3.451.0", "@aws-sdk/types": "3.451.0", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-UJ6UfVUEgp0KIztxpAeelPXI5MLj9wUtUCqYeIMP7C1ZhoEMNm3G39VLkGN43dNhBf1LqjsV9jkKMZbVfYXuwg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-signing": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.451.0.tgz", - "integrity": "sha512-s5ZlcIoLNg1Huj4Qp06iKniE8nJt/Pj1B/fjhWc6cCPCM7XJYUCejCnRh6C5ZJoBEYodjuwZBejPc1Wh3j+znA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", @@ -632,15 +636,15 @@ "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-s5ZlcIoLNg1Huj4Qp06iKniE8nJt/Pj1B/fjhWc6cCPCM7XJYUCejCnRh6C5ZJoBEYodjuwZBejPc1Wh3j+znA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.451.0.tgz", - "integrity": "sha512-8NM/0JiKLNvT9wtAQVl1DFW0cEO7OvZyLSUBLNLTHqyvOZxKaZ8YFk7d8PL6l76LeUKRxq4NMxfZQlUIRe0eSA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@aws-sdk/util-endpoints": "3.451.0", @@ -648,15 +652,15 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-8NM/0JiKLNvT9wtAQVl1DFW0cEO7OvZyLSUBLNLTHqyvOZxKaZ8YFk7d8PL6l76LeUKRxq4NMxfZQlUIRe0eSA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/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==", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^2.1.5", "@smithy/types": "^2.5.0", @@ -664,15 +668,15 @@ "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-3iMf4OwzrFb4tAAmoROXaiORUk2FvSejnHIw/XHvf/jjR4EqGGF95NZP/n/MeFZMizJWVssrwS412GmoEyoqhg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/token-providers": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.451.0.tgz", - "integrity": "sha512-ij1L5iUbn6CwxVOT1PG4NFjsrsKN9c4N1YEM0lkl6DwmaNOscjLKGSNyj9M118vSWsOs1ZDbTwtj++h0O/BWrQ==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -712,63 +716,65 @@ "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-ij1L5iUbn6CwxVOT1PG4NFjsrsKN9c4N1YEM0lkl6DwmaNOscjLKGSNyj9M118vSWsOs1ZDbTwtj++h0O/BWrQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/types": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.451.0.tgz", - "integrity": "sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.451.0.tgz", - "integrity": "sha512-giqLGBTnRIcKkDqwU7+GQhKbtJ5Ku35cjGQIfMyOga6pwTBUbaK0xW1Sdd8sBQ1GhApscnChzI9o/R9x0368vw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/util-endpoints": "^1.0.4", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-giqLGBTnRIcKkDqwU7+GQhKbtJ5Ku35cjGQIfMyOga6pwTBUbaK0xW1Sdd8sBQ1GhApscnChzI9o/R9x0368vw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.451.0.tgz", - "integrity": "sha512-Ws5mG3J0TQifH7OTcMrCTexo7HeSAc3cBgjfhS/ofzPUzVCtsyg0G7I6T7wl7vJJETix2Kst2cpOsxygPgPD9w==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/types": "^2.5.0", "bowser": "^2.11.0", "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.451.0.tgz", - "integrity": "sha512-TBzm6P+ql4mkGFAjPlO1CI+w3yUT+NulaiALjl/jNX/nnUp6HsJsVxJf4nVFQTG5KRV0iqMypcs7I3KIhH+LmA==", + }, "dev": true, + "integrity": "sha512-Ws5mG3J0TQifH7OTcMrCTexo7HeSAc3cBgjfhS/ofzPUzVCtsyg0G7I6T7wl7vJJETix2Kst2cpOsxygPgPD9w==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.451.0.tgz", + "version": "3.451.0" + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-user-agent-node": { "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/node-config-provider": "^2.1.5", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" }, + "integrity": "sha512-TBzm6P+ql4mkGFAjPlO1CI+w3yUT+NulaiALjl/jNX/nnUp6HsJsVxJf4nVFQTG5KRV0iqMypcs7I3KIhH+LmA==", "peerDependencies": { "aws-crt": ">=1.0.0" }, @@ -776,35 +782,33 @@ "aws-crt": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/@smithy/protocol-http": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", - "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "version": "3.0.9" }, "node_modules/@aws-sdk/client-cloudformation/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" - } + }, + "dev": true, + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "version": "8.3.2" }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.398.0.tgz", - "integrity": "sha512-Pr/S1f8R2FsJ8DwBC6g0CSdtZNNV5dMHhlIi+t8YAmCJvP4KT+UhzFjbvQRINlBRLFuGUuP7p5vRcGVELD3+wA==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -843,15 +847,15 @@ "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-Pr/S1f8R2FsJ8DwBC6g0CSdtZNNV5dMHhlIi+t8YAmCJvP4KT+UhzFjbvQRINlBRLFuGUuP7p5vRcGVELD3+wA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/client-route-53": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-route-53/-/client-route-53-3.398.0.tgz", - "integrity": "sha512-Aab11et2VY1pE3C5pqZoVZPU5BP1iNhRufK27wQ1bCy/SiRyqvhXKAZ7YPkP9vHDIAFejp9/PSJPy17v/GUwuw==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -894,15 +898,15 @@ "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-Aab11et2VY1pE3C5pqZoVZPU5BP1iNhRufK27wQ1bCy/SiRyqvhXKAZ7YPkP9vHDIAFejp9/PSJPy17v/GUwuw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-route-53/-/client-route-53-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/client-s3": { - "version": "3.400.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.400.0.tgz", - "integrity": "sha512-lnv0pb79Czl8fCMs/z7yM56LvoKTri1I4jX/V33trHMFKPQDoy8i24wxG8+TZl3MUmnUyoQS7tlukh7IFkii1Q==", - "dev": true, "dependencies": { "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", @@ -959,15 +963,15 @@ "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-lnv0pb79Czl8fCMs/z7yM56LvoKTri1I4jX/V33trHMFKPQDoy8i24wxG8+TZl3MUmnUyoQS7tlukh7IFkii1Q==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.400.0.tgz", + "version": "3.400.0" }, "node_modules/@aws-sdk/client-sso": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.398.0.tgz", - "integrity": "sha512-CygL0jhfibw4kmWXG/3sfZMFNjcXo66XUuPC4BqZBk8Rj5vFoxp1vZeMkDLzTIk97Nvo5J5Bh+QnXKhub6AckQ==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -1003,15 +1007,15 @@ "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-CygL0jhfibw4kmWXG/3sfZMFNjcXo66XUuPC4BqZBk8Rj5vFoxp1vZeMkDLzTIk97Nvo5J5Bh+QnXKhub6AckQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/client-sts": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.398.0.tgz", - "integrity": "sha512-/3Pa9wLMvBZipKraq3AtbmTfXW6q9kyvhwOno64f1Fz7kFb8ijQFMGoATS70B2pGEZTlxkUqJFWDiisT6Q6dFg==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -1051,93 +1055,93 @@ "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-/3Pa9wLMvBZipKraq3AtbmTfXW6q9kyvhwOno64f1Fz7kFb8ijQFMGoATS70B2pGEZTlxkUqJFWDiisT6Q6dFg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/config-resolver": { - "version": "3.374.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.374.0.tgz", - "integrity": "sha512-eTSbmpcgZ97o7PuFls8pH1344OS03nfqq1NO9HxxvoYoZ6DFfUO7kqKeNUhP9LxOF7slyHXajDT7eoPclGnTuw==", - "deprecated": "This package has moved to @smithy/config-resolver", - "dev": true, "dependencies": { "@smithy/config-resolver": "^1.0.1", "tslib": "^2.5.0" }, + "deprecated": "This package has moved to @smithy/config-resolver", + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-eTSbmpcgZ97o7PuFls8pH1344OS03nfqq1NO9HxxvoYoZ6DFfUO7kqKeNUhP9LxOF7slyHXajDT7eoPclGnTuw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.374.0.tgz", + "version": "3.374.0" }, "node_modules/@aws-sdk/config-resolver/node_modules/@smithy/config-resolver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-1.1.0.tgz", - "integrity": "sha512-7WD9eZHp46BxAjNGHJLmxhhyeiNWkBdVStd7SUJPUZqQGeIO/REtIrcIfKUfdiHTQ9jyu2SYoqvzqqaFc6987w==", - "dev": true, "dependencies": { "@smithy/types": "^1.2.0", "@smithy/util-config-provider": "^1.1.0", "@smithy/util-middleware": "^1.1.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-7WD9eZHp46BxAjNGHJLmxhhyeiNWkBdVStd7SUJPUZqQGeIO/REtIrcIfKUfdiHTQ9jyu2SYoqvzqqaFc6987w==", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/config-resolver/node_modules/@smithy/types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", - "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/@aws-sdk/config-resolver/node_modules/@smithy/util-config-provider": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-1.1.0.tgz", - "integrity": "sha512-rQ47YpNmF6Is4I9GiE3T3+0xQ+r7RKRKbmHYyGSbyep/0cSf9kteKcI0ssJTvveJ1K4QvwrxXj1tEFp/G2UqxQ==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-rQ47YpNmF6Is4I9GiE3T3+0xQ+r7RKRKbmHYyGSbyep/0cSf9kteKcI0ssJTvveJ1K4QvwrxXj1tEFp/G2UqxQ==", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/config-resolver/node_modules/@smithy/util-middleware": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.1.0.tgz", - "integrity": "sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.1.0.tgz", + "version": "1.1.0" }, "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==", - "dev": true, "dependencies": { "@smithy/smithy-client": "^2.1.15", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-SamWW2zHEf1ZKe3j1w0Piauryl8BQIlej0TBS18A4ACzhjhWXhCs13bO1S88LvPR5mBFXok3XOT6zPOnKDFktw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.398.0.tgz", - "integrity": "sha512-MFUhy1YayHg5ypRTk4OTfDumQRP+OJBagaGv14kA8DzhKH1sNrU4HV7A7y2J4SvkN5hG/KnLJqxpakCtB2/O2g==", - "dev": true, "dependencies": { "@aws-sdk/client-cognito-identity": "3.398.0", "@aws-sdk/types": "3.398.0", @@ -1145,30 +1149,30 @@ "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-MFUhy1YayHg5ypRTk4OTfDumQRP+OJBagaGv14kA8DzhKH1sNrU4HV7A7y2J4SvkN5hG/KnLJqxpakCtB2/O2g==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.398.0.tgz", - "integrity": "sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/property-provider": "^2.0.0", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.398.0.tgz", - "integrity": "sha512-AsK1lStK3nB9Cn6S6ODb1ktGh7SRejsNVQVKX3t5d3tgOaX+aX1Iwy8FzM/ZEN8uCloeRifUGIY9uQFygg5mSw==", - "dev": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.398.0", "@aws-sdk/credential-provider-process": "3.398.0", @@ -1181,15 +1185,15 @@ "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-AsK1lStK3nB9Cn6S6ODb1ktGh7SRejsNVQVKX3t5d3tgOaX+aX1Iwy8FzM/ZEN8uCloeRifUGIY9uQFygg5mSw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.398.0.tgz", - "integrity": "sha512-odmI/DSKfuWUYeDnGTCEHBbC8/MwnF6yEq874zl6+owoVv0ZsYP8qBHfiJkYqrwg7wQ7Pi40sSAPC1rhesGwzg==", - "dev": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.398.0", "@aws-sdk/credential-provider-ini": "3.398.0", @@ -1203,15 +1207,15 @@ "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-odmI/DSKfuWUYeDnGTCEHBbC8/MwnF6yEq874zl6+owoVv0ZsYP8qBHfiJkYqrwg7wQ7Pi40sSAPC1rhesGwzg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.398.0.tgz", - "integrity": "sha512-WrkBL1W7TXN508PA9wRXPFtzmGpVSW98gDaHEaa8GolAPHMPa5t2QcC/z/cFpglzrcVv8SA277zu9Z8tELdZhg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/property-provider": "^2.0.0", @@ -1219,15 +1223,15 @@ "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-WrkBL1W7TXN508PA9wRXPFtzmGpVSW98gDaHEaa8GolAPHMPa5t2QcC/z/cFpglzrcVv8SA277zu9Z8tELdZhg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.398.0.tgz", - "integrity": "sha512-2Dl35587xbnzR/GGZqA2MnFs8+kS4wbHQO9BioU0okA+8NRueohNMdrdQmQDdSNK4BfIpFspiZmFkXFNyEAfgw==", - "dev": true, "dependencies": { "@aws-sdk/client-sso": "3.398.0", "@aws-sdk/token-providers": "3.398.0", @@ -1237,30 +1241,30 @@ "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-2Dl35587xbnzR/GGZqA2MnFs8+kS4wbHQO9BioU0okA+8NRueohNMdrdQmQDdSNK4BfIpFspiZmFkXFNyEAfgw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.398.0.tgz", - "integrity": "sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/property-provider": "^2.0.0", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.398.0.tgz", - "integrity": "sha512-355vXmImn2e85mIWSYDVb101AF2lIVHKNCaH6sV1U/8i0ZOXh2cJYNdkRYrxNt1ezDB0k97lSKvuDx7RDvJyRg==", - "dev": true, "dependencies": { "@aws-sdk/client-cognito-identity": "3.398.0", "@aws-sdk/client-sso": "3.398.0", @@ -1278,15 +1282,15 @@ "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-355vXmImn2e85mIWSYDVb101AF2lIVHKNCaH6sV1U/8i0ZOXh2cJYNdkRYrxNt1ezDB0k97lSKvuDx7RDvJyRg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.398.0.tgz", - "integrity": "sha512-+iDHiRofK/vIY94RWAXkSnR4rBPzc2dPHmLp+FDKywq1y708H9W7TOT37dpn+KSFeO4k2FfddFjzWBHsaeakCA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@aws-sdk/util-arn-parser": "3.310.0", @@ -1295,30 +1299,30 @@ "@smithy/util-config-provider": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-+iDHiRofK/vIY94RWAXkSnR4rBPzc2dPHmLp+FDKywq1y708H9W7TOT37dpn+KSFeO4k2FfddFjzWBHsaeakCA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.398.0.tgz", - "integrity": "sha512-d6he+Qqwh1yqml9duXSv5iKJ2lS0PVrF2UEsVew2GFxfUif0E/davTZJjvWtnelbuIGcTP+wDKVVjLwBN2sN/g==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/protocol-http": "^2.0.5", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-d6he+Qqwh1yqml9duXSv5iKJ2lS0PVrF2UEsVew2GFxfUif0E/davTZJjvWtnelbuIGcTP+wDKVVjLwBN2sN/g==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.400.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.400.0.tgz", - "integrity": "sha512-lpsumd5/G+eAMTr61h/cJQZ8+i+xzC6OG3bvUcbRHqcjN49XgeNLcPfYcr6Rzf0QHxmuCN4te/4XGU3Fif2YVA==", - "dev": true, "dependencies": { "@aws-crypto/crc32": "3.0.0", "@aws-crypto/crc32c": "3.0.0", @@ -1329,102 +1333,102 @@ "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-lpsumd5/G+eAMTr61h/cJQZ8+i+xzC6OG3bvUcbRHqcjN49XgeNLcPfYcr6Rzf0QHxmuCN4te/4XGU3Fif2YVA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.400.0.tgz", + "version": "3.400.0" }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.398.0.tgz", - "integrity": "sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/protocol-http": "^2.0.5", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.398.0.tgz", - "integrity": "sha512-it+olJf1Lf2bmH8OL/N1jMOFB0zEVYs4rIzgFrluTRCuPatRuDi4LsXS8zqYxkBa05JE8JmqwW5gCzAmWyLLqw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-it+olJf1Lf2bmH8OL/N1jMOFB0zEVYs4rIzgFrluTRCuPatRuDi4LsXS8zqYxkBa05JE8JmqwW5gCzAmWyLLqw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.398.0.tgz", - "integrity": "sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.398.0.tgz", - "integrity": "sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/protocol-http": "^2.0.5", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-sdk-api-gateway": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-api-gateway/-/middleware-sdk-api-gateway-3.398.0.tgz", - "integrity": "sha512-SpDimzekPpOQTtkUScK8sMRY+JsAAGb5LvqSmf7kfYfyt0x+F+MAdAgPcO874GApJC7gu9++lqR5qP9B+LBNOw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/protocol-http": "^2.0.5", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-SpDimzekPpOQTtkUScK8sMRY+JsAAGb5LvqSmf7kfYfyt0x+F+MAdAgPcO874GApJC7gu9++lqR5qP9B+LBNOw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-api-gateway/-/middleware-sdk-api-gateway-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-sdk-route53": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-route53/-/middleware-sdk-route53-3.398.0.tgz", - "integrity": "sha512-1biZeNxfPLBTgCdK0xCD9MyO3i0xPhY+DjiD59HrxXHaYrMDhfDapbjmi+6QmoOLGTvWGIyKUo4Sqp6Ly1wT5w==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-1biZeNxfPLBTgCdK0xCD9MyO3i0xPhY+DjiD59HrxXHaYrMDhfDapbjmi+6QmoOLGTvWGIyKUo4Sqp6Ly1wT5w==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-route53/-/middleware-sdk-route53-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.398.0.tgz", - "integrity": "sha512-yweSMc/TyiFtqc52hFMKQJvTm3i1KCoW5mB3o/Sla6zsHBh+nS6TTaBmo+2kcDIR7AKODwW+FLCTHWiazb7J3Q==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@aws-sdk/util-arn-parser": "3.310.0", @@ -1432,30 +1436,30 @@ "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-yweSMc/TyiFtqc52hFMKQJvTm3i1KCoW5mB3o/Sla6zsHBh+nS6TTaBmo+2kcDIR7AKODwW+FLCTHWiazb7J3Q==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.398.0.tgz", - "integrity": "sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ==", - "dev": true, "dependencies": { "@aws-sdk/middleware-signing": "3.398.0", "@aws-sdk/types": "3.398.0", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.398.0.tgz", - "integrity": "sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/property-provider": "^2.0.0", @@ -1465,29 +1469,29 @@ "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.398.0.tgz", - "integrity": "sha512-QtKr/hPcRugKSIZAH4+7hbUfdW7Lg+OQvD25nJn7ic1JHRZ+eDctEFxdsmnt68lE6aZxOcHCWHAW6/umcA93Dw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-QtKr/hPcRugKSIZAH4+7hbUfdW7Lg+OQvD25nJn7ic1JHRZ+eDctEFxdsmnt68lE6aZxOcHCWHAW6/umcA93Dw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.398.0.tgz", - "integrity": "sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@aws-sdk/util-endpoints": "3.398.0", @@ -1495,82 +1499,82 @@ "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } - }, + }, + "integrity": "sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.398.0.tgz", + "version": "3.398.0" + }, "node_modules/@aws-sdk/node-config-provider": { - "version": "3.374.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.374.0.tgz", - "integrity": "sha512-RsUeDTtslQ9b/slyjAuVqEVZLnZ/jVdNbLaY30oF6FhvZnKpoiN8m7z4oiDjGQ6K2lVuQNdSRGjzI22W+mLwug==", - "deprecated": "This package has moved to @smithy/node-config-provider", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^1.0.1", "tslib": "^2.5.0" }, + "deprecated": "This package has moved to @smithy/node-config-provider", + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-RsUeDTtslQ9b/slyjAuVqEVZLnZ/jVdNbLaY30oF6FhvZnKpoiN8m7z4oiDjGQ6K2lVuQNdSRGjzI22W+mLwug==", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.374.0.tgz", + "version": "3.374.0" }, "node_modules/@aws-sdk/node-config-provider/node_modules/@smithy/node-config-provider": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-1.1.0.tgz", - "integrity": "sha512-2G4TlzUnmTrUY26VKTonQqydwb+gtM/mcl+TqDP8CnWtJKVL8ElPpKgLGScP04bPIRY9x2/10lDdoaRXDqPuCw==", - "dev": true, "dependencies": { "@smithy/property-provider": "^1.2.0", "@smithy/shared-ini-file-loader": "^1.1.0", "@smithy/types": "^1.2.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-2G4TlzUnmTrUY26VKTonQqydwb+gtM/mcl+TqDP8CnWtJKVL8ElPpKgLGScP04bPIRY9x2/10lDdoaRXDqPuCw==", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/node-config-provider/node_modules/@smithy/property-provider": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-1.2.0.tgz", - "integrity": "sha512-qlJd9gT751i4T0t/hJAyNGfESfi08Fek8QiLcysoKPgR05qHhG0OYhlaCJHhpXy4ECW0lHyjvFM1smrCLIXVfw==", - "dev": true, "dependencies": { "@smithy/types": "^1.2.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-qlJd9gT751i4T0t/hJAyNGfESfi08Fek8QiLcysoKPgR05qHhG0OYhlaCJHhpXy4ECW0lHyjvFM1smrCLIXVfw==", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/@aws-sdk/node-config-provider/node_modules/@smithy/shared-ini-file-loader": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-1.1.0.tgz", - "integrity": "sha512-S/v33zvCWzFyGZGlsEF0XsZtNNR281UhR7byk3nRfsgw5lGpg51rK/zjMgulM+h6NSuXaFILaYrw1I1v4kMcuA==", - "dev": true, "dependencies": { "@smithy/types": "^1.2.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-S/v33zvCWzFyGZGlsEF0XsZtNNR281UhR7byk3nRfsgw5lGpg51rK/zjMgulM+h6NSuXaFILaYrw1I1v4kMcuA==", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/node-config-provider/node_modules/@smithy/types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", - "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.398.0.tgz", - "integrity": "sha512-8fTqTxRDWE03T7ClaWlCfbwuSae//01XMNVy2a9g5QgaelQh7ZZyU3ZIJiV8gIj8v6ZM0NGn9Bz1liI/vmNmcw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/protocol-http": "^2.0.5", @@ -1578,9 +1582,11 @@ "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" }, + "integrity": "sha512-8fTqTxRDWE03T7ClaWlCfbwuSae//01XMNVy2a9g5QgaelQh7ZZyU3ZIJiV8gIj8v6ZM0NGn9Bz1liI/vmNmcw==", "peerDependencies": { "@aws-sdk/signature-v4-crt": "^3.118.0" }, @@ -1588,77 +1594,75 @@ "@aws-sdk/signature-v4-crt": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/smithy-client": { - "version": "3.374.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.374.0.tgz", - "integrity": "sha512-YQBdO/Nv5EXBg/qfMF4GgYYLNN3Y/06MyuVBYILC1TKAnMoLy2FV0VOYyediagepAcWPdJqyUq4MCNNBy0CPRg==", - "deprecated": "This package has moved to @smithy/smithy-client", - "dev": true, "dependencies": { "@smithy/smithy-client": "^1.0.3", "tslib": "^2.5.0" }, + "deprecated": "This package has moved to @smithy/smithy-client", + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-YQBdO/Nv5EXBg/qfMF4GgYYLNN3Y/06MyuVBYILC1TKAnMoLy2FV0VOYyediagepAcWPdJqyUq4MCNNBy0CPRg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.374.0.tgz", + "version": "3.374.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-5imgGUlZL4dW4YWdMYAKLmal9ny/tlenM81QZY7xYyb76z9Z/QOg7oM5Ak9HQl8QfFTlGVWwcMXl+54jroRgEQ==", - "dev": true, "dependencies": { "@smithy/types": "^1.2.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-5imgGUlZL4dW4YWdMYAKLmal9ny/tlenM81QZY7xYyb76z9Z/QOg7oM5Ak9HQl8QfFTlGVWwcMXl+54jroRgEQ==", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/fetch-http-handler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-1.1.0.tgz", - "integrity": "sha512-N22C9R44u5WGlcY+Wuv8EXmCAq62wWwriRAuoczMEwAIjPbvHSthyPSLqI4S7kAST1j6niWg8kwpeJ3ReAv3xg==", - "dev": true, "dependencies": { "@smithy/protocol-http": "^1.2.0", "@smithy/querystring-builder": "^1.1.0", "@smithy/types": "^1.2.0", "@smithy/util-base64": "^1.1.0", "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-N22C9R44u5WGlcY+Wuv8EXmCAq62wWwriRAuoczMEwAIjPbvHSthyPSLqI4S7kAST1j6niWg8kwpeJ3ReAv3xg==", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/is-array-buffer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz", - "integrity": "sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/middleware-stack": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-1.1.0.tgz", - "integrity": "sha512-XynYiIvXNea2BbLcppvpNK0zu8o2woJqgnmxqYTn4FWagH/Hr2QIk8LOsUz7BIJ4tooFhmx8urHKCdlPbbPDCA==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-XynYiIvXNea2BbLcppvpNK0zu8o2woJqgnmxqYTn4FWagH/Hr2QIk8LOsUz7BIJ4tooFhmx8urHKCdlPbbPDCA==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/node-http-handler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-1.1.0.tgz", - "integrity": "sha512-d3kRriEgaIiGXLziAM8bjnaLn1fthCJeTLZIwEIpzQqe6yPX0a+yQoLCTyjb2fvdLwkMoG4p7THIIB5cj5lkbg==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^1.1.0", "@smithy/protocol-http": "^1.2.0", @@ -1666,107 +1670,107 @@ "@smithy/types": "^1.2.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-d3kRriEgaIiGXLziAM8bjnaLn1fthCJeTLZIwEIpzQqe6yPX0a+yQoLCTyjb2fvdLwkMoG4p7THIIB5cj5lkbg==", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/protocol-http": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz", - "integrity": "sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==", - "dev": true, "dependencies": { "@smithy/types": "^1.2.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/querystring-builder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-1.1.0.tgz", - "integrity": "sha512-gDEi4LxIGLbdfjrjiY45QNbuDmpkwh9DX4xzrR2AzjjXpxwGyfSpbJaYhXARw9p17VH0h9UewnNQXNwaQyYMDA==", - "dev": true, "dependencies": { "@smithy/types": "^1.2.0", "@smithy/util-uri-escape": "^1.1.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-gDEi4LxIGLbdfjrjiY45QNbuDmpkwh9DX4xzrR2AzjjXpxwGyfSpbJaYhXARw9p17VH0h9UewnNQXNwaQyYMDA==", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/smithy-client": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-1.1.0.tgz", - "integrity": "sha512-j32SGgVhv2G9nBTmel9u3OXux8KG20ssxuFakJrEeDug3kqbl1qrGzVLCe+Eib402UDtA0Sp1a4NZ2SEXDBxag==", - "dev": true, "dependencies": { "@smithy/middleware-stack": "^1.1.0", "@smithy/types": "^1.2.0", "@smithy/util-stream": "^1.1.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-j32SGgVhv2G9nBTmel9u3OXux8KG20ssxuFakJrEeDug3kqbl1qrGzVLCe+Eib402UDtA0Sp1a4NZ2SEXDBxag==", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", - "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-base64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-1.1.0.tgz", - "integrity": "sha512-FpYmDmVbOXAxqvoVCwqehUN0zXS+lN8V7VS9O7I8MKeVHdSTsZzlwiMEvGoyTNOXWn8luF4CTDYgNHnZViR30g==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^1.1.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-FpYmDmVbOXAxqvoVCwqehUN0zXS+lN8V7VS9O7I8MKeVHdSTsZzlwiMEvGoyTNOXWn8luF4CTDYgNHnZViR30g==", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz", - "integrity": "sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^1.1.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-hex-encoding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", - "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-1.1.0.tgz", - "integrity": "sha512-w3lsdGsntaLQIrwDWJkIFKrFscgZXwU/oxsse09aSTNv5TckPhDeYea3LhsDrU5MGAG3vprhVZAKr33S45coVA==", - "dev": true, "dependencies": { "@smithy/fetch-http-handler": "^1.1.0", "@smithy/node-http-handler": "^1.1.0", @@ -1777,40 +1781,40 @@ "@smithy/util-utf8": "^1.1.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-w3lsdGsntaLQIrwDWJkIFKrFscgZXwU/oxsse09aSTNv5TckPhDeYea3LhsDrU5MGAG3vprhVZAKr33S45coVA==", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-uri-escape": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz", - "integrity": "sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/smithy-client/node_modules/@smithy/util-utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.1.0.tgz", - "integrity": "sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^1.1.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/token-providers": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.398.0.tgz", - "integrity": "sha512-nrYgjzavGCKJL/48Vt0EL+OlIc5UZLfNGpgyUW9cv3XZwl+kXV0QB+HH0rHZZLfpbBgZ2RBIJR9uD5ieu/6hpQ==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -1848,122 +1852,124 @@ "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-nrYgjzavGCKJL/48Vt0EL+OlIc5UZLfNGpgyUW9cv3XZwl+kXV0QB+HH0rHZZLfpbBgZ2RBIJR9uD5ieu/6hpQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/types": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", - "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", - "dev": true, "dependencies": { "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", - "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "version": "3.310.0" }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.398.0.tgz", - "integrity": "sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@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==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "version": "3.310.0" }, "node_modules/@aws-sdk/util-retry": { - "version": "3.374.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.374.0.tgz", - "integrity": "sha512-0p/trhYU+Ys8j3vMnWCvAkSOL6JRMooV9dVlQ+o7EHbQs9kDtnyucMUHU09ahHSIPTA/n/013hv7bzIt3MyKQg==", - "deprecated": "This package has moved to @smithy/util-retry", - "dev": true, "dependencies": { "@smithy/util-retry": "^1.0.3", "tslib": "^2.5.0" }, + "deprecated": "This package has moved to @smithy/util-retry", + "dev": true, "engines": { "node": ">= 14.0.0" - } + }, + "integrity": "sha512-0p/trhYU+Ys8j3vMnWCvAkSOL6JRMooV9dVlQ+o7EHbQs9kDtnyucMUHU09ahHSIPTA/n/013hv7bzIt3MyKQg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.374.0.tgz", + "version": "3.374.0" }, "node_modules/@aws-sdk/util-retry/node_modules/@smithy/service-error-classification": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-1.1.0.tgz", - "integrity": "sha512-OCTEeJ1igatd5kFrS2VDlYbainNNpf7Lj1siFOxnRWqYOP9oNvC5HOJBd3t+Z8MbrmehBtuDJ2QqeBsfeiNkww==", "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-OCTEeJ1igatd5kFrS2VDlYbainNNpf7Lj1siFOxnRWqYOP9oNvC5HOJBd3t+Z8MbrmehBtuDJ2QqeBsfeiNkww==", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/util-retry/node_modules/@smithy/util-retry": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-1.1.0.tgz", - "integrity": "sha512-ygQW5HBqYXpR3ua09UciS0sL7UGJzGiktrKkOuEJwARoUuzz40yaEGU6xd9Gs7KBmAaFC8gMfnghHtwZ2nyBCQ==", - "dev": true, "dependencies": { "@smithy/service-error-classification": "^1.1.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">= 14.0.0" - } + }, + "integrity": "sha512-ygQW5HBqYXpR3ua09UciS0sL7UGJzGiktrKkOuEJwARoUuzz40yaEGU6xd9Gs7KBmAaFC8gMfnghHtwZ2nyBCQ==", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.398.0.tgz", - "integrity": "sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/types": "^2.2.2", "bowser": "^2.11.0", "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.398.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.398.0.tgz", - "integrity": "sha512-RTVQofdj961ej4//fEkppFf4KXqKGMTCqJYghx3G0C/MYXbg7MGl7LjfNGtJcboRE8pfHHQ/TUWBDA7RIAPPlQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.398.0", "@smithy/node-config-provider": "^2.0.5", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" }, + "integrity": "sha512-RTVQofdj961ej4//fEkppFf4KXqKGMTCqJYghx3G0C/MYXbg7MGl7LjfNGtJcboRE8pfHHQ/TUWBDA7RIAPPlQ==", "peerDependencies": { "aws-crt": ">=1.0.0" }, @@ -1971,90 +1977,88 @@ "aws-crt": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.398.0.tgz", + "version": "3.398.0" }, "node_modules/@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==", - "dev": true, "dependencies": { "tslib": "^2.3.1" - } + }, + "dev": true, + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "version": "3.259.0" }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", - "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "version": "3.310.0" }, "node_modules/@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "dev": true, "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "version": "2.2.5" }, "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "dev": true, "dependencies": { "debug": "^4.1.1" - } + }, + "dev": true, + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "dev": true, "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, + "dev": true, "engines": { "node": ">= 8" - } + }, + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "version": "2.1.5" }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" - } + }, + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, + "dev": true, "engines": { "node": ">= 8" - } + }, + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "version": "1.2.8" }, "node_modules/@serverless/dashboard-plugin": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@serverless/dashboard-plugin/-/dashboard-plugin-7.1.0.tgz", - "integrity": "sha512-mAiTU2ERsDHdCrXJa/tihh/r+8ZwSuYYBqln3SkwuBD/49ct9QrK7S00cpiqFoY/geMFlHpOkriGzCPz6UP/rw==", - "dev": true, "dependencies": { "@aws-sdk/client-cloudformation": "^3.410.0", "@aws-sdk/client-sts": "^3.410.0", @@ -2080,15 +2084,15 @@ "uuid": "^8.3.2", "yamljs": "^0.3.0" }, + "dev": true, "engines": { "node": ">=12.0" - } + }, + "integrity": "sha512-mAiTU2ERsDHdCrXJa/tihh/r+8ZwSuYYBqln3SkwuBD/49ct9QrK7S00cpiqFoY/geMFlHpOkriGzCPz6UP/rw==", + "resolved": "https://registry.npmjs.org/@serverless/dashboard-plugin/-/dashboard-plugin-7.1.0.tgz", + "version": "7.1.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/client-sso": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.451.0.tgz", - "integrity": "sha512-KkYSke3Pdv3MfVH/5fT528+MKjMyPKlcLcd4zQb0x6/7Bl7EHrPh1JZYjzPLHelb+UY5X0qN8+cb8iSu1eiwIQ==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -2127,15 +2131,15 @@ "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-KkYSke3Pdv3MfVH/5fT528+MKjMyPKlcLcd4zQb0x6/7Bl7EHrPh1JZYjzPLHelb+UY5X0qN8+cb8iSu1eiwIQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/client-sts": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.451.0.tgz", - "integrity": "sha512-48NcIRxWBdP1fom6RSjwn2R2u7SE7eeV3p+c4s7ukEOfrHhBxJfn3EpqBVQMGzdiU55qFImy+Fe81iA2lXq3Jw==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -2178,30 +2182,30 @@ "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-48NcIRxWBdP1fom6RSjwn2R2u7SE7eeV3p+c4s7ukEOfrHhBxJfn3EpqBVQMGzdiU55qFImy+Fe81iA2lXq3Jw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.451.0.tgz", - "integrity": "sha512-9dAav7DcRgaF7xCJEQR5ER9ErXxnu/tdnVJ+UPmb1NPeIZdESv1A3lxFDEq1Fs8c4/lzAj9BpshGyJVIZwZDKg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-9dAav7DcRgaF7xCJEQR5ER9ErXxnu/tdnVJ+UPmb1NPeIZdESv1A3lxFDEq1Fs8c4/lzAj9BpshGyJVIZwZDKg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.451.0.tgz", - "integrity": "sha512-TySt64Ci5/ZbqFw1F9Z0FIGvYx5JSC9e6gqDnizIYd8eMnn8wFRUscRrD7pIHKfrhvVKN5h0GdYovmMO/FMCBw==", - "dev": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.451.0", "@aws-sdk/credential-provider-process": "3.451.0", @@ -2214,15 +2218,15 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-TySt64Ci5/ZbqFw1F9Z0FIGvYx5JSC9e6gqDnizIYd8eMnn8wFRUscRrD7pIHKfrhvVKN5h0GdYovmMO/FMCBw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.451.0.tgz", - "integrity": "sha512-AEwM1WPyxUdKrKyUsKyFqqRFGU70e4qlDyrtBxJnSU9NRLZI8tfEZ67bN7fHSxBUBODgDXpMSlSvJiBLh5/3pw==", - "dev": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.451.0", "@aws-sdk/credential-provider-ini": "3.451.0", @@ -2236,15 +2240,15 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-AEwM1WPyxUdKrKyUsKyFqqRFGU70e4qlDyrtBxJnSU9NRLZI8tfEZ67bN7fHSxBUBODgDXpMSlSvJiBLh5/3pw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.451.0.tgz", - "integrity": "sha512-HQywSdKeD5PErcLLnZfSyCJO+6T+ZyzF+Lm/QgscSC+CbSUSIPi//s15qhBRVely/3KBV6AywxwNH+5eYgt4lQ==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", @@ -2252,15 +2256,15 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-HQywSdKeD5PErcLLnZfSyCJO+6T+ZyzF+Lm/QgscSC+CbSUSIPi//s15qhBRVely/3KBV6AywxwNH+5eYgt4lQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.451.0.tgz", - "integrity": "sha512-Usm/N51+unOt8ID4HnQzxIjUJDrkAQ1vyTOC0gSEEJ7h64NSSPGD5yhN7il5WcErtRd3EEtT1a8/GTC5TdBctg==", - "dev": true, "dependencies": { "@aws-sdk/client-sso": "3.451.0", "@aws-sdk/token-providers": "3.451.0", @@ -2270,89 +2274,89 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-Usm/N51+unOt8ID4HnQzxIjUJDrkAQ1vyTOC0gSEEJ7h64NSSPGD5yhN7il5WcErtRd3EEtT1a8/GTC5TdBctg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.451.0.tgz", - "integrity": "sha512-Xtg3Qw65EfDjWNG7o2xD6sEmumPfsy3WDGjk2phEzVg8s7hcZGxf5wYwe6UY7RJvlEKrU0rFA+AMn6Hfj5oOzg==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-Xtg3Qw65EfDjWNG7o2xD6sEmumPfsy3WDGjk2phEzVg8s7hcZGxf5wYwe6UY7RJvlEKrU0rFA+AMn6Hfj5oOzg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.451.0.tgz", - "integrity": "sha512-j8a5jAfhWmsK99i2k8oR8zzQgXrsJtgrLxc3js6U+525mcZytoiDndkWTmD5fjJ1byU1U2E5TaPq+QJeDip05Q==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/protocol-http": "^3.0.9", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-j8a5jAfhWmsK99i2k8oR8zzQgXrsJtgrLxc3js6U+525mcZytoiDndkWTmD5fjJ1byU1U2E5TaPq+QJeDip05Q==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-logger": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.451.0.tgz", - "integrity": "sha512-0kHrYEyVeB2QBfP6TfbI240aRtatLZtcErJbhpiNUb+CQPgEL3crIjgVE8yYiJumZ7f0jyjo8HLPkwD1/2APaw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-0kHrYEyVeB2QBfP6TfbI240aRtatLZtcErJbhpiNUb+CQPgEL3crIjgVE8yYiJumZ7f0jyjo8HLPkwD1/2APaw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.451.0.tgz", - "integrity": "sha512-J6jL6gJ7orjHGM70KDRcCP7so/J2SnkN4vZ9YRLTeeZY6zvBuHDjX8GCIgSqPn/nXFXckZO8XSnA7u6+3TAT0w==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/protocol-http": "^3.0.9", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-J6jL6gJ7orjHGM70KDRcCP7so/J2SnkN4vZ9YRLTeeZY6zvBuHDjX8GCIgSqPn/nXFXckZO8XSnA7u6+3TAT0w==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.451.0.tgz", - "integrity": "sha512-UJ6UfVUEgp0KIztxpAeelPXI5MLj9wUtUCqYeIMP7C1ZhoEMNm3G39VLkGN43dNhBf1LqjsV9jkKMZbVfYXuwg==", - "dev": true, "dependencies": { "@aws-sdk/middleware-signing": "3.451.0", "@aws-sdk/types": "3.451.0", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-UJ6UfVUEgp0KIztxpAeelPXI5MLj9wUtUCqYeIMP7C1ZhoEMNm3G39VLkGN43dNhBf1LqjsV9jkKMZbVfYXuwg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-signing": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.451.0.tgz", - "integrity": "sha512-s5ZlcIoLNg1Huj4Qp06iKniE8nJt/Pj1B/fjhWc6cCPCM7XJYUCejCnRh6C5ZJoBEYodjuwZBejPc1Wh3j+znA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/property-provider": "^2.0.0", @@ -2362,15 +2366,15 @@ "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-s5ZlcIoLNg1Huj4Qp06iKniE8nJt/Pj1B/fjhWc6cCPCM7XJYUCejCnRh6C5ZJoBEYodjuwZBejPc1Wh3j+znA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.451.0.tgz", - "integrity": "sha512-8NM/0JiKLNvT9wtAQVl1DFW0cEO7OvZyLSUBLNLTHqyvOZxKaZ8YFk7d8PL6l76LeUKRxq4NMxfZQlUIRe0eSA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@aws-sdk/util-endpoints": "3.451.0", @@ -2378,15 +2382,15 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-8NM/0JiKLNvT9wtAQVl1DFW0cEO7OvZyLSUBLNLTHqyvOZxKaZ8YFk7d8PL6l76LeUKRxq4NMxfZQlUIRe0eSA==", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/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==", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^2.1.5", "@smithy/types": "^2.5.0", @@ -2394,15 +2398,15 @@ "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-3iMf4OwzrFb4tAAmoROXaiORUk2FvSejnHIw/XHvf/jjR4EqGGF95NZP/n/MeFZMizJWVssrwS412GmoEyoqhg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/token-providers": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.451.0.tgz", - "integrity": "sha512-ij1L5iUbn6CwxVOT1PG4NFjsrsKN9c4N1YEM0lkl6DwmaNOscjLKGSNyj9M118vSWsOs1ZDbTwtj++h0O/BWrQ==", - "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -2442,63 +2446,65 @@ "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-ij1L5iUbn6CwxVOT1PG4NFjsrsKN9c4N1YEM0lkl6DwmaNOscjLKGSNyj9M118vSWsOs1ZDbTwtj++h0O/BWrQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/types": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.451.0.tgz", - "integrity": "sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/util-endpoints": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.451.0.tgz", - "integrity": "sha512-giqLGBTnRIcKkDqwU7+GQhKbtJ5Ku35cjGQIfMyOga6pwTBUbaK0xW1Sdd8sBQ1GhApscnChzI9o/R9x0368vw==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/util-endpoints": "^1.0.4", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-giqLGBTnRIcKkDqwU7+GQhKbtJ5Ku35cjGQIfMyOga6pwTBUbaK0xW1Sdd8sBQ1GhApscnChzI9o/R9x0368vw==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.451.0.tgz", - "integrity": "sha512-Ws5mG3J0TQifH7OTcMrCTexo7HeSAc3cBgjfhS/ofzPUzVCtsyg0G7I6T7wl7vJJETix2Kst2cpOsxygPgPD9w==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/types": "^2.5.0", "bowser": "^2.11.0", "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-Ws5mG3J0TQifH7OTcMrCTexo7HeSAc3cBgjfhS/ofzPUzVCtsyg0G7I6T7wl7vJJETix2Kst2cpOsxygPgPD9w==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.451.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.451.0.tgz", - "integrity": "sha512-TBzm6P+ql4mkGFAjPlO1CI+w3yUT+NulaiALjl/jNX/nnUp6HsJsVxJf4nVFQTG5KRV0iqMypcs7I3KIhH+LmA==", - "dev": true, "dependencies": { "@aws-sdk/types": "3.451.0", "@smithy/node-config-provider": "^2.1.5", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" }, + "integrity": "sha512-TBzm6P+ql4mkGFAjPlO1CI+w3yUT+NulaiALjl/jNX/nnUp6HsJsVxJf4nVFQTG5KRV0iqMypcs7I3KIhH+LmA==", "peerDependencies": { "aws-crt": ">=1.0.0" }, @@ -2506,26 +2512,24 @@ "aws-crt": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.451.0.tgz", + "version": "3.451.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/@smithy/protocol-http": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", - "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "version": "3.0.9" }, "node_modules/@serverless/dashboard-plugin/node_modules/child-process-ext": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/child-process-ext/-/child-process-ext-3.0.2.tgz", - "integrity": "sha512-oBePsLbQpTJFxzwyCvs9yWWF0OEM6vGGepHwt1stqmX7QQqOuDc8j2ywdvAs9Tvi44TT7d9ackqhR4Q10l1u8w==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "es5-ext": "^0.10.62", @@ -2533,80 +2537,80 @@ "split2": "^3.2.2", "stream-promise": "^3.2.0" }, + "dev": true, "engines": { "node": ">=8.0" - } + }, + "integrity": "sha512-oBePsLbQpTJFxzwyCvs9yWWF0OEM6vGGepHwt1stqmX7QQqOuDc8j2ywdvAs9Tvi44TT7d9ackqhR4Q10l1u8w==", + "resolved": "https://registry.npmjs.org/child-process-ext/-/child-process-ext-3.0.2.tgz", + "version": "3.0.2" }, "node_modules/@serverless/dashboard-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, + "dev": true, "engines": { "node": ">=10" - } + }, + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "version": "9.1.0" }, "node_modules/@serverless/dashboard-plugin/node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" }, + "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "version": "7.4.2" }, "node_modules/@serverless/dashboard-plugin/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, "dependencies": { "readable-stream": "^3.0.0" - } + }, + "dev": true, + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "version": "3.2.2" }, "node_modules/@serverless/dashboard-plugin/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/@serverless/dashboard-plugin/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" - } + }, + "dev": true, + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "version": "8.3.2" }, "node_modules/@serverless/event-mocks": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@serverless/event-mocks/-/event-mocks-1.1.1.tgz", - "integrity": "sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==", - "dev": true, "dependencies": { "@types/lodash": "^4.14.123", "lodash": "^4.17.11" - } + }, + "dev": true, + "integrity": "sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==", + "resolved": "https://registry.npmjs.org/@serverless/event-mocks/-/event-mocks-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/@serverless/platform-client": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@serverless/platform-client/-/platform-client-4.4.0.tgz", - "integrity": "sha512-urL7SNefRqC2EOFDcpvm8fyn/06B5yXWneKpyGw7ylGt0Qr9JHZCB9TiUeTkIpPUNz0jTvKUaJ2+M/JNEiaVIA==", - "dev": true, "dependencies": { "adm-zip": "^0.5.5", "archiver": "^5.3.0", @@ -2624,56 +2628,58 @@ "traverse": "^0.6.6", "ws": "^7.5.3" }, + "dev": true, "engines": { "node": ">=10.0" - } + }, + "integrity": "sha512-urL7SNefRqC2EOFDcpvm8fyn/06B5yXWneKpyGw7ylGt0Qr9JHZCB9TiUeTkIpPUNz0jTvKUaJ2+M/JNEiaVIA==", + "resolved": "https://registry.npmjs.org/@serverless/platform-client/-/platform-client-4.4.0.tgz", + "version": "4.4.0" }, "node_modules/@serverless/platform-client/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" - } + }, + "dev": true, + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "version": "1.0.10" }, "node_modules/@serverless/platform-client/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "bin": { + "js-yaml": "bin/js-yaml.js" + }, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } + "dev": true, + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "version": "3.14.1" }, "node_modules/@serverless/platform-client/node_modules/querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "dev": true, "engines": { "node": ">=0.4.x" - } + }, + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "version": "0.2.1" }, "node_modules/@serverless/platform-client/node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "dev": true, "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "version": "5.0.0" }, "node_modules/@serverless/platform-client/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "engines": { "node": ">=8.3.0" }, + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" @@ -2685,13 +2691,11 @@ "utf-8-validate": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "version": "7.5.10" }, "node_modules/@serverless/utils": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-6.15.0.tgz", - "integrity": "sha512-7eDbqKv/OBd11jjdZjUwFGN8sHWkeUqLeHXHQxQ1azja2IM7WIH+z/aLgzR6LhB3/MINNwtjesDpjGqTMj2JKQ==", - "dev": true, "dependencies": { "archive-type": "^4.0.0", "chalk": "^4.1.2", @@ -2727,120 +2731,120 @@ "uuid": "^8.3.2", "write-file-atomic": "^4.0.2" }, + "dev": true, "engines": { "node": ">=12.0" - } + }, + "integrity": "sha512-7eDbqKv/OBd11jjdZjUwFGN8sHWkeUqLeHXHQxQ1azja2IM7WIH+z/aLgzR6LhB3/MINNwtjesDpjGqTMj2JKQ==", + "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-6.15.0.tgz", + "version": "6.15.0" }, "node_modules/@serverless/utils/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "version": "6.0.1" }, "node_modules/@serverless/utils/node_modules/jwt-decode": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "dev": true, "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", - "dev": true + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "version": "3.1.2" }, "node_modules/@serverless/utils/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" - } + }, + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "version": "8.1.1" }, "node_modules/@serverless/utils/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/@serverless/utils/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" - } + }, + "dev": true, + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "version": "8.3.2" }, "node_modules/@serverless/utils/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, + "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + }, + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "version": "4.0.2" }, "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/is?sponsor=1" - } + }, + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "version": "4.6.0" }, "node_modules/@smithy/abort-controller": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.13.tgz", - "integrity": "sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.13.tgz", + "version": "2.0.13" }, "node_modules/@smithy/chunked-blob-reader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", - "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", - "dev": true, "dependencies": { "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", - "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", - "dev": true, "dependencies": { "@smithy/util-base64": "^2.0.0", "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/@smithy/config-resolver": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.18.tgz", - "integrity": "sha512-761sJSgNbvsqcsKW6/WZbrZr4H+0Vp/QKKqwyrxCPwD8BsiPEXNHyYnqNgaeK9xRWYswjon0Uxbpe3DWQo0j/g==", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^2.1.5", "@smithy/types": "^2.5.0", @@ -2848,15 +2852,15 @@ "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-761sJSgNbvsqcsKW6/WZbrZr4H+0Vp/QKKqwyrxCPwD8BsiPEXNHyYnqNgaeK9xRWYswjon0Uxbpe3DWQo0j/g==", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.18.tgz", + "version": "2.0.18" }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.1.tgz", - "integrity": "sha512-gw5G3FjWC6sNz8zpOJgPpH5HGKrpoVFQpToNAwLwJVyI/LJ2jDJRjSKEsM6XI25aRpYjMSE/Qptxx305gN1vHw==", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^2.1.5", "@smithy/property-provider": "^2.0.14", @@ -2864,209 +2868,209 @@ "@smithy/url-parser": "^2.0.13", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-gw5G3FjWC6sNz8zpOJgPpH5HGKrpoVFQpToNAwLwJVyI/LJ2jDJRjSKEsM6XI25aRpYjMSE/Qptxx305gN1vHw==", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.1.tgz", + "version": "2.1.1" }, "node_modules/@smithy/eventstream-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.5.tgz", - "integrity": "sha512-iqR6OuOV3zbQK8uVs9o+9AxhVk8kW9NAxA71nugwUB+kTY9C35pUd0A5/m4PRT0Y0oIW7W4kgnSR3fdYXQjECw==", - "dev": true, "dependencies": { "@aws-crypto/crc32": "3.0.0", "@smithy/types": "^2.2.2", "@smithy/util-hex-encoding": "^2.0.0", "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-iqR6OuOV3zbQK8uVs9o+9AxhVk8kW9NAxA71nugwUB+kTY9C35pUd0A5/m4PRT0Y0oIW7W4kgnSR3fdYXQjECw==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.5.tgz", - "integrity": "sha512-8NU51y94qFJbxL6SmvgWDfITHO/svvbAigkLYk2pckX17TGCSf4EXuGpGLliJp5Ljh5+vASC7mUH2jYX7MWBxA==", - "dev": true, "dependencies": { "@smithy/eventstream-serde-universal": "^2.0.5", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-8NU51y94qFJbxL6SmvgWDfITHO/svvbAigkLYk2pckX17TGCSf4EXuGpGLliJp5Ljh5+vASC7mUH2jYX7MWBxA==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.5.tgz", - "integrity": "sha512-u3gvukRaTH4X6tsryuZ4T1WGIEP34fPaTTzphFDJe8GJz/k11oBW1MPnkcaucBMxLnObK9swCF85j5cp1Kj1oA==", - "dev": true, "dependencies": { "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-u3gvukRaTH4X6tsryuZ4T1WGIEP34fPaTTzphFDJe8GJz/k11oBW1MPnkcaucBMxLnObK9swCF85j5cp1Kj1oA==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@smithy/eventstream-serde-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.5.tgz", - "integrity": "sha512-/C8jb+k/vKUBIe80D30vzjvRXlJf76kG2AJY7/NwiqWuD2usRuuDFCDaswXdVsSh9P1+FeaxZ48chsK10yDryQ==", - "dev": true, "dependencies": { "@smithy/eventstream-serde-universal": "^2.0.5", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-/C8jb+k/vKUBIe80D30vzjvRXlJf76kG2AJY7/NwiqWuD2usRuuDFCDaswXdVsSh9P1+FeaxZ48chsK10yDryQ==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.5.tgz", - "integrity": "sha512-+vHvbQtlSVYTQ/20tNpVaKi0EpTR7E8GoEUHJypRZIRgiT03b3h2MAWk+SNaqMrCJrYG9vKLkJFzDylRlUvDWg==", - "dev": true, "dependencies": { "@smithy/eventstream-codec": "^2.0.5", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-+vHvbQtlSVYTQ/20tNpVaKi0EpTR7E8GoEUHJypRZIRgiT03b3h2MAWk+SNaqMrCJrYG9vKLkJFzDylRlUvDWg==", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.6.tgz", - "integrity": "sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==", - "dev": true, "dependencies": { "@smithy/protocol-http": "^3.0.9", "@smithy/querystring-builder": "^2.0.13", "@smithy/types": "^2.5.0", "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.6.tgz", + "version": "2.2.6" }, "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", - "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "version": "3.0.9" }, "node_modules/@smithy/hash-blob-browser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.5.tgz", - "integrity": "sha512-ZVAUBtJXGf9bEko4/RwWcTK6d3b/ZmQMxJMrxOOcQhVDiqny9zI0mzgstO4Oxz3135R7S3V/bbGw3w3woCYpQg==", - "dev": true, "dependencies": { "@smithy/chunked-blob-reader": "^2.0.0", "@smithy/chunked-blob-reader-native": "^2.0.0", "@smithy/types": "^2.2.2", "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-ZVAUBtJXGf9bEko4/RwWcTK6d3b/ZmQMxJMrxOOcQhVDiqny9zI0mzgstO4Oxz3135R7S3V/bbGw3w3woCYpQg==", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@smithy/hash-node": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.15.tgz", - "integrity": "sha512-t/qjEJZu/G46A22PAk1k/IiJZT4ncRkG5GOCNWN9HPPy5rCcSZUbh7gwp7CGKgJJ7ATMMg+0Td7i9o1lQTwOfQ==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-t/qjEJZu/G46A22PAk1k/IiJZT4ncRkG5GOCNWN9HPPy5rCcSZUbh7gwp7CGKgJJ7ATMMg+0Td7i9o1lQTwOfQ==", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.15.tgz", + "version": "2.0.15" }, "node_modules/@smithy/hash-stream-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.5.tgz", - "integrity": "sha512-XiR4Aoux5kXy8OWPLQisKy3GPmm0l6deHepvPvr4MUzIwa5XWazG3JdbZXy+mk93CvEZrOwKPHU5Kul6QybJiQ==", - "dev": true, "dependencies": { "@smithy/types": "^2.2.2", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-XiR4Aoux5kXy8OWPLQisKy3GPmm0l6deHepvPvr4MUzIwa5XWazG3JdbZXy+mk93CvEZrOwKPHU5Kul6QybJiQ==", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.13.tgz", - "integrity": "sha512-XsGYhVhvEikX1Yz0kyIoLssJf2Rs6E0U2w2YuKdT4jSra5A/g8V2oLROC1s56NldbgnpesTYB2z55KCHHbKyjw==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-XsGYhVhvEikX1Yz0kyIoLssJf2Rs6E0U2w2YuKdT4jSra5A/g8V2oLROC1s56NldbgnpesTYB2z55KCHHbKyjw==", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.13.tgz", + "version": "2.0.13" }, "node_modules/@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==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/@smithy/md5-js": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.5.tgz", - "integrity": "sha512-k5EOte/Ye2r7XBVaXv2rhiehk6l3T4uRiPF+pnxKEc+G9Fwd1xAXBDZrtOq1syFPBKBmVfNszG4nevngST7NKg==", - "dev": true, "dependencies": { "@smithy/types": "^2.2.2", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-k5EOte/Ye2r7XBVaXv2rhiehk6l3T4uRiPF+pnxKEc+G9Fwd1xAXBDZrtOq1syFPBKBmVfNszG4nevngST7NKg==", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.15.tgz", - "integrity": "sha512-xH4kRBw01gJgWiU+/mNTrnyFXeozpZHw39gLb3JKGsFDVmSrJZ8/tRqu27tU/ki1gKkxr2wApu+dEYjI3QwV1Q==", - "dev": true, "dependencies": { "@smithy/protocol-http": "^3.0.9", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-xH4kRBw01gJgWiU+/mNTrnyFXeozpZHw39gLb3JKGsFDVmSrJZ8/tRqu27tU/ki1gKkxr2wApu+dEYjI3QwV1Q==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.15.tgz", + "version": "2.0.15" }, "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", - "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "version": "3.0.9" }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.0.tgz", - "integrity": "sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==", - "dev": true, "dependencies": { "@smithy/middleware-serde": "^2.0.13", "@smithy/node-config-provider": "^2.1.5", @@ -3076,15 +3080,15 @@ "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.0.tgz", + "version": "2.2.0" }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.20.tgz", - "integrity": "sha512-X2yrF/SHDk2WDd8LflRNS955rlzQ9daz9UWSp15wW8KtzoTXg3bhHM78HbK1cjr48/FWERSJKh9AvRUUGlIawg==", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^2.1.5", "@smithy/protocol-http": "^3.0.9", @@ -3095,78 +3099,78 @@ "tslib": "^2.5.0", "uuid": "^8.3.2" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-X2yrF/SHDk2WDd8LflRNS955rlzQ9daz9UWSp15wW8KtzoTXg3bhHM78HbK1cjr48/FWERSJKh9AvRUUGlIawg==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.20.tgz", + "version": "2.0.20" }, "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", - "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "version": "3.0.9" }, "node_modules/@smithy/middleware-retry/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" - } + }, + "dev": true, + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "version": "8.3.2" }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.13.tgz", - "integrity": "sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.13.tgz", + "version": "2.0.13" }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.7.tgz", - "integrity": "sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.7.tgz", + "version": "2.0.7" }, "node_modules/@smithy/node-config-provider": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.5.tgz", - "integrity": "sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==", - "dev": true, "dependencies": { "@smithy/property-provider": "^2.0.14", "@smithy/shared-ini-file-loader": "^2.2.4", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.5.tgz", + "version": "2.1.5" }, "node_modules/@smithy/node-http-handler": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.9.tgz", - "integrity": "sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^2.0.13", "@smithy/protocol-http": "^3.0.9", @@ -3174,106 +3178,106 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.9.tgz", + "version": "2.1.9" }, "node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", - "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "version": "3.0.9" }, "node_modules/@smithy/property-provider": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.14.tgz", - "integrity": "sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", - "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", - "dev": true, + }, + "integrity": "sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.14.tgz", + "version": "2.0.14" + }, + "node_modules/@smithy/protocol-http": { "dependencies": { "@smithy/types": "^2.2.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.13.tgz", - "integrity": "sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.13.tgz", + "version": "2.0.13" }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.13.tgz", - "integrity": "sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.13.tgz", + "version": "2.0.13" }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.6.tgz", - "integrity": "sha512-fCQ36frtYra2fqY2/DV8+3/z2d0VB/1D1hXbjRcM5wkxTToxq6xHbIY/NGGY6v4carskMyG8FHACxgxturJ9Pg==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-fCQ36frtYra2fqY2/DV8+3/z2d0VB/1D1hXbjRcM5wkxTToxq6xHbIY/NGGY6v4carskMyG8FHACxgxturJ9Pg==", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.6.tgz", + "version": "2.0.6" }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.4.tgz", - "integrity": "sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.4.tgz", + "version": "2.2.4" }, "node_modules/@smithy/signature-v4": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.5.tgz", - "integrity": "sha512-ABIzXmUDXK4n2c9cXjQLELgH2RdtABpYKT+U131e2I6RbCypFZmxIHmIBufJzU2kdMCQ3+thBGDWorAITFW04A==", - "dev": true, "dependencies": { "@smithy/eventstream-codec": "^2.0.5", "@smithy/is-array-buffer": "^2.0.0", @@ -3284,112 +3288,112 @@ "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-ABIzXmUDXK4n2c9cXjQLELgH2RdtABpYKT+U131e2I6RbCypFZmxIHmIBufJzU2kdMCQ3+thBGDWorAITFW04A==", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/@smithy/smithy-client": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.15.tgz", - "integrity": "sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==", - "dev": true, "dependencies": { "@smithy/middleware-stack": "^2.0.7", "@smithy/types": "^2.5.0", "@smithy/util-stream": "^2.0.20", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.15.tgz", + "version": "2.1.15" }, "node_modules/@smithy/types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", - "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", + "version": "2.5.0" }, "node_modules/@smithy/url-parser": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.13.tgz", - "integrity": "sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==", - "dev": true, "dependencies": { "@smithy/querystring-parser": "^2.0.13", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.13.tgz", + "version": "2.0.13" }, "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==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/@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==", - "dev": true, "dependencies": { "tslib": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/@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==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "version": "2.1.0" }, "node_modules/@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==", - "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/@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==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.19.tgz", - "integrity": "sha512-VHP8xdFR7/orpiABJwgoTB0t8Zhhwpf93gXhNfUBiwAE9O0rvsv7LwpQYjgvbOUDDO8JfIYQB2GYJNkqqGWsXw==", - "dev": true, "dependencies": { "@smithy/property-provider": "^2.0.14", "@smithy/smithy-client": "^2.1.15", @@ -3397,15 +3401,15 @@ "bowser": "^2.11.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">= 10.0.0" - } + }, + "integrity": "sha512-VHP8xdFR7/orpiABJwgoTB0t8Zhhwpf93gXhNfUBiwAE9O0rvsv7LwpQYjgvbOUDDO8JfIYQB2GYJNkqqGWsXw==", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.19.tgz", + "version": "2.0.19" }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.25", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.25.tgz", - "integrity": "sha512-jkmep6/JyWmn2ADw9VULDeGbugR4N/FJCKOt+gYyVswmN1BJOfzF2umaYxQ1HhQDvna3kzm1Dbo1qIfBW4iuHA==", - "dev": true, "dependencies": { "@smithy/config-resolver": "^2.0.18", "@smithy/credential-provider-imds": "^2.1.1", @@ -3415,68 +3419,68 @@ "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">= 10.0.0" - } + }, + "integrity": "sha512-jkmep6/JyWmn2ADw9VULDeGbugR4N/FJCKOt+gYyVswmN1BJOfzF2umaYxQ1HhQDvna3kzm1Dbo1qIfBW4iuHA==", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.25.tgz", + "version": "2.0.25" }, "node_modules/@smithy/util-endpoints": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.4.tgz", - "integrity": "sha512-FPry8j1xye5yzrdnf4xKUXVnkQErxdN7bUIaqC0OFoGsv2NfD9b2UUMuZSSt+pr9a8XWAqj0HoyVNUfPiZ/PvQ==", - "dev": true, "dependencies": { "@smithy/node-config-provider": "^2.1.5", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">= 14.0.0" - } + }, + "integrity": "sha512-FPry8j1xye5yzrdnf4xKUXVnkQErxdN7bUIaqC0OFoGsv2NfD9b2UUMuZSSt+pr9a8XWAqj0HoyVNUfPiZ/PvQ==", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.4.tgz", + "version": "1.0.4" }, "node_modules/@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==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/@smithy/util-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.6.tgz", - "integrity": "sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==", - "dev": true, "dependencies": { "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.6.tgz", + "version": "2.0.6" }, "node_modules/@smithy/util-retry": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.6.tgz", - "integrity": "sha512-PSO41FofOBmyhPQJwBQJ6mVlaD7Sp9Uff9aBbnfBJ9eqXOE/obrqQjn0PNdkfdvViiPXl49BINfnGcFtSP4kYw==", - "dev": true, "dependencies": { "@smithy/service-error-classification": "^2.0.6", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">= 14.0.0" - } + }, + "integrity": "sha512-PSO41FofOBmyhPQJwBQJ6mVlaD7Sp9Uff9aBbnfBJ9eqXOE/obrqQjn0PNdkfdvViiPXl49BINfnGcFtSP4kYw==", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.6.tgz", + "version": "2.0.6" }, "node_modules/@smithy/util-stream": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.20.tgz", - "integrity": "sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==", - "dev": true, "dependencies": { "@smithy/fetch-http-handler": "^2.2.6", "@smithy/node-http-handler": "^2.1.9", @@ -3487,166 +3491,158 @@ "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.20.tgz", + "version": "2.0.20" }, "node_modules/@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==", - "dev": true, "dependencies": { "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "version": "2.0.0" }, "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==", - "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "version": "2.0.2" }, "node_modules/@smithy/util-waiter": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.13.tgz", - "integrity": "sha512-YovIQatiuM7giEsRFotqJa2i3EbU2EE3PgtpXgtLgpx5rXiZMAwPxXYDFVFhuO0lbqvc/Zx4n+ZIisXOHPSqyg==", - "dev": true, "dependencies": { "@smithy/abort-controller": "^2.0.13", "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, + "dev": true, "engines": { "node": ">=14.0.0" - } + }, + "integrity": "sha512-YovIQatiuM7giEsRFotqJa2i3EbU2EE3PgtpXgtLgpx5rXiZMAwPxXYDFVFhuO0lbqvc/Zx4n+ZIisXOHPSqyg==", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.13.tgz", + "version": "2.0.13" }, "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, "dependencies": { "defer-to-connect": "^2.0.0" }, + "dev": true, "engines": { "node": ">=10" - } + }, + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "version": "4.0.6" }, "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "dev": true, "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "version": "0.3.0" }, "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", "@types/node": "*", "@types/responselike": "^1.0.0" - } + }, + "dev": true, + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "version": "6.0.3" }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "dev": true, "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "version": "4.0.1" }, "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, "dependencies": { "@types/node": "*" - } + }, + "dev": true, + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "version": "3.1.4" }, "node_modules/@types/lodash": { - "version": "4.14.197", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "dev": true, "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", - "dev": true + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "version": "4.14.197" }, "node_modules/@types/node": { - "version": "20.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.2.tgz", + "dev": true, "integrity": "sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw==", - "dev": true + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.2.tgz", + "version": "20.6.2" }, "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, "dependencies": { "@types/node": "*" - } - }, - "node_modules/2-thenable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/2-thenable/-/2-thenable-1.0.0.tgz", - "integrity": "sha512-HqiDzaLDFCXkcCO/SwoyhRwqYtINFHF7t9BDRq4x90TOKNAJpiqUt9X5lQ08bwxYzc067HUywDjGySpebHcUpw==", + }, "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.47" - } + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, "dependencies": { "event-target-shim": "^5.0.0" }, + "dev": true, "engines": { "node": ">=6.5" - } + }, + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", "dev": true, "engines": { "node": ">=6.0" - } + }, + "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", + "version": "0.5.10" }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "dependencies": { "debug": "4" }, + "dev": true, "engines": { "node": ">= 6.0.0" - } + }, + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "version": "6.0.2" }, "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, "dependencies": { "ajv": "^8.0.0" }, + "dev": true, + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "peerDependencies": { "ajv": "^8.0.0" }, @@ -3654,127 +3650,125 @@ "ajv": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "version": "2.1.1" }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" - } + }, + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "version": "8.12.0" }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "dev": true, "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "dependencies": { "type-fest": "^0.21.3" }, + "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "version": "4.3.2" }, "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "version": "0.21.3" }, "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "version": "5.0.1" }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, + "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } + }, + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "version": "4.3.0" }, "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, + "dev": true, "engines": { "node": ">= 8" - } + }, + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "version": "3.1.3" }, "node_modules/appdirectory": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/appdirectory/-/appdirectory-0.1.0.tgz", - "integrity": "sha512-DJ5DV8vZXBbusyiyPlH28xppwS8eAMRuuyMo88xeEcf4bV64lbLtbxRxqixZuJBXsZzLtXFmA13GwVjJc7vdQw==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true + "dev": true, + "integrity": "sha512-DJ5DV8vZXBbusyiyPlH28xppwS8eAMRuuyMo88xeEcf4bV64lbLtbxRxqixZuJBXsZzLtXFmA13GwVjJc7vdQw==", + "resolved": "https://registry.npmjs.org/appdirectory/-/appdirectory-0.1.0.tgz", + "version": "0.1.0" }, "node_modules/archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", - "dev": true, "dependencies": { "file-type": "^4.2.0" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "version": "4.0.0" }, "node_modules/archive-type/node_modules/file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "version": "4.4.0" }, "node_modules/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", - "dev": true, "dependencies": { "archiver-utils": "^2.1.0", "async": "^3.2.4", @@ -3784,15 +3778,15 @@ "tar-stream": "^2.2.0", "zip-stream": "^4.1.0" }, + "dev": true, "engines": { "node": ">= 10" - } + }, + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "version": "5.3.2" }, "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, "dependencies": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", @@ -3805,15 +3799,15 @@ "normalize-path": "^3.0.0", "readable-stream": "^2.0.0" }, + "dev": true, "engines": { "node": ">= 6" - } + }, + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "version": "2.1.0" }, "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3822,82 +3816,82 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - } + }, + "dev": true, + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "version": "2.3.8" }, "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "dev": true, "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "version": "5.1.2" }, "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" - } + }, + "dev": true, + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "dev": true, "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "version": "2.1.0" }, "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "dev": true, "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "version": "2.0.6" }, "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "dev": true, "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "version": "3.2.6" }, "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "dev": true, "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "version": "0.4.0" }, "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, "engines": { "node": ">= 4.0.0" - } + }, + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "version": "1.0.5" }, "node_modules/aws-sdk": { - "version": "2.1551.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1551.0.tgz", - "integrity": "sha512-nUaAzS7cheaKF8lV0AVJBqteuoYIgQ5UgpZaoRR44D7HA1f6iCYFISF6WH6d0hQvpxPDIXr5NlVt0cHyp/Sx1g==", - "dev": true, "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -3910,53 +3904,54 @@ "uuid": "8.0.0", "xml2js": "0.6.2" }, + "dev": true, "engines": { "node": ">= 10.0.0" - } + }, + "integrity": "sha512-nUaAzS7cheaKF8lV0AVJBqteuoYIgQ5UgpZaoRR44D7HA1f6iCYFISF6WH6d0hQvpxPDIXr5NlVt0cHyp/Sx1g==", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1551.0.tgz", + "version": "2.1551.0" }, "node_modules/aws-sdk/node_modules/uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" - } + }, + "dev": true, + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "version": "8.0.0" }, "node_modules/aws-sdk/node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "dev": true, "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" }, + "dev": true, "engines": { "node": ">=4.0.0" - } + }, + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "version": "0.6.2" }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", - "dev": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" - } + }, + "dev": true, + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "version": "1.7.9" }, "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "dev": true, "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "version": "1.0.2" }, "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -3971,32 +3966,36 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "version": "1.5.1" }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "version": "2.2.0" }, "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" - } + }, + "dev": true, + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "version": "4.1.0" }, "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + }, "dev": true, "funding": [ { @@ -4012,134 +4011,129 @@ "url": "https://feross.org/support" } ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "version": "5.7.1" }, "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "dev": true, "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "version": "3.7.2" }, "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "dev": true, "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "version": "2.11.0" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" - } + }, + "dev": true, + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "version": "1.1.11" }, "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "dependencies": { "fill-range": "^7.1.1" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "version": "3.0.3" }, "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" - } + }, + "dev": true, + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "version": "4.9.2" }, "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" - } + }, + "dev": true, + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "dev": true, "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "engines": { "node": "*" - } + }, + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "version": "0.2.13" }, "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "dev": true, "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, + "dev": true, "engines": { "node": ">=6.14.2" - } + }, + "hasInstallScript": true, + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "optional": true, + "peer": true, + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "version": "4.0.7" }, "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "version": "3.3.0" }, "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "dev": true, "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "version": "1.0.3" }, "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, "engines": { "node": ">=10.6.0" - } + }, + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "version": "5.0.4" }, "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -4149,81 +4143,81 @@ "normalize-url": "^6.0.1", "responselike": "^2.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "version": "7.0.4" }, "node_modules/cachedir": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", - "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", "dev": true, "engines": { "node": ">=6" - } + }, + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "version": "2.4.0" }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" }, + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "version": "1.0.2" }, "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" - } + }, + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "version": "5.3.1" }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" - } + }, + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "version": "4.1.2" }, "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "dev": true, "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "version": "0.7.0" }, "node_modules/child-process-ext": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/child-process-ext/-/child-process-ext-2.1.1.tgz", - "integrity": "sha512-0UQ55f51JBkOFa+fvR76ywRzxiPwQS3Xe8oe5bZRphpv+dIMeerW5Zn5e4cUy4COJwVtJyU0R79RMnw+aCqmGA==", - "dev": true, "dependencies": { "cross-spawn": "^6.0.5", "es5-ext": "^0.10.53", "log": "^6.0.0", "split2": "^3.1.1", "stream-promise": "^3.2.0" - } + }, + "dev": true, + "integrity": "sha512-0UQ55f51JBkOFa+fvR76ywRzxiPwQS3Xe8oe5bZRphpv+dIMeerW5Zn5e4cUy4COJwVtJyU0R79RMnw+aCqmGA==", + "resolved": "https://registry.npmjs.org/child-process-ext/-/child-process-ext-2.1.1.tgz", + "version": "2.1.1" }, "node_modules/child-process-ext/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -4231,81 +4225,75 @@ "shebang-command": "^1.2.0", "which": "^1.2.9" }, + "dev": true, "engines": { "node": ">=4.8" - } + }, + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "version": "6.0.6" }, "node_modules/child-process-ext/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/child-process-ext/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, "bin": { "semver": "bin/semver" - } + }, + "dev": true, + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "version": "5.7.2" }, "node_modules/child-process-ext/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/child-process-ext/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/child-process-ext/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, "dependencies": { "readable-stream": "^3.0.0" - } + }, + "dev": true, + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "version": "3.2.2" }, "node_modules/child-process-ext/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, + "bin": { + "which": "bin/which" + }, "dependencies": { "isexe": "^2.0.0" }, - "bin": { - "which": "bin/which" - } + "dev": true, + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "version": "1.3.1" }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -4315,45 +4303,51 @@ "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, + "dev": true, "engines": { "node": ">= 8.10.0" }, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "optionalDependencies": { "fsevents": "~2.3.2" - } + }, + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "version": "3.5.3" }, "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, + "dev": true, "engines": { "node": ">= 6" - } + }, + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "version": "5.1.2" }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true, + "engines": { + "node": ">=8" + }, "funding": [ { "type": "github", "url": "https://github.com/sponsors/sibiraj-s" } ], - "engines": { - "node": ">=8" - } + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "version": "3.8.0" }, "node_modules/cli-color": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", - "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", - "dev": true, "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.61", @@ -4361,27 +4355,27 @@ "memoizee": "^0.4.15", "timers-ext": "^0.1.7" }, + "dev": true, "engines": { "node": ">=0.10" - } + }, + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "version": "2.0.3" }, "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "dependencies": { "restore-cursor": "^3.1.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "version": "3.1.0" }, "node_modules/cli-progress-footer": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/cli-progress-footer/-/cli-progress-footer-2.3.2.tgz", - "integrity": "sha512-uzHGgkKdeA9Kr57eyH1W5HGiNShP8fV1ETq04HDNM1Un6ShXbHhwi/H8LNV9L1fQXKjEw0q5FUkEVNuZ+yZdSw==", - "dev": true, "dependencies": { "cli-color": "^2.0.2", "d": "^1.0.1", @@ -4391,276 +4385,276 @@ "timers-ext": "^0.1.7", "type": "^2.6.0" }, + "dev": true, "engines": { "node": ">=10.0" - } + }, + "integrity": "sha512-uzHGgkKdeA9Kr57eyH1W5HGiNShP8fV1ETq04HDNM1Un6ShXbHhwi/H8LNV9L1fQXKjEw0q5FUkEVNuZ+yZdSw==", + "resolved": "https://registry.npmjs.org/cli-progress-footer/-/cli-progress-footer-2.3.2.tgz", + "version": "2.3.2" }, "node_modules/cli-progress-footer/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", "dev": true, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "version": "2.9.1" }, "node_modules/cli-sprintf-format": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cli-sprintf-format/-/cli-sprintf-format-1.1.1.tgz", - "integrity": "sha512-BbEjY9BEdA6wagVwTqPvmAwGB24U93rQPBFZUT8lNCDxXzre5LFHQUTJc70czjgUomVg8u8R5kW8oY9DYRFNeg==", - "dev": true, "dependencies": { "cli-color": "^2.0.1", "es5-ext": "^0.10.53", "sprintf-kit": "^2.0.1", "supports-color": "^6.1.0" }, + "dev": true, "engines": { "node": ">=6.0" - } + }, + "integrity": "sha512-BbEjY9BEdA6wagVwTqPvmAwGB24U93rQPBFZUT8lNCDxXzre5LFHQUTJc70czjgUomVg8u8R5kW8oY9DYRFNeg==", + "resolved": "https://registry.npmjs.org/cli-sprintf-format/-/cli-sprintf-format-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/cli-sprintf-format/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/cli-sprintf-format/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, + "dev": true, "engines": { "node": ">=6" - } + }, + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "version": "6.1.0" }, "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "engines": { "node": ">= 10" - } + }, + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { "node": ">=0.8" - } + }, + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "version": "1.0.4" }, "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, "dependencies": { "mimic-response": "^1.0.0" }, + "dev": true, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "version": "1.0.3" }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, + "dev": true, "engines": { "node": ">=7.0.0" - } + }, + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "dev": true, "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "version": "1.1.4" }, "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, + "dev": true, "engines": { "node": ">= 0.8" - } + }, + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "version": "1.0.8" }, "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "engines": { "node": ">= 6" - } + }, + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "version": "4.1.1" }, "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "dev": true, "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "version": "1.3.0" }, "node_modules/compress-commons": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", - "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", - "dev": true, "dependencies": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" }, + "dev": true, "engines": { "node": ">= 10" - } + }, + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "version": "4.1.1" }, "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "dev": true, "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "version": "0.0.1" }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, "dependencies": { "safe-buffer": "5.2.1" }, + "dev": true, "engines": { "node": ">= 0.6" - } + }, + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "version": "0.5.4" }, "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "dev": true, "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "version": "2.1.4" }, "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "dev": true, "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "version": "1.0.3" }, "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, "bin": { "crc32": "bin/crc32.njs" }, + "dev": true, "engines": { "node": ">=0.8" - } + }, + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "version": "1.2.2" }, "node_modules/crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" }, + "dev": true, "engines": { "node": ">= 10" - } + }, + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "version": "4.0.2" }, "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" }, + "dev": true, "engines": { "node": ">= 8" - } + }, + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "version": "7.0.6" }, "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, "dependencies": { "es5-ext": "^0.10.50", "type": "^1.0.1" - } + }, + "dev": true, + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "version": "1.0.1" }, "node_modules/dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "dev": true, "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", - "dev": true + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "version": "1.11.9" }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, + "dev": true, "engines": { "node": ">=6.0" }, + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "peerDependenciesMeta": { "supports-color": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "version": "4.3.4" }, "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "dev": true, "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "version": "2.1.2" }, "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dev": true, "dependencies": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -4671,84 +4665,84 @@ "pify": "^2.3.0", "strip-dirs": "^2.0.0" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "version": "4.2.1" }, "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, "dependencies": { "mimic-response": "^3.1.0" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "version": "6.0.0" }, "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "version": "3.1.0" }, "node_modules/decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, "dependencies": { "file-type": "^5.2.0", "is-stream": "^1.1.0", "tar-stream": "^1.5.2" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "version": "4.1.1" }, "node_modules/decompress-tar/node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" - } + }, + "dev": true, + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "version": "1.2.3" }, "node_modules/decompress-tar/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "version": "5.2.0" }, "node_modules/decompress-tar/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/decompress-tar/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4757,28 +4751,28 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - } + }, + "dev": true, + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "version": "2.3.8" }, "node_modules/decompress-tar/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "dev": true, "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "version": "5.1.2" }, "node_modules/decompress-tar/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" - } + }, + "dev": true, + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/decompress-tar/node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -4788,15 +4782,15 @@ "to-buffer": "^1.1.1", "xtend": "^4.0.0" }, + "dev": true, "engines": { "node": ">= 0.8.0" - } + }, + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "version": "1.6.2" }, "node_modules/decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, "dependencies": { "decompress-tar": "^4.1.0", "file-type": "^6.1.0", @@ -4804,291 +4798,291 @@ "seek-bzip": "^1.0.5", "unbzip2-stream": "^1.0.9" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "version": "4.1.1" }, "node_modules/decompress-tarbz2/node_modules/file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "version": "6.2.0" }, "node_modules/decompress-tarbz2/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, "dependencies": { "decompress-tar": "^4.1.1", "file-type": "^5.2.0", "is-stream": "^1.1.0" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "version": "4.1.1" }, "node_modules/decompress-targz/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "version": "5.2.0" }, "node_modules/decompress-targz/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", - "dev": true, "dependencies": { "file-type": "^3.8.0", "get-stream": "^2.2.0", "pify": "^2.3.0", "yauzl": "^2.4.2" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "version": "4.0.1" }, "node_modules/decompress-unzip/node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "version": "3.9.0" }, "node_modules/decompress-unzip/node_modules/get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", - "dev": true, "dependencies": { "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "version": "2.3.1" }, "node_modules/decompress/node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, "dependencies": { "pify": "^3.0.0" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "version": "1.3.0" }, "node_modules/decompress/node_modules/make-dir/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, "dependencies": { "clone": "^1.0.2" }, + "dev": true, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "version": "1.0.4" }, "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "engines": { "node": ">=10" - } + }, + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/deferred": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/deferred/-/deferred-0.7.11.tgz", - "integrity": "sha512-8eluCl/Blx4YOGwMapBvXRKxHXhA8ejDXYzEaK8+/gtcm8hRMhSLmXSqDmNUKNc/C8HNSmuyyp/hflhqDAvK2A==", - "dev": true, "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.50", "event-emitter": "^0.3.5", "next-tick": "^1.0.0", "timers-ext": "^0.1.7" - } + }, + "dev": true, + "integrity": "sha512-8eluCl/Blx4YOGwMapBvXRKxHXhA8ejDXYzEaK8+/gtcm8hRMhSLmXSqDmNUKNc/C8HNSmuyyp/hflhqDAvK2A==", + "resolved": "https://registry.npmjs.org/deferred/-/deferred-0.7.11.tgz", + "version": "0.7.11" }, "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "engines": { "node": ">=0.4.0" - } + }, + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, "dependencies": { "asap": "^2.0.0", "wrappy": "1" - } + }, + "dev": true, + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "version": "1.0.4" }, "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "dependencies": { "path-type": "^4.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "version": "3.0.1" }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://dotenvx.com" - } + }, + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "version": "16.4.5" }, "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", "dev": true, "engines": { "node": ">=12" - } + }, + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "version": "10.0.0" }, "node_modules/duration": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", - "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", - "dev": true, "dependencies": { "d": "1", "es5-ext": "~0.10.46" - } + }, + "dev": true, + "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", + "version": "0.2.2" }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "dev": true, "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "version": "8.0.0" }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "dependencies": { "once": "^1.4.0" - } + }, + "dev": true, + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "version": "1.4.4" }, "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "dev": true, - "hasInstallScript": true, "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", "esniff": "^2.0.1", "next-tick": "^1.1.0" }, + "dev": true, "engines": { "node": ">=0.10" - } + }, + "hasInstallScript": true, + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "version": "0.10.64" }, "node_modules/es5-ext/node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "dev": true, "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", "event-emitter": "^0.3.5", "type": "^2.7.2" }, + "dev": true, "engines": { "node": ">=0.10" - } + }, + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/es5-ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, "dependencies": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" - } + }, + "dev": true, + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "version": "2.0.3" }, "node_modules/es6-set": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", - "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", - "dev": true, "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", @@ -5097,163 +5091,163 @@ "event-emitter": "^0.3.5", "type": "^2.7.2" }, + "dev": true, "engines": { "node": ">=0.12" - } + }, + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "version": "0.1.6" }, "node_modules/es6-set/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, "dependencies": { "d": "^1.0.1", "ext": "^1.1.2" - } + }, + "dev": true, + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "version": "3.1.3" }, "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, "dependencies": { "d": "1", "es5-ext": "^0.10.46", "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.1" - } - }, - "node_modules/esniff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz", - "integrity": "sha512-vmHXOeOt7FJLsqofvFk4WB3ejvcHizCd8toXXwADmYfd02p2QwHRgkUbhYDX54y08nqk818CUTWipgZGlyN07g==", + }, "dev": true, + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "version": "2.0.3" + }, + "node_modules/esniff": { "dependencies": { "d": "1", "es5-ext": "^0.10.12" - } + }, + "dev": true, + "integrity": "sha512-vmHXOeOt7FJLsqofvFk4WB3ejvcHizCd8toXXwADmYfd02p2QwHRgkUbhYDX54y08nqk818CUTWipgZGlyN07g==", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "version": "4.0.1" }, "node_modules/essentials": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.2.0.tgz", - "integrity": "sha512-kP/j7Iw7KeNE8b/o7+tr9uX2s1wegElGOoGZ2Xm35qBr4BbbEcH3/bxR2nfH9l9JANCq9AUrvKw+gRuHtZp0HQ==", - "dev": true, "dependencies": { "uni-global": "^1.0.0" - } + }, + "dev": true, + "integrity": "sha512-kP/j7Iw7KeNE8b/o7+tr9uX2s1wegElGOoGZ2Xm35qBr4BbbEcH3/bxR2nfH9l9JANCq9AUrvKw+gRuHtZp0HQ==", + "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, "dependencies": { "d": "1", "es5-ext": "~0.10.14" - } + }, + "dev": true, + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "version": "0.3.5" }, "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, "engines": { "node": ">=6" - } + }, + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "version": "5.0.1" }, "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", "dev": true, "engines": { "node": ">=0.4.x" - } + }, + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, "dependencies": { "type": "^2.7.2" - } + }, + "dev": true, + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "version": "1.7.0" }, "node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, "dependencies": { "mime-db": "^1.28.0" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "version": "2.2.2" }, "node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, "dependencies": { "ext-list": "^2.0.0", "sort-keys-length": "^1.0.0" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "version": "5.0.0" }, "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "version": "3.1.0" }, "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "dev": true, "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "version": "3.1.3" }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5261,32 +5255,39 @@ "merge2": "^1.3.0", "micromatch": "^4.0.4" }, + "dev": true, "engines": { "node": ">=8.6.0" - } + }, + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "version": "3.3.1" }, "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, + "dev": true, "engines": { "node": ">= 6" - } + }, + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "version": "5.1.2" }, "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "dev": true, "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "version": "2.1.1" }, "node_modules/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==", + "bin": { + "fxparser": "src/cli/cli.js" + }, + "dependencies": { + "strnum": "^1.0.5" + }, "dev": true, "funding": [ { @@ -5298,282 +5299,275 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "version": "4.2.5" }, "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "engines": { "node": ">= 4.9.1" - } + }, + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "version": "1.0.16" }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, "dependencies": { "reusify": "^1.0.4" - } + }, + "dev": true, + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "version": "1.15.0" }, "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, "dependencies": { "pend": "~1.2.0" - } + }, + "dev": true, + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, + "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "version": "3.2.0" }, "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" - } + }, + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "version": "1.0.5" }, "node_modules/file-type": { - "version": "16.5.4", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", - "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", - "dev": true, "dependencies": { "readable-web-to-node-stream": "^3.0.0", "strtok3": "^6.2.4", "token-types": "^4.1.1" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } + }, + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "version": "16.5.4" }, "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "dev": true, "dependencies": { "filename-reserved-regex": "^2.0.0", "strip-outer": "^1.0.1", "trim-repeated": "^1.0.0" }, + "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "version": "4.3.0" }, "node_modules/filesize": { - "version": "10.0.12", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.0.12.tgz", - "integrity": "sha512-6RS9gDchbn+qWmtV2uSjo5vmKizgfCQeb5jKmqx8HyzA3MoLqqyQxN+QcjkGBJt7FjJ9qFce67Auyya5rRRbpw==", "dev": true, "engines": { "node": ">= 10.4.0" - } + }, + "integrity": "sha512-6RS9gDchbn+qWmtV2uSjo5vmKizgfCQeb5jKmqx8HyzA3MoLqqyQxN+QcjkGBJt7FjJ9qFce67Auyya5rRRbpw==", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.0.12.tgz", + "version": "10.0.12" }, "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "version": "7.1.1" }, "node_modules/find-requires": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-requires/-/find-requires-1.0.0.tgz", - "integrity": "sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ==", - "dev": true, + "bin": { + "find-requires": "bin/find-requires.js" + }, "dependencies": { "es5-ext": "^0.10.49", "esniff": "^1.1.0" }, - "bin": { - "find-requires": "bin/find-requires.js" - } + "dev": true, + "integrity": "sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ==", + "resolved": "https://registry.npmjs.org/find-requires/-/find-requires-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "version": "4.1.0" }, "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, "bin": { "flat": "cli.js" - } + }, + "dev": true, + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "version": "5.0.2" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, + "engines": { + "node": ">=4.0" + }, "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], - "engines": { - "node": ">=4.0" - }, + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "peerDependenciesMeta": { "debug": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "version": "1.15.6" }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, "dependencies": { "is-callable": "^1.1.3" - } + }, + "dev": true, + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "version": "0.3.3" }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, + "dev": true, "engines": { "node": ">= 6" - } + }, + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "version": "4.0.1" }, "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, "dependencies": { "dezalgo": "^1.0.4", "hexoid": "^1.0.0", "once": "^1.4.0", "qs": "^6.11.0" }, + "dev": true, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" - } + }, + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "version": "2.1.2" }, "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "dev": true, "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, + "dev": true, "engines": { "node": ">=12" - } + }, + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "version": "10.1.0" }, "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, "dependencies": { "minipass": "^3.0.0" }, + "dev": true, "engines": { "node": ">= 8" - } + }, + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "version": "2.1.0" }, "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "version": "3.3.6" }, "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "dev": true, "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "version": "4.0.0" }, "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "dev": true, "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/fs2": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/fs2/-/fs2-0.3.9.tgz", - "integrity": "sha512-WsOqncODWRlkjwll+73bAxVW3JPChDgaPX3DT4iTTm73UmG4VgALa7LaFblP232/DN60itkOrPZ8kaP1feksGQ==", - "dev": true, "dependencies": { "d": "^1.0.1", "deferred": "^0.7.11", @@ -5583,83 +5577,83 @@ "memoizee": "^0.4.14", "type": "^2.1.0" }, + "dev": true, "engines": { "node": ">=6" - } + }, + "integrity": "sha512-WsOqncODWRlkjwll+73bAxVW3JPChDgaPX3DT4iTTm73UmG4VgALa7LaFblP232/DN60itkOrPZ8kaP1feksGQ==", + "resolved": "https://registry.npmjs.org/fs2/-/fs2-0.3.9.tgz", + "version": "0.3.9" }, "node_modules/fs2/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + }, "hasInstallScript": true, + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "optional": true, "os": [ "darwin" ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "version": "2.3.3" }, "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "version": "1.1.2" }, "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" - } + }, + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "version": "2.0.5" }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "version": "1.2.1" }, "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "dependencies": { "pump": "^3.0.0" }, + "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "version": "5.2.0" }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5668,48 +5662,48 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, + "dev": true, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" - } + }, + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "version": "7.2.3" }, "node_modules/glob-all": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.3.1.tgz", - "integrity": "sha512-Y+ESjdI7ZgMwfzanHZYQ87C59jOO0i+Hd+QYtVt9PhLi6d8wlOpzQnfBxWUlaTuAoR3TkybLqqbIoWveU4Ji7Q==", - "dev": true, + "bin": { + "glob-all": "bin/glob-all" + }, "dependencies": { "glob": "^7.2.3", "yargs": "^15.3.1" }, - "bin": { - "glob-all": "bin/glob-all" - } + "dev": true, + "integrity": "sha512-Y+ESjdI7ZgMwfzanHZYQ87C59jOO0i+Hd+QYtVt9PhLi6d8wlOpzQnfBxWUlaTuAoR3TkybLqqbIoWveU4Ji7Q==", + "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.3.1.tgz", + "version": "3.3.1" }, "node_modules/glob-all/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" - } + }, + "dev": true, + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "version": "6.0.0" }, "node_modules/glob-all/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "dev": true, "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "version": "4.0.3" }, "node_modules/glob-all/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -5723,28 +5717,28 @@ "y18n": "^4.0.0", "yargs-parser": "^18.1.2" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "version": "15.4.1" }, "node_modules/glob-all/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" }, + "dev": true, "engines": { "node": ">=6" - } + }, + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "version": "18.1.3" }, "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -5753,30 +5747,30 @@ "merge2": "^1.4.1", "slash": "^3.0.0" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "version": "11.1.0" }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "version": "1.0.1" }, "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -5790,192 +5784,192 @@ "p-cancelable": "^2.0.0", "responselike": "^2.0.0" }, + "dev": true, "engines": { "node": ">=10.19.0" }, "funding": { "url": "https://github.com/sindresorhus/got?sponsor=1" - } + }, + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "version": "11.8.6" }, "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "dev": true, "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "version": "4.2.11" }, "node_modules/graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "dev": true, "dependencies": { "lodash": "^4.17.15" - } + }, + "dev": true, + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "version": "2.1.8" }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, + "dev": true, "engines": { "node": ">= 0.4.0" - } + }, + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "version": "1.0.3" }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "version": "4.0.0" }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "version": "1.0.1" }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "version": "1.0.3" }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, + "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "dev": true, "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "version": "4.1.1" }, "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" }, + "dev": true, "engines": { "node": ">=10.19.0" - } + }, + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "version": "1.0.3" }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, "dependencies": { "agent-base": "6", "debug": "4" }, + "dev": true, "engines": { "node": ">= 6" - } + }, + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "version": "5.0.1" }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "version": "0.4.24" }, "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "dev": true, "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "version": "1.1.13" }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" - } + }, + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "version": "5.2.4" }, "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "dev": true, "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "version": "3.0.6" }, "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { "node": ">=0.8.19" - } + }, + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "version": "0.1.4" }, "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" - } + }, + "dev": true, + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "version": "1.0.6" }, "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "dev": true, "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "version": "2.0.4" }, "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -5993,352 +5987,355 @@ "through": "^2.3.6", "wrap-ansi": "^6.0.1" }, + "dev": true, "engines": { "node": ">=12.0.0" - } + }, + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "version": "8.2.6" }, "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, + "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "version": "2.1.0" }, "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "version": "1.2.7" }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, "bin": { "is-docker": "cli.js" }, + "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "version": "2.2.1" }, "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "version": "2.1.1" }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, + "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "version": "1.0.10" }, "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "version": "4.0.3" }, "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "dev": true, "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", - "dev": true + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "version": "4.0.1" }, "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { "node": ">=0.12.0" - } + }, + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "version": "7.0.0" }, "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "dependencies": { "isobject": "^3.0.1" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "version": "2.0.4" }, "node_modules/is-primitive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", - "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", + "version": "3.0.1" }, "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "dev": true, "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "version": "2.2.2" }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, "dependencies": { "which-typed-array": "^1.1.11" }, + "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "version": "1.1.12" }, "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "version": "0.1.0" }, "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "dependencies": { "is-docker": "^2.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "version": "2.2.0" }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "dev": true, "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "dev": true, "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "version": "3.0.1" }, "node_modules/isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", "dev": true, + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", "peerDependencies": { "ws": "*" - } + }, + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "version": "4.0.1" }, "node_modules/jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "dev": true, "engines": { "node": ">= 0.6.0" - } + }, + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "version": "0.16.0" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "bin": { + "js-yaml": "bin/js-yaml.js" + }, "dependencies": { "argparse": "^2.0.1" }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } + "dev": true, + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "version": "4.1.0" }, "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "dev": true, "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "version": "3.0.1" }, "node_modules/json-colorizer": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/json-colorizer/-/json-colorizer-2.2.2.tgz", - "integrity": "sha512-56oZtwV1piXrQnRNTtJeqRv+B9Y/dXAYLqBBaYl/COcUdoZxgLBLAO88+CnkbT6MxNs0c5E9mPBIb2sFcNz3vw==", - "dev": true, "dependencies": { "chalk": "^2.4.1", "lodash.get": "^4.4.2" - } + }, + "dev": true, + "integrity": "sha512-56oZtwV1piXrQnRNTtJeqRv+B9Y/dXAYLqBBaYl/COcUdoZxgLBLAO88+CnkbT6MxNs0c5E9mPBIb2sFcNz3vw==", + "resolved": "https://registry.npmjs.org/json-colorizer/-/json-colorizer-2.2.2.tgz", + "version": "2.2.2" }, "node_modules/json-colorizer/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "version": "3.2.1" }, "node_modules/json-colorizer/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "version": "2.4.2" }, "node_modules/json-colorizer/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" - } + }, + "dev": true, + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "version": "1.9.3" }, "node_modules/json-colorizer/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "dev": true, "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "version": "1.1.3" }, "node_modules/json-colorizer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" - } + }, + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "version": "1.0.5" }, "node_modules/json-colorizer/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/json-colorizer/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, + "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "version": "5.5.0" }, "node_modules/json-cycle": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.5.0.tgz", - "integrity": "sha512-GOehvd5PO2FeZ5T4c+RxobeT5a1PiGpF4u9/3+UvrMU4bhnVqzJY7hm39wg8PDCqkU91fWGH8qjWR4bn+wgq9w==", "dev": true, "engines": { "node": ">= 4" - } + }, + "integrity": "sha512-GOehvd5PO2FeZ5T4c+RxobeT5a1PiGpF4u9/3+UvrMU4bhnVqzJY7hm39wg8PDCqkU91fWGH8qjWR4bn+wgq9w==", + "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.5.0.tgz", + "version": "1.5.0" }, "node_modules/json-refs": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz", - "integrity": "sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==", - "dev": true, + "bin": { + "json-refs": "bin/json-refs" + }, "dependencies": { "commander": "~4.1.1", "graphlib": "^2.1.8", @@ -6349,64 +6346,61 @@ "slash": "^3.0.0", "uri-js": "^4.2.2" }, - "bin": { - "json-refs": "bin/json-refs" - }, + "dev": true, "engines": { "node": ">=0.8" - } + }, + "integrity": "sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==", + "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz", + "version": "3.0.15" }, "node_modules/json-refs/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" - } + }, + "dev": true, + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "version": "1.0.10" }, "node_modules/json-refs/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "bin": { + "js-yaml": "bin/js-yaml.js" + }, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } + "dev": true, + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "version": "3.14.1" }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "dependencies": { "universalify": "^2.0.0" }, + "dev": true, + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "optionalDependencies": { "graceful-fs": "^4.1.6" - } + }, + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "version": "6.1.0" }, "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" - } + }, + "dev": true, + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "version": "3.10.1" }, "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6415,55 +6409,55 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - } + }, + "dev": true, + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "version": "2.3.8" }, "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "dev": true, "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "version": "5.1.2" }, "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" - } + }, + "dev": true, + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/jwt-decode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", + "dev": true, "integrity": "sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==", - "dev": true + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", + "version": "2.2.0" }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", - "dev": true, "dependencies": { "json-buffer": "3.0.1" - } + }, + "dev": true, + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "version": "4.5.3" }, "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, "dependencies": { "readable-stream": "^2.0.5" }, + "dev": true, "engines": { "node": ">= 0.6.3" - } + }, + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "version": "1.0.1" }, "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6472,103 +6466,103 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - } + }, + "dev": true, + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "version": "2.3.8" }, "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "dev": true, "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "version": "5.1.2" }, "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" - } + }, + "dev": true, + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, "dependencies": { "immediate": "~3.0.5" - } + }, + "dev": true, + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "version": "3.3.0" }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "version": "5.0.0" }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "dev": true, "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "version": "4.17.21" }, "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "dev": true, "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "version": "4.2.0" }, "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "dev": true, "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "version": "4.5.0" }, "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "dev": true, "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "version": "4.4.0" }, "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "dev": true, "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "version": "4.4.2" }, "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "dev": true, "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "version": "4.0.6" }, "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "dev": true, "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "version": "4.6.0" }, "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "dev": true, "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "version": "4.7.0" }, "node_modules/lodash.values": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz", + "dev": true, "integrity": "sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz", + "version": "4.3.0" }, "node_modules/log": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/log/-/log-6.3.1.tgz", - "integrity": "sha512-McG47rJEWOkXTDioZzQNydAVvZNeEkSyLJ1VWkFwfW+o1knW+QSi8D1KjPn/TnctV+q99lkvJNe1f0E1IjfY2A==", - "dev": true, "dependencies": { "d": "^1.0.1", "duration": "^0.2.2", @@ -6577,13 +6571,13 @@ "sprintf-kit": "^2.0.1", "type": "^2.5.0", "uni-global": "^1.0.0" - } + }, + "dev": true, + "integrity": "sha512-McG47rJEWOkXTDioZzQNydAVvZNeEkSyLJ1VWkFwfW+o1knW+QSi8D1KjPn/TnctV+q99lkvJNe1f0E1IjfY2A==", + "resolved": "https://registry.npmjs.org/log/-/log-6.3.1.tgz", + "version": "6.3.1" }, "node_modules/log-node": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/log-node/-/log-node-8.0.3.tgz", - "integrity": "sha512-1UBwzgYiCIDFs8A0rM2QdBFo8Wd8UQ0HrSTu/MNI+/2zN3NoHRj2fhplurAyuxTYUXu3Oohugq1jAn5s05u1MQ==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1", "cli-color": "^2.0.1", @@ -6594,94 +6588,94 @@ "supports-color": "^8.1.1", "type": "^2.5.0" }, + "dev": true, "engines": { "node": ">=10.0" }, + "integrity": "sha512-1UBwzgYiCIDFs8A0rM2QdBFo8Wd8UQ0HrSTu/MNI+/2zN3NoHRj2fhplurAyuxTYUXu3Oohugq1jAn5s05u1MQ==", "peerDependencies": { "log": "^6.0.0" - } + }, + "resolved": "https://registry.npmjs.org/log-node/-/log-node-8.0.3.tgz", + "version": "8.0.3" }, "node_modules/log-node/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" - } + }, + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "version": "8.1.1" }, "node_modules/log-node/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "version": "4.1.0" }, "node_modules/log/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", - "dev": true, "dependencies": { "es5-ext": "~0.10.2" - } + }, + "dev": true, + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "version": "0.1.0" }, "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, "dependencies": { "semver": "^7.5.3" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "version": "4.0.0" }, "node_modules/memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dev": true, "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.53", @@ -6691,146 +6685,146 @@ "lru-queue": "^0.1.0", "next-tick": "^1.1.0", "timers-ext": "^0.1.7" - } + }, + "dev": true, + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "version": "0.4.15" }, "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { "node": ">= 8" - } + }, + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "version": "1.4.1" }, "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, "engines": { "node": ">= 0.6" - } + }, + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "version": "1.1.2" }, "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" }, + "dev": true, "engines": { "node": ">=8.6" - } + }, + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "version": "4.0.8" }, "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, "bin": { "mime": "cli.js" }, + "dev": true, "engines": { "node": ">=4.0.0" - } + }, + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "version": "2.6.0" }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "engines": { "node": ">= 0.6" - } + }, + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "version": "1.52.0" }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, + "dev": true, "engines": { "node": ">= 0.6" - } + }, + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "version": "2.1.35" }, "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "engines": { "node": ">=6" - } + }, + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "version": "2.1.0" }, "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "version": "1.0.1" }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, + "dev": true, "engines": { "node": "*" - } + }, + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "version": "3.1.2" }, "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "version": "5.0.0" }, "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, + "dev": true, "engines": { "node": ">=10" - } + }, + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "version": "1.0.4" }, "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "dev": true, "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "version": "2.1.3" }, "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "dev": true, "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "version": "0.0.8" }, "node_modules/native-promise-only": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "dev": true, "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", - "dev": true + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "version": "0.8.1" }, "node_modules/ncjsm": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ncjsm/-/ncjsm-4.3.2.tgz", - "integrity": "sha512-6d1VWA7FY31CpI4Ki97Fpm36jfURkVbpktizp8aoVViTZRQgr/0ddmlKerALSSlzfwQRBeSq1qwwVcBJK4Sk7Q==", - "dev": true, "dependencies": { "builtin-modules": "^3.3.0", "deferred": "^0.7.11", @@ -6840,49 +6834,51 @@ "find-requires": "^1.0.0", "fs2": "^0.3.9", "type": "^2.7.2" - } + }, + "dev": true, + "integrity": "sha512-6d1VWA7FY31CpI4Ki97Fpm36jfURkVbpktizp8aoVViTZRQgr/0ddmlKerALSSlzfwQRBeSq1qwwVcBJK4Sk7Q==", + "resolved": "https://registry.npmjs.org/ncjsm/-/ncjsm-4.3.2.tgz", + "version": "4.3.2" }, "node_modules/ncjsm/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "dev": true, "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "dev": true, "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "version": "1.0.5" }, "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dev": true, "dependencies": { "minimatch": "^3.0.2" }, + "dev": true, "engines": { "node": ">= 0.10.5" - } + }, + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "version": "0.1.17" }, "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, + "dev": true, "engines": { "node": "4.x || >=6.0.0" }, + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "peerDependencies": { "encoding": "^0.1.0" }, @@ -6890,69 +6886,67 @@ "encoding": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "version": "2.7.0" }, "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "dev": true, "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "version": "0.0.3" }, "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "dev": true, "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "version": "3.0.1" }, "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" - } + }, + "dev": true, + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "version": "5.0.0" }, "node_modules/node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", - "dev": true, - "optional": true, - "peer": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" - } + }, + "dev": true, + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "optional": true, + "peer": true, + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "version": "4.6.1" }, "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "version": "6.1.0" }, "node_modules/npm-registry-utilities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-utilities/-/npm-registry-utilities-1.0.0.tgz", - "integrity": "sha512-9xYfSJy2IFQw1i6462EJzjChL9e65EfSo2Cw6kl0EFeDp05VvU+anrQk3Fc0d1MbVCq7rWIxeer89O9SUQ/uOg==", - "dev": true, "dependencies": { "ext": "^1.6.0", "fs2": "^0.3.9", @@ -6962,80 +6956,80 @@ "type": "^2.6.0", "validate-npm-package-name": "^3.0.0" }, + "dev": true, "engines": { "node": ">=12.0" - } + }, + "integrity": "sha512-9xYfSJy2IFQw1i6462EJzjChL9e65EfSo2Cw6kl0EFeDp05VvU+anrQk3Fc0d1MbVCq7rWIxeer89O9SUQ/uOg==", + "resolved": "https://registry.npmjs.org/npm-registry-utilities/-/npm-registry-utilities-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/npm-registry-utilities/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "version": "4.1.1" }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "version": "1.12.3" }, "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" - } + }, + "dev": true, + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "version": "1.4.0" }, "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, + "dev": true, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "version": "5.1.2" }, "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" }, + "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "version": "8.4.2" }, "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -7047,152 +7041,151 @@ "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "version": "5.4.1" }, "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "version": "1.0.2" }, "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "version": "2.1.1" }, "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, "dependencies": { "p-timeout": "^3.1.0" }, + "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "version": "4.2.0" }, "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "engines": { "node": ">=4" - } + }, + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, + "dev": true, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "version": "2.3.0" }, "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "version": "4.1.0" }, "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, "dependencies": { "p-finally": "^1.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "version": "3.2.0" }, "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { "node": ">=6" - } + }, + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "version": "2.2.0" }, "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "dev": true, "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "version": "1.0.11" }, "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "version": "4.0.0" }, "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "version": "1.0.1" }, "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "version": "3.1.1" }, "node_modules/path-loader": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.12.tgz", - "integrity": "sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ==", - "dev": true, "dependencies": { "native-promise-only": "^0.8.1", "superagent": "^7.1.6" - } + }, + "dev": true, + "integrity": "sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ==", + "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.12.tgz", + "version": "1.0.12" }, "node_modules/path-loader/node_modules/superagent": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.6.tgz", - "integrity": "sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==", - "deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net", - "dev": true, "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.3", @@ -7206,29 +7199,31 @@ "readable-stream": "^3.6.0", "semver": "^7.3.7" }, + "deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net", + "dev": true, "engines": { "node": ">=6.4.0 <13 || >=14" - } + }, + "integrity": "sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.6.tgz", + "version": "7.1.6" }, "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "version": "4.0.0" }, "node_modules/path2": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/path2/-/path2-0.1.0.tgz", + "dev": true, "integrity": "sha512-TX+cz8Jk+ta7IvRy2FAej8rdlbrP0+uBIkP/5DTODez/AuL/vSb30KuAdDxGVREXzn8QfAiu5mJYJ1XjbOhEPA==", - "dev": true + "resolved": "https://registry.npmjs.org/path2/-/path2-0.1.0.tgz", + "version": "0.1.0" }, "node_modules/peek-readable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", - "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", "dev": true, "engines": { "node": ">=8" @@ -7236,146 +7231,146 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/Borewit" - } + }, + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "version": "4.1.0" }, "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "dev": true, "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" - } + }, + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "version": "2.3.1" }, "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "version": "2.3.0" }, "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "version": "2.0.4" }, "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, "dependencies": { "pinkie": "^2.0.0" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/process-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/process-utils/-/process-utils-4.0.0.tgz", - "integrity": "sha512-fMyMQbKCxX51YxR7YGCzPjLsU3yDzXFkP4oi1/Mt5Ixnk7GO/7uUTj8mrCHUwuvozWzI+V7QSJR9cZYnwNOZPg==", "dev": true, + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "version": "2.0.1" + }, + "node_modules/process-utils": { "dependencies": { "ext": "^1.4.0", "fs2": "^0.3.9", "memoizee": "^0.4.14", "type": "^2.1.0" }, + "dev": true, "engines": { "node": ">=10.0" - } + }, + "integrity": "sha512-fMyMQbKCxX51YxR7YGCzPjLsU3yDzXFkP4oi1/Mt5Ixnk7GO/7uUTj8mrCHUwuvozWzI+V7QSJR9cZYnwNOZPg==", + "resolved": "https://registry.npmjs.org/process-utils/-/process-utils-4.0.0.tgz", + "version": "4.0.0" }, "node_modules/process-utils/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/promise-queue": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz", - "integrity": "sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ==", "dev": true, "engines": { "node": ">= 0.8.0" - } + }, + "integrity": "sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ==", + "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz", + "version": "2.2.5" }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "dev": true, "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" - } + }, + "dev": true, + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" - } + }, + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "version": "2.3.1" }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, "dependencies": { "side-channel": "^1.0.4" }, + "dev": true, "engines": { "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "version": "6.11.0" }, "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "dev": true, "engines": { "node": ">=0.4.x" - } + }, + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "version": "0.2.0" }, "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -7390,185 +7385,188 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "version": "1.2.3" }, "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "version": "5.1.1" }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, + "dev": true, "engines": { "node": ">= 6" - } + }, + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "version": "3.6.2" }, "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "dev": true, "dependencies": { "readable-stream": "^3.6.0" }, + "dev": true, "engines": { "node": ">=8" }, "funding": { "type": "github", "url": "https://github.com/sponsors/Borewit" - } + }, + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "version": "3.0.2" }, "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, "dependencies": { "minimatch": "^5.1.0" - } + }, + "dev": true, + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "version": "1.1.3" }, "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" - } + }, + "dev": true, + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, + "dev": true, "engines": { "node": ">=10" - } + }, + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "version": "5.1.6" }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, + "dev": true, "engines": { "node": ">=8.10.0" - } + }, + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "version": "3.6.0" }, "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "version": "2.1.1" }, "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "version": "2.0.2" }, "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "dev": true, "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "dev": true, "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "version": "1.2.1" }, "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, "dependencies": { "lowercase-keys": "^2.0.0" }, + "dev": true, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "version": "3.1.0" }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" - } + }, + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "version": "1.0.4" }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, "bin": { "rimraf": "bin.js" }, + "dependencies": { + "glob": "^7.1.3" + }, + "dev": true, "funding": { "url": "https://github.com/sponsors/isaacs" - } + }, + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "version": "3.0.2" }, "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "engines": { "node": ">=0.12.0" - } + }, + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "version": "2.4.1" }, "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dependencies": { + "queue-microtask": "^1.2.2" + }, "dev": true, "funding": [ { @@ -7584,14 +7582,14 @@ "url": "https://feross.org/support" } ], - "dependencies": { - "queue-microtask": "^1.2.2" - } + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "dependencies": { + "queue-microtask": "^1.2.2" + }, "dev": true, "funding": [ { @@ -7607,23 +7605,20 @@ "url": "https://feross.org/support" } ], - "dependencies": { - "queue-microtask": "^1.2.2" - } + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, "dependencies": { "tslib": "^2.1.0" - } + }, + "dev": true, + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "version": "7.8.1" }, "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -7638,78 +7633,80 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "version": "5.2.1" }, "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "dev": true, "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "version": "2.1.2" }, "node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "dev": true, "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", - "dev": true + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "version": "1.2.1" }, "node_modules/seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dev": true, - "dependencies": { - "commander": "^2.8.1" - }, "bin": { "seek-bunzip": "bin/seek-bunzip", "seek-table": "bin/seek-bzip-table" - } + }, + "dependencies": { + "commander": "^2.8.1" + }, + "dev": true, + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "version": "1.0.6" }, "node_modules/seek-bzip/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "dev": true, "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "version": "2.20.3" }, "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" }, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "dev": true, "engines": { "node": ">=10" - } + }, + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "version": "7.5.4" }, "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, + "dev": true, "engines": { "node": ">=10" - } + }, + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "version": "6.0.0" }, "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "dev": true, "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "version": "4.0.0" }, "node_modules/serverless": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/serverless/-/serverless-3.36.0.tgz", - "integrity": "sha512-VY7UzP4u1/yuTNpF2Wssrru16qhhReLCjgL2oeHCvhujxPyTFv9TQGSlLhaT0ZUCXhRBphwVwITTRopo6NSUgA==", - "dev": true, - "hasInstallScript": true, + "bin": { + "serverless": "bin/serverless.js", + "sls": "bin/serverless.js" + }, "dependencies": { "@serverless/dashboard-plugin": "^7.1.0", "@serverless/platform-client": "^4.4.0", @@ -7768,19 +7765,16 @@ "ws": "^7.5.9", "yaml-ast-parser": "0.0.43" }, - "bin": { - "serverless": "bin/serverless.js", - "sls": "bin/serverless.js" - }, + "dev": true, "engines": { "node": ">=12.0" - } + }, + "hasInstallScript": true, + "integrity": "sha512-VY7UzP4u1/yuTNpF2Wssrru16qhhReLCjgL2oeHCvhujxPyTFv9TQGSlLhaT0ZUCXhRBphwVwITTRopo6NSUgA==", + "resolved": "https://registry.npmjs.org/serverless/-/serverless-3.36.0.tgz", + "version": "3.36.0" }, "node_modules/serverless-domain-manager": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/serverless-domain-manager/-/serverless-domain-manager-7.1.2.tgz", - "integrity": "sha512-KuDqDmr2sC4o+7/PAWEo6m2Ox4HLSWMVgO6nncJIeWeaV7iaffAMVgg2GtOwYL7p93rS3eLGO2ra2ce4QYaTkg==", - "dev": true, "dependencies": { "@aws-sdk/client-acm": "^3.370.0", "@aws-sdk/client-api-gateway": "^3.370.0", @@ -7794,32 +7788,32 @@ "@aws-sdk/smithy-client": "^3.370.0", "@aws-sdk/util-retry": "^3.370.0" }, + "dev": true, "engines": { "node": ">=14" }, + "integrity": "sha512-KuDqDmr2sC4o+7/PAWEo6m2Ox4HLSWMVgO6nncJIeWeaV7iaffAMVgg2GtOwYL7p93rS3eLGO2ra2ce4QYaTkg==", "peerDependencies": { "serverless": "^2.60 || ^3.0.0" - } + }, + "resolved": "https://registry.npmjs.org/serverless-domain-manager/-/serverless-domain-manager-7.1.2.tgz", + "version": "7.1.2" }, "node_modules/serverless-dotenv-plugin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serverless-dotenv-plugin/-/serverless-dotenv-plugin-6.0.0.tgz", - "integrity": "sha512-8tLVNwHfDO0sBz6+m+DLTZquRk0AZq9rzqk3kphm1iIWKfan9R7RKt4hdq3eQ0kmDoqzudjPYBEXAJ5bUNKeGQ==", - "dev": true, "dependencies": { "chalk": "^4.1.2", "dotenv": "^16.0.3", "dotenv-expand": "^10.0.0" }, + "dev": true, + "integrity": "sha512-8tLVNwHfDO0sBz6+m+DLTZquRk0AZq9rzqk3kphm1iIWKfan9R7RKt4hdq3eQ0kmDoqzudjPYBEXAJ5bUNKeGQ==", "peerDependencies": { "serverless": "1 || 2 || pre-3 || 3" - } + }, + "resolved": "https://registry.npmjs.org/serverless-dotenv-plugin/-/serverless-dotenv-plugin-6.0.0.tgz", + "version": "6.0.0" }, - "node_modules/serverless-python-requirements": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/serverless-python-requirements/-/serverless-python-requirements-6.1.1.tgz", - "integrity": "sha512-SQsDKjoZXWvRJNsKL7NvHiMM+B6kG0a4RkVexhPCxId/rVMLVyz0UHg7v34kzaklfsXTQIkez+9x7HP3FwdRVQ==", - "dev": true, + "node_modules/serverless-python-requirements": { "dependencies": { "@iarna/toml": "^2.2.5", "appdirectory": "^0.1.0", @@ -7838,122 +7832,122 @@ "sha256-file": "1.0.0", "shell-quote": "^1.8.1" }, + "dev": true, "engines": { "node": ">=12.0" }, + "integrity": "sha512-SQsDKjoZXWvRJNsKL7NvHiMM+B6kG0a4RkVexhPCxId/rVMLVyz0UHg7v34kzaklfsXTQIkez+9x7HP3FwdRVQ==", "peerDependencies": { "serverless": ">=2.32" - } + }, + "resolved": "https://registry.npmjs.org/serverless-python-requirements/-/serverless-python-requirements-6.1.1.tgz", + "version": "6.1.1" }, "node_modules/serverless-python-requirements/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, "bin": { "semver": "bin/semver.js" }, + "dev": true, "engines": { "node": ">=10" - } + }, + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "version": "7.6.3" }, "node_modules/serverless/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" - } + }, + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "version": "8.12.0" }, "node_modules/serverless/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "engines": { "node": ">=10" - } + }, + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/serverless/node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } + }, + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "version": "8.0.0" }, "node_modules/serverless/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "dev": true, "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/serverless/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" }, + "dev": true, "engines": { "node": ">= 8" - } + }, + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "version": "2.1.2" }, "node_modules/serverless/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "version": "3.3.6" }, "node_modules/serverless/node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, "engines": { "node": ">= 6" - } + }, + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/serverless/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" - } + }, + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "version": "8.1.1" }, "node_modules/serverless/node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -7962,24 +7956,26 @@ "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, + "dev": true, "engines": { "node": ">=10" - } + }, + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "version": "6.2.1" }, "node_modules/serverless/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/serverless/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "engines": { "node": ">=8.3.0" }, + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" @@ -7991,306 +7987,304 @@ "utf-8-validate": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "version": "7.5.10" }, "node_modules/serverless/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "dev": true, "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "version": "4.0.0" }, "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "dev": true, "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/set-value": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", - "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", - "dev": true, - "funding": [ - "https://github.com/sponsors/jonschlinkert", - "https://paypal.me/jonathanschlinkert", - "https://jonschlinkert.dev/sponsor" - ], "dependencies": { "is-plain-object": "^2.0.4", "is-primitive": "^3.0.1" }, + "dev": true, "engines": { "node": ">=11.0" - } + }, + "funding": [ + "https://github.com/sponsors/jonschlinkert", + "https://paypal.me/jonathanschlinkert", + "https://jonschlinkert.dev/sponsor" + ], + "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", + "version": "4.1.0" }, "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "dev": true, "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "version": "1.0.5" }, "node_modules/sha256-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sha256-file/-/sha256-file-1.0.0.tgz", + "dev": true, "integrity": "sha512-nqf+g0veqgQAkDx0U2y2Tn2KWyADuuludZTw9A7J3D+61rKlIIl9V5TS4mfnwKuXZOH9B7fQyjYJ9pKRHIsAyg==", - "dev": true + "resolved": "https://registry.npmjs.org/sha256-file/-/sha256-file-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "version": "1.8.1" }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" }, + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "version": "1.0.4" }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "dev": true, "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "version": "3.0.7" }, "node_modules/simple-git": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.20.0.tgz", - "integrity": "sha512-ozK8tl2hvLts8ijTs18iFruE+RoqmC/mqZhjs/+V7gS5W68JpJ3+FCTmLVqmR59MaUQ52MfGQuWsIqfsTbbJ0Q==", - "dev": true, "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", "debug": "^4.3.4" }, + "dev": true, "funding": { "type": "github", "url": "https://github.com/steveukx/git-js?sponsor=1" - } + }, + "integrity": "sha512-ozK8tl2hvLts8ijTs18iFruE+RoqmC/mqZhjs/+V7gS5W68JpJ3+FCTmLVqmR59MaUQ52MfGQuWsIqfsTbbJ0Q==", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.20.0.tgz", + "version": "3.20.0" }, "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "dev": true, "dependencies": { "is-plain-obj": "^1.0.0" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "version": "1.1.2" }, "node_modules/sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", - "dev": true, "dependencies": { "sort-keys": "^1.0.0" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "version": "1.0.1" }, "node_modules/sort-keys/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "dev": true, "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "version": "1.0.3" }, "node_modules/sprintf-kit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.1.tgz", - "integrity": "sha512-2PNlcs3j5JflQKcg4wpdqpZ+AjhQJ2OZEo34NXDtlB0tIPG84xaaXhpA8XFacFiwjKA4m49UOYG83y3hbMn/gQ==", - "dev": true, "dependencies": { "es5-ext": "^0.10.53" - } + }, + "dev": true, + "integrity": "sha512-2PNlcs3j5JflQKcg4wpdqpZ+AjhQJ2OZEo34NXDtlB0tIPG84xaaXhpA8XFacFiwjKA4m49UOYG83y3hbMn/gQ==", + "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/stream-buffers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", - "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", "dev": true, "engines": { "node": ">= 0.10.0" - } + }, + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "version": "3.0.2" }, "node_modules/stream-promise": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-promise/-/stream-promise-3.2.0.tgz", - "integrity": "sha512-P+7muTGs2C8yRcgJw/PPt61q7O517tDHiwYEzMWo1GSBCcZedUMT/clz7vUNsSxFphIlJ6QUL4GexQKlfJoVtA==", - "dev": true, "dependencies": { "2-thenable": "^1.0.0", "es5-ext": "^0.10.49", "is-stream": "^1.1.0" - } + }, + "dev": true, + "integrity": "sha512-P+7muTGs2C8yRcgJw/PPt61q7O517tDHiwYEzMWo1GSBCcZedUMT/clz7vUNsSxFphIlJ6QUL4GexQKlfJoVtA==", + "resolved": "https://registry.npmjs.org/stream-promise/-/stream-promise-3.2.0.tgz", + "version": "3.2.0" }, "node_modules/stream-promise/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "engines": { "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } + }, + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "version": "1.1.0" }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "version": "4.2.3" }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/string_decoder": { + "dependencies": { + "safe-buffer": "~5.2.0" + }, "dev": true, + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "version": "1.3.0" + }, + "node_modules/strip-ansi": { "dependencies": { "ansi-regex": "^5.0.1" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "version": "6.0.1" }, "node_modules/strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, "dependencies": { "is-natural-number": "^4.0.1" - } + }, + "dev": true, + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "version": "2.1.0" }, "node_modules/strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, "dependencies": { "escape-string-regexp": "^1.0.2" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "version": "1.0.1" }, "node_modules/strip-outer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" - } + }, + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "version": "1.0.5" }, "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "dev": true, "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "version": "1.0.5" }, "node_modules/strtok3": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", - "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", - "dev": true, "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^4.1.0" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/Borewit" - } + }, + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "version": "6.3.0" }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "version": "7.2.0" }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, + "node_modules/tar-stream": { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -8298,77 +8292,78 @@ "inherits": "^2.0.3", "readable-stream": "^3.1.1" }, + "dev": true, "engines": { "node": ">=6" - } + }, + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "version": "2.2.0" }, "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "dev": true, "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "version": "2.3.8" }, "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, "dependencies": { "es5-ext": "~0.10.46", "next-tick": "1" - } + }, + "dev": true, + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "version": "0.1.7" }, "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, + "dev": true, "engines": { "node": ">=0.6.0" - } + }, + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "version": "0.0.33" }, "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "dev": true, "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "version": "1.1.1" }, "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, + "dev": true, "engines": { "node": ">=8.0" - } + }, + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "version": "5.0.1" }, "node_modules/token-types": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", - "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", - "dev": true, "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" }, + "dev": true, "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/Borewit" - } + }, + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "version": "4.2.1" }, "node_modules/token-types/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -8383,64 +8378,68 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "version": "1.2.1" }, "node_modules/traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "version": "0.6.7" }, "node_modules/trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "dev": true, "dependencies": { "escape-string-regexp": "^1.0.2" }, + "dev": true, "engines": { "node": ">=0.10.0" - } + }, + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/trim-repeated/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" - } + }, + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "version": "1.0.5" }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "dev": true, "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "version": "2.6.2" }, "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "dev": true, "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "version": "1.2.0" }, "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" - } + }, + "dev": true, + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "version": "1.4.3" }, "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + }, "dev": true, "funding": [ { @@ -8456,160 +8455,155 @@ "url": "https://feross.org/support" } ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "version": "5.7.1" }, "node_modules/uni-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/uni-global/-/uni-global-1.0.0.tgz", - "integrity": "sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw==", - "dev": true, "dependencies": { "type": "^2.5.0" - } + }, + "dev": true, + "integrity": "sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw==", + "resolved": "https://registry.npmjs.org/uni-global/-/uni-global-1.0.0.tgz", + "version": "1.0.0" }, "node_modules/uni-global/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "dev": true, "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "version": "2.7.2" }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { "node": ">= 10.0.0" - } + }, + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "version": "4.0.0" }, "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" - } + }, + "dev": true, + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "version": "4.4.1" }, "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "dev": true, "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" - } + }, + "dev": true, + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "version": "0.10.3" }, "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "dev": true, "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "version": "1.3.2" }, "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, + "dev": true, "engines": { "node": ">=6.14.2" - } + }, + "hasInstallScript": true, + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "optional": true, + "peer": true, + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "version": "5.0.10" }, "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" - } + }, + "dev": true, + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "version": "0.12.5" }, "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "dev": true, "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "version": "1.0.2" }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "bin": { + "uuid": "dist/bin/uuid" + }, "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "bin": { - "uuid": "dist/bin/uuid" - } + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "version": "9.0.1" }, "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, "dependencies": { "builtins": "^1.0.3" - } + }, + "dev": true, + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "version": "3.0.0" }, "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, "dependencies": { "defaults": "^1.0.3" - } + }, + "dev": true, + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "version": "1.0.1" }, "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, "bin": { "node-which": "bin/node-which" }, + "dependencies": { + "isexe": "^2.0.0" + }, + "dev": true, "engines": { "node": ">= 8" - } + }, + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "version": "2.0.2" }, "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "dev": true, "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "version": "2.0.1" }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -8617,42 +8611,44 @@ "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" }, + "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" - } + }, + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "version": "1.1.11" }, "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, + "dev": true, "engines": { "node": ">=8" - } + }, + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "version": "6.2.0" }, "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "dev": true, "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "version": "1.0.2" }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, - "peer": true, "engines": { "node": ">=10.0.0" }, + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "peer": true, "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" @@ -8664,78 +8660,82 @@ "utf-8-validate": { "optional": true } - } + }, + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "version": "8.18.0" }, "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, "engines": { "node": ">=4.0" - } + }, + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "version": "11.0.1" }, "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "engines": { "node": ">=0.4" - } + }, + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "version": "4.0.2" }, "node_modules/yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "dev": true, "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "dev": true + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "version": "0.0.43" }, "node_modules/yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "dev": true, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + }, "dependencies": { "argparse": "^1.0.7", "glob": "^7.0.5" }, - "bin": { - "json2yaml": "bin/json2yaml", - "yaml2json": "bin/yaml2json" - } + "dev": true, + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "version": "0.3.0" }, "node_modules/yamljs/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" - } + }, + "dev": true, + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "version": "1.0.10" }, "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" - } + }, + "dev": true, + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "version": "2.10.0" }, "node_modules/zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, "dependencies": { "archiver-utils": "^2.1.0", "compress-commons": "^4.1.0", "readable-stream": "^3.6.0" }, + "dev": true, "engines": { "node": ">= 10" - } + }, + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "version": "4.1.0" } - } + }, + "requires": true, + "version": "1.0.0" } diff --git a/backend/package.json b/backend/package.json index e1220a3a..f6cd947d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -25,4 +25,4 @@ "test-python": "pytest" }, "version": "1.0.0" -} \ No newline at end of file +} diff --git a/backend/src/tasks/functions.yml b/backend/src/tasks/functions.yml index 871d21c9..0c5018fa 100644 --- a/backend/src/tasks/functions.yml +++ b/backend/src/tasks/functions.yml @@ -56,124 +56,97 @@ updateScanTaskStatus: - ${file(env.yml):${self:provider.stage}-ecs-cluster, ''} existingArn: arn:aws:lambda:us-east-1:957221700844:function:crossfeed-integration-updateScanTaskStatus -# populateServiceStatsElasticache: -# handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_ServicesStatscache -# runtime: python3.11 -# environment: -# DJANGO_SETTINGS_MODULE: xfd_django.settings -# REDIS_ENDPOINT: ${env:ELASTICACHE_ENDPOINT} -# events: -# - schedule: -# rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight -# enabled: true -# package: -# include: -# - src/** -# - requirements.txt -# exclude: -# - node_modules/** - -# populatePortStatsElasticache: -# handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_PortsStatscache -# runtime: python3.11 -# environment: -# DJANGO_SETTINGS_MODULE: xfd_django.settings -# REDIS_ENDPOINT: ${env:ELASTICACHE_ENDPOINT} -# events: -# - schedule: -# rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight -# enabled: true -# package: -# include: -# - src/** -# - requirements.txt -# exclude: -# - node_modules/** - -# populateNumVulnsStatsElasticache: -# handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_NumVulnerabilitiesStatscache -# runtime: python3.11 -# environment: -# DJANGO_SETTINGS_MODULE: xfd_django.settings -# REDIS_ENDPOINT: ${env:ELASTICACHE_ENDPOINT} -# events: -# - schedule: -# rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight -# enabled: true -# package: -# include: -# - src/** -# - requirements.txt -# exclude: -# - node_modules/** - -# populateLatestVulnsStatsElasticache: -# handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_LatestVulnerabilitiesCache -# runtime: python3.11 -# environment: -# DJANGO_SETTINGS_MODULE: xfd_django.settings -# REDIS_ENDPOINT: ${env:ELASTICACHE_ENDPOINT} -# events: -# - schedule: -# rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight -# enabled: true -# package: -# include: -# - src/** -# - requirements.txt -# exclude: -# - node_modules/** - -# populateMostCommonVulnerabilityElasticache: -# handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_MostCommonVulnerabilitiesCache - -# runtime: python3.11 -# environment: -# DJANGO_SETTINGS_MODULE: xfd_django.settings -# REDIS_ENDPOINT: ${env:ELASTICACHE_ENDPOINT} -# events: -# - schedule: -# rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight -# enabled: true -# package: -# include: -# - src/** -# - requirements.txt -# exclude: -# - node_modules/** - -# populateSeverityCountsCache: -# handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_SeverityCountsCache - -# runtime: python3.11 -# environment: -# DJANGO_SETTINGS_MODULE: xfd_django.settings -# REDIS_ENDPOINT: ${env:ELASTICACHE_ENDPOINT} -# events: -# - schedule: -# rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight -# enabled: true -# package: -# include: -# - src/** -# - requirements.txt -# exclude: -# - node_modules/** - -# populateByOrgCache: -# handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_VulnerabilitiesByOrgCache - -# runtime: python3.11 -# environment: -# DJANGO_SETTINGS_MODULE: xfd_django.settings -# REDIS_ENDPOINT: ${env:ELASTICACHE_ENDPOINT} -# events: -# - schedule: -# rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight -# enabled: true -# package: -# include: -# - src/** -# - requirements.txt -# exclude: -# - node_modules/** +serviceStatsCache: + handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_services_cache + events: + - schedule: + rate: ron(0 0 * * ? *) # This triggers the function every day it midnight + enabled: true + package: + include: + - src/** + - requirements.txt + exclude: + - node_modules/** + +portStatsCache: + handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_ports_cache + events: + - schedule: + rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight + enabled: true + package: + include: + - src/** + - requirements.txt + exclude: + - node_modules/** + +numVulnsCache: + handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_num_vulns_cache + runtime: python3.11 + environment: + DJANGO_SETTINGS_MODULE: xfd_django.settings + REDIS_ENDPOINT: ${env:ELASTICACHE_ENDPOINT} + events: + - schedule: + rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight + enabled: true + package: + include: + - src/** + - requirements.txt + exclude: + - node_modules/** + +latestVulnsCache: + handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_latest_vulns_cache + events: + - schedule: + rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight + enabled: true + package: + include: + - src/** + - requirements.txt + exclude: + - node_modules/** + +mostCommonVulnsCache: + handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_most_common_vulns_cache + events: + - schedule: + rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight + enabled: true + package: + include: + - src/** + - requirements.txt + exclude: + - node_modules/** + +severityCache: + handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_severity_cache + events: + - schedule: + rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight + enabled: true + package: + include: + - src/** + - requirements.txt + exclude: + - node_modules/** + +byOrgCache: + handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_by_org_cache + events: + - schedule: + rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight + enabled: true + package: + include: + - src/** + - requirements.txt + exclude: + - node_modules/** \ No newline at end of file diff --git a/backend/src/xfd_django/xfd_api/api_methods/domain.py b/backend/src/xfd_django/xfd_api/api_methods/domain.py index 2310333c..2064169e 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/domain.py +++ b/backend/src/xfd_django/xfd_api/api_methods/domain.py @@ -9,13 +9,13 @@ # Third-Party Libraries from django.core.exceptions import ObjectDoesNotExist from django.core.paginator import Paginator -from django.db.models import Q +from django.db.models import Prefetch, Q from django.http import Http404 from fastapi import HTTPException from ..auth import get_org_memberships, get_user_organization_ids, is_global_view_admin from ..helpers.filter_helpers import filter_domains, sort_direction -from ..models import Domain +from ..models import Domain, Service from ..schema_models.domain import DomainFilters, DomainSearch @@ -26,8 +26,67 @@ def get_domain_by_id(domain_id: str): object: a single Domain object. """ try: - domain = Domain.objects.get(id=domain_id) - return domain + domain = ( + Domain.objects.select_related("organization") + .prefetch_related( + "vulnerabilities", + Prefetch( + "services", + queryset=Service.objects.only( + "id", "port", "service", "lastSeen", "products" + ), + ), + ) + .filter(id=domain_id) + .first() + ) + # The Domain model includes related fields (e.g., organization, vulnerabilities, services) + # which are Django ORM objects themselves and cannot be directly serialized into JSON. + # Serialize domain object and its relations + domain_data = { + "id": domain.id, + "name": domain.name, + "ip": domain.ip, + "createdAt": domain.createdAt, + "updatedAt": domain.updatedAt, + "country": domain.country, + "cloudHosted": domain.cloudHosted, + "organization": { + "id": domain.organization.id, + "name": domain.organization.name, + } + if domain.organization + else None, + "vulnerabilities": [ + { + "id": vulnerability.id, + "title": vulnerability.title, + "severity": vulnerability.severity, + "description": vulnerability.description, + "state": vulnerability.state, + "createdAt": vulnerability.createdAt, + } + for vulnerability in domain.vulnerabilities.all() + ], + "services": [ + { + "id": service.id, + "port": service.port, + "lastSeen": service.lastSeen, + "products": service.products, + } + for service in domain.services.all() + ], + "webpages": [ + { + "url": webpage.url, + "status": webpage.status, + "responseSize": webpage.responseSize, + } + for webpage in domain.webpages.all() + ], + } + return domain_data except Domain.DoesNotExist: raise HTTPException(status_code=404, detail="Domain not found.") except Exception as e: @@ -82,62 +141,3 @@ def export_domains(domain_filters: DomainFilters): raise HTTPException(status_code=404, detail=str(e)) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) - - -async def stats_total_domains(organization, tag, current_user): - """ - Get total number of domains - Returns: - int: total number of domains - """ - try: - # Base QuerySet - queryset = Domain.objects.all() - - # Apply filtering logic at the endpoint - # Check if the user is a global admin - is_admin = is_global_view_admin(current_user) - - # Get user's accessible organizations - if not is_admin: - user_org_ids = await get_user_organization_ids(current_user) - if not user_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="User does not belong to any organizations.", - ) - queryset = queryset.filter(organizationId__id__in=user_org_ids) - else: - user_org_ids = None # Admin has access to all organizations - - # Apply organization filter - if organization: - if user_org_ids is not None and organization not in user_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="User does not have access to the specified organization.", - ) - queryset = queryset.filter(organizationId__id=organization) - - # Apply tag filter - if tag: - tag_org_ids = get_tag_organization_ids(tag) - if user_org_ids is not None: - accessible_org_ids = set(user_org_ids).intersection(tag_org_ids) - if not accessible_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="No accessible organizations found for the specified tag.", - ) - queryset = queryset.filter(organizationId__id__in=accessible_org_ids) - else: - queryset = queryset.filter(organizationId__id__in=tag_org_ids) - - # Get total count - total_domains = await sync_to_async(queryset.count)() - - # Return the count in the expected schema - return {"value": total_domains} - - except HTTPException as http_exc: - raise http_exc diff --git a/backend/src/xfd_django/xfd_api/api_methods/organization.py b/backend/src/xfd_django/xfd_api/api_methods/organization.py index 0956e229..6b78d2b5 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/organization.py +++ b/backend/src/xfd_django/xfd_api/api_methods/organization.py @@ -995,7 +995,13 @@ def list_organizations_v2(state, regionId, current_user): ): return [] + # TODO: MAKE SURE IF Just a normal org member they can only get their org # Define filter for organizations based on admin status + # org_filter = {} + # if not is_global_view_admin(current_user): + # org_filter["id__in"] = get_org_memberships(current_user) + # org_filter["parent"] = None + # Prepare the filter criteria filter_criteria = Q() @@ -1107,88 +1113,3 @@ def search_organizations_task(search_body, current_user: User): raise HTTPException( status_code=500, detail="An error occurred while searching organizations." ) - - -# GET: /by-org/ -async def stats_get_org_count_by_id(organization, tag, current_user, redis_client): - """Get stats org count.""" - try: - # Retrieve data from Redis - json_data = await redis_client.get("vulnerabilities_by_org") - - if json_data is None: - raise HTTPException(status_code=404, detail="Data not found in cache.") - - vulnerabilities_data = json.loads(json_data) - - # Get user's organization IDs - user_org_ids = await get_user_organization_ids(current_user) - if not user_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="User does not belong to any organizations.", - ) - - # Check if user is a global admin - is_admin = is_global_view_admin(current_user) - - # Determine accessible organizations - if is_admin: - accessible_org_ids = None - else: - accessible_org_ids = set(user_org_ids) - - # Apply filters - if organization: - if ( - accessible_org_ids is not None - and organization not in accessible_org_ids - ): - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="User does not have access to the specified organization.", - ) - accessible_org_ids = {organization} - elif tag: - tag_org_ids = get_tag_organization_ids(tag) - if accessible_org_ids is not None: - accessible_org_ids = accessible_org_ids.intersection(tag_org_ids) - else: - accessible_org_ids = set(tag_org_ids) - if not accessible_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="No accessible organizations found for the specified tag.", - ) - - # Filter vulnerabilities - if accessible_org_ids is not None: - filtered_vulnerabilities = [ - vuln - for vuln in vulnerabilities_data - if vuln["orgId"] in accessible_org_ids - ] - else: - filtered_vulnerabilities = vulnerabilities_data - - # Aggregate counts by organization - org_counts = {} - for vuln in filtered_vulnerabilities: - org_id = vuln["orgId"] - org_name = vuln["orgName"] - if org_id not in org_counts: - org_counts[org_id] = { - "id": org_name, - "orgId": org_id, - "value": 0, - "label": org_name, - } - org_counts[org_id]["value"] += 1 - - # Convert to list and sort - results = sorted(org_counts.values(), key=lambda x: x["value"], reverse=True) - - return results - - except Exception as e: - raise HTTPException(status_code=500, detail=str(e)) diff --git a/backend/src/xfd_django/xfd_api/api_methods/stats.py b/backend/src/xfd_django/xfd_api/api_methods/stats.py new file mode 100644 index 00000000..77fae7cb --- /dev/null +++ b/backend/src/xfd_django/xfd_api/api_methods/stats.py @@ -0,0 +1,311 @@ +# Standard Python Libraries +import json +from collections import defaultdict + +# Third-Party Libraries +from fastapi import HTTPException +from redis import asyncio as aioredis + + +from xfd_api.auth import get_stats_org_ids +from xfd_api.helpers.stats_helpers import get_stats_count_from_cache, get_total_count + +# GET: /stats +async def get_stats(filter_data, current_user, redis_client): + """Compile all stats.""" + async def safe_fetch(fetch_fn, *args, **kwargs): + """Safely fetch stats, returning an empty list on failure.""" + try: + return await fetch_fn(*args, **kwargs) + except Exception as e: + print(f"Error fetching stats with {fetch_fn.__name__}: {e}") + return [] + + filtered_org_ids = get_stats_org_ids(current_user, filter_data) + + # Ensure organization_ids is not empty + if not filtered_org_ids: + raise HTTPException( + status_code=404, + detail="No organizations found for the user with the specified filters.", + ) + + # Fetch + try: + return { + "result": { + "domains": { + "services": await safe_fetch(get_user_services_count, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), + "ports": await safe_fetch(get_user_ports_count, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), + "numVulnerabilities": await safe_fetch(get_num_vulns, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), + "total": await safe_fetch(get_total_count,filtered_org_ids) + }, + "vulnerabilities": { + "severity": await safe_fetch(get_severity_stats, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), + "latestVulnerabilities": await safe_fetch(stats_latest_vulns, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), + "mostCommonVulnerabilities": await safe_fetch(stats_most_common_vulns, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), + "byOrg": await safe_fetch(get_by_org_stats, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids) + }, + } + } + except Exception as e: + raise HTTPException( + status_code=500, detail=f"An unexpected error occurred: {e}" + ) + +async def get_user_services_count(filter_data, current_user, redis_client, filtered_org_ids = None): + """Retrieve services from Elasticache filtered by user.""" + try: + if not filtered_org_ids: + filtered_org_ids = get_stats_org_ids(current_user, filter_data) + + # Ensure organization_ids is not empty + if not filtered_org_ids: + raise HTTPException( + status_code=404, + detail="No organizations found for the user with the specified filters.", + ) + + services_data = await get_stats_count_from_cache(redis_client, "services_stats", filtered_org_ids) + + if not services_data: + raise HTTPException( + status_code=404, + detail="No service data found for the user's organizations in cache.", + ) + + return services_data + + except aioredis.RedisError as redis_error: + raise HTTPException(status_code=500, detail=f"Redis error: {redis_error}") + + except Exception as e: + raise HTTPException( + status_code=500, detail=f"An unexpected error occurred: {e}" + ) + + +async def get_user_ports_count(filter_data, current_user, redis_client, filtered_org_ids = None): + """Retrieve ports from Elasticache filtered by user.""" + try: + if not filtered_org_ids: + filtered_org_ids = get_stats_org_ids(current_user, filter_data) + + # Ensure organization_ids is not empty + if not filtered_org_ids: + raise HTTPException( + status_code=404, + detail="No organizations found for the user with the specified filters.", + ) + + ports_data = await get_stats_count_from_cache(redis_client, "ports_stats", filtered_org_ids) + + if not ports_data: + raise HTTPException( + status_code=404, + detail="No port data found for the user's organizations in cache.", + ) + + return ports_data + + except aioredis.RedisError as redis_error: + raise HTTPException(status_code=500, detail=f"Redis error: {redis_error}") + + except Exception as e: + raise HTTPException( + status_code=500, detail=f"An unexpected error occurred: {e}" + ) + + +async def get_num_vulns(filter_data, current_user, redis_client, filtered_org_ids = None): + """Retrieve ports from Elasticache filtered by user.""" + try: + if not filtered_org_ids: + filtered_org_ids = get_stats_org_ids(current_user, filter_data) + + # Ensure organization_ids is not empty + if not filtered_org_ids: + raise HTTPException( + status_code=404, + detail="No organizations found for the user with the specified filters.", + ) + + num_vulns_data = await get_stats_count_from_cache(redis_client, "vulnerabilities_stats", filtered_org_ids) + + if not num_vulns_data: + raise HTTPException( + status_code=404, + detail="No port data found for the user's organizations in cache.", + ) + + return num_vulns_data + + except aioredis.RedisError as redis_error: + raise HTTPException(status_code=500, detail=f"Redis error: {redis_error}") + + except Exception as e: + raise HTTPException( + status_code=500, detail=f"An unexpected error occurred: {e}" + ) + +async def get_severity_stats(filter_data, current_user, redis_client, filtered_org_ids = None): + """Retrieve ports from Elasticache filtered by user.""" + try: + if not filtered_org_ids: + filtered_org_ids = get_stats_org_ids(current_user, filter_data) + + # Ensure organization_ids is not empty + if not filtered_org_ids: + raise HTTPException( + status_code=404, + detail="No organizations found for the user with the specified filters.", + ) + + severity_data = await get_stats_count_from_cache(redis_client, "severity_stats", filtered_org_ids) + + if not severity_data: + raise HTTPException( + status_code=404, + detail="No severity data found for the user's organizations in cache.", + ) + + return severity_data + + except aioredis.RedisError as redis_error: + raise HTTPException(status_code=500, detail=f"Redis error: {redis_error}") + + except Exception as e: + raise HTTPException( + status_code=500, detail=f"An unexpected error occurred: {e}" + ) + +async def stats_latest_vulns(filter_data, current_user, redis_client, max_results=100, filtered_org_ids = None): + """ + Retrieve the latest vulnerabilities from Elasticache filtered by user. + """ + try: + if not filtered_org_ids: + filtered_org_ids = get_stats_org_ids(current_user, filter_data) + + # Ensure organization_ids is not empty + if not filtered_org_ids: + raise HTTPException( + status_code=404, + detail="No organizations found for the user with the specified filters.", + ) + + vulnerabilities = [] + + # Fetch data from Redis for each organization + for org_id in filtered_org_ids: + redis_key = f"latest_vulnerabilities:{org_id}" + org_vulnerabilities = await redis_client.get(redis_key) + if org_vulnerabilities: + vulnerabilities.extend(json.loads(org_vulnerabilities)) + + # Limit the results to the maximum specified + vulnerabilities = sorted(vulnerabilities, key=lambda x: x["createdAt"])[:max_results] + + if not vulnerabilities: + raise HTTPException( + status_code=404, + detail="No vulnerabilities found for the user's organizations in cache.", + ) + + return vulnerabilities + + except aioredis.RedisError as redis_error: + raise HTTPException(status_code=500, detail=f"Redis error: {redis_error}") + + except Exception as e: + raise HTTPException( + status_code=500, detail=f"An unexpected error occurred: {e}", + ) + + +async def stats_most_common_vulns(filter_data, current_user, redis_client, max_results=100, filtered_org_ids = None): + """ + Retrieve the most common vulnerabilities from Elasticache filtered by user. + """ + try: + if not filtered_org_ids: + filtered_org_ids = get_stats_org_ids(current_user, filter_data) + + # Ensure organization_ids is not empty + if not filtered_org_ids: + raise HTTPException( + status_code=404, + detail="No organizations found for the user with the specified filters.", + ) + + vulnerabilities = [] + + # Fetch data from Redis for each organization + for org_id in filtered_org_ids: + redis_key = f"most_common_vulnerabilities:{org_id}" + org_vulnerabilities = await redis_client.get(redis_key) + if org_vulnerabilities: + vulnerabilities.extend(json.loads(org_vulnerabilities)) + + # Limit the results to the maximum specified + vulnerabilities = sorted( + vulnerabilities, key=lambda x: x["count"], reverse=True + )[:max_results] + + if not vulnerabilities: + raise HTTPException( + status_code=404, + detail="No vulnerabilities found for the user's organizations in cache.", + ) + + return vulnerabilities + + except aioredis.RedisError as redis_error: + raise HTTPException(status_code=500, detail=f"Redis error: {redis_error}") + + except Exception as e: + raise HTTPException( + status_code=500, + detail=f"An unexpected error occurred: {e}", + ) + +async def get_by_org_stats(filter_data, current_user, redis_client, filtered_org_ids=None): + """ + Fetch the count of open vulnerabilities grouped by organization from Redis. + """ + try: + if not filtered_org_ids: + filtered_org_ids = get_stats_org_ids(current_user, filter_data) + + # Ensure organization_ids is not empty + if not filtered_org_ids: + raise HTTPException( + status_code=404, + detail="No organizations found for the user with the specified filters.", + ) + + # Initialize the results list + by_org_data = [] + + # Fetch data from Redis for each organization ID + for org_id in filtered_org_ids: + redis_key = f"by_org_stats:{org_id}" + org_stats = await redis_client.get(redis_key) + if org_stats: + by_org_data.append(json.loads(org_stats)) # Directly append the Redis data + + if not by_org_data: + raise HTTPException( + status_code=404, + detail="No organization data found in cache.", + ) + + return by_org_data + + except aioredis.RedisError as redis_error: + raise HTTPException(status_code=500, detail=f"Redis error: {redis_error}") + + except Exception as e: + raise HTTPException( + status_code=500, detail=f"An unexpected error occurred: {e}", + ) \ No newline at end of file diff --git a/backend/src/xfd_django/xfd_api/api_methods/stats_ports.py b/backend/src/xfd_django/xfd_api/api_methods/stats_ports.py deleted file mode 100644 index 663b8705..00000000 --- a/backend/src/xfd_django/xfd_api/api_methods/stats_ports.py +++ /dev/null @@ -1,40 +0,0 @@ -from ..auth import get_user_ports - - -async def get_user_ports_cache(current_user, redis_client): - """Retrieve Stats from Elasticache.""" - try: - # Get ports associated with the user's organizations - user_ports = get_user_ports(current_user) - - if not user_ports: - raise HTTPException(status_code=404, detail="No ports found for the user.") - - # Retrieve the ports stats JSON data from Redis - ports_json = await redis_client.get("ports_stats") - - if not ports_json: - raise HTTPException(status_code=404, detail="No ports data found in cache.") - - # Deserialize JSON data - all_ports_data = json.loads(ports_json) - - # Filter the ports data to include only the user's ports - ports_data = [ - port_stat for port_stat in all_ports_data if port_stat["port"] in user_ports - ] - - if not ports_data: - raise HTTPException( - status_code=404, detail="No port data found for the user in cache." - ) - - return ports_data - - except aioredis.RedisError as redis_error: - raise HTTPException(status_code=500, detail=f"Redis error: {redis_error}") - - except Exception as e: - raise HTTPException( - status_code=500, detail=f"An unexpected error occurred: {e}" - ) diff --git a/backend/src/xfd_django/xfd_api/api_methods/stats_services.py b/backend/src/xfd_django/xfd_api/api_methods/stats_services.py deleted file mode 100644 index 9dc126af..00000000 --- a/backend/src/xfd_django/xfd_api/api_methods/stats_services.py +++ /dev/null @@ -1,51 +0,0 @@ -# Third-Party Libraries -from xfd_api.auth import ( - get_current_active_user, - get_tag_organization_ids, - get_user_domains, - get_user_organization_ids, - get_user_ports, - get_user_service_ids, - is_global_view_admin, -) - - -async def get_user_services_count(current_user, redis_client): - """Retrieve services from Elasticache filtered by user.""" - try: - # Get service IDs associated with the user's organizations - user_service_ids = get_user_service_ids(current_user) - - if not user_service_ids: - raise HTTPException( - status_code=404, detail="No services found for the user." - ) - - services_data = [] - - # Fetch data from Redis for each service ID - for service_id in user_service_ids: - service_data = await redis_client.get(service_id) - if service_data: - try: - # Attempt to parse the service_data as JSON - parsed_data = json.loads(service_data) - services_data.append({"id": service_id, "value": parsed_data}) - except json.JSONDecodeError: - # If not JSON, assume it's an integer-like string and convert - services_data.append({"id": service_id, "value": int(service_data)}) - - if not services_data: - raise HTTPException( - status_code=404, detail="No service data found in cache." - ) - - return services_data - - except aioredis.RedisError as redis_error: - raise HTTPException(status_code=500, detail=f"Redis error: {redis_error}") - - except Exception as e: - raise HTTPException( - status_code=500, detail=f"An unexpected error occurred: {e}" - ) diff --git a/backend/src/xfd_django/xfd_api/api_methods/vulnerability.py b/backend/src/xfd_django/xfd_api/api_methods/vulnerability.py index 6434171d..b557187c 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/vulnerability.py +++ b/backend/src/xfd_django/xfd_api/api_methods/vulnerability.py @@ -10,14 +10,11 @@ from django.db.models import Q from django.shortcuts import get_object_or_404 from fastapi import HTTPException +from redis import asyncio as aioredis -from ..auth import ( - get_org_memberships, - get_user_domains, - get_user_organization_ids, - is_global_view_admin, -) +from ..auth import get_org_memberships, get_stats_org_ids, is_global_view_admin from ..helpers.filter_helpers import filter_vulnerabilities, sort_direction +from ..helpers.stats_helpers import get_stats_count_from_cache from ..models import Domain, Service, Vulnerability from ..schema_models.vulnerability import Vulnerability as VulnerabilitySchema from ..schema_models.vulnerability import VulnerabilityFilters, VulnerabilitySearch @@ -184,310 +181,3 @@ def export_vulnerabilities(vulnerability_filters: VulnerabilityFilters): raise HTTPException(status_code=404, detail=str(e)) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) - - -async def get_num_vulns(current_user, redis_client): - """Retrieve Stats from Elasticache.""" - try: - # Step 1: Retrieve the list of domain names associated with the user - user_domains = await get_user_domains(current_user) - # print(user_domains) - - if not user_domains: - raise HTTPException( - status_code=404, detail="No domains found for the user." - ) - - # Step 2: Retrieve all vulnerability stats data from Redis - vulnerabilities_stats = await redis_client.get("num_vulnerabilities_stats") - - if not vulnerabilities_stats: - raise HTTPException( - status_code=404, detail="No vulnerabilities stats data found in cache." - ) - - # Step 3: Filter the vulnerabilities stats based on user's domains - filtered_data = [] - for composite_id, value in vulnerabilities_stats.items(): - try: - domain, severity = composite_id.split("|", 1) - except ValueError: - # If the composite_id doesn't contain '|', skip this entry - continue - - if domain in user_domains: - filtered_data.append({"id": composite_id, "value": int(value)}) - - if not filtered_data: - raise HTTPException( - status_code=404, - detail="No vulnerability data found for the user in cache.", - ) - - return filtered_data - - except aioredis.RedisError as redis_error: - raise HTTPException(status_code=500, detail=f"Redis error: {redis_error}") - - except HTTPException as http_exc: - raise http_exc # Already handled, re-raise - - except Exception as e: - raise HTTPException( - status_code=500, detail=f"An unexpected error occurred: {e}" - ) - - -async def stats_latest_vulns(organization, tag, current_user, redis_client): - """Retrieve the latest vulnerability stats from Elasticache.""" - try: - # Step 1: Retrieve data from Redis - vulnerabilities_json = await redis_client.get("latest_vulnerabilities") - - if vulnerabilities_json is None: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Data not found in cache." - ) - - # Deserialize JSON data - if isinstance(vulnerabilities_json, bytes): - vulnerabilities_json = vulnerabilities_json.decode("utf-8") - vulnerabilities_data = json.loads(vulnerabilities_json) - - # Validate data format - if not isinstance(vulnerabilities_data, list): - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail="Unexpected data format.", - ) - - # Get user's organization IDs - user_org_ids = await get_user_organization_ids(current_user) - if not user_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="User does not belong to any organizations.", - ) - - # Check if user is a global admin - is_admin = is_global_view_admin(current_user) - - # Determine accessible organizations - if is_admin: - accessible_org_ids = None # None implies access to all organizations - else: - accessible_org_ids = set(user_org_ids) - - # Apply filters - if organization: - if ( - accessible_org_ids is not None - and organization not in accessible_org_ids - ): - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="User does not have access to the specified organization.", - ) - accessible_org_ids = {organization} - elif tag: - tag_org_ids = get_tag_organization_ids(tag) - if accessible_org_ids is not None: - accessible_org_ids = accessible_org_ids.intersection(tag_org_ids) - else: - accessible_org_ids = set(tag_org_ids) - if not accessible_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="No accessible organizations found for the specified tag.", - ) - - # Filter vulnerabilities based on accessible organizations - if accessible_org_ids is not None: - filtered_vulnerabilities = [ - vuln - for vuln in vulnerabilities_data - if vuln.get("organizationId") in accessible_org_ids - ] - else: - filtered_vulnerabilities = vulnerabilities_data - - return filtered_vulnerabilities - - except json.JSONDecodeError: - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail="Failed to parse JSON data from cache.", - ) - except aioredis.RedisError as redis_err: - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Redis error: {redis_err}", - ) - except Exception as e: - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) - ) - - -async def stats_most_common_vulns(organization, tag, current_user, redis_client): - """Retrieve the most common vulnerabilities from Elasticache.""" - try: - # Retrieve data from Redis - vulnerabilities_json = await redis_client.get("most_common_vulnerabilities") - - if vulnerabilities_json is None: - raise HTTPException(status_code=404, detail="Data not found in cache.") - - # Deserialize JSON data - if isinstance(vulnerabilities_json, bytes): - vulnerabilities_json = vulnerabilities_json.decode("utf-8") - vulnerabilities_data = json.loads(vulnerabilities_json) - - # Validate data format - if not isinstance(vulnerabilities_data, list): - raise HTTPException(status_code=500, detail="Unexpected data format.") - - # Get user's organization IDs - user_org_ids = await get_user_organization_ids(current_user) - print(user_org_ids) - if not user_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="User does not belong to any organizations.", - ) - - # Check if user is a global admin - is_admin = is_global_view_admin(current_user) - - # Determine accessible organizations - if is_admin: - accessible_org_ids = None # None implies access to all organizations - else: - accessible_org_ids = set(user_org_ids) - - # Apply filters - if organization: - if ( - accessible_org_ids is not None - and organization not in accessible_org_ids - ): - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="User does not have access to the specified organization.", - ) - accessible_org_ids = {organization} - elif tag: - tag_org_ids = get_tag_organization_ids(tag) - if accessible_org_ids is not None: - accessible_org_ids = accessible_org_ids.intersection(tag_org_ids) - else: - accessible_org_ids = set(tag_org_ids) - if not accessible_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="No accessible organizations found for the specified tag.", - ) - - # Filter vulnerabilities based on accessible organizations - if accessible_org_ids is not None: - filtered_vulnerabilities = [ - vuln - for vuln in vulnerabilities_data - if vuln.get("organizationId") in accessible_org_ids - ] - else: - filtered_vulnerabilities = vulnerabilities_data - - return filtered_vulnerabilities - - except json.JSONDecodeError: - raise HTTPException( - status_code=500, detail="Failed to parse JSON data from cache." - ) - except aioredis.RedisError as redis_err: - raise HTTPException(status_code=500, detail=f"Redis error: {redis_err}") - except Exception as e: - raise HTTPException(status_code=500, detail=str(e)) - - -async def stats_vuln_count(organization, tag, current_user, redis_client): - """Retrieve vulnerability count""" - - try: - # Retrieve data from Redis - vulnerabilities_json = await redis_client.get("vulnerabilities_data") - - if vulnerabilities_json is None: - raise HTTPException(status_code=404, detail="Data not found in cache.") - - # Deserialize JSON data - vulnerabilities_data = json.loads(vulnerabilities_json) - - # Get user's organization IDs - user_org_ids = await get_user_organization_ids(current_user) - if not user_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="User does not belong to any organizations.", - ) - - # Check if user is a global admin - is_admin = is_global_view_admin(current_user) - - # Determine accessible organizations - if is_admin: - accessible_org_ids = None # None implies access to all organizations - else: - accessible_org_ids = set(user_org_ids) - - # Apply filters - if organization: - if ( - accessible_org_ids is not None - and organization not in accessible_org_ids - ): - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="User does not have access to the specified organization.", - ) - accessible_org_ids = {organization} - elif tag: - tag_org_ids = get_tag_organization_ids(tag) - if accessible_org_ids is not None: - accessible_org_ids = accessible_org_ids.intersection(tag_org_ids) - else: - accessible_org_ids = set(tag_org_ids) - if not accessible_org_ids: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail="No accessible organizations found for the specified tag.", - ) - - # Filter vulnerabilities based on accessible organizations - if accessible_org_ids is not None: - filtered_vulnerabilities = [ - vuln - for vuln in vulnerabilities_data - if vuln.get("organizationId") in accessible_org_ids - ] - else: - filtered_vulnerabilities = vulnerabilities_data - - # Aggregate counts by severity - severity_counts = {} - for vuln in filtered_vulnerabilities: - severity = vuln.get("severity") - if severity not in severity_counts: - severity_counts[severity] = 0 - severity_counts[severity] += 1 - - # Transform to list of dictionaries - severity_data = [ - {"id": severity, "value": count, "label": severity} - for severity, count in severity_counts.items() - ] - - return severity_data - - except Exception as e: - raise HTTPException(status_code=500, detail=str(e)) diff --git a/backend/src/xfd_django/xfd_api/auth.py b/backend/src/xfd_django/xfd_api/auth.py index 1ec382f8..7d2b9c98 100644 --- a/backend/src/xfd_django/xfd_api/auth.py +++ b/backend/src/xfd_django/xfd_api/auth.py @@ -127,22 +127,22 @@ async def get_user_domains(user_id: str) -> List[str]: return [] -def get_user_service_ids(user_id): +def get_user_service_ids(current_user): """ Retrieves service IDs associated with the organizations the user belongs to. """ + # Get organization IDs the user is a member of - organization_ids = Role.objects.filter(user=user_id).values_list( + organization_ids = Role.objects.filter(user=current_user).values_list( "organization", flat=True ) - # Get domain IDs associated with these organizations domain_ids = Domain.objects.filter(organization__in=organization_ids).values_list( "id", flat=True ) # Get service IDs associated with these domains - service_ids = Service.objects.filter(domainId__in=domain_ids).values_list( + service_ids = Service.objects.filter(domain__in=domain_ids).values_list( "id", flat=True ) @@ -513,3 +513,82 @@ def matches_user_region(current_user, user_region_id: str) -> bool: # Compare the region IDs return user_region_id == current_user.regionId + + +def get_stats_org_ids(current_user, filters): + """Get organization ids that a user has access to for the stats. Includes filter.""" + + # Extract filters from the Pydantic model + regions_filter = filters.filters.regions if filters and filters.filters else [] + organizations_filter = ( + filters.filters.organizations if filters and filters.filters else [] + ) + tags_filter = filters.filters.tags if filters and filters.filters else [] + + # Final list of organization IDs + organization_ids = set() + + # Case 1: Explicit organization IDs in filters + if organizations_filter: + # Check user type restrictions for provided organization IDs + for org_id in organizations_filter: + if ( + is_global_view_admin(current_user) + or (is_regional_admin_for_organization(current_user, org_id)) + or (is_org_admin(current_user, org_id)) + ): + organization_ids.add(org_id) + + if not organization_ids: + raise HTTPException( + status_code=403, + detail="User does not have access to the specified organizations.", + ) + + # Case 2: Global view admin (if no explicit organization filter) + elif is_global_view_admin(current_user): + # Get organizations by region + if regions_filter: + organizations_by_region = Organization.objects.filter( + regionId__in=regions_filter + ).values_list("id", flat=True) + organization_ids.update(organizations_by_region) + + # Get organizations by tag + for tag_id in tags_filter: + organizations_by_tag = get_tag_organizations(current_user, tag_id) + organization_ids.update(organizations_by_tag) + + # Case 3: Regional admin + elif current_user.userType in ["regionalAdmin"]: + user_region_id = current_user.regionId + + # Allow only organizations in the user's region + organizations_in_region = Organization.objects.filter( + regionId=user_region_id + ).values_list("id", flat=True) + organization_ids.update(organizations_in_region) + + # Apply filters within the user's region + if regions_filter and user_region_id in regions_filter: + organization_ids.update(organizations_in_region) + + # Include organizations by tag within the same region + for tag_id in tags_filter: + tag_organizations = get_tag_organizations(current_user, tag_id) + regional_tag_organizations = [ + org_id + for org_id in tag_organizations + if get_organization_region(org_id) == user_region_id + ] + organization_ids.update(regional_tag_organizations) + + # Case 4: Standard user + else: + # Allow only organizations where the user is a member + user_organization_ids = current_user.roles.values_list( + "organization_id", flat=True + ) + organization_ids.update(user_organization_ids) + + return organization_ids diff --git a/backend/src/xfd_django/xfd_api/helpers/stats_helpers.py b/backend/src/xfd_django/xfd_api/helpers/stats_helpers.py new file mode 100644 index 00000000..98dcfb7d --- /dev/null +++ b/backend/src/xfd_django/xfd_api/helpers/stats_helpers.py @@ -0,0 +1,117 @@ +# Standard Python Libraries +import json +from collections import defaultdict + +# Third-Party Libraries +from fastapi import HTTPException +import asyncio +import django +from django.conf import settings +from django.db.models import CharField, Count, F, Value +from django.db.models.functions import Concat +import redis + + +from xfd_api.models import Domain + + +async def get_stats_count_from_cache(redis_client, redis_key_prefix, filtered_org_ids): + """ + Generic function to fetch and aggregate stats from Redis. + """ + aggregated_stats = defaultdict(int) + + # Fetch data from Redis by organization ID + redis_keys = [f"{redis_key_prefix}:{org_id}" for org_id in filtered_org_ids] + redis_responses = await asyncio.gather( + *(redis_client.get(redis_key) for redis_key in redis_keys), + return_exceptions=True, + ) + + for response in redis_responses: + if isinstance(response, Exception): + continue + if response: + stats_list = json.loads(response) + for stat in stats_list: + aggregated_stats[stat["id"]] += stat["value"] + + return [{"id": stat_id, "value": value, "label": stat_id} for stat_id, value in aggregated_stats.items()] + + +def populate_stats_cache( + model, + group_by_field, + redis_key_prefix, + annotate_field="id", + custom_id=None, + filters=None, +): + """ + Generic function to populate Redis stats with custom ID fields. + """ + try: + # Connect to Redis + redis_client = redis.StrictRedis( + host=settings.ELASTICACHE_ENDPOINT, + port=6379, + db=0, + decode_responses=True, + ) + + # Build queryset with optional filters + queryset = model.objects.all() + if filters: + queryset = queryset.filter(**filters) + + # Apply custom ID annotation if provided + if custom_id: + queryset = queryset.annotate(custom_id=custom_id) + + # Aggregate and group data + stats = ( + queryset.values(group_by_field, "custom_id" if custom_id else annotate_field) + .annotate(value=Count(annotate_field)) + .order_by(group_by_field, "-value") + ) + + # Organize stats by grouping field + stats_by_group = {} + for item in stats: + group_id = str(item[group_by_field]) + key = str(item["custom_id"]) if custom_id else str(item[annotate_field]) + count = item["value"] + if group_id not in stats_by_group: + stats_by_group[group_id] = [] + stats_by_group[group_id].append({"id": key, "value": count}) + + # Store stats in Redis + for group_id, data in stats_by_group.items(): + redis_key = f"{redis_key_prefix}:{group_id}" + redis_client.set(redis_key, json.dumps(data)) + + return { + "status": "success", + "message": f"Cache populated successfully for {redis_key_prefix}.", + } + + except Exception as e: + return { + "status": "error", + "message": f"An unexpected error occurred: {e}", + } + +async def get_total_count(filtered_org_ids): + """ + Retrieve the total count of domains associated with the filtered organizations. + """ + try: + # Query the database for the total count of domains in the filtered organizations + total_count = ( + Domain.objects.filter(organization__in=filtered_org_ids).count() + ) + return total_count + + except Exception as e: + print(f"Unexpected error fetching total count: {e}") + return 0 \ No newline at end of file diff --git a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_most_common_vulnerabilities_cache.py b/backend/src/xfd_django/xfd_api/management/commands/inspect_get_most_common_vulnerabilities_cache.py deleted file mode 100644 index acf3965c..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_most_common_vulnerabilities_cache.py +++ /dev/null @@ -1,71 +0,0 @@ -# Standard Python Libraries -import json - -# Third-Party Libraries -from django.conf import settings -from django.core.management.base import BaseCommand -import redis - - -class Command(BaseCommand): - help = "Inspects and displays the most_common_vulnerabilities from AWS ElastiCache (Redis)." - - def handle(self, *args, **options): - """ - Connects to AWS ElastiCache (Redis), retrieves the 'most_common_vulnerabilities' key, - and displays its contents. - """ - - try: - # Initialize Redis client - redis_client = redis.StrictRedis( - host=settings.ELASTICACHE_ENDPOINT, - port=6379, - db=0, - decode_responses=True, # Automatically decode responses as UTF-8 strings - ) - - # Check if the key exists - if redis_client.exists("most_common_vulnerabilities"): - self.stdout.write( - self.style.SUCCESS( - "'most_common_vulnerabilities' key exists in Redis." - ) - ) - - # Retrieve the JSON string - vulnerabilities_json = redis_client.get("most_common_vulnerabilities") - - if vulnerabilities_json: - # Parse the JSON string into Python objects - vulnerabilities_data = json.loads(vulnerabilities_json) - self.stdout.write("Most Common Vulnerabilities data:") - for vuln in vulnerabilities_data: - self.stdout.write( - f"Title: {vuln.get('title')}, " - f"Description: {vuln.get('description')}, " - f"Severity: {vuln.get('severity')}, " - f"Count: {vuln.get('count')}, " - f"Domain: {vuln.get('domain')}" - ) - else: - self.stdout.write( - self.style.WARNING( - "'most_common_vulnerabilities' key is empty." - ) - ) - else: - self.stdout.write( - self.style.WARNING( - "'most_common_vulnerabilities' key does not exist in Redis." - ) - ) - - except redis.ConnectionError as conn_err: - self.stderr.write(self.style.ERROR(f"Redis connection error: {conn_err}")) - except redis.RedisError as redis_err: - self.stderr.write(self.style.ERROR(f"Redis error: {redis_err}")) - except json.JSONDecodeError as json_err: - self.stderr.write(self.style.ERROR(f"JSON decode error: {json_err}")) - except Exception as e: - self.stderr.write(self.style.ERROR(f"An unexpected error occurred: {e}")) diff --git a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_most_common_vulnerabilities_id.py b/backend/src/xfd_django/xfd_api/management/commands/inspect_get_most_common_vulnerabilities_id.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_org_memberships.py b/backend/src/xfd_django/xfd_api/management/commands/inspect_get_org_memberships.py deleted file mode 100644 index 775cdf51..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_org_memberships.py +++ /dev/null @@ -1,55 +0,0 @@ -# Third-Party Libraries -from django.contrib.auth import get_user_model -from django.core.management.base import BaseCommand -from xfd_api.auth import get_org_memberships # Import the function -from xfd_api.models import Organization, Role # Import your models -from xfd_api.models import User # Adjust if your User model is in a different app - -# TO run the command: python manage.py test_get_org_memberships 090d87fd-a7be-4bdc-b3a9-5c0bbf24dc40 - - -class Command(BaseCommand): - help = "Test get_org_memberships function for a given user" - - def add_arguments(self, parser): - parser.add_argument( - "user_identifier", - type=str, - help="User ID or email to identify the user", - ) - - def handle(self, *args, **options): - user_identifier = options["user_identifier"] - - # Try to retrieve the user by ID or email - try: - user = User.objects.get(id=user_identifier) - user = user.id - - except (User.DoesNotExist, ValueError): - try: - user = User.objects.get(email=user_identifier) - except User.DoesNotExist: - self.stderr.write( - self.style.ERROR( - f'User with ID or email "{user_identifier}" does not exist.' - ) - ) - return - - # Call the get_org_memberships function - org_memberships = get_org_memberships(user) - - # Output the results - if org_memberships: - self.stdout.write( - self.style.SUCCESS( - f'User "{user}" is a member of organizations: {org_memberships}' - ) - ) - else: - self.stdout.write( - self.style.WARNING( - f'User "{user}" is not a member of any organizations.' - ) - ) diff --git a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_ports_user_id.py b/backend/src/xfd_django/xfd_api/management/commands/inspect_get_ports_user_id.py deleted file mode 100644 index b72e2a19..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_ports_user_id.py +++ /dev/null @@ -1,33 +0,0 @@ -# Third-Party Libraries -from django.core.management.base import BaseCommand -from xfd_api.models import Role - - -class Command(BaseCommand): - help = "Finds user IDs associated with services having ports." - - def handle(self, *args, **options): - # Find user IDs associated with services that have ports - user_ids_with_ports = ( - Role.objects.filter(organizationId__domain__service__port__isnull=False) - .values_list("userId", flat=True) - .distinct() - ) - - # Convert the QuerySet to a list for better readability - user_ids_list = list(user_ids_with_ports) - - # Display the user IDs - if user_ids_list: - self.stdout.write( - self.style.SUCCESS( - f"User IDs with ports in service table: {user_ids_list}" - ) - ) - # Pick the first user ID for testing - test_user_id = user_ids_list[0] - self.stdout.write(f"Using user_id: {test_user_id} for testing") - else: - self.stdout.write( - self.style.WARNING("No users found with services having ports.") - ) diff --git a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_domain_ids.py b/backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_domain_ids.py deleted file mode 100644 index c623ec13..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_domain_ids.py +++ /dev/null @@ -1,36 +0,0 @@ -# Third-Party Libraries -from django.core.management.base import BaseCommand -from django.db.models import Q -from xfd_api.models import Domain, Role, User - - -class Command(BaseCommand): - help = ( - "Lists user IDs and emails of users who have domains via their organizations." - ) - - def handle(self, *args, **options): - # Step 1: Get organization IDs that have domains - organization_ids_with_domains = Domain.objects.values_list( - "organizationId", flat=True - ).distinct() - - # Step 2: Get user IDs that have roles in these organizations - user_ids_with_domains = ( - Role.objects.filter(organizationId__in=organization_ids_with_domains) - .values_list("userId", flat=True) - .distinct() - ) - - # Step 3: Get the count of user IDs - user_count = user_ids_with_domains.count() - - # Output the count - self.stdout.write(f"Total users with domains: {user_count}") - - # Step 4: Fetch users - users_with_domains = User.objects.filter(id__in=user_ids_with_domains) - - # Step 5: Output the user IDs and emails - for user in users_with_domains: - self.stdout.write(f"User ID: {user.id}, Email: {user.email}") diff --git a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_domains.py b/backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_domains.py deleted file mode 100644 index b9bbee42..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_domains.py +++ /dev/null @@ -1,37 +0,0 @@ -# Standard Python Libraries -import asyncio - -# Third-Party Libraries -from django.core.management.base import BaseCommand -from xfd_api.auth import get_user_domains # Adjust the import path as needed - - -class Command(BaseCommand): - help = ( - "Tests the get_user_domains function for a given user_id and prints the output." - ) - - def add_arguments(self, parser): - parser.add_argument( - "user_id", type=str, help="The ID of the user to retrieve domains for." - ) - - def handle(self, *args, **options): - user_id = options["user_id"] - - try: - # Call the synchronous get_user_domains function - domains = get_user_domains(user_id) - - # Print the result - if domains: - self.stdout.write(self.style.SUCCESS(f"Domains for user_id {user_id}:")) - for domain in domains: - self.stdout.write(f"- {domain}") - else: - self.stdout.write( - self.style.WARNING(f"No domains found for user_id {user_id}.") - ) - - except Exception as e: - self.stderr.write(self.style.ERROR(f"An error occurred: {e}")) diff --git a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_service_ids.py b/backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_service_ids.py deleted file mode 100644 index 403c5cc3..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/inspect_get_user_service_ids.py +++ /dev/null @@ -1,75 +0,0 @@ -# Third-Party Libraries -from django.core.management.base import BaseCommand -from xfd_api.models import ( # Adjust the import paths as necessary - Domain, - Role, - Service, - User, -) - - -class Command(BaseCommand): - help = "Test get_user_service_ids function for a given user ID" - - def add_arguments(self, parser): - parser.add_argument( - "user_id", - type=str, - help="User ID to retrieve service IDs for", - ) - - def handle(self, *args, **options): - user_id = options["user_id"] - - # Verify that the user exists - try: - user = User.objects.get(id=user_id) - except User.DoesNotExist: - self.stderr.write( - self.style.ERROR(f"User with ID {user_id} does not exist.") - ) - return - - # Call the get_user_service_ids function - service_ids = self.get_user_service_ids(user_id) - - if service_ids: - self.stdout.write(self.style.SUCCESS(f"Service IDs for user {user_id}:")) - for service_id in service_ids: - self.stdout.write(f"- {service_id}") - else: - self.stdout.write( - self.style.WARNING(f"No services found for user {user_id}.") - ) - - def get_user_service_ids(self, user_id): - """ - Retrieves service IDs associated with the organizations the user belongs to. - """ - # Get organization IDs the user is a member of - organization_ids = Role.objects.filter(userId=user_id).values_list( - "organizationId", flat=True - ) - - # Debug: Print organization IDs - self.stdout.write( - f"Organization IDs for user {user_id}: {list(organization_ids)}" - ) - - # Get domain IDs associated with these organizations - domain_ids = Domain.objects.filter( - organizationId__in=organization_ids - ).values_list("id", flat=True) - - # Debug: Print domain IDs - self.stdout.write(f"Domain IDs for organizations: {list(domain_ids)}") - - # Get service IDs associated with these domains - service_ids = Service.objects.filter(domainId__in=domain_ids).values_list( - "id", flat=True - ) - - # Debug: Print service IDs - self.stdout.write(f"Service IDs for domains: {list(service_ids)}") - - return list(map(str, service_ids)) # Convert UUIDs to strings if necessary diff --git a/backend/src/xfd_django/xfd_api/management/commands/inspect_latest_vulnerabilities_cache.py b/backend/src/xfd_django/xfd_api/management/commands/inspect_latest_vulnerabilities_cache.py deleted file mode 100644 index 4f743d31..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/inspect_latest_vulnerabilities_cache.py +++ /dev/null @@ -1,67 +0,0 @@ -# Standard Python Libraries -import json - -# Third-Party Libraries -from django.conf import settings -from django.core.management.base import BaseCommand -import redis - - -class Command(BaseCommand): - help = ( - "Inspects and displays the latest_vulnerabilities from AWS ElastiCache (Redis)." - ) - - def handle(self, *args, **options): - """ - Connects to AWS ElastiCache (Redis), retrieves the 'latest_vulnerabilities' key, - and displays its contents. - """ - - try: - # Initialize Redis client - redis_client = redis.StrictRedis( - host=settings.ELASTICACHE_ENDPOINT, - port=6379, - db=0, - decode_responses=True, # Automatically decode responses as UTF-8 strings - ) - - # Check if the key exists - if redis_client.exists("latest_vulnerabilities"): - self.stdout.write( - self.style.SUCCESS("'latest_vulnerabilities' key exists in Redis.") - ) - - # Retrieve the JSON string - vulnerabilities_json = redis_client.get("latest_vulnerabilities") - - if vulnerabilities_json: - # Parse the JSON string into Python objects - vulnerabilities_data = json.loads(vulnerabilities_json) - self.stdout.write("Vulnerabilities data:") - for vuln in vulnerabilities_data: - self.stdout.write( - f"ID: {vuln['id']}, Title: {vuln['title']}, " - f"State: {vuln['state']}, CreatedAt: {vuln['createdAt']}, " - f"Domain: {vuln['domain']}" - ) - else: - self.stdout.write( - self.style.WARNING("'latest_vulnerabilities' key is empty.") - ) - else: - self.stdout.write( - self.style.WARNING( - "'latest_vulnerabilities' key does not exist in Redis." - ) - ) - - except redis.ConnectionError as conn_err: - self.stderr.write(self.style.ERROR(f"Redis connection error: {conn_err}")) - except redis.RedisError as redis_err: - self.stderr.write(self.style.ERROR(f"Redis error: {redis_err}")) - except json.JSONDecodeError as json_err: - self.stderr.write(self.style.ERROR(f"JSON decode error: {json_err}")) - except Exception as e: - self.stderr.write(self.style.ERROR(f"An unexpected error occurred: {e}")) diff --git a/backend/src/xfd_django/xfd_api/management/commands/inspect_number_vulnerabilities_cache.py b/backend/src/xfd_django/xfd_api/management/commands/inspect_number_vulnerabilities_cache.py deleted file mode 100644 index 5618ff01..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/inspect_number_vulnerabilities_cache.py +++ /dev/null @@ -1,60 +0,0 @@ -# Standard Python Libraries -import json - -# Third-Party Libraries -from django.conf import settings -from django.core.management.base import BaseCommand -import redis - - -class Command(BaseCommand): - help = "Inspects and displays the num_vulnerabilities_stats from AWS ElastiCache (Redis)." - - def handle(self, *args, **options): - """ - Connects to AWS ElastiCache (Redis), retrieves the 'num_vulnerabilities_stats' hash, - and displays its contents. - """ - - try: - # Initialize Redis client - redis_client = redis.StrictRedis( - host=settings.ELASTICACHE_ENDPOINT, - port=6379, - db=0, - decode_responses=True - # Automatically decode responses as UTF-8 strings - ) - - # Check if the key exists - if redis_client.exists("num_vulnerabilities_stats"): - self.stdout.write( - self.style.SUCCESS( - "'num_vulnerabilities_stats' key exists in Redis." - ) - ) - vulnerabilities_stats = redis_client.hgetall( - "num_vulnerabilities_stats" - ) - - if vulnerabilities_stats: - self.stdout.write("Vulnerabilities data:") - for key, value in vulnerabilities_stats.items(): - self.stdout.write(f"{key}: {value}") - else: - self.stdout.write( - self.style.WARNING("'num_vulnerabilities_stats' key is empty.") - ) - else: - self.stdout.write( - self.style.WARNING( - "'num_vulnerabilities_stats' key does not exist in Redis." - ) - ) - - except redis.ConnectionError as conn_err: - self.stderr.write(self.style.ERROR(f"Redis connection error: {conn_err}")) - except redis.RedisError as redis_err: - self.stderr.write(self.style.ERROR(f"Redis error: {redis_err}")) - except Exception as e: - self.stderr.write(self.style.ERROR(f"An unexpected error occurred: {e}")) diff --git a/backend/src/xfd_django/xfd_api/management/commands/inspect_vulnerabilities_user_id.py b/backend/src/xfd_django/xfd_api/management/commands/inspect_vulnerabilities_user_id.py deleted file mode 100644 index 0c5f8ce7..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/inspect_vulnerabilities_user_id.py +++ /dev/null @@ -1,48 +0,0 @@ -# xfd_api/management/commands/find_users_with_vulnerabilities.py - -# Third-Party Libraries -from django.core.management.base import BaseCommand -from django.db.models import Q -from xfd_api.models import Role - - -class Command(BaseCommand): - help = "Finds user IDs associated with vulnerabilities." - - def handle(self, *args, **options): - """ - This command retrieves and displays user IDs that are associated with - vulnerabilities through their organizations and domains. - """ - try: - # Query to find user_ids associated with vulnerabilities - user_ids_with_vulnerabilities = ( - Role.objects.filter(organizationId__domain__vulnerability__isnull=False) - .values_list("user", flat=True) - .distinct() - ) - - # Convert the QuerySet to a list for better readability - user_ids_list = list(user_ids_with_vulnerabilities) - - # Display the user IDs - if user_ids_list: - self.stdout.write( - self.style.SUCCESS( - f"User IDs with vulnerabilities: {user_ids_list}" - ) - ) - # Pick the first user ID for testing - test_user_id = user_ids_list[0] - self.stdout.write(f"Using user_id: {test_user_id} for testing") - else: - self.stdout.write( - self.style.WARNING( - "No users found with associated vulnerabilities." - ) - ) - except Exception as e: - self.stderr.write( - self.style.ERROR(f"An error occurred while fetching user IDs: {e}") - ) - self.exit_code = 1 # Indicate that the command failed diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_by_org_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_by_org_cache.py deleted file mode 100644 index 63e92646..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_by_org_cache.py +++ /dev/null @@ -1,14 +0,0 @@ -# Third-Party Libraries -from django.core.management.base import BaseCommand -from xfd_api.elasticache_tasks import populate_ByOrgCache - - -class Command(BaseCommand): - help = "Populates the ByOrg cache in Redis" - - def handle(self, *args, **options): - result = populate_ByOrgCache() - if result.get("status") == "success": - self.stdout.write(self.style.SUCCESS(result["message"])) - else: - self.stdout.write(self.style.ERROR(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_latest_vulnerabilites.py b/backend/src/xfd_django/xfd_api/management/commands/populate_by_orgs_cache.py similarity index 68% rename from backend/src/xfd_django/xfd_api/management/commands/populate_latest_vulnerabilites.py rename to backend/src/xfd_django/xfd_api/management/commands/populate_by_orgs_cache.py index db147340..0b0a1ad4 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_latest_vulnerabilites.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_by_orgs_cache.py @@ -1,11 +1,11 @@ # Third-Party Libraries from django.core.management.base import BaseCommand -from xfd_api.elasticache_tasks import populate_LatestVulnerabilitiesCache +from xfd_api.tasks.elasticache_tasks import populate_by_org_cache class Command(BaseCommand): help = "Populates the vulnerabilities stats cache in AWS Elasticache" def handle(self, *args, **options): - result = populate_LatestVulnerabilitiesCache() + result = populate_by_org_cache() self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_vulnerabilities_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_latest_vulns_cache.py similarity index 68% rename from backend/src/xfd_django/xfd_api/management/commands/populate_vulnerabilities_cache.py rename to backend/src/xfd_django/xfd_api/management/commands/populate_latest_vulns_cache.py index e511e8e1..e92930cc 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_vulnerabilities_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_latest_vulns_cache.py @@ -1,11 +1,11 @@ # Third-Party Libraries from django.core.management.base import BaseCommand -from xfd_api.elasticache_tasks import populate_NumVulnerabilitiesStatscache +from xfd_api.tasks.elasticache_tasks import populate_latest_vulns_cache class Command(BaseCommand): help = "Populates the vulnerabilities stats cache in AWS Elasticache" def handle(self, *args, **options): - result = populate_NumVulnerabilitiesStatscache() + result = populate_latest_vulns_cache() self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_most_common_vulnerabilities_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_most_common_vulns_cache.py similarity index 67% rename from backend/src/xfd_django/xfd_api/management/commands/populate_most_common_vulnerabilities_cache.py rename to backend/src/xfd_django/xfd_api/management/commands/populate_most_common_vulns_cache.py index 2327d550..a2cde041 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_most_common_vulnerabilities_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_most_common_vulns_cache.py @@ -1,11 +1,11 @@ # Third-Party Libraries from django.core.management.base import BaseCommand -from xfd_api.elasticache_tasks import populate_MostCommonVulnerabilitiesCache +from xfd_api.tasks.elasticache_tasks import populate_most_common_vulns_cache class Command(BaseCommand): help = "Populates the vulnerabilities stats cache in AWS Elasticache" def handle(self, *args, **options): - result = populate_MostCommonVulnerabilitiesCache() + result = populate_most_common_vulns_cache() self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_ports_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_ports_cache.py index c8d1cf59..a0dc7f8b 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_ports_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_ports_cache.py @@ -1,6 +1,6 @@ # Third-Party Libraries from django.core.management.base import BaseCommand -from xfd_api.elasticache_tasks import populate_PortsStatscache +from xfd_api.tasks.elasticache_tasks import populate_ports_cache class Command(BaseCommand): @@ -10,5 +10,5 @@ class Command(BaseCommand): ) def handle(self, *args, **options): - result = populate_PortsStatscache() + result = populate_ports_cache() self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_services_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_services_cache.py index ecf9b638..89d78411 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_services_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_services_cache.py @@ -1,6 +1,6 @@ # Third-Party Libraries from django.core.management.base import BaseCommand -from xfd_api.elasticache_tasks import populate_ServicesStatscache +from xfd_api.tasks.elasticache_tasks import populate_services_cache class Command(BaseCommand): @@ -10,5 +10,5 @@ class Command(BaseCommand): ) def handle(self, *args, **options): - result = populate_ServicesStatscache() + result = populate_services_cache() self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_severity_count_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_severity_count_cache.py index 2ea4577a..236e44e9 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_severity_count_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_severity_count_cache.py @@ -1,11 +1,11 @@ # Third-Party Libraries from django.core.management.base import BaseCommand -from xfd_api.elasticache_tasks import populate_SeverityCountsCache +from xfd_api.tasks.elasticache_tasks import populate_severity_cache class Command(BaseCommand): help = "Populates the vulnerabilities stats cache in AWS Elasticache" def handle(self, *args, **options): - result = populate_SeverityCountsCache() + result = populate_severity_cache() self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_vulns_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_vulns_cache.py new file mode 100644 index 00000000..674bc3ff --- /dev/null +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_vulns_cache.py @@ -0,0 +1,11 @@ +# Third-Party Libraries +from django.core.management.base import BaseCommand +from xfd_api.tasks.elasticache_tasks import populate_num_vulns_cache + + +class Command(BaseCommand): + help = "Populates the vulnerabilities stats cache in AWS Elasticache" + + def handle(self, *args, **options): + result = populate_num_vulns_cache() + self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/test_get_org_memberships.py b/backend/src/xfd_django/xfd_api/management/commands/test_get_org_memberships.py deleted file mode 100644 index 40927dc3..00000000 --- a/backend/src/xfd_django/xfd_api/management/commands/test_get_org_memberships.py +++ /dev/null @@ -1,53 +0,0 @@ -# Third-Party Libraries -from django.contrib.auth import get_user_model -from django.core.management.base import BaseCommand -from xfd_api.auth import get_org_memberships # Import the function -from xfd_api.models import Organization, Role # Import your models -from xfd_api.models import User # Adjust if your User model is in a different app - - -class Command(BaseCommand): - help = "Test get_org_memberships function for a given user" - - def add_arguments(self, parser): - parser.add_argument( - "user_identifier", - type=str, - help="User ID or email to identify the user", - ) - - def handle(self, *args, **options): - user_identifier = options["user_identifier"] - - # Try to retrieve the user by ID or email - try: - user = User.objects.get(id=user_identifier) - user = user.id - - except (User.DoesNotExist, ValueError): - try: - user = User.objects.get(email=user_identifier) - except User.DoesNotExist: - self.stderr.write( - self.style.ERROR( - f'User with ID or email "{user_identifier}" does not exist.' - ) - ) - return - - # Call the get_org_memberships function - org_memberships = get_org_memberships(user) - - # Output the results - if org_memberships: - self.stdout.write( - self.style.SUCCESS( - f'User "{user}" is a member of organizations: {org_memberships}' - ) - ) - else: - self.stdout.write( - self.style.WARNING( - f'User "{user}" is not a member of any organizations.' - ) - ) diff --git a/backend/src/xfd_django/xfd_api/schema_models/by_org_item.py b/backend/src/xfd_django/xfd_api/schema_models/by_org_item.py deleted file mode 100644 index 77e9f1e2..00000000 --- a/backend/src/xfd_django/xfd_api/schema_models/by_org_item.py +++ /dev/null @@ -1,25 +0,0 @@ -"""Pydantic models used by FastAPI.""" - -# Third-Party Libraries -from pydantic import BaseModel - -# from pygments.lexers.configs import UnixConfigLexer - -""" -Developer Note: If there comes an instance as in class Cidrs where there are -foreign keys. The data type will not be what is stated in the database. What is -happening is the data base is making a query back to the foreign key table and -returning it as the column in its entirety i.e. select * from , so it -will error and not be able to report on its data type. In these scenario's use -the data type "Any" to see what the return is. -""" - - -class ByOrgItem(BaseModel): - id: str - orgId: str - value: int - label: str - - class Config: - from_attributes = True diff --git a/backend/src/xfd_django/xfd_api/schema_models/domain.py b/backend/src/xfd_django/xfd_api/schema_models/domain.py index ce1d3472..12bf1f76 100644 --- a/backend/src/xfd_django/xfd_api/schema_models/domain.py +++ b/backend/src/xfd_django/xfd_api/schema_models/domain.py @@ -3,11 +3,11 @@ # from pydantic.types import UUID1, UUID # Standard Python Libraries from datetime import datetime -from typing import Any, Optional +from typing import Any, List, Optional from uuid import UUID # Third-Party Libraries -from pydantic import BaseModel +from pydantic import BaseModel, Field class Domain(BaseModel): @@ -76,3 +76,68 @@ class TotalDomainsResponse(BaseModel): class Config: from_attributes = True + + +class OrganizationResponse(BaseModel): + id: UUID + name: str + + class Config: + orm_mode = True + from_attributes = True + + +class ProductResponse(BaseModel): + name: str + version: Optional[str] = None + + +class ServiceResponse(BaseModel): + id: UUID + port: int + lastSeen: Optional[str] = None + products: List[ProductResponse] + + class Config: + orm_mode = True + from_attributes = True + + +class VulnerabilityResponse(BaseModel): + id: UUID + title: str + severity: str + state: str + createdAt: Optional[datetime] = None + + class Config: + orm_mode = True + from_attributes = True + + +class WebpageResponse(BaseModel): + url: str + status: str + responseSize: Optional[int] = None + + class Config: + orm_mode = True + from_attributes = True + + +class GetDomainResponse(BaseModel): + id: UUID + name: str + ip: Optional[str] = None + createdAt: datetime + updatedAt: datetime + country: Optional[str] = None + cloudHosted: Optional[bool] = False + organization: Optional[OrganizationResponse] + vulnerabilities: Optional[List[VulnerabilityResponse]] = [] + services: Optional[List[ServiceResponse]] = [] + webpages: Optional[List[WebpageResponse]] = [] + + class Config: + orm_mode = True + from_attributes = True diff --git a/backend/src/xfd_django/xfd_api/schema_models/latest_vuln.py b/backend/src/xfd_django/xfd_api/schema_models/latest_vuln.py deleted file mode 100644 index 3ce38f96..00000000 --- a/backend/src/xfd_django/xfd_api/schema_models/latest_vuln.py +++ /dev/null @@ -1,28 +0,0 @@ -"""Pydantic models used by FastAPI.""" - -# Standard Python Libraries -from datetime import datetime -from typing import Optional - -# Third-Party Libraries -from pydantic import BaseModel - -""" -Developer Note: If there comes an instance as in class Cidrs where there are -foreign keys. The data type will not be what is stated in the database. What is -happening is the data base is making a query back to the foreign key table and -returning it as the column in its entirety i.e. select * from
, so it -will error and not be able to report on its data type. In these scenario's use -the data type "Any" to see what the return is. -""" - - -class LatestVulnerabilitySchema(BaseModel): - id: str - title: str - state: str - createdAt: datetime - domain: Optional[str] - - class Config: - from_attributes = True diff --git a/backend/src/xfd_django/xfd_api/schema_models/most_common_vuln.py b/backend/src/xfd_django/xfd_api/schema_models/most_common_vuln.py deleted file mode 100644 index 1abaf47d..00000000 --- a/backend/src/xfd_django/xfd_api/schema_models/most_common_vuln.py +++ /dev/null @@ -1,23 +0,0 @@ -"""Pydantic models used by FastAPI.""" - -# Third-Party Libraries -from pydantic import BaseModel - -""" -Developer Note: If there comes an instance as in class Cidrs where there are -foreign keys. The data type will not be what is stated in the database. What is -happening is the data base is making a query back to the foreign key table and -returning it as the column in its entirety i.e. select * from
, so it -will error and not be able to report on its data type. In these scenario's use -the data type "Any" to see what the return is. -""" - - -class MostCommonVulnerabilitySchema(BaseModel): - title: str - description: str - severity: str - count: int - - class Config: - from_attributes = True diff --git a/backend/src/xfd_django/xfd_api/schema_models/organization_schema.py b/backend/src/xfd_django/xfd_api/schema_models/organization_schema.py index 57f8b38f..56d0d16f 100644 --- a/backend/src/xfd_django/xfd_api/schema_models/organization_schema.py +++ b/backend/src/xfd_django/xfd_api/schema_models/organization_schema.py @@ -202,3 +202,17 @@ class OrganizationSearchBody(BaseModel): regions: Optional[List[str]] searchTerm: str + + +class FilterSchema(BaseModel): + """Elastic search orgnaization model.""" + + regions: Optional[List[str]] = [] + organizations: Optional[List[str]] = [] + tags: Optional[List[str]] = [] + + +class StatsPayloadSchema(BaseModel): + """Elastic search orgnaization model.""" + + filters: Optional[FilterSchema] diff --git a/backend/src/xfd_django/xfd_api/schema_models/ports_stats.py b/backend/src/xfd_django/xfd_api/schema_models/ports_stats.py deleted file mode 100644 index c39e3b5d..00000000 --- a/backend/src/xfd_django/xfd_api/schema_models/ports_stats.py +++ /dev/null @@ -1,23 +0,0 @@ -"""Pydantic models used by FastAPI.""" - -# Third-Party Libraries -from pydantic import BaseModel - -# from pygments.lexers.configs import UnixConfigLexer - -""" -Developer Note: If there comes an instance as in class Cidrs where there are -foreign keys. The data type will not be what is stated in the database. What is -happening is the data base is making a query back to the foreign key table and -returning it as the column in its entirety i.e. select * from
, so it -will error and not be able to report on its data type. In these scenario's use -the data type "Any" to see what the return is. -""" - - -class PortsStats(BaseModel): - port: int - value: int - - class Config: - from_attributes = True diff --git a/backend/src/xfd_django/xfd_api/schema_models/service.py b/backend/src/xfd_django/xfd_api/schema_models/service.py index 97375370..b7c19e51 100644 --- a/backend/src/xfd_django/xfd_api/schema_models/service.py +++ b/backend/src/xfd_django/xfd_api/schema_models/service.py @@ -30,11 +30,3 @@ class Service(BaseModel): class Config: from_attributes = True - - -class ServicesStat(BaseModel): - id: UUID - value: int - - class Config: - from_attributes = True diff --git a/backend/src/xfd_django/xfd_api/schema_models/severity_count.py b/backend/src/xfd_django/xfd_api/schema_models/severity_count.py deleted file mode 100644 index 8e1954b6..00000000 --- a/backend/src/xfd_django/xfd_api/schema_models/severity_count.py +++ /dev/null @@ -1,21 +0,0 @@ -"""Pydantic models used by FastAPI.""" - -# Third-Party Libraries -from pydantic import BaseModel - -""" -Developer Note: If there comes an instance as in class Cidrs where there are -foreign keys. The data type will not be what is stated in the database. What is -happening is the data base is making a query back to the foreign key table and -returning it as the column in its entirety i.e. select * from
, so it -will error and not be able to report on its data type. In these scenario's use -the data type "Any" to see what the return is. -""" - - -class SeverityCountSchema(BaseModel): - id: str - value: int - - class Config: - from_attributes = True diff --git a/backend/src/xfd_django/xfd_api/schema_models/stat_schema.py b/backend/src/xfd_django/xfd_api/schema_models/stat_schema.py new file mode 100644 index 00000000..a8c3a13e --- /dev/null +++ b/backend/src/xfd_django/xfd_api/schema_models/stat_schema.py @@ -0,0 +1,98 @@ +from typing import List, Dict, Any, Optional +from pydantic import BaseModel +from datetime import datetime + +# Reusing the previously defined models +class ServiceStat(BaseModel): + id: str + value: int + label: str + +class PortStat(BaseModel): + id: int + value: int + label: str + +class VulnerabilityStat(BaseModel): + id: str + value: int + label: str + +class SeverityCountStat(BaseModel): + id: str + value: int + label: str + +class Domain(BaseModel): + id: str + createdAt: datetime + updatedAt: datetime + syncedAt: Optional[datetime] + ip: Optional[str] + fromRootDomain: Optional[str] + subdomainSource: Optional[str] + ipOnly: Optional[bool] + reverseName: Optional[str] + name: Optional[str] + screenshot: Optional[str] + country: Optional[str] + asn: Optional[str] + cloudHosted: Optional[bool] + fromCidr: Optional[bool] + isFceb: Optional[bool] + ssl: Optional[dict] + censysCertificatesResults: Optional[dict] + trustymailResults: Optional[dict] + +class LatestVulnerability(BaseModel): + id: str + createdAt: datetime + updatedAt: datetime + lastSeen: Optional[datetime] + title: str + cve: Optional[str] + cwe: Optional[str] + cpe: Optional[str] + description: Optional[str] + references: List[str] + cvss: Optional[float] + severity: Optional[str] + needsPopulation: bool + state: str + substate: str + source: str + notes: Optional[str] + actions: List[dict] + structuredData: dict + isKev: bool + kevResults: dict + domain: Domain + +class MostCommonVulnerability(BaseModel): + title: str + description: str + severity: Optional[str] + count: int + +class ByOrgStat(BaseModel): + id: str + orgId: str + value: int + label: str + +# Main StatsResponse model +class StatsResponse(BaseModel): + result: Dict[str, Any] = { + "domains": { + "services": List[ServiceStat], + "ports": List[PortStat], + "numVulnerabilities": List[VulnerabilityStat], + "total": int + }, + "vulnerabilities": { + "severity": List[SeverityCountStat], + "latestVulnerabilities": List[LatestVulnerability], + "mostCommonVulnerabilities": List[MostCommonVulnerability], + "byOrg": List[ByOrgStat] + }, + } diff --git a/backend/src/xfd_django/xfd_api/schema_models/stats.py b/backend/src/xfd_django/xfd_api/schema_models/stats.py new file mode 100644 index 00000000..a8c3a13e --- /dev/null +++ b/backend/src/xfd_django/xfd_api/schema_models/stats.py @@ -0,0 +1,98 @@ +from typing import List, Dict, Any, Optional +from pydantic import BaseModel +from datetime import datetime + +# Reusing the previously defined models +class ServiceStat(BaseModel): + id: str + value: int + label: str + +class PortStat(BaseModel): + id: int + value: int + label: str + +class VulnerabilityStat(BaseModel): + id: str + value: int + label: str + +class SeverityCountStat(BaseModel): + id: str + value: int + label: str + +class Domain(BaseModel): + id: str + createdAt: datetime + updatedAt: datetime + syncedAt: Optional[datetime] + ip: Optional[str] + fromRootDomain: Optional[str] + subdomainSource: Optional[str] + ipOnly: Optional[bool] + reverseName: Optional[str] + name: Optional[str] + screenshot: Optional[str] + country: Optional[str] + asn: Optional[str] + cloudHosted: Optional[bool] + fromCidr: Optional[bool] + isFceb: Optional[bool] + ssl: Optional[dict] + censysCertificatesResults: Optional[dict] + trustymailResults: Optional[dict] + +class LatestVulnerability(BaseModel): + id: str + createdAt: datetime + updatedAt: datetime + lastSeen: Optional[datetime] + title: str + cve: Optional[str] + cwe: Optional[str] + cpe: Optional[str] + description: Optional[str] + references: List[str] + cvss: Optional[float] + severity: Optional[str] + needsPopulation: bool + state: str + substate: str + source: str + notes: Optional[str] + actions: List[dict] + structuredData: dict + isKev: bool + kevResults: dict + domain: Domain + +class MostCommonVulnerability(BaseModel): + title: str + description: str + severity: Optional[str] + count: int + +class ByOrgStat(BaseModel): + id: str + orgId: str + value: int + label: str + +# Main StatsResponse model +class StatsResponse(BaseModel): + result: Dict[str, Any] = { + "domains": { + "services": List[ServiceStat], + "ports": List[PortStat], + "numVulnerabilities": List[VulnerabilityStat], + "total": int + }, + "vulnerabilities": { + "severity": List[SeverityCountStat], + "latestVulnerabilities": List[LatestVulnerability], + "mostCommonVulnerabilities": List[MostCommonVulnerability], + "byOrg": List[ByOrgStat] + }, + } diff --git a/backend/src/xfd_django/xfd_api/schema_models/vulnerability.py b/backend/src/xfd_django/xfd_api/schema_models/vulnerability.py index d29d1304..1eab67c8 100644 --- a/backend/src/xfd_django/xfd_api/schema_models/vulnerability.py +++ b/backend/src/xfd_django/xfd_api/schema_models/vulnerability.py @@ -70,13 +70,3 @@ class VulnerabilitySearch(BaseModel): class Config: from_attributes = True - - -class VulnerabilityStat(BaseModel): - """VulnerabilityStat schema.""" - - id: str - value: int - - class Config: - from_attributes = True diff --git a/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py b/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py index 7e6172f7..5b20ecd4 100644 --- a/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py +++ b/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py @@ -7,102 +7,201 @@ from django.db.models import CharField, Count, F, Value from django.db.models.functions import Concat import redis +from xfd_api.helpers.stats_helpers import populate_stats_cache + +from ..models import Service, Vulnerability + + +def populate_services_cache(): + return populate_stats_cache( + model=Service, + group_by_field="domain__organization_id", + redis_key_prefix="services_stats", + annotate_field="service", + filters={ + "service__isnull": False, + "domain__isnull": False, + "domain__organization__isnull": False, + }, + ) + -from .models import Service, Vulnerability +def populate_ports_cache(): + return populate_stats_cache( + model=Service, + group_by_field="domain__organization_id", + redis_key_prefix="ports_stats", + annotate_field="port", + filters={ + "port__isnull": False, + "domain__isnull": False, + "domain__organization__isnull": False, + }, + ) -def populate_ServicesStatscache(): +def populate_num_vulns_cache(): + return populate_stats_cache( + model=Vulnerability, + group_by_field="domain__organization_id", + redis_key_prefix="vulnerabilities_stats", + annotate_field="severity", + custom_id=Concat( + F("domain__name"), + Value("|"), + F("severity"), + output_field=CharField(), + ), + filters={ + "state": "open", # Include only open vulnerabilities + "domain__isnull": False, + "domain__organization__isnull": False, + }, + ) + + +def populate_latest_vulns_cache(max_results=100): + """ + Populate Redis with the latest vulnerabilities for each organization. + """ try: - # Connect to Redis ElastiCache + # Connect to Redis redis_client = redis.StrictRedis( host=settings.ELASTICACHE_ENDPOINT, port=6379, db=0, - decode_responses=True, # Ensures data returned as string, not bytes + decode_responses=True, ) - # Fetch and aggregate data from Django models - services = ( - Service.objects.filter(service__isnull=False) - .exclude(service="") - .filter(domainId__isnull=False) - .filter(domainId__organizationId__isnull=False) - .values("service") - .annotate(value=Count("id")) - .order_by("-value") + # Fetch and organize the latest vulnerabilities + vulnerabilities = ( + Vulnerability.objects.filter( + state="open", # Only open vulnerabilities + domain__isnull=False, + domain__organization__isnull=False, + ) + .select_related("domain", "domain__organization") + .order_by("createdAt")[:max_results] ) - services_list = list(services) - - # **Debugging statements** - print(f"Number of services retrieved: {len(services_list)}") - if services_list: - print(f"First service entry: {services_list[0]}") - - # Adjust the data to have 'id' and 'value' keys - services_data = [ - {"id": item["service"], "value": item["value"]} for item in services_list - ] - - # Serialize the data to JSON - services_json = json.dumps(services_data) + # Organize vulnerabilities by organization + vulnerabilities_by_org = {} + for vuln in vulnerabilities: + org_id = str(vuln.domain.organization.id) # Organization ID + vuln_data = { + "id": str(vuln.id), + "createdAt": vuln.createdAt.isoformat(), + "updatedAt": vuln.updatedAt.isoformat(), + "lastSeen": vuln.lastSeen.isoformat() if vuln.lastSeen else None, + "title": vuln.title, + "cve": vuln.cve, + "cwe": vuln.cwe, + "cpe": vuln.cpe, + "description": vuln.description, + "references": vuln.references, + "cvss": str(vuln.cvss) if vuln.cvss else None, + "severity": vuln.severity, + "needsPopulation": vuln.needsPopulation, + "state": vuln.state, + "substate": vuln.substate, + "source": vuln.source, + "notes": vuln.notes, + "actions": vuln.actions, + "structuredData": vuln.structuredData, + "isKev": vuln.isKev, + "kevResults": vuln.kevResults, + "domain": { + "id": str(vuln.domain.id), + "createdAt": vuln.domain.createdAt.isoformat(), + "updatedAt": vuln.domain.updatedAt.isoformat(), + "syncedAt": vuln.domain.syncedAt.isoformat() + if vuln.domain.syncedAt + else None, + "ip": vuln.domain.ip, + "fromRootDomain": vuln.domain.fromRootDomain, + "subdomainSource": vuln.domain.subdomainSource, + "ipOnly": vuln.domain.ipOnly, + "reverseName": vuln.domain.reverseName, + "name": vuln.domain.name, + "screenshot": vuln.domain.screenshot, + "country": vuln.domain.country, + "asn": vuln.domain.asn, + "cloudHosted": vuln.domain.cloudHosted, + "fromCidr": vuln.domain.fromCidr, + "isFceb": vuln.domain.isFceb, + "ssl": vuln.domain.ssl, + "censysCertificatesResults": vuln.domain.censysCertificatesResults, + "trustymailResults": vuln.domain.trustymailResults, + }, + } + if org_id not in vulnerabilities_by_org: + vulnerabilities_by_org[org_id] = [] + vulnerabilities_by_org[org_id].append(vuln_data) - # Store the data under a single key in Redis - redis_client.set("services_stats", services_json) + # Store each organization's vulnerabilities in Redis + for org_id, data in vulnerabilities_by_org.items(): + redis_key = f"latest_vulnerabilities:{org_id}" + redis_client.set(redis_key, json.dumps(data)) return { "status": "success", - "message": "Cache populated services successfully.", + "message": "Cache populated with the latest vulnerabilities successfully.", } except Exception as e: - print(f"An error occurred: {e}") return { "status": "error", "message": f"An unexpected error occurred while populating the cache: {e}", } -def populate_PortsStatscache(): - # Connect to Redis Elasticache +def populate_most_common_vulns_cache(max_results=100): + """ + Populate Redis with the most common vulnerabilities grouped by title, description, and severity. + """ try: - # Connect to Redis Elasticache + # Connect to Redis redis_client = redis.StrictRedis( host=settings.ELASTICACHE_ENDPOINT, port=6379, db=0, - decode_responses=True, # Ensures data returned as string, not bytes + decode_responses=True, ) - # Fetch data from Django models - ports = ( - Service.objects.filter(domainId__organizationId__isnull=False) - .values("port") - .annotate(value=Count("id")) - .order_by("-value") + # Fetch and aggregate vulnerabilities + vulnerabilities = ( + Vulnerability.objects.filter( + state="open", # Only open vulnerabilities + domain__isnull=False, + domain__organization__isnull=False, + ) + .values("title", "description", "severity", "domain__organization_id") + .annotate(count=Count("id")) + .order_by("-count")[:max_results] ) - # Convert queryset to list - ports_list = list(ports) - - # Serialize the data to JSON - ports_json = json.dumps(ports_list) - - # Store the data under a single key in Redis - redis_client.set("ports_stats", ports_json) - - return {"status": "success", "message": "Cache populated ports successfully."} + # Organize vulnerabilities by organization + vulnerabilities_by_org = {} + for vuln in vulnerabilities: + org_id = str(vuln["domain__organization_id"]) + vuln_data = { + "title": vuln["title"], + "description": vuln["description"], + "severity": vuln["severity"], + "count": vuln["count"], + } + if org_id not in vulnerabilities_by_org: + vulnerabilities_by_org[org_id] = [] + vulnerabilities_by_org[org_id].append(vuln_data) - except redis.RedisError as redis_error: - return { - "status": "error", - "message": f"Failed to populate cache due to Redis error: {redis_error}", - } + # Store each organization's vulnerabilities in Redis + for org_id, data in vulnerabilities_by_org.items(): + redis_key = f"most_common_vulnerabilities:{org_id}" + redis_client.set(redis_key, json.dumps(data)) - except django.db.DatabaseError as db_error: return { - "status": "error", - "message": f"Failed to populate cache due to database error: {db_error}", + "status": "success", + "message": "Cache populated with the most common vulnerabilities successfully.", } except Exception as e: @@ -112,268 +211,68 @@ def populate_PortsStatscache(): } -def populate_NumVulnerabilitiesStatscache(event=None, context=None): - # Connect to Redis ElastiCache - redis_client = redis.StrictRedis( - host=settings.ELASTICACHE_ENDPOINT, - port=6379, - db=0, - decode_responses=True, # Automatically decode responses as UTF-8 strings +def populate_severity_cache(): + """ + Populate Redis with severity statistics for vulnerabilities. + """ + return populate_stats_cache( + model=Vulnerability, + group_by_field="domain__organization_id", # Group by severity + redis_key_prefix="severity_stats", + annotate_field="severity", # Default field for counting occurrences + filters={ + "state": "open", # Include only open vulnerabilities + "domain__isnull": False, + "domain__organization__isnull": False, + }, ) +def populate_by_org_cache(): + """ + Populate Redis with the count of open vulnerabilities grouped by organization. + Each organization's data is stored under its own Redis key. + """ try: - # Fetch data from Django models - MAX_RESULTS = 100 # Replace with your desired maximum number of results + # Connect to Redis + redis_client = redis.StrictRedis( + host=settings.ELASTICACHE_ENDPOINT, + port=6379, + db=0, + decode_responses=True, + ) - num_vulnerabilities = ( + # Fetch and aggregate vulnerabilities grouped by organization + vulnerabilities = ( Vulnerability.objects.filter( state="open", - domainId__isnull=False, # Ensures the vulnerability is linked to a domain + domain__isnull=False, + domain__organization__isnull=False, ) - .annotate( - composite_id=Concat( - F("domainId__name"), - Value("|"), - F("severity"), - output_field=CharField(), - ) - ) - .values("composite_id") + .values("domain__organization__id", "domain__organization__name") .annotate(value=Count("id")) - .order_by("-value")[:MAX_RESULTS] - ) - - # Prepare data for Redis - vulnerabilities_stats = { - item["composite_id"]: str(item["value"]) for item in num_vulnerabilities - } - - # Use a Redis hash to store all vulnerability stats under a single key - redis_client.hset("num_vulnerabilities_stats", mapping=vulnerabilities_stats) - - return {"status": "success", "message": "Cache populated successfully."} - - except Exception as e: - # Handle exceptions gracefully - return {"status": "error", "message": f"An error occurred: {e}"} - - -def populate_LatestVulnerabilitiesCache(): - # Connect to Redis ElastiCache - redis_client = redis.StrictRedis( - host=settings.ELASTICACHE_ENDPOINT, port=6379, db=0, decode_responses=True - ) - - try: - MAX_RESULTS = 100 # Adjust as needed - - latest_vulnerabilities = ( - Vulnerability.objects.filter(state="open") - .select_related("domainId__organizationId") - .order_by("createdAt")[:MAX_RESULTS] - ) - - # Prepare data for Redis - vulnerabilities_data = [] - for vuln in latest_vulnerabilities: - vulnerabilities_data.append( - { - "id": str(vuln.id), - "title": vuln.title, - "state": vuln.state, - "createdAt": vuln.createdAt.isoformat(), - "domain": vuln.domainId.name if vuln.domainId else None, - "organizationId": str(vuln.domainId.organizationId.id) - if vuln.domainId and vuln.domainId.organizationId - else None, - # Include other fields as needed - } - ) - - # Serialize data to JSON - vulnerabilities_json = json.dumps(vulnerabilities_data) - - # Store data in Redis - redis_client.set("latest_vulnerabilities", vulnerabilities_json) - - return {"status": "success", "message": "Cache populated successfully."} - - except Exception as e: - # Handle exceptions gracefully - return {"status": "error", "message": f"An error occurred: {e}"} - - -def populate_MostCommonVulnerabilitiesCache(): - redis_client = redis.StrictRedis( - host=settings.ELASTICACHE_ENDPOINT, port=6379, db=0, decode_responses=True - ) - - try: - MAX_RESULTS = 100 # Adjust as needed - - # Retrieve vulnerabilities with related domain and organization information - most_common_vulnerabilities = ( - Vulnerability.objects.filter(state="open") - .select_related("domainId__organizationId") - .values( - "title", - "description", - "severity", - "domainId__name", - "domainId__organizationId__id", - ) - .annotate(count=Count("id")) - .order_by("-count")[:MAX_RESULTS] - ) - - # Convert QuerySet to a list - vulnerabilities_data = list(most_common_vulnerabilities) - - # Rename fields for consistency and clarity - for vuln in vulnerabilities_data: - vuln["domain"] = vuln.pop("domainId__name", None) - vuln["organizationId"] = str(vuln.pop("domainId__organizationId__id", None)) - - # Serialize data to JSON - vulnerabilities_json = json.dumps(vulnerabilities_data) - - # Store data in Redis - redis_client.set("most_common_vulnerabilities", vulnerabilities_json) - - return {"status": "success", "message": "Cache populated successfully."} - except Exception as e: - return {"status": "error", "message": f"An error occurred: {e}"} - - -def populate_SeverityCountsCache(): - """ - Fetches the count of open vulnerabilities grouped by severity and stores the data in Redis. - """ - # Connect to Redis ElastiCache - redis_client = redis.StrictRedis( - host=settings.ELASTICACHE_ENDPOINT, - port=6379, - db=0, - decode_responses=True, # Automatically decode responses as UTF-8 strings - ) - - try: - vulnerabilities = ( - Vulnerability.objects.filter(state="open") - .select_related("domainId__organizationId") - .values("id", "severity", "domainId__organizationId__id") + .order_by("-value") ) - # Transform the QuerySet to a list of dictionaries - data = [ - { - "id": str(item["id"]), - "severity": item["severity"], - "organizationId": str(item["domainId__organizationId__id"]), + # Organize data and store in Redis + for vuln in vulnerabilities: + org_id = str(vuln["domain__organization__id"]) + org_name = vuln["domain__organization__name"] + redis_key = f"by_org_stats:{org_id}" + data = { + "id": org_name, # Organization name as "id" + "orgId": org_id, # Organization ID + "value": vuln["value"], # Count of vulnerabilities + "label": org_name, # Organization name as "label" } - for item in vulnerabilities - ] - - # Serialize data to JSON - vulnerabilities_json = json.dumps(data) - - # Store data in Redis under the key 'vulnerabilities_data' - redis_client.set("vulnerabilities_data", vulnerabilities_json) + redis_client.set(redis_key, json.dumps(data)) return { "status": "success", - "message": "Vulnerabilities cache populated successfully.", + "message": "Cache populated for byOrg successfully.", } - except Exception as e: - return {"status": "error", "message": f"An error occurred: {e}"} - -def populate_VulnerabilitiesByOrgCache(): - """ - Fetches open vulnerabilities with organization information and stores them in Redis. - """ - redis_client = redis.StrictRedis( - host=settings.ELASTICACHE_ENDPOINT, port=6379, db=0, decode_responses=True - ) - - try: - # Fetch vulnerabilities with related organization data - vulnerabilities = ( - Vulnerability.objects.filter(state="open") - .select_related("domainId__organizationId") - .values( - "id", - "domainId__organizationId__id", - "domainId__organizationId__name", - ) - ) - - # Convert QuerySet to list of dictionaries - data = [ - { - "vulnerabilityId": str(item["id"]), - "orgId": str(item["domainId__organizationId__id"]), - "orgName": item["domainId__organizationId__name"], - } - for item in vulnerabilities - ] - - # Serialize data to JSON - json_data = json.dumps(data) - - # Store data in Redis under the key 'vulnerabilities_by_org' - redis_client.set("vulnerabilities_by_org", json_data) - - return {"status": "success", "message": "Cache populated successfully."} - except Exception as e: - return {"status": "error", "message": f"An error occurred: {e}"} - - # '''I need to create filterQuery to apply to the few endpoints that require it''' - - -def populate_ByOrgCache(): - """ - Fetches the count of open vulnerabilities grouped by organization and stores the data in Redis. - """ - # Connect to Redis ElastiCache - redis_client = redis.StrictRedis( - host=settings.ELASTICACHE_ENDPOINT, - port=6379, - db=0, - decode_responses=True, # To automatically decode responses as UTF-8 strings - ) - - try: - # Execute the Django ORM query - by_org = ( - Vulnerability.objects.filter(state="open") - .values( - id=F("domainId__organizationId__name"), - orgId=F("domainId__organizationId__id"), - ) - .annotate( - value=Count("id"), - ) - .order_by("-value") - ) - - # Convert QuerySet to a list of dictionaries - data = list(by_org) - - # Add 'label' field (same as 'id') and ensure data types - for item in data: - item["id"] = str(item["id"]) - item["orgId"] = str(item["orgId"]) - item["value"] = int(item["value"]) - item["label"] = item["id"] - - # Serialize data to JSON - json_data = json.dumps(data) - - # Store data in Redis under the key 'by_org' - redis_client.set("by_org", json_data) - - return {"status": "success", "message": "ByOrg cache populated successfully."} except Exception as e: - # Handle exceptions gracefully - return {"status": "error", "message": f"An error occurred: {e}"} + return { + "status": "error", + "message": f"An unexpected error occurred while populating the cache: {e}", + } \ No newline at end of file diff --git a/backend/src/xfd_django/xfd_api/tasks/syncdb_helpers.py b/backend/src/xfd_django/xfd_api/tasks/syncdb_helpers.py index a7445b9a..9bc17375 100644 --- a/backend/src/xfd_django/xfd_api/tasks/syncdb_helpers.py +++ b/backend/src/xfd_django/xfd_api/tasks/syncdb_helpers.py @@ -168,7 +168,7 @@ def create_sample_services_and_vulnerabilities(domain): # Add random vulnerabilities if random.random() < PROB_SAMPLE_VULNERABILITIES: Vulnerability.objects.create( - title="Sample Vulnerability", + title="Sample Vulnerability " + "".join(random.choices("ABCDEFGHIJKLMNOPQRSTUVWXYZ", k=3)), domain=domain, service=None, description="Sample description", diff --git a/backend/src/xfd_django/xfd_api/views.py b/backend/src/xfd_django/xfd_api/views.py index 92fa72a7..38c767f3 100644 --- a/backend/src/xfd_django/xfd_api/views.py +++ b/backend/src/xfd_django/xfd_api/views.py @@ -20,13 +20,7 @@ from .api_methods import organization, proxy, scan, scan_tasks, user from .api_methods.cpe import get_cpes_by_id from .api_methods.cve import get_cves_by_id, get_cves_by_name -from .api_methods.domain import ( - export_domains, - get_domain_by_id, - search_domains, - stats_total_domains, -) -from .api_methods.organization import stats_get_org_count_by_id +from .api_methods.domain import export_domains, get_domain_by_id, search_domains from .api_methods.saved_search import ( create_saved_search, delete_saved_search, @@ -35,8 +29,16 @@ update_saved_search, ) from .api_methods.search import search_export, search_post -from .api_methods.stats_ports import get_user_ports_cache -from .api_methods.stats_services import get_user_services_count +from .api_methods.stats import ( + get_num_vulns, + get_severity_stats, + get_stats, + get_user_ports_count, + get_user_services_count, + stats_latest_vulns, + stats_most_common_vulns, + get_by_org_stats +) from .api_methods.user import ( accept_terms, delete_user, @@ -49,30 +51,18 @@ update_user_v2, ) from .api_methods.vulnerability import ( - get_num_vulns, get_vulnerability_by_id, search_vulnerabilities, - stats_latest_vulns, - stats_most_common_vulns, - stats_vuln_count, update_vulnerability, ) -from .auth import ( - get_current_active_user, - get_tag_organization_ids, - get_user_domains, - get_user_organization_ids, - get_user_ports, - get_user_service_ids, - is_global_view_admin, -) +from .auth import get_current_active_user from .login_gov import callback, login from .models import Domain, Organization, User, Vulnerability from .schema_models import organization_schema as OrganizationSchema from .schema_models import scan as scanSchema from .schema_models import scan_tasks as scanTaskSchema +from .schema_models import stat_schema from .schema_models.api_key import ApiKey as ApiKeySchema -from .schema_models.by_org_item import ByOrgItem from .schema_models.cpe import Cpe as CpeSchema from .schema_models.cve import Cve as CveSchema from .schema_models.domain import ( @@ -82,10 +72,7 @@ TotalDomainsResponse, ) from .schema_models.domain import Domain as DomainSchema -from .schema_models.latest_vuln import LatestVulnerabilitySchema -from .schema_models.most_common_vuln import MostCommonVulnerabilitySchema from .schema_models.notification import Notification as NotificationSchema -from .schema_models.ports_stats import PortsStats from .schema_models.role import Role as RoleSchema from .schema_models.saved_search import ( SavedSearchCreate, @@ -94,8 +81,6 @@ ) from .schema_models.saved_search import SavedSearch as SavedSearchSchema from .schema_models.search import DomainSearchBody, SearchResponse -from .schema_models.service import ServicesStat -from .schema_models.severity_count import SeverityCountSchema from .schema_models.user import ( NewUser, NewUserResponseModel, @@ -105,7 +90,7 @@ from .schema_models.user import User as UserSchema from .schema_models.user import UserResponse, UserResponseV2, VersionModel from .schema_models.vulnerability import Vulnerability as VulnerabilitySchema -from .schema_models.vulnerability import VulnerabilitySearch, VulnerabilityStat +from .schema_models.vulnerability import VulnerabilitySearch # Define API router api_router = APIRouter() @@ -853,119 +838,127 @@ async def invoke_scheduler(current_user: User = Depends(get_current_active_user) # ======================================== -@api_router.get( - "/services/", - tags=["Retrieve Stats"], +@api_router.post( + "/stats", + dependencies=[Depends(get_current_active_user)], + response_model=stat_schema.StatsResponse, + tags=["Stats"], ) async def get_services( + filter_data: OrganizationSchema.StatsPayloadSchema, + current_user: User = Depends(get_current_active_user), + redis_client=Depends(get_redis_client), +): + """Retrieve all stats from Elasticache filtered by user.""" + return await get_stats(filter_data, current_user, redis_client) + + +@api_router.post( + "/services", + response_model=List[stat_schema.ServiceStat], + dependencies=[Depends(get_current_active_user)], + tags=["Stats"], +) +async def post( + filter_data: OrganizationSchema.StatsPayloadSchema, current_user: User = Depends(get_current_active_user), redis_client=Depends(get_redis_client), ): """Retrieve services from Elasticache filtered by user.""" - get_user_services_count(current_user, redis_client) + return await get_user_services_count(filter_data, current_user, redis_client) -@api_router.get( - "/ports/", - response_model=List[PortsStats], # Expecting a list of Stats objects - tags=["Retrieve Stats"], +@api_router.post( + "/ports", + dependencies=[Depends(get_current_active_user)], + response_model=List[stat_schema.PortStat], + tags=["Stats"], ) -async def get_Ports( +async def get_ports_stats( + filter_data: OrganizationSchema.StatsPayloadSchema, current_user: User = Depends(get_current_active_user), redis_client=Depends(get_redis_client), ): """Retrieve Port Stats from Elasticache.""" - get_user_ports_cache(current_user, redis_client) + return await get_user_ports_count(filter_data, current_user, redis_client) -@api_router.get( - "/num-vulnerabilities/", - response_model=List[VulnerabilityStat], # Expecting a list of Stats objects - tags=["Retrieve Stats"], +@api_router.post( + "/num-vulns", + dependencies=[Depends(get_current_active_user)], + response_model=List[stat_schema.VulnerabilityStat], + tags=["Stats"], ) -async def get_NumVulnerabilities( +async def get_num_vulns_stats( + filter_data: OrganizationSchema.StatsPayloadSchema, current_user: User = Depends(get_current_active_user), redis_client: aioredis.Redis = Depends(get_redis_client), ): """ Retrieve number of vulnerabilities stats from ElastiCache (Redis) filtered by user. """ - get_num_vulns(current_user, redis_client) + return await get_num_vulns(filter_data, current_user, redis_client) -@api_router.get( - "/latest-vulnerabilities/", - response_model=List[LatestVulnerabilitySchema], - tags=["Retrieve Stats"], +@api_router.post( + "/latest-vulns", + dependencies=[Depends(get_current_active_user)], + response_model=List[stat_schema.LatestVulnerability], + tags=["Stats"], ) async def get_latest_vulnerabilities( - organization: str = Query(None, description="Filter by organization ID"), - tag: Optional[str] = None, + filter_data: OrganizationSchema.StatsPayloadSchema, current_user: User = Depends(get_current_active_user), redis_client: aioredis.Redis = Depends(get_redis_client), ): - stats_latest_vulns(organization, tag, current_user, redis_client) + return await stats_latest_vulns(filter_data, current_user, redis_client) -@api_router.get( - "/most-common-vulnerabilities/", - response_model=List[MostCommonVulnerabilitySchema], - tags=["Retrieve Stats"], +@api_router.post( + "/most-common-vulns", + dependencies=[Depends(get_current_active_user)], + response_model=List[stat_schema.MostCommonVulnerability], + tags=["Stats"], ) -async def get_most_common_vulnerabilities( - organization: str = Query(None, description="Filter by organization ID"), - tag: str = Query(None, description="Filter by tag"), +async def get_most_common_vulns( + filter_data: OrganizationSchema.StatsPayloadSchema, current_user: User = Depends(get_current_active_user), redis_client: aioredis.Redis = Depends(get_redis_client), ): - stats_most_common_vulns(organization, tag, current_user, redis_client) + return await stats_most_common_vulns(filter_data, current_user, redis_client) -@api_router.get( - "/severity-counts/", - response_model=List[SeverityCountSchema], - tags=["Retrieve Stats"], +@api_router.post( + "/severity-counts", + dependencies=[Depends(get_current_active_user)], + response_model=List[stat_schema.SeverityCountStat], + tags=["Stats"], ) async def get_severity_counts( - organization: str = Query(None, description="Filter by organization ID"), - tag: str = Query(None, description="Filter by tag"), + filter_data: OrganizationSchema.StatsPayloadSchema, current_user: User = Depends(get_current_active_user), redis_client: aioredis.Redis = Depends(get_redis_client), ): """ Retrieves the count of open vulnerabilities grouped by severity from Redis. """ - stats_vuln_count(organization, tag, current_user, redis_client) - + return await get_severity_stats(filter_data, current_user, redis_client) -@api_router.get( - "/domains/total/", - response_model=TotalDomainsResponse, - tags=["Retrieve Stats"], -) -async def get_total_domains( - organization: str = Query(None, description="Filter by organization ID"), - tag: str = Query(None, description="Filter by tag"), - current_user: User = Depends(get_current_active_user), -): - stats_total_domains(organization, tag, current_user) - - -@api_router.get( - "/by-org/", - response_model=List[ByOrgItem], - tags=["Retrieve Stats"], +@api_router.post( + "/by-org", + dependencies=[Depends(get_current_active_user)], + response_model=List[stat_schema.ByOrgStat], + tags=["Stats"], ) -async def get_by_org( - organization: str = Query(None, description="Filter by organization ID"), - tag: str = Query(None, description="Filter by tag"), +async def get_severity_counts( + filter_data: OrganizationSchema.StatsPayloadSchema, current_user: User = Depends(get_current_active_user), redis_client: aioredis.Redis = Depends(get_redis_client), ): """ - Retrieves the count of open vulnerabilities grouped by organization from Redis. + Retrieves the count of open vulnerabilities grouped by severity from Redis. """ - stats_get_org_count_by_id(organization, tag, current_user, redis_client) + return await get_by_org_stats(filter_data, current_user, redis_client) # ======================================== diff --git a/backend/tools/build-worker.sh b/backend/tools/build-worker.sh index 7d1b6949..01a6bfe8 100755 --- a/backend/tools/build-worker.sh +++ b/backend/tools/build-worker.sh @@ -8,4 +8,4 @@ set -e docker build --platform linux/amd64 -t crossfeed-worker -f Dockerfile.worker . -docker build --platform linux/amd64 -t pe-worker -f Dockerfile.pe . +# docker build --platform linux/amd64 -t pe-worker -f Dockerfile.pe . diff --git a/docker-compose.yml b/docker-compose.yml index 581d858b..61eb11e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -93,6 +93,13 @@ services: logging: driver: json-file + redis: + image: redis:7.0 + ports: + - "6379:6379" + networks: + - backend + # kib: # image: docker.elastic.co/kibana/kibana:7.9.0 # networks: From 501018ce5a13f52305ca63a1d1166b4adb1ecb0d Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 14:40:10 -0500 Subject: [PATCH 08/18] Add elasticache endpoint --- backend/env.yml | 4 ++++ backend/src/tasks/functions.yml | 4 ---- dev.env.example | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/backend/env.yml b/backend/env.yml index 3a3bf92c..b848e3d8 100644 --- a/backend/env.yml +++ b/backend/env.yml @@ -74,6 +74,7 @@ staging-cd: REACT_APP_COGNITO_CLIENT_ID: 481n0fqrjiouharsddrv94c1a2 REACT_APP_COGNITO_USER_POOL_ID: us-east-1_iWciADuOe REACT_APP_COGNITO_CALLBACK_URL: https://staging-cd.crossfeed.cyber.dhs.gov/okta-callback + ELASTICACHE_ENDPOINT: ${ssm:/crossfeed/staging/ELASTICACHE_ENDPOINT} integration: REGION: us-east-1 @@ -137,6 +138,7 @@ integration: REACT_APP_COGNITO_CLIENT_ID: 6pohrlhoa20675c0rds6tcsk62 REACT_APP_COGNITO_USER_POOL_ID: us-east-1_AuTPyIYDK REACT_APP_COGNITO_CALLBACK_URL: https://integration.crossfeed.cyber.dhs.gov/okta-callback + ELASTICACHE_ENDPOINT: ${ssm:/crossfeed/integration/ELASTICACHE_ENDPOINT} staging: REGION: us-gov-east-1 @@ -198,6 +200,7 @@ staging: MDL_USERNAME: ${ssm:/crossfeed/staging/MDL_USERNAME} MDL_PASSWORD: ${ssm:/crossfeed/staging/MDL_PASSWORD} MDL_NAME: ${ssm:/crossfeed/staging/MDL_NAME} + ELASTICACHE_ENDPOINT: ${ssm:/crossfeed/staging/ELASTICACHE_ENDPOINT} prod: REGION: us-gov-east-1 @@ -258,6 +261,7 @@ prod: REACT_APP_COGNITO_CLIENT_ID: 1nacnjc6sejbala9uf97eeq9o1 REACT_APP_COGNITO_USER_POOL_ID: us-gov-west-1_L1ZjQdUKA REACT_APP_COGNITO_CALLBACK_URL: https://crossfeed.cyber.dhs.gov/okta-callback + ELASTICACHE_ENDPOINT: ${ssm:/crossfeed/prod/ELASTICACHE_ENDPOINT} dev-vpc: securityGroupIds: diff --git a/backend/src/tasks/functions.yml b/backend/src/tasks/functions.yml index dea529b2..5b6b63e4 100644 --- a/backend/src/tasks/functions.yml +++ b/backend/src/tasks/functions.yml @@ -76,10 +76,6 @@ portStatsCache: numVulnsCache: handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_num_vulns_cache - runtime: python3.11 - environment: - DJANGO_SETTINGS_MODULE: xfd_django.settings - REDIS_ENDPOINT: ${env:ELASTICACHE_ENDPOINT} events: - schedule: rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight diff --git a/dev.env.example b/dev.env.example index 07eece6c..96e62b51 100644 --- a/dev.env.example +++ b/dev.env.example @@ -124,3 +124,5 @@ COGNITO_URL=https://cognito-idp.us-east-1.amazonaws.com JWT_ALGORITHM=HS256 JWT_TIMEOUT_HOURS=4 + +ELASTICACHE_ENDPOINT=redis \ No newline at end of file From 6dd66d51735401fd4b0413ec835ee59f6cbf6cd8 Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 14:50:24 -0500 Subject: [PATCH 09/18] Fix duplicate elasticache variable --- backend/env.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/env.yml b/backend/env.yml index b848e3d8..afc7a0be 100644 --- a/backend/env.yml +++ b/backend/env.yml @@ -74,7 +74,6 @@ staging-cd: REACT_APP_COGNITO_CLIENT_ID: 481n0fqrjiouharsddrv94c1a2 REACT_APP_COGNITO_USER_POOL_ID: us-east-1_iWciADuOe REACT_APP_COGNITO_CALLBACK_URL: https://staging-cd.crossfeed.cyber.dhs.gov/okta-callback - ELASTICACHE_ENDPOINT: ${ssm:/crossfeed/staging/ELASTICACHE_ENDPOINT} integration: REGION: us-east-1 From a823723defe16ea9e1f515e1ed7ab7abbfc9dd31 Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 14:52:59 -0500 Subject: [PATCH 10/18] Remove duplicate elasticache variable --- backend/env.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/env.yml b/backend/env.yml index afc7a0be..7148df36 100644 --- a/backend/env.yml +++ b/backend/env.yml @@ -260,7 +260,6 @@ prod: REACT_APP_COGNITO_CLIENT_ID: 1nacnjc6sejbala9uf97eeq9o1 REACT_APP_COGNITO_USER_POOL_ID: us-gov-west-1_L1ZjQdUKA REACT_APP_COGNITO_CALLBACK_URL: https://crossfeed.cyber.dhs.gov/okta-callback - ELASTICACHE_ENDPOINT: ${ssm:/crossfeed/prod/ELASTICACHE_ENDPOINT} dev-vpc: securityGroupIds: From 00967c1d374b9fe2f18ffcf80f2499e801c93a3c Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 14:55:25 -0500 Subject: [PATCH 11/18] Make sure cache lambdas are defined correctly --- backend/src/tasks/functions.yml | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/backend/src/tasks/functions.yml b/backend/src/tasks/functions.yml index 5b6b63e4..5b8f5929 100644 --- a/backend/src/tasks/functions.yml +++ b/backend/src/tasks/functions.yml @@ -52,8 +52,7 @@ serviceStatsCache: handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_services_cache events: - schedule: - rate: ron(0 0 * * ? *) # This triggers the function every day it midnight - enabled: true + rate: cron(0 0 * * ? *) # This triggers the function every day it midnight package: include: - src/** @@ -65,8 +64,7 @@ portStatsCache: handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_ports_cache events: - schedule: - rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight - enabled: true + rate: cron(0 0 * * ? *) # This triggers the function every day it midnight package: include: - src/** @@ -78,8 +76,7 @@ numVulnsCache: handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_num_vulns_cache events: - schedule: - rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight - enabled: true + rate: cron(0 0 * * ? *) # This triggers the function every day it midnight package: include: - src/** @@ -91,8 +88,7 @@ latestVulnsCache: handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_latest_vulns_cache events: - schedule: - rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight - enabled: true + rate: cron(0 0 * * ? *) # This triggers the function every day it midnight package: include: - src/** @@ -104,8 +100,7 @@ mostCommonVulnsCache: handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_most_common_vulns_cache events: - schedule: - rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight - enabled: true + rate: cron(0 0 * * ? *) # This triggers the function every day it midnight package: include: - src/** @@ -117,8 +112,7 @@ severityCache: handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_severity_cache events: - schedule: - rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight - enabled: true + rate: cron(0 0 * * ? *) # This triggers the function every day it midnight package: include: - src/** @@ -130,8 +124,7 @@ byOrgCache: handler: src/xfd_django/xfd_api/tasks/elasticache_tasks.populate_by_org_cache events: - schedule: - rate: ron(0 0 * * ? *) # This triggers the function every day it mightnight - enabled: true + rate: cron(0 0 * * ? *) # This triggers the function every day it midnight package: include: - src/** From 01de8619c8301cb3d6ae8f73f2912d1f9a53372c Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 15:36:44 -0500 Subject: [PATCH 12/18] Run pre-commit --- .github/workflows/backend.yml | 4 +- backend/requirements.txt | 2 +- backend/src/tasks/functions.yml | 2 +- .../xfd_django/xfd_api/api_methods/stats.py | 134 ++++++++++++++---- .../xfd_api/helpers/stats_helpers.py | 26 ++-- .../xfd_api/schema_models/stat_schema.py | 20 ++- .../xfd_django/xfd_api/schema_models/stats.py | 20 ++- .../xfd_api/tasks/elasticache_tasks.py | 11 +- .../xfd_api/tasks/syncdb_helpers.py | 3 +- backend/src/xfd_django/xfd_api/views.py | 5 +- dev.env.example | 2 +- 11 files changed, 169 insertions(+), 60 deletions(-) diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml index 9316d3c5..9f015435 100644 --- a/.github/workflows/backend.yml +++ b/.github/workflows/backend.yml @@ -116,7 +116,7 @@ jobs: CROSSFEED_COMMAND_OPTIONS: '{"scanName": "test"}' DB_USERNAME: crossfeed DB_PASSWORD: password - + build_worker: runs-on: ubuntu-latest timeout-minutes: 90 @@ -233,7 +233,7 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} SLS_DEBUG: '*' - + - name: Deploy worker run: npm run deploy-worker-integration working-directory: backend diff --git a/backend/requirements.txt b/backend/requirements.txt index a7b1ddea..02bcf47e 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -87,4 +87,4 @@ uvicorn==0.30.1 uvloop==0.21.0 watchfiles==1.0.0 websockets==14.1 -yarl==1.18.3 \ No newline at end of file +yarl==1.18.3 diff --git a/backend/src/tasks/functions.yml b/backend/src/tasks/functions.yml index 5b8f5929..e804ac62 100644 --- a/backend/src/tasks/functions.yml +++ b/backend/src/tasks/functions.yml @@ -130,4 +130,4 @@ byOrgCache: - src/** - requirements.txt exclude: - - node_modules/** \ No newline at end of file + - node_modules/** diff --git a/backend/src/xfd_django/xfd_api/api_methods/stats.py b/backend/src/xfd_django/xfd_api/api_methods/stats.py index 77fae7cb..663c83c8 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/stats.py +++ b/backend/src/xfd_django/xfd_api/api_methods/stats.py @@ -1,18 +1,18 @@ # Standard Python Libraries -import json from collections import defaultdict +import json # Third-Party Libraries from fastapi import HTTPException from redis import asyncio as aioredis - - from xfd_api.auth import get_stats_org_ids from xfd_api.helpers.stats_helpers import get_stats_count_from_cache, get_total_count + # GET: /stats async def get_stats(filter_data, current_user, redis_client): """Compile all stats.""" + async def safe_fetch(fetch_fn, *args, **kwargs): """Safely fetch stats, returning an empty list on failure.""" try: @@ -29,22 +29,64 @@ async def safe_fetch(fetch_fn, *args, **kwargs): status_code=404, detail="No organizations found for the user with the specified filters.", ) - - # Fetch + + # Fetch try: return { "result": { "domains": { - "services": await safe_fetch(get_user_services_count, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), - "ports": await safe_fetch(get_user_ports_count, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), - "numVulnerabilities": await safe_fetch(get_num_vulns, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), - "total": await safe_fetch(get_total_count,filtered_org_ids) + "services": await safe_fetch( + get_user_services_count, + filter_data, + current_user, + redis_client, + filtered_org_ids=filtered_org_ids, + ), + "ports": await safe_fetch( + get_user_ports_count, + filter_data, + current_user, + redis_client, + filtered_org_ids=filtered_org_ids, + ), + "numVulnerabilities": await safe_fetch( + get_num_vulns, + filter_data, + current_user, + redis_client, + filtered_org_ids=filtered_org_ids, + ), + "total": await safe_fetch(get_total_count, filtered_org_ids), }, "vulnerabilities": { - "severity": await safe_fetch(get_severity_stats, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), - "latestVulnerabilities": await safe_fetch(stats_latest_vulns, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), - "mostCommonVulnerabilities": await safe_fetch(stats_most_common_vulns, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids), - "byOrg": await safe_fetch(get_by_org_stats, filter_data, current_user, redis_client, filtered_org_ids=filtered_org_ids) + "severity": await safe_fetch( + get_severity_stats, + filter_data, + current_user, + redis_client, + filtered_org_ids=filtered_org_ids, + ), + "latestVulnerabilities": await safe_fetch( + stats_latest_vulns, + filter_data, + current_user, + redis_client, + filtered_org_ids=filtered_org_ids, + ), + "mostCommonVulnerabilities": await safe_fetch( + stats_most_common_vulns, + filter_data, + current_user, + redis_client, + filtered_org_ids=filtered_org_ids, + ), + "byOrg": await safe_fetch( + get_by_org_stats, + filter_data, + current_user, + redis_client, + filtered_org_ids=filtered_org_ids, + ), }, } } @@ -53,7 +95,10 @@ async def safe_fetch(fetch_fn, *args, **kwargs): status_code=500, detail=f"An unexpected error occurred: {e}" ) -async def get_user_services_count(filter_data, current_user, redis_client, filtered_org_ids = None): + +async def get_user_services_count( + filter_data, current_user, redis_client, filtered_org_ids=None +): """Retrieve services from Elasticache filtered by user.""" try: if not filtered_org_ids: @@ -66,7 +111,9 @@ async def get_user_services_count(filter_data, current_user, redis_client, filte detail="No organizations found for the user with the specified filters.", ) - services_data = await get_stats_count_from_cache(redis_client, "services_stats", filtered_org_ids) + services_data = await get_stats_count_from_cache( + redis_client, "services_stats", filtered_org_ids + ) if not services_data: raise HTTPException( @@ -85,7 +132,9 @@ async def get_user_services_count(filter_data, current_user, redis_client, filte ) -async def get_user_ports_count(filter_data, current_user, redis_client, filtered_org_ids = None): +async def get_user_ports_count( + filter_data, current_user, redis_client, filtered_org_ids=None +): """Retrieve ports from Elasticache filtered by user.""" try: if not filtered_org_ids: @@ -98,7 +147,9 @@ async def get_user_ports_count(filter_data, current_user, redis_client, filtered detail="No organizations found for the user with the specified filters.", ) - ports_data = await get_stats_count_from_cache(redis_client, "ports_stats", filtered_org_ids) + ports_data = await get_stats_count_from_cache( + redis_client, "ports_stats", filtered_org_ids + ) if not ports_data: raise HTTPException( @@ -115,9 +166,9 @@ async def get_user_ports_count(filter_data, current_user, redis_client, filtered raise HTTPException( status_code=500, detail=f"An unexpected error occurred: {e}" ) - -async def get_num_vulns(filter_data, current_user, redis_client, filtered_org_ids = None): + +async def get_num_vulns(filter_data, current_user, redis_client, filtered_org_ids=None): """Retrieve ports from Elasticache filtered by user.""" try: if not filtered_org_ids: @@ -130,7 +181,9 @@ async def get_num_vulns(filter_data, current_user, redis_client, filtered_org_id detail="No organizations found for the user with the specified filters.", ) - num_vulns_data = await get_stats_count_from_cache(redis_client, "vulnerabilities_stats", filtered_org_ids) + num_vulns_data = await get_stats_count_from_cache( + redis_client, "vulnerabilities_stats", filtered_org_ids + ) if not num_vulns_data: raise HTTPException( @@ -148,7 +201,10 @@ async def get_num_vulns(filter_data, current_user, redis_client, filtered_org_id status_code=500, detail=f"An unexpected error occurred: {e}" ) -async def get_severity_stats(filter_data, current_user, redis_client, filtered_org_ids = None): + +async def get_severity_stats( + filter_data, current_user, redis_client, filtered_org_ids=None +): """Retrieve ports from Elasticache filtered by user.""" try: if not filtered_org_ids: @@ -161,7 +217,9 @@ async def get_severity_stats(filter_data, current_user, redis_client, filtered_o detail="No organizations found for the user with the specified filters.", ) - severity_data = await get_stats_count_from_cache(redis_client, "severity_stats", filtered_org_ids) + severity_data = await get_stats_count_from_cache( + redis_client, "severity_stats", filtered_org_ids + ) if not severity_data: raise HTTPException( @@ -178,8 +236,11 @@ async def get_severity_stats(filter_data, current_user, redis_client, filtered_o raise HTTPException( status_code=500, detail=f"An unexpected error occurred: {e}" ) - -async def stats_latest_vulns(filter_data, current_user, redis_client, max_results=100, filtered_org_ids = None): + + +async def stats_latest_vulns( + filter_data, current_user, redis_client, max_results=100, filtered_org_ids=None +): """ Retrieve the latest vulnerabilities from Elasticache filtered by user. """ @@ -204,7 +265,9 @@ async def stats_latest_vulns(filter_data, current_user, redis_client, max_result vulnerabilities.extend(json.loads(org_vulnerabilities)) # Limit the results to the maximum specified - vulnerabilities = sorted(vulnerabilities, key=lambda x: x["createdAt"])[:max_results] + vulnerabilities = sorted(vulnerabilities, key=lambda x: x["createdAt"])[ + :max_results + ] if not vulnerabilities: raise HTTPException( @@ -219,11 +282,14 @@ async def stats_latest_vulns(filter_data, current_user, redis_client, max_result except Exception as e: raise HTTPException( - status_code=500, detail=f"An unexpected error occurred: {e}", + status_code=500, + detail=f"An unexpected error occurred: {e}", ) -async def stats_most_common_vulns(filter_data, current_user, redis_client, max_results=100, filtered_org_ids = None): +async def stats_most_common_vulns( + filter_data, current_user, redis_client, max_results=100, filtered_org_ids=None +): """ Retrieve the most common vulnerabilities from Elasticache filtered by user. """ @@ -269,7 +335,10 @@ async def stats_most_common_vulns(filter_data, current_user, redis_client, max_r detail=f"An unexpected error occurred: {e}", ) -async def get_by_org_stats(filter_data, current_user, redis_client, filtered_org_ids=None): + +async def get_by_org_stats( + filter_data, current_user, redis_client, filtered_org_ids=None +): """ Fetch the count of open vulnerabilities grouped by organization from Redis. """ @@ -292,7 +361,9 @@ async def get_by_org_stats(filter_data, current_user, redis_client, filtered_org redis_key = f"by_org_stats:{org_id}" org_stats = await redis_client.get(redis_key) if org_stats: - by_org_data.append(json.loads(org_stats)) # Directly append the Redis data + by_org_data.append( + json.loads(org_stats) + ) # Directly append the Redis data if not by_org_data: raise HTTPException( @@ -307,5 +378,6 @@ async def get_by_org_stats(filter_data, current_user, redis_client, filtered_org except Exception as e: raise HTTPException( - status_code=500, detail=f"An unexpected error occurred: {e}", - ) \ No newline at end of file + status_code=500, + detail=f"An unexpected error occurred: {e}", + ) diff --git a/backend/src/xfd_django/xfd_api/helpers/stats_helpers.py b/backend/src/xfd_django/xfd_api/helpers/stats_helpers.py index 98dcfb7d..94fffe57 100644 --- a/backend/src/xfd_django/xfd_api/helpers/stats_helpers.py +++ b/backend/src/xfd_django/xfd_api/helpers/stats_helpers.py @@ -1,17 +1,15 @@ # Standard Python Libraries -import json +import asyncio from collections import defaultdict +import json # Third-Party Libraries -from fastapi import HTTPException -import asyncio import django from django.conf import settings from django.db.models import CharField, Count, F, Value from django.db.models.functions import Concat +from fastapi import HTTPException import redis - - from xfd_api.models import Domain @@ -36,7 +34,10 @@ async def get_stats_count_from_cache(redis_client, redis_key_prefix, filtered_or for stat in stats_list: aggregated_stats[stat["id"]] += stat["value"] - return [{"id": stat_id, "value": value, "label": stat_id} for stat_id, value in aggregated_stats.items()] + return [ + {"id": stat_id, "value": value, "label": stat_id} + for stat_id, value in aggregated_stats.items() + ] def populate_stats_cache( @@ -70,7 +71,9 @@ def populate_stats_cache( # Aggregate and group data stats = ( - queryset.values(group_by_field, "custom_id" if custom_id else annotate_field) + queryset.values( + group_by_field, "custom_id" if custom_id else annotate_field + ) .annotate(value=Count(annotate_field)) .order_by(group_by_field, "-value") ) @@ -100,18 +103,17 @@ def populate_stats_cache( "status": "error", "message": f"An unexpected error occurred: {e}", } - + + async def get_total_count(filtered_org_ids): """ Retrieve the total count of domains associated with the filtered organizations. """ try: # Query the database for the total count of domains in the filtered organizations - total_count = ( - Domain.objects.filter(organization__in=filtered_org_ids).count() - ) + total_count = Domain.objects.filter(organization__in=filtered_org_ids).count() return total_count except Exception as e: print(f"Unexpected error fetching total count: {e}") - return 0 \ No newline at end of file + return 0 diff --git a/backend/src/xfd_django/xfd_api/schema_models/stat_schema.py b/backend/src/xfd_django/xfd_api/schema_models/stat_schema.py index a8c3a13e..45643105 100644 --- a/backend/src/xfd_django/xfd_api/schema_models/stat_schema.py +++ b/backend/src/xfd_django/xfd_api/schema_models/stat_schema.py @@ -1,6 +1,10 @@ -from typing import List, Dict, Any, Optional -from pydantic import BaseModel +# Standard Python Libraries from datetime import datetime +from typing import Any, Dict, List, Optional + +# Third-Party Libraries +from pydantic import BaseModel + # Reusing the previously defined models class ServiceStat(BaseModel): @@ -8,21 +12,25 @@ class ServiceStat(BaseModel): value: int label: str + class PortStat(BaseModel): id: int value: int label: str + class VulnerabilityStat(BaseModel): id: str value: int label: str + class SeverityCountStat(BaseModel): id: str value: int label: str + class Domain(BaseModel): id: str createdAt: datetime @@ -44,6 +52,7 @@ class Domain(BaseModel): censysCertificatesResults: Optional[dict] trustymailResults: Optional[dict] + class LatestVulnerability(BaseModel): id: str createdAt: datetime @@ -68,18 +77,21 @@ class LatestVulnerability(BaseModel): kevResults: dict domain: Domain + class MostCommonVulnerability(BaseModel): title: str description: str severity: Optional[str] count: int + class ByOrgStat(BaseModel): id: str orgId: str value: int label: str + # Main StatsResponse model class StatsResponse(BaseModel): result: Dict[str, Any] = { @@ -87,12 +99,12 @@ class StatsResponse(BaseModel): "services": List[ServiceStat], "ports": List[PortStat], "numVulnerabilities": List[VulnerabilityStat], - "total": int + "total": int, }, "vulnerabilities": { "severity": List[SeverityCountStat], "latestVulnerabilities": List[LatestVulnerability], "mostCommonVulnerabilities": List[MostCommonVulnerability], - "byOrg": List[ByOrgStat] + "byOrg": List[ByOrgStat], }, } diff --git a/backend/src/xfd_django/xfd_api/schema_models/stats.py b/backend/src/xfd_django/xfd_api/schema_models/stats.py index a8c3a13e..45643105 100644 --- a/backend/src/xfd_django/xfd_api/schema_models/stats.py +++ b/backend/src/xfd_django/xfd_api/schema_models/stats.py @@ -1,6 +1,10 @@ -from typing import List, Dict, Any, Optional -from pydantic import BaseModel +# Standard Python Libraries from datetime import datetime +from typing import Any, Dict, List, Optional + +# Third-Party Libraries +from pydantic import BaseModel + # Reusing the previously defined models class ServiceStat(BaseModel): @@ -8,21 +12,25 @@ class ServiceStat(BaseModel): value: int label: str + class PortStat(BaseModel): id: int value: int label: str + class VulnerabilityStat(BaseModel): id: str value: int label: str + class SeverityCountStat(BaseModel): id: str value: int label: str + class Domain(BaseModel): id: str createdAt: datetime @@ -44,6 +52,7 @@ class Domain(BaseModel): censysCertificatesResults: Optional[dict] trustymailResults: Optional[dict] + class LatestVulnerability(BaseModel): id: str createdAt: datetime @@ -68,18 +77,21 @@ class LatestVulnerability(BaseModel): kevResults: dict domain: Domain + class MostCommonVulnerability(BaseModel): title: str description: str severity: Optional[str] count: int + class ByOrgStat(BaseModel): id: str orgId: str value: int label: str + # Main StatsResponse model class StatsResponse(BaseModel): result: Dict[str, Any] = { @@ -87,12 +99,12 @@ class StatsResponse(BaseModel): "services": List[ServiceStat], "ports": List[PortStat], "numVulnerabilities": List[VulnerabilityStat], - "total": int + "total": int, }, "vulnerabilities": { "severity": List[SeverityCountStat], "latestVulnerabilities": List[LatestVulnerability], "mostCommonVulnerabilities": List[MostCommonVulnerability], - "byOrg": List[ByOrgStat] + "byOrg": List[ByOrgStat], }, } diff --git a/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py b/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py index 5b20ecd4..da41863e 100644 --- a/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py +++ b/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py @@ -1,5 +1,6 @@ # Standard Python Libraries import json +import os # Third-Party Libraries import django @@ -11,6 +12,13 @@ from ..models import Service, Vulnerability +# Set the Django settings module +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xfd_django.settings") +os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" + +# Initialize Django +django.setup() + def populate_services_cache(): return populate_stats_cache( @@ -227,6 +235,7 @@ def populate_severity_cache(): }, ) + def populate_by_org_cache(): """ Populate Redis with the count of open vulnerabilities grouped by organization. @@ -275,4 +284,4 @@ def populate_by_org_cache(): return { "status": "error", "message": f"An unexpected error occurred while populating the cache: {e}", - } \ No newline at end of file + } diff --git a/backend/src/xfd_django/xfd_api/tasks/syncdb_helpers.py b/backend/src/xfd_django/xfd_api/tasks/syncdb_helpers.py index 9bc17375..31b266be 100644 --- a/backend/src/xfd_django/xfd_api/tasks/syncdb_helpers.py +++ b/backend/src/xfd_django/xfd_api/tasks/syncdb_helpers.py @@ -168,7 +168,8 @@ def create_sample_services_and_vulnerabilities(domain): # Add random vulnerabilities if random.random() < PROB_SAMPLE_VULNERABILITIES: Vulnerability.objects.create( - title="Sample Vulnerability " + "".join(random.choices("ABCDEFGHIJKLMNOPQRSTUVWXYZ", k=3)), + title="Sample Vulnerability " + + "".join(random.choices("ABCDEFGHIJKLMNOPQRSTUVWXYZ", k=3)), domain=domain, service=None, description="Sample description", diff --git a/backend/src/xfd_django/xfd_api/views.py b/backend/src/xfd_django/xfd_api/views.py index 2f5cce8d..1821892c 100644 --- a/backend/src/xfd_django/xfd_api/views.py +++ b/backend/src/xfd_django/xfd_api/views.py @@ -30,6 +30,7 @@ ) from .api_methods.search import search_export, search_post from .api_methods.stats import ( + get_by_org_stats, get_num_vulns, get_severity_stats, get_stats, @@ -37,7 +38,6 @@ get_user_services_count, stats_latest_vulns, stats_most_common_vulns, - get_by_org_stats ) from .api_methods.user import ( accept_terms, @@ -939,13 +939,14 @@ async def get_severity_counts( """ return await get_severity_stats(filter_data, current_user, redis_client) + @api_router.post( "/by-org", dependencies=[Depends(get_current_active_user)], response_model=List[stat_schema.ByOrgStat], tags=["Stats"], ) -async def get_severity_counts( +async def get_by_org( filter_data: OrganizationSchema.StatsPayloadSchema, current_user: User = Depends(get_current_active_user), redis_client: aioredis.Redis = Depends(get_redis_client), diff --git a/dev.env.example b/dev.env.example index 96e62b51..d0a0c9c3 100644 --- a/dev.env.example +++ b/dev.env.example @@ -125,4 +125,4 @@ COGNITO_URL=https://cognito-idp.us-east-1.amazonaws.com JWT_ALGORITHM=HS256 JWT_TIMEOUT_HOURS=4 -ELASTICACHE_ENDPOINT=redis \ No newline at end of file +ELASTICACHE_ENDPOINT=redis From 7d5a0183393a15f1bd66db840b7aac4375032c93 Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 18:00:52 -0500 Subject: [PATCH 13/18] Make sure django is imported below the environment setup --- backend/src/xfd_django/xfd_api/tasks/scheduler.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/src/xfd_django/xfd_api/tasks/scheduler.py b/backend/src/xfd_django/xfd_api/tasks/scheduler.py index e03f381a..405ffd83 100644 --- a/backend/src/xfd_django/xfd_api/tasks/scheduler.py +++ b/backend/src/xfd_django/xfd_api/tasks/scheduler.py @@ -6,7 +6,6 @@ import os # Third-Party Libraries -import django from django.utils import timezone from ..helpers.getScanOrganizations import get_scan_organizations @@ -18,6 +17,9 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xfd_django.settings") os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" +# Third-Party Libraries +import django + # Initialize Django django.setup() From be1c42daa524b0478f1744d66438fa6acddc7db7 Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 18:14:51 -0500 Subject: [PATCH 14/18] Add debugging logs --- backend/src/xfd_django/xfd_api/tasks/scheduler.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/backend/src/xfd_django/xfd_api/tasks/scheduler.py b/backend/src/xfd_django/xfd_api/tasks/scheduler.py index 405ffd83..fdd08ab2 100644 --- a/backend/src/xfd_django/xfd_api/tasks/scheduler.py +++ b/backend/src/xfd_django/xfd_api/tasks/scheduler.py @@ -13,15 +13,12 @@ from ..schema_models.scan import SCAN_SCHEMA from .ecs_client import ECSClient -# Set the Django settings module os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xfd_django.settings") os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" - -# Third-Party Libraries import django - -# Initialize Django +print("Setting up Django...") django.setup() +print("Django setup complete.") def chunk(iterable, size): From dde89d62df842e479e8efbe00b821590ba399798 Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 18:53:06 -0500 Subject: [PATCH 15/18] Move django setup in lambdas --- backend/package.json | 2 +- .../xfd_api/tasks/elasticache_tasks.py | 7 ++++--- .../src/xfd_django/xfd_api/tasks/scheduler.py | 16 ++++++++-------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/backend/package.json b/backend/package.json index f6cd947d..adddfc4c 100644 --- a/backend/package.json +++ b/backend/package.json @@ -13,7 +13,7 @@ "build-worker": "sh ./tools/build-worker.sh", "codegen": "ts-node src/tools/generate-types.ts", "control-queue": "docker compose exec -T backend npx ts-node src/tools/consumeControlQueue.ts", - "deploy-worker-prod": "./tools/deploy-worker.sh crossfeed-prod-worker", + "deploy-worker-integration": "./tools/deploy-worker.sh crossfeed-integration-worker", "deploy-worker-staging": "./tools/deploy-worker.sh", "lint": "eslint '**/*.{ts,tsx,js,jsx}'", "lint:fix": "eslint '**/*.{ts,tsx,js,jsx}' --fix", diff --git a/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py b/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py index da41863e..2deab701 100644 --- a/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py +++ b/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py @@ -8,9 +8,6 @@ from django.db.models import CharField, Count, F, Value from django.db.models.functions import Concat import redis -from xfd_api.helpers.stats_helpers import populate_stats_cache - -from ..models import Service, Vulnerability # Set the Django settings module os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xfd_django.settings") @@ -19,6 +16,10 @@ # Initialize Django django.setup() +# Third-Party Libraries +from xfd_api.helpers.stats_helpers import populate_stats_cache +from xfd_api.models import Service, Vulnerability + def populate_services_cache(): return populate_stats_cache( diff --git a/backend/src/xfd_django/xfd_api/tasks/scheduler.py b/backend/src/xfd_django/xfd_api/tasks/scheduler.py index fdd08ab2..fe5018d6 100644 --- a/backend/src/xfd_django/xfd_api/tasks/scheduler.py +++ b/backend/src/xfd_django/xfd_api/tasks/scheduler.py @@ -6,19 +6,19 @@ import os # Third-Party Libraries +import django from django.utils import timezone -from ..helpers.getScanOrganizations import get_scan_organizations -from ..models import Organization, Scan, ScanTask -from ..schema_models.scan import SCAN_SCHEMA -from .ecs_client import ECSClient - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xfd_django.settings") os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" -import django -print("Setting up Django...") + django.setup() -print("Django setup complete.") + +# Third-Party Libraries +from xfd_api.helpers.getScanOrganizations import get_scan_organizations +from xfd_api.models import Organization, Scan, ScanTask +from xfd_api.schema_models.scan import SCAN_SCHEMA +from xfd_api.tasks.ecs_client import ECSClient def chunk(iterable, size): From b1cb2345f1cc512531eedc7378c3fa90f6b7a7ff Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 19:19:42 -0500 Subject: [PATCH 16/18] Fix lambda parameters: needs event and context --- .../management/commands/populate_by_orgs_cache.py | 2 +- .../commands/populate_latest_vulns_cache.py | 2 +- .../commands/populate_most_common_vulns_cache.py | 2 +- .../management/commands/populate_ports_cache.py | 2 +- .../management/commands/populate_services_cache.py | 2 +- .../commands/populate_severity_count_cache.py | 2 +- .../management/commands/populate_vulns_cache.py | 2 +- .../xfd_django/xfd_api/tasks/elasticache_tasks.py | 14 +++++++------- .../src/xfd_django/xfd_api/tasks/lambda_client.py | 2 +- backend/src/xfd_django/xfd_api/tasks/scheduler.py | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_by_orgs_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_by_orgs_cache.py index 0b0a1ad4..a1bc960f 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_by_orgs_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_by_orgs_cache.py @@ -7,5 +7,5 @@ class Command(BaseCommand): help = "Populates the vulnerabilities stats cache in AWS Elasticache" def handle(self, *args, **options): - result = populate_by_org_cache() + result = populate_by_org_cache({}, {}) self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_latest_vulns_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_latest_vulns_cache.py index e92930cc..dee859f5 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_latest_vulns_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_latest_vulns_cache.py @@ -7,5 +7,5 @@ class Command(BaseCommand): help = "Populates the vulnerabilities stats cache in AWS Elasticache" def handle(self, *args, **options): - result = populate_latest_vulns_cache() + result = populate_latest_vulns_cache({}, {}) self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_most_common_vulns_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_most_common_vulns_cache.py index a2cde041..52d20977 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_most_common_vulns_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_most_common_vulns_cache.py @@ -7,5 +7,5 @@ class Command(BaseCommand): help = "Populates the vulnerabilities stats cache in AWS Elasticache" def handle(self, *args, **options): - result = populate_most_common_vulns_cache() + result = populate_most_common_vulns_cache({}, {}) self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_ports_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_ports_cache.py index a0dc7f8b..90534e1b 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_ports_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_ports_cache.py @@ -10,5 +10,5 @@ class Command(BaseCommand): ) def handle(self, *args, **options): - result = populate_ports_cache() + result = populate_ports_cache({}, {}) self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_services_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_services_cache.py index 89d78411..368aaef7 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_services_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_services_cache.py @@ -10,5 +10,5 @@ class Command(BaseCommand): ) def handle(self, *args, **options): - result = populate_services_cache() + result = populate_services_cache({}, {}) self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_severity_count_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_severity_count_cache.py index 236e44e9..9c8d9c17 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_severity_count_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_severity_count_cache.py @@ -7,5 +7,5 @@ class Command(BaseCommand): help = "Populates the vulnerabilities stats cache in AWS Elasticache" def handle(self, *args, **options): - result = populate_severity_cache() + result = populate_severity_cache({}, {}) self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/management/commands/populate_vulns_cache.py b/backend/src/xfd_django/xfd_api/management/commands/populate_vulns_cache.py index 674bc3ff..070a315e 100644 --- a/backend/src/xfd_django/xfd_api/management/commands/populate_vulns_cache.py +++ b/backend/src/xfd_django/xfd_api/management/commands/populate_vulns_cache.py @@ -7,5 +7,5 @@ class Command(BaseCommand): help = "Populates the vulnerabilities stats cache in AWS Elasticache" def handle(self, *args, **options): - result = populate_num_vulns_cache() + result = populate_num_vulns_cache({}, {}) self.stdout.write(self.style.SUCCESS(result["message"])) diff --git a/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py b/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py index 2deab701..99f9c3bf 100644 --- a/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py +++ b/backend/src/xfd_django/xfd_api/tasks/elasticache_tasks.py @@ -21,7 +21,7 @@ from xfd_api.models import Service, Vulnerability -def populate_services_cache(): +def populate_services_cache(event, context): return populate_stats_cache( model=Service, group_by_field="domain__organization_id", @@ -35,7 +35,7 @@ def populate_services_cache(): ) -def populate_ports_cache(): +def populate_ports_cache(event, context): return populate_stats_cache( model=Service, group_by_field="domain__organization_id", @@ -49,7 +49,7 @@ def populate_ports_cache(): ) -def populate_num_vulns_cache(): +def populate_num_vulns_cache(event, context): return populate_stats_cache( model=Vulnerability, group_by_field="domain__organization_id", @@ -69,7 +69,7 @@ def populate_num_vulns_cache(): ) -def populate_latest_vulns_cache(max_results=100): +def populate_latest_vulns_cache(event, context, max_results=100): """ Populate Redis with the latest vulnerabilities for each organization. """ @@ -164,7 +164,7 @@ def populate_latest_vulns_cache(max_results=100): } -def populate_most_common_vulns_cache(max_results=100): +def populate_most_common_vulns_cache(event, context, max_results=100): """ Populate Redis with the most common vulnerabilities grouped by title, description, and severity. """ @@ -220,7 +220,7 @@ def populate_most_common_vulns_cache(max_results=100): } -def populate_severity_cache(): +def populate_severity_cache(event, context): """ Populate Redis with severity statistics for vulnerabilities. """ @@ -237,7 +237,7 @@ def populate_severity_cache(): ) -def populate_by_org_cache(): +def populate_by_org_cache(event, context): """ Populate Redis with the count of open vulnerabilities grouped by organization. Each organization's data is stored under its own Redis key. diff --git a/backend/src/xfd_django/xfd_api/tasks/lambda_client.py b/backend/src/xfd_django/xfd_api/tasks/lambda_client.py index d3cb4ea1..74f58ca8 100644 --- a/backend/src/xfd_django/xfd_api/tasks/lambda_client.py +++ b/backend/src/xfd_django/xfd_api/tasks/lambda_client.py @@ -26,7 +26,7 @@ def run_command(self, name: str): print(f"Invoking lambda function: {name}") if self.is_local: # If running locally, directly call the scheduler function - scheduler({}) + scheduler({}, {}) return {"status": 200, "message": ""} else: # Invoke the lambda function asynchronously diff --git a/backend/src/xfd_django/xfd_api/tasks/scheduler.py b/backend/src/xfd_django/xfd_api/tasks/scheduler.py index fe5018d6..0325644f 100644 --- a/backend/src/xfd_django/xfd_api/tasks/scheduler.py +++ b/backend/src/xfd_django/xfd_api/tasks/scheduler.py @@ -267,7 +267,7 @@ def filter_scan_tasks(tasks): return True -def handler(event): +def handler(event, context): """Handler for manually invoking the scheduler to run scans.""" print("Running scheduler...") From c6b38ac88c4429226f6e4a3bf0bfe073ddacdbe7 Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Thu, 12 Dec 2024 22:20:24 -0500 Subject: [PATCH 17/18] Make sure org id is in returned in /users/me --- .../xfd_django/xfd_api/api_methods/user.py | 25 ++++++++++++++++++- backend/src/xfd_django/xfd_api/auth.py | 2 ++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/backend/src/xfd_django/xfd_api/api_methods/user.py b/backend/src/xfd_django/xfd_api/api_methods/user.py index 4978ecde..bf04bcef 100644 --- a/backend/src/xfd_django/xfd_api/api_methods/user.py +++ b/backend/src/xfd_django/xfd_api/api_methods/user.py @@ -65,7 +65,30 @@ def get_me(current_user): "id": role.id, "role": role.role, "approved": role.approved, - "organization": model_to_dict(role.organization) + "organization": { + **model_to_dict( + role.organization, + fields=[ + "acronym", + "name", + "rootDomains", + "ipBlocks", + "isPassive", + "pendingDomains", + "country", + "state", + "regionId", + "stateFips", + "stateName", + "county", + "countyFips", + "type", + "parent", + "createdBy", + ], + ), + "id": str(role.organization.id), # Explicitly add the ID + } if role.organization else None, } diff --git a/backend/src/xfd_django/xfd_api/auth.py b/backend/src/xfd_django/xfd_api/auth.py index 7d2b9c98..cd1193e4 100644 --- a/backend/src/xfd_django/xfd_api/auth.py +++ b/backend/src/xfd_django/xfd_api/auth.py @@ -523,6 +523,8 @@ def get_stats_org_ids(current_user, filters): organizations_filter = ( filters.filters.organizations if filters and filters.filters else [] ) + if organizations_filter == [""]: + organizations_filter = [] tags_filter = filters.filters.tags if filters and filters.filters else [] # Final list of organization IDs From 786c5d82e6b40b3d6cc7394966c14d26bc259cc6 Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Fri, 13 Dec 2024 09:46:36 -0500 Subject: [PATCH 18/18] Add created/updated at to searchSync --- backend/src/xfd_django/xfd_api/tasks/searchSync.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/xfd_django/xfd_api/tasks/searchSync.py b/backend/src/xfd_django/xfd_api/tasks/searchSync.py index 50287734..77778520 100644 --- a/backend/src/xfd_django/xfd_api/tasks/searchSync.py +++ b/backend/src/xfd_django/xfd_api/tasks/searchSync.py @@ -64,6 +64,8 @@ async def handler(command_options): [ { "id": str(domain.id), + "createdAt": domain.createdAt, + "updatedAt": domain.updatedAt, "name": domain.name, "reverseName": domain.reverseName, "ip": domain.ip,